ツリーではなくフラットな配列
どのスペースもフラットなウインドウの一覧です。レイアウトはその配列に対する純粋な関数で、ツリーをいじることは一切ありません。
KiwiDesk はウインドウを i3 のようなツリーではなくフラットな配列で管理します。Lua で全面的に設定でき、7 つのレイアウトを切り替えられます。そしてSIP を無効化しません。
ライセンス ↗ · Swift と Lua で記述 · 署名・公証済み · macOS 14 以降、Apple シリコン
🥝 バージョン 2.0.0「タイル型のウインドウマネージャは、ずっと一部の人の玩具でした。私はそれを、誰にとっても直感的なものにしたかったのです。ただ、こんなふうに動いてくれればいい。」
「使う人に合わせて動くウインドウマネージャがほしかったんです。こちらが動き方を教えなければいけないものではなく。」
KiwiDesk が動く 70 秒。散らかった 5 つのウインドウをひと手順で整列、スクロールするレイアウト、Space Bar へウインドウをドラッグ、どこへでも付いてくるピン留めウインドウ、そして macOS のデスクトップごとに 1 つのプロファイル。
YouTube で見る ↗機能ごとに 1 本のクリップ ↗すべての始まり ↗
「ひとこと注意を。並ぶところを見たいがために、わざとウインドウを開くようになります。」
果汁100%、混ぜ物なし。
KiwiDesk is my go-to window manager. The developer is responsive, friendly, and has a clear vision for the app. And yet, KiwiDesk has so many options and is so flexible that it immediately replaced the more opinionated window managers I had.

KiwiDesk is the best tiling window manager on the Mac, hands down! The more I use it and the more its feature set grows, the less I find myself turning to Linux.

This is where people should start with macOS tiling managers. While I love Rift and Amethyst — had I known this existed, I would have never needed to go through the trial and error.
フラットな一次元のウインドウモデル。そこから自然に生まれる、速くて、スクリプトから扱えて、安全なすべて。
どのスペースもフラットなウインドウの一覧です。レイアウトはその配列に対する純粋な関数で、ツリーをいじることは一切ありません。
bsp、スタック、スクロール(PaperWM 風)、モノクル、グリッド、トラック、フローティング。いつでも即座に切り替えられます。
ウインドウをデスクトップ 3 に送り、そこへ切り替え、プロファイルを結びつけてデスクトップに自分のスペースを持たせられます。
カーネル拡張は使いません。モーダルなキーバインドは Carbon を使うため、入力監視の許可は不要で、キーロガーにもなりません。
非公開の OS シンボルは実行時に解決され、タイリングのすべての経路は公開のアクセシビリティ API にフォールバックできます。アップデートで遅くなることはあっても、タイリングが止まることはありません。
Finder や Safari、ターミナルのタブを切り替えても、まとめても、レイアウトはそのままです。ウインドウマネージャーから見れば macOS のタブは別々のウインドウ。たいていそこで破綻します。
Sticky にしたウインドウは、すべてのスペースに付いてきます。1 つの画面だけに留めることもできます。ウインドウのマークと Space Bar のバッジが、それを示します。
サンドボックス化された Lua 5.5 VM が ~/.config/KiwiDesk/init.lua を読み込みます。設定が壊れていてもウインドウは固まりません。500 ms のウォッチドッグが守ります。
すべてをスクリプトから操作できます。ソケット経由でイベントを SketchyBar や JankyBorders、自作のツールへ流せます。
VoiceOver ではどの項目も名前と値を読み上げ、設定はキーボードだけでも操作できます(macOS のキーボードナビゲーションをオンに)。
モニタごとに 1 つの display link を使うので、60 Hz と 120 Hz が混在する環境でも、それぞれが本来のリズムで滑らかに動きます。
どのレイアウトも、同じフラットな配列に対する純粋な関数です。だから切り替えは一瞬で、結果も読めます。
二分割:新しいウインドウがペインを半分にします。
マスター領域と、その横のスタックカラム。
Niri / PaperWM 式の、スクロールするカラムまたは行。
フォーカス中のウインドウを最大化し、残りは背面へ。
動的または固定の、行 × 列。
カラムまたは行。どのサイズ変更にも、対象は 1 つだけ。
macOS のデフォルトを、そのまま。
スライダーより、テキスト派? ~/.config/KiwiDesk/init.lua に本物の Lua を書けば、そちらが主導権を握ります。レイアウトも間隔もキーバインドも、すべてコードで。サンドボックス化された Lua 5.5 VM 上で 500 ms のウォッチドッグ付きで動くため、書き間違いでウインドウが固まることはありません。
-- ~/.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)すべての操作がコマンドです。キーに割り当てても、スクリプトから呼び出しても、Unix ソケット経由でイベントを SketchyBar や JankyBorders、自作のツールへ流し込んでも構いません。
「ウインドウマネージャがスクリプトから動かせるようになった日から、デスクトップは自分で回りはじめました。以来、ウインドウをドラッグしていません。」
$ kiwidesk set_mode monocle
$ kiwidesk focus left
$ kiwidesk get_state
# ライブイベントを配信(SketchyBar や自作ツールへ)
$ kiwidesk subscribe space_change「ターミナルはまったく苦になりませんが、思いどおりにウインドウを並べるためだけにコンテナの入れ子をずっと追いかけるのには疲れてしまいました。KiwiDesk はすべてをフラットに保ちます。無駄なオーバーヘッドも、気の散る要素もなく、ただプロジェクトに集中できます。」
パッケージマネージャーの方がよいですか。コマンド 1 つで kiwidesk CLI が PATH に入ります。どちらの方法でも、KiwiDesk はその後自動で最新に保たれます。
ドキュメントを読む署名・公証済みのディスクイメージは、同じ App です。そちらで入れた場合は、kiwidesk CLI を PATH に通すリンクをご自分で作ってください。CLI のドキュメントで手順を案内しています。
KiwiDesk をダウンロードするか、Homebrew でインストールしてください。どちらも同じ署名済みのビルドで、その後は自分で最新に保ちます。
ライセンス ↗ · Swift と Lua で記述 · 署名・公証済み · macOS 14 以降、Apple シリコン
KiwiDesk のソースコードは公開されています。GitHub でスターを付けると、他の人が見つけやすくなります。
「1 日 1 個のリンゴと言いますが、キウイのほうがビタミンも多く、野心も大きいのです… 🥝」