A Swift application that interfaces with Yabai to display interactive stack indicators for stacked windows on macOS.
- macOS 15.0 or later
- Yabai installed and running
- Download the DMG from the releases
- Mount the DMG by double clicking
- Drag the app from the DMG to the Applications folder
- Run the application
The application is signed, notarized and stapled, so you should be able to just run from there!
Note: I recently swapped from using plain old swift to xcode to build a signed app bundle
- Xcode 26+ (for the app icon)
- It will compile with a lower version, but your mileage may vary
-
Clone the repository:
git clone https://github.com/liam-mackie/stackline-swift.git cd stackline-swift -
Build the application:
xcodebuild -scheme Stackline -configuration Release -derivedDataPath build
-
The built app will be located at:
build/Build/Products/Release/Stackline.app
-
Copy it to your applications folder:
cp -r build/Build/Products/Release/Stackline.app /Applications
There is nothing to configure: Stackline registers the Yabai signals it needs by itself and keeps them registered.
- Start order doesn't matter. If Yabai isn't running yet, Stackline waits for it (the menu bar icon is dimmed and the menu says "Waiting for yabai…") and connects as soon as it appears.
- Yabai can restart. Yabai forgets its signals when it restarts; Stackline notices the restart and registers them again.
- Signals are cleaned up. They are removed when Stackline quits — from the menu, on logout, or via
SIGTERM/SIGINT. If Stackline is killed outright, each signal removes itself the next time it fires, and anything still left is swept the next time Stackline starts.
The signals are labelled stackline-<pid>-<event> (see yabai -m signal --list). Their action writes the event to a Unix socket at ~/Library/Application Support/Stackline/events.sock with nc.
To start Stackline automatically, run stackline, then open preferences from the menu bar icon. In the general, enable "Launch at Login"
You can click on a stacked application's icon, pill or dot to swap to the application.
Stackline supports several command-line options:
# Start the application
/Applications/Stackline.app/Contents/MacOS/Stackline
# Show version information
/Applications/Stackline.app/Contents/MacOS/Stackline --version
# Show help
/Applications/Stackline.app/Contents/MacOS/Stackline --helpOnly one instance runs per user; a second one exits immediately.
Stackline logs to the unified log:
log stream --level debug --predicate 'subsystem == "sh.mackie.stackline"'swift testThe suite talks to an in-process fake of Yabai, so it never touches a running one.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable (I probably haven't)
- Submit a pull request
- macOS: 15.0+ (tested on macOS 26).
- Yabai: Any recent version
- Architecture: Intel x86_64 or Apple Silicon (Tested on Apple Silicon)