soffit
Customizable statusline manager for Claude Code. Desktop editor with drag-and-drop, live preview, and a widget system for custom statusline extensions.


Features
- 9 built-in widgets: context bar, cost, git, version, duration, vim mode, agent, quota, session
- Configurable theme: custom colors, icons, and bar styles via config or the desktop editor
- Desktop editor: drag-and-drop widget ordering, live preview, per-widget component configuration
- Custom widgets: create your own widgets as shell scripts or compiled binaries
- Auto-detection: widgets declare components via JSON output for full editor integration
- Terminal-width aware: automatic wrapping and responsive bar widths
Install
Pre-built binary (recommended)
|
Homebrew (macOS/Linux)
From source
System dependencies (Linux, build from source only)
Supported platforms
- Linux (x86_64)
- macOS (Intel and Apple Silicon)
Setup
Run the setup command to configure Claude Code automatically:
Or add manually to ~/.claude/settings.json:
Usage
Configuration
Config lives at ~/.config/soffit/config.toml (falls back to ~/.config/claude-statusline/config.toml):
= ["vim", "agent", "version", "context_bar", "quota", "duration", "cost"]
= ["git", "insights"]
= []
= 300.0
= 100
[]
= false
= ["session", "today", "week"]
Theme
Override semantic color roles using ANSI 256-color indices:
[]
= 114 # green tones (context bar ok, git clean)
= 215 # orange tones (quota approaching, cost high)
= 203 # red tones (quota critical, over budget)
= 242 # dimmed text (secondary info)
= 250 # light gray (tertiary info)
= 111 # blue tones (main accent)
= 183 # purple tones (secondary accent)
All 7 roles have built-in defaults. Unset roles use the defaults.
Icons
Override icons per widget under [statusline_widgets.NAME.icons]:
[]
= "$ " # instead of 💸
[]
= "T " # instead of ⏱
[]
= " " # nerd font branch icon
[]
= "> " # ASCII fallback
Available icon keys per widget are shown in soffit edit under the widget's appearance panel.
Bar style
Choose a preset for the quota progress bar:
= "block" # ◎◉● density (default)
= "dot" # ●○
= "ascii" # #-
Unicode text
Superscript/subscript rendering in the version widget can be toggled:
= false # plain text instead of ¹·²·³ / ₛₒₙₙₑₜ
Custom Widgets
Drop scripts in ~/.config/soffit/widgets/:
#!/bin/bash
# ~/.config/soffit/widgets/weather.sh
INPUT=
COMPACT=
TEMP="22°C"
COND="sunny"
if [; then
else
fi
Make it executable: chmod +x ~/.config/soffit/widgets/weather.sh
Widget input format
Widgets receive JSON on stdin:
Widget output format
Return JSON with parts so the framework reorders components per user config:
Or return a pre-composed string (component reordering won't apply):
Or return plain text:
22°C sunny
Widget metadata (optional)
Create a .toml sidecar for richer editor integration:
# ~/.config/soffit/widgets/weather.toml
= "Current weather conditions"
= ["temp", "condition"]
= true
Marketplace
The marketplace subcommand manages a list of named widget sources (GitHub repos that publish a registry.json).
By default soffit ships with the official noxcraftdev/soffit-marketplace source.
# Add a community source
# List registered sources (no network)
# List sources with widget counts (fetches or uses cached registry)
# Remove a source
# Refresh the cached registry for all sources (or one with --source)
Installing from the marketplace
Once sources are configured, install by widget name — soffit searches all sources:
Publishing a marketplace source
Create a registry.json at the root of any public GitHub repo:
Then share the source with: soffit marketplace add your-source alice/soffit-extras.
Community Widgets
Install widgets shared on GitHub:
# Install all widgets from the official collection
# Install a specific widget
# Remove an installed widget
# Overwrite an existing widget
Installed widgets land in ~/.config/soffit/widgets/ and are immediately available.
Creating a widget repository
Lay out your repo as a flat directory of {name}.sh + {name}.toml pairs:
my-soffit-plugins/
weather.sh
weather.toml
stocks.sh
stocks.toml
soffit looks for this layout at the repo root first, then inside a plugins/ subdirectory.
Multiple widgets per repo is the norm — a single repo can host an entire collection.
The .toml sidecar is optional but recommended: it supplies the description and component list shown in soffit edit.
Editor
soffit edit opens a desktop GUI:
- Lines tab: drag-and-drop widgets across 3 statusline rows
- Widgets tab: configure built-in widgets (reorder components, toggle compact mode)
- Widget management: create, edit, preview, rename, delete custom widgets
- Live preview: see your statusline update in real-time

License
MIT