yabai started as a C99 rewrite of chunkwm, originally supposed to be its first RC version.
However due to major architectural changes, supported systems, and changes to functionality, it is being released separately. There are multiple reasons behind these changes, based on the experience I've gained through experimenting with, designing, and using both kwm and chunkwm. Some of these changes are performance related while other changes have been made to keep the user experience simple and more complete, attempts to achieve a seamless integration with the operating system (when possible), proper error reporting, and yet still keep the property of being customizable.
yabai is officially supported on macOS High Sierra 10.13.6 and macOS Mojave 10.14.4-6. It uses a scripting-addition, which is a bundle of code that we inject into Dock.app to elevate our privileges when communicating with the WindowServer. The WindowServer is a single point of contact for all applications. It is central to the implementation of the GUI frameworks and many other services. Because of this, System Integrity Protection must be disabled for yabai to function properly.
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. If you are building from source or using the brew --HEAD option, it is recommended to first codesign the binary such that access can persist through builds/updates. You can read more about codesigning here.
The Mission Control setting displays have separate spaces must be enabled.
yabai stores a lock file at
/tmp/yabai_$USER.lock to keep multiple instances from launching by the same user.
yabai stores a unix domain socket at
/tmp/yabai_$USER.socket to listen for messages.
DISCLAIMER: Use at your own discretion. I take no responsibility if anything should happen to your machine while trying to install, test or otherwise use this software in any form. You acknowledge that you understand the potential risk that may come from disabling System Integrity Protection on your system, and I make no recommendation as to whether you should or should not disable SIP.
Requires xcode-10 command-line tools.
# clone tap brew tap koekeishiya/formulae # install latest stable version brew install yabai # install from git master branch brew install --HEAD yabai
# clone repo and build binary git clone https://github.com/koekeishiya/yabai make install # release version make # debug version # symlink binary to a location in $PATH ln -s $PWD/bin/yabai /usr/local/bin/yabai # symlink manpage ln -s $PWD/doc/yabai.1 /usr/local/share/man/man1/yabai.1
sudo yabai --install-sa
yabai is a single binary application and is trivial to uninstall.
sudo yabai --uninstall-sa
Remove config and tmp files:
rm ~/.yabairc rm /tmp/yabai_$USER.lock rm /tmp/yabai_$USER.socket rm /tmp/yabai-sa_$USER.socket
# if you were using brew services to manage yabai brew services stop yabai rm -rf /usr/local/var/log/yabai # uninstall binary, manpage and plist brew uninstall yabai
# remove binary symlink rm /usr/local/bin/yabai # remove manpage symlink rm /usr/local/share/man/man1/yabai.1 remove the cloned git-repository..
The default configuration file is a shell-script located at one of the following places (in order):
A different location can be specified with the --config | -c argument. The configuration file consists of commands that send messages to the running yabai instance. To send a message, invoke yabai with the --message | -m argument.
Keyboard shortcuts can be defined with skhd or any other suitable software you may prefer.
Sample configuration files can be found in the examples directory.
Refer to the documentation for further information.