A distributed traces database
that runs in your browser.
SQLite for observability — embedded, serverless, zero network calls.
Store hundreds of thousands of OpenTelemetry spans at <30 bytes/span using columnar compression and dictionary encoding. Query with structural operators, explore with bloom-accelerated lookups, and visualize waterfalls — all client-side. No backend required.
How It Works
o11ytracesdb stores OpenTelemetry spans in a columnar layout optimized for the browser. Dictionary encoding collapses repetitive strings (service names, operations, HTTP methods) to 8–16 bit integers — a 90%+ reduction. Nested set encoding turns parent-child relationships into integer indices in typed arrays, making structural queries a simple array comparison instead of tree traversal. Bloom filters accelerate trace ID lookups to O(1).
Not a backend replacement. o11ytracesdb sits after Tempo, Jaeger, or Datadog — inside your UI. It complements server-side stores by eliminating round-trips: brush-select a metric spike, instantly filter correlated traces and logs in local memory, zero network calls.
The Problem
Every click round-trips
Existing observability UIs re-fetch data from the server on every pan, zoom, and filter. Click an exemplar? That's a network call to Tempo. Drill into a trace? Another call.
Browsers crash at scale
JS object overhead of 30–50 bytes per data point means dashboards routinely OOM. Kibana and Grafana both struggle with large trace datasets in the browser.
Cross-signal is 3+ hops
Correlating a metric spike → traces → logs requires 3+ sequential API calls with server-side credentials. What should be instant takes seconds.
The fix: store spans in columnar typed arrays at <30 bytes each, index with bloom filters and nested sets, and query locally. Metric spike → correlated traces → filtered logs in one frame. Demo it yourself below ↓
Choose a Scenario
Select a pre-built trace scenario to generate, or configure your own. Each creates realistic distributed traces with multiple services, varying depths, and configurable error rates.
⚙️ Custom Configuration
What would you like to explore?
Your dataset is ready. Pick a path to dive deeper.
Storage Explorer
Inspect how traces are stored in a columnar layout: chunks, bloom filters, compression ratios, and detailed byte-level exploration.
Traces Explorer
Service health dashboard with RED metrics, automatic anomaly detection, and problematic trace ranking. Click a service or trace to drill into the waterfall.
Query Builder
Build TraceQL-like queries with real-time preview. Select spans by service, name, status, and duration — then add attribute filters, structural predicates, and trace intrinsics.
Trace Waterfall
Click a trace above to view its waterfall.