
A Raycast extension that tiles your windows into a bento-box grid — one app's windows, or every window on the desktop.
A Raycast extension that tiles your windows into a bento-box grid with one keystroke. The grid auto-adapts to how many windows you have open — 4 windows become 2×2, 6 become 3×2, 9 become 3×3, and so on. Press the same key again and every window returns to where it was: tiling is a reversible gesture, not a one-way operation. Windows are placed in creation order, so the same window always lands in the same slot.
Two commands, one keystroke each: Auto Tile tiles a single app's windows (great for the vibe coding workflow where you spin up several terminals — Ghostty, Terminal, iTerm2… — and want them snapped into place without dragging each one into a quarter), and Auto Tile All tiles every window on the active desktop instead.
Bento Window is inspired by Window Layouts by @teemusuvinen. Window Layouts is a mature, full-featured window tiling extension — if you need fine-grained layout control across all your windows, go check it out.
Bento Window is intentionally narrower and more opinionated. It's built for one workflow: bind a hotkey, press it, and your app's windows snap into a grid. No menus, no views, no choices at runtime.
| Window Layouts | Bento Window | |
|---|---|---|
| Scope | All windows on the desktop | Single app's windows (or all, your choice) |
| Auto-detect target app | — | ✅ uses the focused window's app |
| Layout philosophy | Multiple commands for different layouts | Grid adapts to window count |
| Own layout grids | Shared grid definitions | Opinionated grids (e.g. 3 windows → 2 small + 1 big, not 3 equal columns) |
| Interface | Multiple commands | Two no-view commands (app / all windows), hotkey-optimized |
| Reversible | — | ✅ press the hotkey again to restore original positions |
The grid the extension picks based on the number of windows of the target app:
1 window — fullscreen 2 windows — halves
┌──────────────┐ ┌──────┬──────┐
│ │ │ │ │
│ 1 │ │ 1 │ 2 │
│ │ │ │ │
└──────────────┘ └──────┴──────┘
3 windows — small × 2 + big 4 windows — 2×2
┌──────┬──────┐ ┌──────┬──────┐
│ 1 │ │ │ 1 │ 2 │
├──────┤ 3 │ ├──────┼──────┤
│ 2 │ │ │ 3 │ 4 │
└──────┴──────┘ └──────┴──────┘
5 windows — 2×2 small + big 6 windows — 3×2
┌───┬───┬────────┐ ┌────┬────┬────┐
│ 1 │ 2 │ │ │ 1 │ 2 │ 3 │
├───┼───┤ 5 │ ├────┼────┼────┤
│ 3 │ 4 │ │ │ 4 │ 5 │ 6 │
└───┴───┴────────┘ └────┴────┴────┘
7 windows — 4×2 (last wide) 8 windows — 4×2
┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │ │ 1 │ 2 │ 3 │ 4 │
├───┼───┼───┴───┤ ├───┼───┼───┼───┤
│ 5 │ 6 │ 7 │ │ 5 │ 6 │ 7 │ 8 │
└───┴───┴───────┘ └───┴───┴───┴───┘
9 windows — 3×3 10+ windows — 5×2 (extras untouched)
┌────┬────┬────┐ ┌──┬──┬──┬──┬──┐
│ 1 │ 2 │ 3 │ │1 │2 │3 │4 │5 │
├────┼────┼────┤ ├──┼──┼──┼──┼──┤
│ 4 │ 5 │ 6 │ │6 │7 │8 │9 │10│
├────┼────┼────┤ └──┴──┴──┴──┴──┘
│ 7 │ 8 │ 9 │
└────┴────┴────┘
On a portrait display the same tables are transposed, so the tiles keep sensible proportions instead of turning into slivers — two windows stack rather than splitting the width, 6 becomes 3×2 instead of 2×3, and so on. Landscape screens are unaffected.
2 windows — stacked 3 windows — small × 2 + wide
┌─────────────┐ ┌──────┬──────┐
│ │ │ 1 │ 2 │
│ 1 │ │ │ │
│ │ ├──────┴──────┤
├─────────────┤ │ │
│ │ │ 3 │
│ 2 │ │ │
│ │ │ │
└─────────────┘ └─────────────┘
Install from the Raycast Store, or search Bento Window in Raycast's Store command.
git clone https://github.com/ipopo/bento-window.git
cd bento-window
npm install
npm run dev
npm run dev registers the extension with Raycast and watches for code changes. It also compiles the Swift helper in swift/ (macOS 13+, Xcode or Command Line Tools required). The first build can take a minute; later builds are incremental. You can Ctrl+C it once the extension shows up — the registration persists.
Then in Raycast:
Raycast Settings → Extensions → Bento Window:
Ghostty, Terminal, iTerm2, Alacritty, WezTerm0 (default) for flush tiles.On a multi-display setup the desktop being tiled is the one your pointer is on — point at the screen you want arranged, press the key. Windows are never dragged over to another display.
MIT
Tile windows of a single app into a grid that auto-adapts to the window count. Targets the first matching app from the app list, or the focused window's app when the list is empty.
Tile every tileable window on the active desktop into a grid that auto-adapts to the window count.
AXEnhancedUserInterface switched on by some assistive client — macOS then animates every frame change, and the position write landed on a half-finished resize. The flag is now turned off for the duration of the move and restored afterwards, the same way Rectangle and yabai handle it