obi

SketchyBar for yabai, inspired by simple-bar

Category
Status Bar
WM Type
—
License
free
Open Source
Yes
Keybindings
No
Scripting
No
Last Update
2026-10-27

Features

  • Spaces With Per-App Icons
  • Focused Space Window List
  • Layout and skhd Mode Badges
  • Auto-Hiding Data Widgets
  • Three Themes
  • Click to Focus Spaces and Windows
  • Local HTTP API and CLI
  • Single Swift Binary, No Dependencies

Install

$brew tap hmepas/formulae && brew install obi

About

obi (帯) is an opinionated status bar for yabai, rebuilt in Swift from the ideas behind simple-bar. It needs no Übersicht and has no external dependencies. It's a single native binary that draws a 28 px strip over the hidden system menu bar, showing spaces with app icons, the focused space's windows, and event-driven data widgets.

Who It's For

obi is for yabai users who like simple-bar's look and information density but don't want to run Übersicht and a WebView just to draw a status bar. It's aimed at people who already run yabai with the scripting addition and skhd, and who want a fast native bar they can drive from shell signals. It's opinionated: the widget set and order are fixed, so it suits people who agree with its defaults more than people who want to build a bar from scratch.

How It Works

obi is "one Swift binary, no Electron, no WebView, no Node, no polling scripts." It draws a 28 px strip over the system menu bar, which you set to auto-hide, and reserves the space with yabai's external_bar main:0:0. The left side lists every space on every display, as pills showing the label or index plus one icon per app, with focused, visible and fullscreen states shown differently. Next to that, a process row lists the windows of the focused space with a layout badge (bsp / stack / float) and an optional mode badge. Interaction is by mouse: click a space or window to focus it, Alt+click a space to rename its label inline, and drag the mic and sound sliders.

Instead of polling, obi reacts to events. yabai signals curl its local HTTP server on 127.0.0.1:7776 (/yabai/{spaces,windows,displays}/refresh, /skhd/mode/refresh, /config/reload, /theme/<name>), and audio and keyboard-layout data come from CoreAudio and TIS. Data widgets (zoom, netstats, cpu, memory, mic, sound, wifi, keyboard, date, time) hide themselves when there's nothing worth showing. For example, CPU only appears above 50%. A CLI (obi reload, obi theme <name>, obi refresh spaces|windows|displays|mode) covers the same actions.

Configuration

Settings live in ~/.config/obi/config.toml; if the file is missing, obi uses defaults. The key lines from the README:

# ~/.config/obi/config.toml
theme = "pills"                    # pills | band | segmented
yabai = "/opt/homebrew/bin/yabai"
port = 7776
mode_file = "~/Library/Caches/obi/mode"

Further sections cover [spaces] (exclude, apps_exclude), [icons] for mapping apps to icons, and [widgets.*] for cpu, memory, netstats, keyboard and wifi. To show an skhd mode, write JSON such as {"mode": "app_launch", "color": "red"} to the mode file; an empty mode hides the badge. Apply changes with obi reload or kill -HUP $(pgrep -x obi).

Compared to Alternatives

Compared to simple-bar, which inspired it, obi runs as a native Swift binary instead of an Übersicht widget. That removes the Übersicht dependency, but obi works only with yabai, whereas simple-bar also supports AeroSpace and FlashSpace. Despite the "SketchyBar for yabai" tagline, obi doesn't use SketchyBar. SketchyBar is a general-purpose bar you script yourself, while obi ships a fixed, opinionated layout configured through one TOML file.

Requirements

  • macOS 14 or later, on Apple Silicon or Intel
  • yabai with the scripting addition, so SIP must be partially disabled. SIP-enabled setups are listed as "not planned"
  • System menu bar set to auto-hide, and yabai configured with external_bar main:0:0
  • Building from source needs the Xcode toolchain (Swift 5, SwiftPM)
  • Early-stage project: v0.1.3 is the latest release (October 2026)

Getting Started

Run brew tap hmepas/formulae, then brew install obi (this builds from source and needs Xcode), then brew services start obi. Alternatively, clone the repo and run scripts/deploy.sh, which installs the binary to ~/.local/bin/obi, or use obi install to write a launchd agent. Set the menu bar to auto-hide, add external_bar main:0:0 to ~/.yabairc, and add the yabai signals from the README so they curl obi's refresh endpoints. Then pick a theme with obi theme band or in ~/.config/obi/config.toml. Full details are in the README.

Discussion