Skip to content

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.

Stove Dashboard v0.24.0 local evidence stream
Live MCP /mcp
OrderFlowTest create order publishes event failed 412 ms
Timeline (4) Trace (5) Snapshots (3) Flow
Timeline 412 ms
  1. HTTP POST /orders 201 / 42 ms
  2. PostgreSQL insert orders 18 ms
  3. Kafka order.created published partition 0
  4. HTTP POST /payment/charge 500 / 117 ms
Trace tree traceparent linked
test: create order 412 ms
HTTP POST /orders 405 ms
OrderService.place 318 ms
PaymentClient.charge gateway timeout
Kafka send order.created 9 ms
System evidence captured at failure
Kafka 1 message order.created
PostgreSQL 1 row orders.status = PENDING
HTTP 500 payment gateway timeout
MCP: stove_failure_detail MCP: stove_trace

Install the CLI

brew tap trendyol/tap
brew install stove
curl -fsSL https://raw.githubusercontent.com/Trendyol/stove/main/tools/stove-cli/install.sh | bash

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

Timelineper test

Chronological list of every HTTP call, DB op, Kafka publish, WireMock match, gRPC call. Click any entry to see request/response payloads.

TraceOTel

Interactive span tree with attribute search. Requires Tracing enabled.

Snapshotsat failure

System state captured when an assertion failed. WireMock unmatched, Kafka topics, DB rows.

Kafka Explorerlive

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