Window Management
Band automatically manages IDE and application windows when you focus a workspace. Instead of manually opening editors, terminals, and browsers for each branch, Band launches and positions everything with a single click. This is handled entirely by the Tauri desktop app — the web server never performs window management.
How It Works
When you click a workspace in the dashboard:
- Band reads the apps configuration from
.band/config.jsonin the worktree (falling back to the project root, then global settings defaults). - For each configured app, Band checks if a matching window already exists by searching for windows with the expected title pattern.
- If no matching window is found, Band launches the application and waits for its window to appear (with a configurable timeout, default 5 seconds).
- All windows are positioned according to the computed layout, leaving space for the Band dashboard on the left side of the screen.
- Post-launch setup runs (e.g., opening terminal splits in VS Code or iTerm).
Layout Engine
The layout engine reserves 400 pixels on the left side of the screen for the Band dashboard. The remaining screen space is divided among the configured apps using a proportional sizing system.
Apps are arranged in columns by default (side by side). You can stack apps vertically within
a column using "split": "horizontal". Each app's size property
controls its relative width (for columns) or height (for stacked apps).
{
"apps": [
{ "type": "vscode", "size": 2 },
{ "type": "iterm", "size": 1 },
{ "type": "chrome", "url": "http://localhost:3000", "split": "horizontal" }
]
} In this example, VS Code gets twice the width of iTerm, and Chrome is stacked below iTerm in the same column.
Configuring Apps
The apps array in .band/config.json defines which applications to
open for each workspace. Each entry specifies an app type and optional configuration:
App Types
Band includes built-in presets for common development tools:
- vscode — Visual Studio Code
- cursor — Cursor editor
- zed — Zed editor
- windsurf — Windsurf editor
- xcode — Xcode IDE
- android-studio — Android Studio
- intellij, webstorm, pycharm, goland, rustrover, rider, clion, phpstorm — JetBrains IDEs
- iterm — iTerm2 terminal
- ghostty — Ghostty terminal
- warp — Warp terminal
- kiro — Kiro editor
- chrome — Google Chrome (app mode)
- safari — Safari browser
- firefox — Firefox browser
Terminal Configuration
For editors like VS Code and Cursor, you can configure terminal splits:
{
"type": "vscode",
"terminals": [
{ "name": "claude", "command": "band tasks watch && claude --continue" },
{ "name": "shell", "command": "", "split": "vertical" }
]
}
For terminal apps like iTerm, use the commands array:
{
"type": "iterm",
"commands": [
{ "command": "npm run dev" },
{ "command": "npm run test -- --watch", "split": "vertical" }
]
} Browser Configuration
Browser apps accept a url property:
{ "type": "chrome", "url": "http://localhost:3000" } Configuration Cascade
Band looks for apps configuration in the following order, using the first one found:
.band/config.jsonin the worktree directory.band/config.jsonin the project root (useful for .gitignored configs that are not present in new worktrees)- Global defaults from Settings
One-Click Focus
The key benefit of Band's window management is one-click workspace switching. Clicking a different workspace in the sidebar instantly rearranges your screen to show that workspace's IDE, terminals, and browser windows. There is no need to manually find and arrange windows when switching between tasks.