Dashboard¶
A local web UI for evidence emitted by registered Stove systems. Timelines, span trees, snapshots, and Kafka explorer views live in a SQLite database so runs persist across sessions. Live updates stream via SSE.
In 30 seconds
Install stove-cli, run stove, add dashboard { } in Stove().with, then open http://localhost:4040. The dashboard stays empty until tests stream events to the CLI.
Current CLI versions start the dashboard with bare stove; older docs and scripts may still show stove serve.
Preview¶
The dashboard is useful because the test timeline, trace tree, and system evidence stay linked to the same run instead of living in separate tools.
412 ms
- HTTP POST /orders 201 / 42 ms
- PostgreSQL insert orders 18 ms
- Kafka order.created published partition 0
- HTTP POST /payment/charge 500 / 117 ms
Install the CLI¶
Download the right binary from releases and add to $PATH.
Verify: stove --version.
Start the dashboard¶
stove # default UI/REST/MCP port 4040, gRPC port 4041
stove --port 9000 --grpc-port 9001 # override ports
stove --fresh-start # back up and recreate the DB, then start
stove --db ./my-stove.sqlite # custom DB path
stove --clear # clear stored runs and exit
Open the printed URL. Empty until tests run.
Wire your tests¶
Stove().with {
dashboard {
DashboardSystemOptions(appName = "my-service")
// If you start the CLI with `stove --grpc-port 9001`, match that here:
// DashboardSystemOptions(appName = "my-service", cliHost = "localhost", cliPort = 9001)
}
// ... other systems + runner
}.run()
Now the registered Stove systems stream test events to the dashboard while the CLI is running.
What you see¶
Chronological list of every HTTP call, DB op, Kafka publish, WireMock match, gRPC call. Click any entry to see request/response payloads.
Interactive span tree with attribute search. Requires Tracing enabled.
System state captured when an assertion failed. WireMock unmatched, Kafka topics, DB rows.
All published + consumed messages. Filter by topic, partition, headers. Drill into payloads.
Data model¶
database
└── apps (one per appName)
└── runs (one per test suite execution)
└── tests (one per test case)
├── entries (HTTP, DB, Kafka, ...)
├── spans (OTel tree)
└── snapshots (system state at failure)
Runs persist until you clear or recreate the database. Browse old runs to compare regressions.
Fault tolerance¶
Dashboard is opt-in and non-blocking:
- Events queue locally; gRPC publish happens in the background.
- If the CLI is down or unreachable, the gRPC client auto-disables for the rest of the suite. Tests continue. No flakes.
- Tests never wait on the dashboard.
REST API¶
The CLI exposes REST endpoints for integration:
| Endpoint | Use |
|---|---|
GET /api/v1/meta |
discovery; version, capabilities, MCP availability |
GET /api/v1/apps |
list registered apps |
GET /api/v1/runs?app=... |
list runs for an app |
GET /api/v1/runs/{run}/tests |
tests in a run |
GET /api/v1/traces/{trace_id} |
span tree |
GET /api/v1/events/stream |
SSE: live test events |
Useful for CI artifact extraction, custom analyzers, or building tooling on top.
CLI options reference¶
| Flag | Default | Notes |
|---|---|---|
--port |
4040 | web UI, REST, and MCP |
--grpc-port |
4041 | event ingestion from Stove tests |
--db |
~/.stove-dashboard.db |
persistence path |
--clear |
off | clear stored runs and exit |
--fresh-start |
off | back up and recreate the DB before serving |
Pairs well with¶
-
Tracing. Span tree shows up in Trace view.
-
MCP. Same database, agent-readable.
-
Reporting. Console reports plus dashboard history cover complementary debugging surfaces.
-
When a test fails. Dashboard is step 3 of the failure flow.
Troubleshooting¶
| Symptom | Check |
|---|---|
| Dashboard empty | stove running? dashboard { } registered in Stove().with? appName set? |
| Events not arriving | Port mismatch. cliPort in DashboardSystemOptions must match --grpc-port |
| "gRPC disabled" warning | Expected if CLI started after tests; restart in correct order |
| Disk filling up | ~/.stove-dashboard.db grows with runs; periodically run stove --clear |