/YabaiIndicator

MacOS Menubar Applet for showing spaces and switching spaces easily

Primary LanguageSwiftMIT LicenseMIT

Yabai Indicator

Clickable spaces switcher powered by Yabai

screenshot

Shows a row clickable buttons for all workspaces including fullscreen applications

screenshot

Alternatively show miniature windows.

screenshot2

Also supports multiple displays (with separate spaces).

screenshot3

Fullscreen applications.

screenshot4

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.