Live updates and federation
How the TUI stays live via the daemon's change stream, reconnects when a stream drops, and shows federated control planes side by side.
The TUI is built to be left open. It keeps itself current without a manual reload, and it shows every control plane you are logged into in one place. This page explains how, so the behavior is predictable when a daemon restarts or an origin goes offline.
Live updates
Two mechanisms keep the tables current, and the fast one is primary:
- The change stream. When the daemon exposes a watch, the TUI consumes its change stream, so a mutation (a workstation changing phase, a binding coming ready) arrives the moment it happens rather than on the next tick.
- The periodic poll. A refresh runs on a fixed cadence (five seconds by
default, set with
--refresh) as a fallback. Even if the stream is unavailable, the UI stays current; the stream is purely an accelerator on top of the poll.
You can always force an immediate refresh with R.
Reconnecting after a drop
If an established watch stream drops on its own (the daemon restarted, a proxy idled the connection out, the network blipped), the TUI reconnects rather than falling back to the poll forever. The retry uses a capped exponential backoff: roughly half a second, then one, two, four seconds, and so on up to a thirty-second ceiling, so a healthy daemon is picked back up almost immediately while an unreachable one is not hammered. The poll keeps running the whole time, so even a stream that never comes back leaves the UI current.
A deliberate teardown is not treated as a drop: quitting or switching namespace does not schedule a reconnect.
Federated control planes
If you have logged into one or more remote control planes, they appear in the TUI alongside your local resources. Each tab merges the rows from every origin you can reach into one table, so you see your whole world (local workstations and the ones on each control plane) without switching contexts.
When a remote origin cannot be reached or its rows fail to merge, the TUI does not fail the whole view. The rows that did merge stay visible, and the specific origin failure is shown as a non-fatal warning line in the footer. The warning is recomputed on every refresh, so once an origin recovers, its warning clears on the next poll.
Note
rl get -A sees the same merged set.
The TUI adds the live, always-on presentation of it, not a different data path.