v0.9 · OTLP gRPC + HTTP
Thrum is distributed tracing without the distributed system. One binary, OpenTelemetry in, a fast UI out. Built for teams too small to run Jaeger and too serious to guess.
macOS · Linux · Docker · 28MB · MIT licensed
tax.lookup called 14× sequentially inside pricing.compute. Batching would save ~190ms.28MB
single binary
40MB
RAM at 1k spans/s
< 2ms
p99 ingest overhead
0
config files required
Why it’s small on purpose
Collector, storage, and UI in a single 28MB file. No Kafka, no Elasticsearch, no Helm chart. `thrum serve` and you're tracing.
Runs comfortably on the smallest instance you have — or on your laptop next to the thing you're debugging.
Speaks OTLP over gRPC and HTTP. If you're already instrumented, point the exporter at Thrum and nothing else changes.
Find traces by what happened in them: `where span.db.rows > 10k and duration > 200ms`. Not just by service name.
Keep 1% of the boring traces and 100% of the slow ones. Sampling rules are three lines of config and reload live.
Your data stays on your disk. The free tier isn't a trial — it's the product, without a login.
Instrument
Thrum ships SDKs for Node, Go, Python, and Rust, but you don’t need them — any OpenTelemetry exporter works. Point it at localhost and traces appear as they happen.
// app.ts
import { thrum } from "@thrum/node";
thrum.start({ service: "checkout" });
// that's it — http, pg and redis are traced
// open http://localhost:4318
Pricing
Team
$29 per month, flat
We host it. Unlimited seats, 30-day retention, SSO, alerts to Slack. One price, not per-seat.
Start 14-day trialSelf-hosted+
$490 per year
Local, plus long-term retention, RBAC, and a human who answers email within a day.
Talk to us