bobrwm
A tiling window manager for macOS, written in Zig
Features
- Virtual Workspaces (Up To 10)
- BSP And Monocle Layouts
- Configurable Gaps And Keybinds
- App-To-Workspace Pinning
- Live Config Reload
- Unix Socket IPC
- Trackpad Swipe Companion
- Signed And Notarized
Install
$brew trust bobrwm/tap && brew install --cask bobrwm/tap/bobrwmAbout
bobrwm is a tiling window manager for macOS that manages windows through virtual workspaces rather than native Spaces, using a binary space partitioning layout with an optional monocle mode. It runs as a menu-bar agent, is fully configurable via a ZON config file, and exposes an IPC interface over a Unix socket for scripting and status queries.
Who It's For
bobrwm is for macOS developers who want an i3-style binary space partitioning tiler without relying on native Spaces, and who don't mind a young, actively-developing project written in Zig. It suits users comfortable editing a ZON config file and scripting window behavior over IPC, rather than clicking through a GUI.
How It Works
bobrwm manages windows through virtual workspaces that are not native macOS Spaces — hidden workspace windows are parked off-screen rather than switched via the system's Spaces mechanism. Layout is handled by a binary space partitioning algorithm, with an alternate monocle mode for single-window focus. The app runs as a menu-bar agent, reads Accessibility permissions to manage windows, and can be launched via open -a Bobrwm or Spotlight. Configuration lives in a ZON (Zig Object Notation) file, checked in this priority order: a -c/--config CLI argument, $XDG_CONFIG_HOME/bobrwm/config.zon, then ~/.config/bobrwm/config.zon, falling back to built-in defaults if none exist. Config changes apply live by pressing the default Alt+Shift+R binding or running bobrwm reload-config, without restarting the app. Beyond keybindings, bobrwm exposes an IPC interface over a Unix socket, so every action — querying windows, workspaces, displays, and apps, moving windows between displays, or adjusting BSP split ratios and mirroring — can also be driven from the bobrwm CLI.
Configuration
// ~/.config/bobrwm/config.zon
.keybinds = .{
.{ .key = "1", .mods = .{ .alt = true },
.action = .focus_workspace, .arg = 1 },
}
.gaps = .{
.inner = 4,
.outer = .{ .left = 4, .right = 4, .top = 4, .bottom = 4 },
}
.layout = .bsp, // or .monocle
.workspace_names = .{ "term", "web", "code", "chat" },
Compared to Alternatives
Compared to yabai, bobrwm uses its own virtual workspace layer instead of manipulating native macOS Spaces, and ships signed and notarized so Gatekeeper allows it to run without extra steps — yabai's full feature set instead requires partially disabling SIP. Compared to AeroSpace, both tools implement independent virtual workspaces on top of BSP tiling, but bobrwm's configuration format is ZON rather than TOML, and its IPC surface (querying windows, workspaces, displays, and apps over a Unix socket) is a documented first-class interface rather than an add-on.
Requirements
- Accessibility permission required for window management
- Install via Homebrew:
brew trust bobrwm/tap && brew install --cask bobrwm/tap/bobrwm(trusting the tap is required first) - Development/unsigned builds lose Accessibility approval after each rebuild unless a stable self-signed identity is used
- Project is in early development; the Homebrew cask tracks the
mainbranch, publishing a fresh build on every push rather than following tagged releases
Getting Started
After installing, launch bobrwm via open -a Bobrwm or Spotlight and grant Accessibility permission when prompted. Create ~/.config/bobrwm/config.zon to set keybindings, gaps, layout, and workspace names — built-in defaults apply until you do. Reload changes at any time with Alt+Shift+R or bobrwm reload-config, and use the bobrwm CLI (bobrwm query windows, bobrwm bsp ratio rel 0.05, etc.) to script window management. Full documentation is at github.com/bobrwm/bobrwm.