Flat arrays, not trees
Every space is a flat window list. Layouts are pure functions over that array — no tree surgery, ever.
KiwiDesk arranges your open windows into a neat layout, automatically. No more dragging corners or hunting for that one hidden window. Just a calm, tidy screen. Simple to start — with room to grow when you are.
🥝 Public beta — available nowKiwiDesk manages windows in flat arrays, not i3-style trees — fully Lua-configurable, with seven layouts to switch between. And it never disables SIP.
🥝 Public beta — available now“Tiling managers were always a nerd's toy. I wanted to make them intuitive for everyone – it should just work, like that.”
“A window manager that works with you — not one you have to tell how to work.”
You know the mess: a dozen windows overlapping, half of them hidden, and you spend your day nudging them around. KiwiDesk does that nudging for you. Open a window and it slots neatly into place beside the others — tidy, edge to edge, no gaps you didn’t ask for.
Learn the basicsTen playful seconds with our mascot, happily arranging a screenful of windows into place — the KiwiDesk way, just with a little extra charm.
Click to play — 10 seconds 🥝
“Fair warning: it's about as oddly satisfying as watching kiwis stack kiwis. You'll open windows on purpose, just to watch them snap into place.”
No setup rituals, no manuals. It just starts helping.
Work like you always do — open apps, browse, write. Nothing new to learn.
Each window slides into a tidy spot automatically. Every window visible, nothing buried.
A tap of a key nudges the layout when you want. Otherwise, it just stays neat while you focus.
Windows pile up and overlap. You drag, resize, and hunt for the one you need — again and again.
Everything has a place. Your screen stays tidy on its own, so your attention stays on your work.
“I built KiwiDesk because I wanted to show my friends how good it feels to never tidy your windows again — calm, effortless, and honestly kind of fun.”
A flat, one-dimensional window model — and everything fast, scriptable, and safe that falls out of it.
Every space is a flat window list. Layouts are pure functions over that array — no tree surgery, ever.
bsp, stack, scrolling (PaperWM), monocle, grid, track, and floating. Switch between them instantly.
A sandboxed Lua 5.5 VM reads ~/.config/KiwiDesk/init.lua. A broken config can’t freeze your windows — a 500 ms watchdog guards it.
Script everything. Stream events to SketchyBar, JankyBorders, or your own tools over a socket.
One display link per monitor, so mixed 60 / 120 Hz setups each animate at their own native cadence.
User-space only. Modal keybindings run through Carbon — no Input Monitoring permission, no keylogger.
“Even though I'm perfectly comfortable in the terminal, I got tired of having to constantly track container nesting just to arrange my windows the way I want. KiwiDesk keeps everything flat. No unnecessary overhead, no distractions: just pure focus on my projects.”
Every layout is a pure function over the same flat array — so switching is instant and predictable.
Binary space partitioning, square-ish splits.
A master zone beside a stack column.
Niri / PaperWM horizontal columns.
Focused window maximized, rest behind.
Dynamic or rigid rows × columns.
Columns or rows; every resize has one true target.
The macOS default, left untouched.
Prefer text to sliders? Drop real Lua into ~/.config/KiwiDesk/init.lua and it takes over — layouts, gaps, keybindings, all as code, running in a sandboxed Lua 5.5 VM behind a 500 ms watchdog so a typo can never freeze your windows.
-- ~/.config/KiwiDesk/init.lua
KiwiDesk.set_gap_global(10)
KiwiDesk.set_mode("music", "floating")
-- one flat array per space, tidy by default
KiwiDesk.bind("cmd+alt+left", function()
KiwiDesk.focus("left")
end)Every action is a command. Bind them to keys, script them, or stream live events over a Unix socket into SketchyBar, JankyBorders, or your own tools.
“The day my window manager became scriptable, my desktop started running itself. I haven't dragged a window since.”
$ kiwidesk set_mode monocle
$ kiwidesk focus left
$ kiwidesk get_state
# stream live events (feed SketchyBar, your own tools…)
$ kiwidesk subscribe space_changeKiwiDesk is in public beta. Install it with Homebrew — one command, and the kiwidesk CLI comes with it. Homebrew also keeps it current with brew upgrade. A signed, notarized download follows once the app can update itself, so a direct download is never a dead end.
Read the DocsRequires macOS 14 or later.
$ brew install --cask kiwicanopy/tap/kiwidesk
# the kiwidesk CLI lands on your PATH too$ git clone https://github.com/KiwiCanopy/KiwiDesk.git
$ cd KiwiDesk
$ swift build -c release
# for contributors — Homebrew is the easy pathKiwiDesk is out in public beta — you can install it today with Homebrew, which keeps it current with brew upgrade. A signed direct download follows once the app can update itself.
“They say an apple a day — but the kiwi's got more vitamins and bigger plans... 🥝”
Made for macOS 14 and later.