ProjectsisbDocs

isb tui

A live view of the host, its stacks and its sandboxes, and the everyday operations on them, in the terminal: watch a rollout slot by slot, read logs, open a shell, scale, deploy and roll back without leaving it. It needs a terminal; scripts and agents use isb stack ps or the tools instead.

$ isb tui
 isb · myhost                                                           isb 1.0.0 · serve ●
 stacks 1   replicas 4/4   sandboxes 9 (4 up)   cpu ▂▃▅▃▂▁▂▃ 12%   mem ▕█▋░░░░░░▏ 50G/252G
──────────────────────────────────────────────────────────────────────────────────────────
╭ overview ─────────────╮┌ e2e ─────────────────────────────────────────────────────────┐
│ STACKS                ││ ◐ updating   deployed 9s ago by local(uid 1000)               │
│ ◐ e2e         ↻ 3/4   ││ SERVICE   STATE      REPLICAS  PORT            TRAFFIC        │
│                       ││ ● cache   converged  ● 1/1     :16379 → 6379   ▁▁▁▁▁▁   0/s  │
│ SANDBOXES             ││ ◐ web     updating   ●●● 3/3   :18080 → 8000   ▁▃▅▇█▆  48/s  │
│ ● build-box           ││                                                               │
│ ● agent-k7q2     mcp  ││  web rolling out ──────────────────────────────────────────── │
│ ○ old-dev         vm  ││ f739806f → 8a17158c   start-first   ▕████▍░░░░░░▏ 1/3         │
│                       ││ slot 1  f739806f  ○ retired   ━━━▶  8a17158c  ● serving       │
│                       ││ slot 2  f739806f  ● serving   ━━━▶  8a17158c  ◐ creating      │
│                       ││ slot 3  f739806f  ● serving     ·    8a17158c  ◌ waiting       │
╰───────────────────────╯└───────────────────────────────────────────────────────────────┘
 events ───────────────────────────────────────────────────────────────────────────────────
 02:12:45 · e2e/web   slot 1: e2e-web-1-63c0 is serving; retiring e2e-web-1-07f2
 ↑↓ move  ⏎ open  l logs  e shell  s scale  r redeploy  b rollback  x remove  ? help

Where the data comes from#

With the isb serve daemon running (its socket at $ISB_SERVE_SOCKET, else $XDG_RUNTIME_DIR/isb/serve.sock), the dashboard reads the daemon's overview tool every second and follows its events tool. A web UI would read the same two tools, so the two always show the same thing. Without the daemon it reads incus directly: sandboxes only, with no stacks and no event feed, and the header says direct · read-only.

Shells, sandbox logs and starting, stopping or removing a sandbox go to incus directly either way, so they need the same incus access as isb exec.

Reading it#

Glyph Means
● healthy, converged, running, serving
◐ updating, probing, creating, draining
◌ starting, waiting
◫ paused
✖ failing, unhealthy
○ stopped, retired

Colour adds to the glyphs and never replaces them, so NO_COLOR=1 loses nothing. Sparklines show the last minute or so: CPU as a percentage of one core (four busy cores read 400%), traffic as new connections per second through the balancer. LB ⇄ marks a replica the balancer sends traffic to.

The header's disk is the incus storage pools' used and total space (pools on one filesystem, such as several dir pools, count once), re-read every 30 seconds; it needs a terminal at least 130 columns wide. A replica's DISK and a sandbox's disk are its root disk's usage, which only some storage drivers report (ZFS, Btrfs, LVM); on a dir pool they show - and are left out.

Columns give way as the terminal narrows: image, revision and traffic in the service table, then IP, rotation and restarts, then disk, in the replica table.

Keys#

Key Does
↑ ↓ j k, g G move
⏎ tab → into a stack's services, then its replicas
esc ← ⇧tab back out (and esc clears a filter)
l logs: the service's replicas interleaved by time, or one replica's when a replica is selected, or a sandbox's journal or console. f follows, w wraps, 1-9 picks a replica, a shows all
e a shell in the selected replica or sandbox (root, bash if it has one); exit to come back
s scale the service
r redeploy the service: fresh replicas, rolling
b roll the stack back to its previous deployment
x remove the stack or sandbox (type its name to confirm)
t start or stop a sandbox
d, :deploy [FILE] [NAME] deploy a compose file: shows each service's change, then asks
/ filter stacks and sandboxes by name
: command palette (deploy, stacks, sandboxes, filter, refresh, help, quit)
R refresh now
? help
q, ctrl-c quit

:deploy reads the file where isb tui was started, exactly as isb stack deploy would (.env, ${VAR}, secrets from the environment), and asks the daemon for a plan before applying anything.