Distributed tracing.
No Jaeger. No cloud.
Just your terminal.
Run one binary, point your OTel SDK at localhost:4317,
and watch your spans appear live — zero config, zero infra.
OTLP/gRPC :4317 OTLP/HTTP :4318 svc-api › POST /checkout 45ms (4 spans) svc-auth › ValidateToken 12ms (1 span) svc-cart › GetCart 8ms (2 spans) svc-db › db.query 3ms ✕ error ────────────────────────────────────────────── svc-api › POST /checkout 45ms svc-api › POST /checkout 45ms svc-auth › ValidateToken 12ms svc-cart › GetCart 8ms svc-db › db.query 3ms esc back /search e errors only q quit
Zero config
One binary. No YAML, no Docker Compose, no cloud account. Works with any OTel SDK out of the box.
OTLP/gRPC & HTTP
Listens on port 4317 (gRPC) and 4318 (HTTP). Drop-in replacement for Jaeger or Tempo during local development.
Error spotlight
Press e to filter to traces with errors. Find failures instantly without scrolling.
Live span tree
Proportional timing bars show exactly where time is spent. Auto-refreshes every 200 ms as new spans arrive.
Statistics view
P50, P95, P99 latency and error rates per service — no external metrics backend required.
Ring buffer
Keeps the last N traces in memory and evicts the oldest automatically. Configurable via --capacity.
How it works
-
1
Start tracelocal
tracelocalBinds to
:4317(gRPC) and:4318(HTTP) immediately. -
2
Point your SDK at localhost
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 OTEL_EXPORTER_OTLP_PROTOCOL=grpcWorks with Go, Python, Node.js, Java, Rust — any OTel-compatible SDK.
-
3
Watch your traces
Spans appear in the terminal UI as they arrive. Navigate with arrow keys, press
enterto inspect a trace,sfor statistics.