The four commands
| Key | Acts on | Result |
|---|---|---|
| <code>tileAll</code> | Every visible window | Arranged into a grid |
| <code>cascadeAll</code> | Every visible window | Stacked with offset title bars, all reachable |
| <code>tileActiveApp</code> | Windows of the frontmost app only | Grid, leaving everything else untouched |
| <code>cascadeActiveApp</code> | Windows of the frontmost app only | Cascaded and brought to the front |
The per-application variants are the more useful pair in practice, and the reason is straightforward: acting on every visible window is a blunt instrument that will rearrange things you were happy with, whereas acting on one application's windows is a targeted operation you can predict.
# ctrl+shift+2 → cascade the frontmost app's windows
defaults write com.knollsoft.Rectangle cascadeActiveApp -dict-add keyCode -float 19 modifierFlags -float 393216
# ctrl+shift+1 → tile the frontmost app's windows
defaults write com.knollsoft.Rectangle tileActiveApp -dict-add keyCode -float 18 modifierFlags -float 393216
killall Rectangle && open -a Rectangle
When these are genuinely better
Comparing many documents of the same kind. Six Preview windows with six PDFs, or eight browser windows: tiling the active app puts them all in view in one keystroke, which is otherwise a minute of snapping.
Finding a lost window. Cascading the active app reveals every window's title bar at once. Faster than cycling with the window menu when you have fifteen open and cannot remember which is which.
Recovering after a display change. When undocking has scattered everything, tiling all visible windows gets you to a known state you can then adjust, rather than reconstructing from chaos.
Screen sharing setup. Cascade, pick the two you need, snap those into halves, and everything else is behind. Two seconds instead of thirty on a call where people are watching.
<code>tileAll</code> touches everything visible, including windows on other Spaces' shared apps and utilities you had deliberately positioned. <code>tileActiveApp</code> is scoped, predictable and therefore usable as a reflex. Bind that one first.
What they do not do
- No arrangement is saved. These are one-shot operations, not layouts you can recall later.
- No control over the grid. The arrangement is computed from the number of windows; you cannot specify columns.
- Minimised and hidden windows are not included. Only visible ones participate.
- Applications that ignore the accessibility API are skipped. The same limitation that affects every command.
- Full screen windows are unaffected, since they are not ordinary windows at all.
If you want a repeatable, named, multi-window arrangement rather than a computed one, that is what saved layouts in the paid tier are for. These commands are for imposing order quickly on a mess, not for expressing an intended layout.
Binding them sensibly
Because they are drastic, do not put them on combinations adjacent to the ones you use constantly. A misfired tile-all in the middle of focused work is genuinely disruptive. Something distinct — with Shift, or on the number row — keeps them deliberate.
Restore does not undo these. There is no bulk undo, which is another argument for the scoped variants — recovering from a mis-tiled single application is far quicker than rebuilding a whole desktop.
Get the current build
Rectangle is free and open source. Everything documented here works in the standard build.
Download from rectangleapp.comQuestions
Can I undo a tile-all?
No. Restore works on one window at a time; there is no bulk undo.
Can I choose the grid shape?
No. It is derived from the number of windows.
Does it work across displays?
It arranges visible windows on the display each one currently occupies.
Why are these hidden?
They are drastic operations that most users would trigger by accident if bound by default.