KiwiDesk

KiwiDesk

A macOS tiling window manager that feels native

Description

Tiling window managers on the Mac usually drag another platform's world along with them: configuration in a text file, a terminal round trip to reload it, and for some of them System Integrity Protection switched off — a steep price for arranging windows. KiwiDesk takes the other route. It is a Mac app first, with a real Settings window of sliders and live previews, it starts tiling the moment you install it with no config required, and it asks for the Accessibility permission and nothing else — no kernel extension, no SIP changes.

It also departs from the i3 lineage: instead of split-container trees, each space is a flat one-dimensional list of windows and layouts are pure functions over that list. Switching layouts reruns a different formula over the same windows — no tree surgery, no lost state. The seven layouts include PaperWM/Niri-style scrolling columns alongside bsp, master-and-stack, monocle, grid and resizable tracks, and each carries its own parameters — split ratios, master count, column width, grid dimensions — settable globally or per space, in Settings or in Lua. Native Desktops keep working, the mouse still works, and the shortcuts do not fight macOS's own.

Requires macOS 14 or later on Apple silicon. It is licensed under BSL 1.1, a business source license rather than a standard open-source one — the source is readable and buildable, but commercial terms are worth checking yourself.

Features



Seven layouts: bsp binary partitioning, master-and-stack, PaperWM-style scrolling columns, monocle, grid, resizable tracks, and floating that leaves macOS behavior untouched — switchable at any moment, rearranging the same window list by a different formula.

Native Settings app: a SwiftUI window covering gaps and borders, colors and animations, layout defaults, shortcuts, profiles and app rules, with live previews, so changing a number does not mean editing a file and reloading.

Never disables SIP: Accessibility permission only, no kernel extension, no System Integrity Protection changes. Private OS symbols are resolved at runtime and every tiling path has a public Accessibility fallback, so an OS update can slow a fast path but cannot crash it or stop it tiling.

Keeps native Desktops: rather than inventing its own virtual desktops, it arranges windows on macOS's own Mission Control Desktops, and can send a window to one, switch to one, or bind a profile to one.

GUI, CLI and Lua: the Settings app for everyday tweaks, plus a command line and a sandboxed Lua 5.5 VM for advanced workflows, all driving the same configuration.

Modal hotkey layers: define_layer builds Vim-style key layers, and pull_or_spawn opens an app, pulls its windows front and center, then cycles them on repeated presses — implemented through Carbon, with no Input Monitoring permission needed.

Cascading profiles: profiles bind to a display or a Desktop and inherit defaults with sparse overrides, instead of maintaining a full configuration per scenario.

Sticky windows: pin a window to follow you across Desktops, or across a single screen, as a real tile rather than a floating pile.

Overlays and IPC: customizable focus rings and App/Space Bar overlays, plus a UNIX socket JSON event stream (kiwidesk subscribe) for your own scripts and status bars.

Animation and accessibility: 60/120 Hz DisplayLink spring animations, Settings fully keyboard-driven and narrated under VoiceOver with every control announcing its name and its value, and localization out of the box.

Installation: brew install --cask kiwicanopy/tap/kiwidesk, or the signed and notarized .dmg from the site; the cask additionally puts the kiwidesk CLI on PATH, and both keep themselves updated.