A programmable terminal cockpit for getting oriented, finding the next thing that needs attention, and jumping into action from the keyboard.
hud turns a small TOML file into a local terminal dashboard. Each panel runs a shell command, renders the result, and gives you keyboard-first ways to refresh, inspect, and launch follow-up actions.
- A single-user local TUI for command-backed dashboards.
- A lightweight way to collect
task,gh,tmux, scripts, and status checks in one place. - A static-config tool: edit TOML, run
hud, iterate. - Manual refresh first: no background polling or plugin daemons in V1.
- Not a plugin host or remote agent runner.
- Not a web dashboard.
- Not a process supervisor for long-running jobs.
- Not a multi-user service.
Download the latest archive for your platform from GitHub Releases, unpack it, and put hud somewhere on your PATH.
tar -xzf hud-aarch64-apple-darwin.tar.gz
sudo install -m 0755 hud-aarch64-apple-darwin/hud /usr/local/bin/hud
hud --versionRelease artifacts are built for:
x86_64-unknown-linux-gnux86_64-apple-darwinaarch64-apple-darwin
Install from source when developing or testing unreleased changes:
cargo install --git git@github.com:tnezdev/hud.gitRun the built-in demo:
hud --demoOr run the starter config from a checkout:
cargo run -- --config examples/starter.tomlValidate a config without opening the TUI:
hud --config examples/starter.toml --check-configBy default, hud reads:
$XDG_CONFIG_HOME/.hud/config.toml
If XDG_CONFIG_HOME is unset, the fallback is:
$HOME/.config/.hud/config.toml
Use a specific file with:
hud --config ./examples/starter.tomlMinimal config:
title = "Work cockpit"
default_timeout_secs = 120
[[panels]]
id = "tasks"
title = "Tasks"
command = "task mine"
timeout_secs = 10
[panels.row_detail]
title = "Task detail"
command = "task {{ID}}"
[[panels.actions]]
key = "t"
label = "Open tasks"
command = "taskwarrior-tui"Config fields:
title: dashboard title.default_timeout_secs: optional command timeout, default120.[[panels]]: one command-backed panel.panels.id: unique panel id.panels.title: panel title.panels.command: shell command used to refresh the panel.panels.output: optional output protocol:text,table-json, ormetrics-json; defaulttext.panels.timeout_secs: optional panel timeout override.[panels.row_detail]: optional selected-row drill-in command fortable-jsonpanels.panels.row_detail.title: row detail view title.panels.row_detail.command: shell command with{{Column Name}}placeholders from the selected row.[[panels.actions]]: optional fire-and-forget action for the focused panel.panels.actions.key: single-character keyboard shortcut.panels.actions.label: footer label.panels.actions.command: shell command launched without waiting for completion.
Plain text stdout is the default panel content protocol.
Use output = "table-json" for typed table rendering:
{
"type": "table",
"columns": ["Repo", "State"],
"rows": [["hud", "active"]]
}Use output = "metrics-json" for aggregate line gauges:
{
"type": "metrics",
"metrics": [
{ "label": "Budget", "value": 72, "max": 100 }
]
}Metrics use Unicode block characters by default. If your terminal font renders those poorly, set HUD_ASCII_BARS=1 to use ASCII bars.
Malformed structured output, non-zero exits, timeouts, and launch failures render as panel error states instead of crashing the dashboard.
Press Enter on a dashboard card to open the panel detail view. For table-json panels, configure [panels.row_detail] to run a command for the selected row:
[[panels]]
id = "services"
title = "Services"
command = "./scripts/services-json"
output = "table-json"
[panels.row_detail]
title = "Service Detail"
command = "./scripts/service-detail '{{Service}}'"Focused-panel actions are fire-and-forget commands. They appear in the footer and in the ? overlay:
[[panels.actions]]
key = "e"
label = "edit config"
command = "${EDITOR:-vi} ~/.config/.hud/config.toml"q,Esc, orCtrl-C: quit.h/j/k/lor arrow keys: move focus through the card grid.Tab/Shift-Tab: cycle focus through panels.Enter: drill into the focused panel.- In detail view,
Enter: open configured row detail for the selected row. ?: toggle help/actions overlay.q,x, orEsc: step back from detail views.q,x,Esc, or?: close help/actions overlay.- In detail view,
j/down andk/up select output rows; scrolling follows selection. r: refresh focused panel.R: refresh all panels.- Focused-panel action keys are shown in the footer.
examples/starter.toml: safe first-run config with no external tool dependencies.examples/kitchen-sink.toml: static showcase for text, metrics, tables, row drill-in, and actions.examples/dogfood.toml: local working cockpit for tools liketmux,gh, andtask.
Run an example from a checkout:
cargo run -- --config examples/kitchen-sink.tomlOne-off popup:
tmux display-popup -E -w 90% -h 80% 'hud'With a local config during development:
tmux display-popup -E -w 90% -h 80% 'cd /path/to/hud && cargo run -- --config examples/dogfood.toml'Example keybinding:
bind-key H display-popup -E -w 90% -h 80% 'hud'The dashboard is most comfortable at roughly 100 columns by 30 rows or larger. Quit returns control cleanly to tmux because hud restores the terminal alternate screen on exit.
Run locally:
cargo runRun the normal quality gate:
./scripts/checkRun the separate dependency advisory gate when release/security posture matters:
./scripts/auditRelease notes and tag steps live in docs/release.md.
MIT