finds.dev← search

// the find

asmvik/yabai

★ 29,703 · C · MIT · updated Jun 2026

A tiling window manager for macOS based on binary space partitioning

yabai is a tiling window manager for macOS that arranges windows with a binary space partitioning layout and exposes everything through a command line, so it pairs with skhd or any other hotkey tool. It is for people who already work in the terminal and are willing to adjust several macOS system settings to make it behave. The layout engine and scripting surface are the real draw; setup is where most people will spend their patience.

- The layout is a real BSP tree rather than a set of fixed templates. Splits, rotations, and balancing operate on the view tree in src/view.c, so the behavior is predictable once you understand the model.

- Nearly everything is scriptable through the yabai CLI, and the signals in src/event_signal.c let you hook window and space changes into your own scripts. That is what separates it from a simple layout toggle.

- Rules in src/rule.c handle per-application behavior such as floating a window or sending an app to a given space. Awkward apps can be handled declaratively instead of by hand after every launch.

- The documentation is in good shape: a full asciidoc reference, a man page, and annotated example configs in examples/ mean you rarely need to read the source to find a flag.

- Full functionality requires partially disabling System Integrity Protection so yabai can inject a scripting addition into Dock.app. The README is upfront about this, but it is a real security tradeoff, and each macOS update can break the injection.

- Much of the window control depends on private window server APIs, so each macOS release can break something. The long compatibility table in the README reflects how often that happens.

- Several system settings have to be set exactly right, including 'Displays have separate Spaces' and the rearrange-spaces option. When they are wrong, the failure modes are confusing and it is hard to tell which setting is to blame.

- The visible tests directory holds one area test and a tests.m file, so regressions in window and space handling are mostly caught by running it on a real desktop.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →