Yabai Indicator
Clickable spaces switcher powered by Yabai
Shows a row clickable buttons for all workspaces including fullscreen applications
Alternatively show miniature windows.
Also supports multiple displays (with separate spaces).
Fullscreen applications.
Compact mode.
Requirements
Yabai is required to be running for the space switching and keeping spaces information in sync and showing individual windows. In order for switching spaces by clicking to work correctly, you will need to disable SIP.
Installation
If you don't have yabai, install yabai (version 4.0.2 required) first: Official installation guide
Just download and unzip the latest release of YabaiIndicator from Releases and run. Now you should be able to see empty spaces for each desktop and clicking spaces should work.
In order to allow for showing windows and keeping the spaces in sync, when spaces are removed in mission control the following signals need to be added to your .yabairc
:
yabai -m signal --add event=mission_control_exit action='echo "refresh" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=display_added action='echo "refresh" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=display_removed action='echo "refresh" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_created action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_destroyed action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_focused action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_moved action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_resized action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_minimized action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
yabai -m signal --add event=window_deminimized action='echo "refresh windows" | nc -U /tmp/yabai-indicator.socket'
If certain keybinds modify the spaces arrangement the following commands needs to be added to keep the indicator in sync:
echo "refresh" | nc -U /tmp/yabai-indicator.socket
This sends a refresh command to Yabai Indicator via a unix-domain socket.
Comparison to similar applications
SpaceId has some additonal configurability for presentation and also allows showing all active spaces on all displays. Switching between spaces is not implemented. As of 12/2021 it does not utilize Acessibility API for catching MissionControl invocation. It does not have a dependency on Yabai.
WhichSpace shows the current active Space in a single indicator. Does not allow for showing all spaces or all visible spaces on multiple displays.