Skip to content
Åsmund Vikane edited this page Jan 22, 2020 · 56 revisions

yabai

Tiling window management native to the Mac.

ci status license changelog version

What is yabai?

yabai is a tiling window manager for macOS High Sierra 10.13.6, Mojave 10.14.4+ and Catalina 10.15.0+. It automatically modifies your window layout using a binary space partitioning algorithm to allow you to focus on the content of your windows without distractions.

A flexible and easy-to-grok command line interface allows you to control and query windows, spaces and displays to enable powerful integration with tools like ↗ skhd to allow you to work more efficiently with macOS. Create custom keybindings to control windows, spaces and displays in practically no time and get your hands off the mouse and trackpad and back onto the keyboard where actual work gets done.

Installation requirements

Please read the below requirements and recommendations carefully. Make sure you fulfill all requirements before filing an issue.

Requirement Note
Operating System macOS High Sierra 10.13.6, macOS Mojave 10.14.4+ and macOS Catalina 10.15.0+ are supported.
Accessibility API yabai must be given permission to utilize the Accessibility API and will request access upon launch. The application must be restarted after access has been granted.
Mission Control In the Mission Control preferences pane in System Preferences, the setting "Displays have separate Spaces" must be enabled.
Recommendation Note
System Integrity Protection System Integrity Protection needs to be (partially) disabled for yabai to inject a scripting addition into Dock.app for controlling windows with functions that require elevated privileges. This enables control of the window server, which is the sole owner of all window connections, and enables additional features of yabai. If you are running on macOS High Sierra 10.13.6, you can reenable SIP after the scripting addition has been installed.
Code Signing When building from source (or installing from HEAD), it is recommended to codesign the binary so it retains its accessibility and automation privileges when updated or rebuilt.
Mission Control In the Mission Control preferences pane in System Preferences, the setting "Automatically rearrange Spaces based on most recent use" should be disabled for commands that rely on the ordering of spaces to work reliably.

Quickstart guide

yabai can be installed via Homebrew from a custom tap. It does, however, require you to disable System Integrity Protection ("rootless"), because it controls windows by acting through Dock.app — which is the sole owner of the main connection to the window server.

  1. Optional: Disable System Integrity Protection (required for many advanced features)
  2. Install yabai and configure macOS to allow it to run
  3. Configure yabai to your liking
  4. Optional: Integrate yabai with other software like ↗ skhd for keyboard shortcuts or ↗ Übersicht for desktop widgets

You can find detailed instructions on every step of the quickstart guide in this wiki. The sidebar to the right (bottom for mobile devices) has a sorted list of pages with links to individual chapters.

Should you upgrade from chunkwm?

A commonly asked question is whether you should update from ↗ chunkwm to yabai right now. In general, the answer to this is yes.

There is, however, one notable exception: If you are heavily invested into the plugin API and absolutely cannot replace your plugins using the signals and rules provided by yabai, you should continue to use chunkwm.

Please note that chunkwm will not work on macOS 10.15 Catalina.

Comparison with other window managers

NOTE: This feature comparison table is far from complete. Please contribute. It's mostly a placeholder in its current state.

yabai ↗ chunkwm ↗ Amethyst
General
Supported macOS versions 10.13–10.15 10.13–10.14 10.12–10.15
Works with SIP enabled ✓*
Integrate with 3rd party tools Signals, Rules and Commands Rules and Commands**
Plugin API
Windows
Modify window properties
Spaces
Create and destroy spaces
Move spaces
Displays
Support multiple displays ✓* ✓*

* partially
** chunkwm commands have meaningless return values