A K9s-like Terminal User Interface for monitoring NVIDIA Dynamo deployments in real-time.
Built by SolveFast Labs.
- ETCD Discovery: Real-time watching of ETCD to detect namespaces, components, and endpoints
- Hierarchical View: Three-column layout showing Namespaces -> Components -> Endpoints
- Health Monitoring: Visual status indicators (Ready, Provisioning, Offline)
- NATS Monitoring: Connection status, message statistics, JetStream stream info
- Prometheus Metrics: Optional scraping of TTFT, TPOT, throughput, and queue depth
- Keyboard Navigation: Vim-style (hjkl) and arrow-key navigation
# From source
cargo install --path .
# Or run directly
cargo run- Rust 1.85+ (edition 2024)
- protobuf compiler (
protoc) — required byetcd-client- macOS:
brew install protobuf - Ubuntu:
apt install protobuf-compiler
- macOS:
# Basic usage (connects to local ETCD + NATS)
dynamo-tui
# With Prometheus metrics endpoint
dynamo-tui \
--metrics-url http://localhost:9100/metrics \
--metrics-interval 3s \
--nats-interval 2s
# With custom ETCD/NATS endpoints
dynamo-tui \
--etcd-endpoints http://etcd1:2379,http://etcd2:2379 \
--nats-server nats://nats-server:4222| Variable | Default | Purpose |
|---|---|---|
ETCD_ENDPOINTS |
http://localhost:2379 |
ETCD connection endpoints |
NATS_SERVER |
nats://localhost:4222 |
NATS server URL |
ETCD_AUTH_USERNAME |
-- | ETCD authentication |
ETCD_AUTH_PASSWORD |
-- | ETCD authentication |
CLI arguments take precedence over environment variables.
| Key | Action |
|---|---|
Up/k |
Move selection up |
Down/j |
Move selection down |
Left/h |
Focus previous pane |
Right/l |
Focus next pane |
Tab |
Cycle focus forward |
r |
Clear errors / refresh |
q/Esc/Ctrl+C |
Quit |
+-------------------------------------------------+
| Sources (async Tokio tasks) |
| +------+ +------+ +---------+ |
| | ETCD | | NATS | | Metrics | |
| +--+---+ +--+---+ +----+----+ |
| +----------+-----------+ |
| | mpsc channel |
| v |
| +---------------------+ |
| | App (state) | <- Input events |
| +----------+----------+ |
| | |
| v |
| +---------------------+ |
| | UI (Ratatui) | |
| +---------------------+ |
+-------------------------------------------------+
Each data source implements the Source trait and can be mocked for testing:
#[async_trait]
pub trait Source: Send + 'static {
async fn run(
self: Box<Self>,
tx: mpsc::Sender<AppEvent>,
cancel: CancellationToken,
);
}cargo test108 tests covering:
- Data model (tree building, key parsing)
- App state (navigation, focus cycling, event handling)
- Input mapping (vim keys, arrows, release event filtering)
- Prometheus text parsing (histograms, gauges, NaN/Inf, scientific notation)
- Config resolution (CLI vs env vars)
- UI rendering (TestBackend smoke tests, content assertions)
- Design Document
- Implementation Plan
- Dynamo Issue #1453 — Feature request
- Dynamo Issue #1455 — NATS monitoring
Apache-2.0