SketchyBar
Highly customizable macOS status bar replacement
Features
- Full runtime configuration
- Dynamic animations
- Event-driven scripting
- Interactive mouse support
- Menu bar app aliases
- Graph drawing
- Popup menus
- yabai integration
Install
$brew install FelixKratz/formulae/sketchybarAbout
A fully customizable status bar replacement for macOS with dynamic animations, powerful event-driven scripting system, and interactive mouse support. Display macOS menu bar apps as aliases, create arbitrary graphs, and build on-demand popup menus.
Who It's For
SketchyBar is for tiling WM users who want a status bar that matches the depth of their window manager setup. If you run yabai or AeroSpace and find the default macOS menu bar insufficient — it doesn't show your current space, your focused window title, or custom system metrics — SketchyBar replaces it entirely with a fully scriptable alternative. It's also the most common choice for "dotfile" style setups where every visible element of the desktop is under explicit configuration control.
How It Works
SketchyBar runs as a background process and draws a custom bar using its own rendering layer, hiding the native macOS menu bar. The bar is built from items: individual elements you define with sketchybar --add item commands. Each item has properties (position, icon, label, padding, background color) set via sketchybar --set, and can subscribe to events — system events like space changes, window focus, media playback, or custom events you emit from external scripts.
This event-driven model is what gives SketchyBar its power. When yabai changes the active space, it fires a space_change event; SketchyBar catches it, runs the associated script, and updates the space indicator in the bar — all in the same frame. Items can also respond to mouse clicks and scroll events, making bar elements interactive (click a space indicator to switch to that space, for example).
Configuration
SketchyBar is configured via a shell script (conventionally ~/.config/sketchybar/sketchybarrc) that runs at startup:
# ~/.config/sketchybar/sketchybarrc
sketchybar --bar height=32 blur_radius=30 position=top
# Space indicators (requires yabai or AeroSpace)
# Space indicators — one item per space
sketchybar --add space space.1 left --set space.1 associated_space=1 icon=1 click_script='yabai -m space --focus 1'
sketchybar --add space space.2 left --set space.2 associated_space=2 icon=2 click_script='yabai -m space --focus 2'
sketchybar --add space space.3 left --set space.3 associated_space=3 icon=3 click_script='yabai -m space --focus 3'
# Focused window title
sketchybar --add item window_title center --set window_title script="$HOME/.config/sketchybar/plugins/window_title.sh" --subscribe window_title front_app_switched window_focus
# Clock
sketchybar --add item clock right --set clock update_freq=10 script="$HOME/.config/sketchybar/plugins/clock.sh"
Each item's dynamic behavior lives in small plugin scripts — typically 3–5 line shell scripts that call sketchybar --set <item> label="$(some_command)".
Compared to Similar Tools
Compared to Übersicht, SketchyBar is a dedicated bar replacement while Übersicht renders arbitrary HTML/CSS widgets anywhere on the desktop. Übersicht widgets can appear between windows; SketchyBar is specifically a top or bottom bar. SketchyBar's event system makes it tighter to couple with tiling WMs; Übersicht's HTML model is more flexible for custom visual designs.
Compared to Barik and simple-bar, SketchyBar has the steepest learning curve but the most customization depth. Barik and simple-bar are opinionated and ready to use quickly; SketchyBar requires you to build your config from scratch (or adapt a community config), but the result can look exactly like anything you can imagine.
Requirements
- macOS 12 Monterey or later
- No SIP changes required
- Works alongside yabai, AeroSpace, FlashSpace, or standalone
- Free and open-source (MIT license)
Getting Started
brew install FelixKratz/formulae/sketchybar
# Create config directory
mkdir -p ~/.config/sketchybar/plugins
# Copy the example config as a starting point
curl -L https://raw.githubusercontent.com/FelixKratz/SketchyBar/master/sketchybarrc -o ~/.config/sketchybar/sketchybarrc
chmod +x ~/.config/sketchybar/sketchybarrc
# Start the service
brew services start sketchybar
The official documentation covers every property and event. The #sketchybar channel in the r/unixporn Discord and the GitHub discussions section are good places to find community configs to learn from.