Vibeleaderboard
Index / tool
Visit github.com
Category
Productivity
Rank
No. 1164Tools index

Previous survey · No. 1155 ·

Type
TOOL
Use case
Productivity & Collaboration
Interfaces
Desktop
GitHub
216 stars
Latest release
v4.0.0
Date

About

KiwiDesk is a native Swift tiling window manager for macOS designed to feel built-in, with a settings GUI instead of config files. It offers seven layouts including PaperWM-style scrolling, keeps native macOS Desktops (Spaces) intact, uses Lua for configuration underneath, and requires only the Accessibility permission without disabling System Integrity Protection.

What it does

KiwiDesk arranges your Mac's windows so they never overlap, and you can drive it three ways: a point-and-click Settings app, a Lua script, or a command line that is the same program as the app. Each workspace keeps its windows in a plain ordered list rather than a tree, and every layout is a calculation over that list that produces positions without touching the system. A separate step then moves the real windows, trying faster undocumented Apple calls first and falling back to the public accessibility interface whenever one is missing.

Why it's ranked here

The project documents itself like a product with users to answer to. It publishes a measured performance page comparing releases on a fixed desk of windows, a page of accepted limitations that names each known bug's architectural cause and workaround, and an architecture guide for every pipeline. It also ships a built-in MCP (Model Context Protocol) server so AI apps can change layouts, with irreversible commands routed through a separate tool that asks first. The weight against it: the license is source-available rather than open source, and it runs only on Apple silicon Macs.

What's good

It skips the two usual costs of Mac tiling managers: System Integrity Protection stays on, and hotkeys use the older Carbon registration, so no Input Monitoring permission is needed. Lua config has guard rails. Any single call into the script engine is cut off after 500 ms, a failing callback is disabled instead of taking the app down, and a mistyped function name becomes a logged no-op with a did-you-mean hint. The command line lists every command with its legal values read from the code that parses them, so the help cannot drift from behaviour. It ships as a signed, notarized app that updates itself through Sparkle.

Tradeoffs

The Business Source License 1.1 allows free use at home and at work but forbids offering, selling, bundling or hosting it as a product without a commercial license. Each version turns MIT four years after publication, and versions before 1.3.0 stay MIT. It needs macOS 14 or later on Apple silicon, so Intel Macs are out. Switching macOS Desktops by number relies on an Apple bridge the docs confirm on only one macOS build. The limitations page lists several timing edge cases around Desktop switches, sticky windows and fullscreen apps. Under a saturated GPU, the slowest layout pass in its own benchmark reached 229 ms.

How to use it well

Best for someone on an Apple silicon Mac who wants tiling without writing a config file first. Install through Homebrew to get the command line on your path, grant Accessibility, and start from the Settings app. Reach for Lua only for event hooks or custom behaviour, and know that declaring any setting in the Lua file hands ownership away from the Settings app. Status-bar users get ready recipes for SketchyBar and JankyBorders. If you plan to resell or bundle a window manager, or run an Intel Mac, look elsewhere.

Technical notes+

Package.swift declares Swift tools 6.4, a macOS 14 platform floor, a vendored Lua 5.5 C target under Vendor/CLua, and Sparkle from 2.10.0 attached only to the GUI executable so KiwiDeskCore stays free of it; two test targets cover Core and the GUI view models. Sources/KiwiDesk/main.swift hands off to runCLI when arguments are present, otherwise takes a single-instance lock before the delegate exists and runs with the accessory activation policy. docs/architecture.md describes the reconcile loop: AXObserver events fold into a flat WindowID array per space, layouts are pure functions, and placement resolves SkyLight symbols through dlsym with an Accessibility fallback and a 2 pt tolerance on event-driven retiles. docs/cli.md documents the UNIX socket, sorted-key JSON output and an eleven-tool MCP server.

Observed

License
Business Source License 1.1; each version converts to MIT four years after publication (LICENSE)
Language
Swift 6, with vendored Lua 5.5 C sources
Platform
macOS 14 or later, Apple silicon only
Install
Homebrew cask or signed, notarized disk image; Sparkle in-app updates
Interfaces
Settings GUI, CLI over a UNIX socket, Lua config, MCP server
Permissions
Accessibility only; System Integrity Protection stays enabled
Tests
Two Swift test targets (Core and GUI) declared in Package.swift

Read from README.md, Package.swift, LICENSE, docs/index.md, docs/architecture.md, docs/accepted-limitations.md, docs/cli.md, docs/lua-reference.md, docs/performance.md, Sources/KiwiDesk/main.swift.

Tags

macoswindow-managertilingswiftproductivity

Tech Stack

Swift

Media

KiwiDesk

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.