One Bun-compiled binary — OTLP ingest, an embedded ClickHouse, a query API, and the dashboard — running on 127.0.0.1. The same query engine and UI as hosted Maple, with no cloud, no Tinybird, and no auth.
curl -fsSL https://maple.dev/cli/install | sh maple start 🍁 maple · local mode● listening on http://127.0.0.1:4318OTLP/HTTP POST /v1/{traces,logs,metrics}query POST /local/querydashboard https://local.maple.devdata ~/.maple/datapid 48213 · stop with `maple stop`
Point any OTLP exporter at localhost, open the dashboard, and explore traces, logs, and
metrics — no account, nothing to deploy. Everything is single-tenant: every row is stored
under org_id = "local".
A single Bun-compiled `maple` executable bundles OTLP ingest, the query API, and the dashboard. No runtime to install, no second language — it talks to ClickHouse in-process via libchdb.
Everything runs on 127.0.0.1 — no cloud workspace, no account, no rate limits. Data persists in ~/.maple/data between runs, and `--offline` serves the UI from the binary with no internet at all.
The same column store that powers hosted Maple, running in-process as chDB. Traces, logs, and metrics are queryable in sub-second time the moment they land.
Speaks OTLP/HTTP on POST /v1/{traces,logs,metrics} — the protocol every OpenTelemetry SDK already exports. Point your app at :4318; no exporter changes, no auth header.
One process owns the chDB connection and hosts OTLP ingest, the
/local/query API, and the dashboard
— all on one port. The CLI and the UI read your data over the very same HTTP contract.
/local/query HTTP contract — a complete loop that never leaves loopback.
Hosted Maple's UI, served straight from your binary. Every view below runs against the
local /local/query API reading your
embedded store — no data leaves the machine.
Search spans by service, duration, or error, then drill into any trace for its complete waterfall and the log lines emitted alongside it.
Filter by service, severity, text, or trace ID — or run
log-patterns to cluster lines into
templates and surface the noisiest sources at a glance.
Dependency edges with call counts, error rates, and latency — reconstructed from the spans you've ingested, entirely on your machine.
The same binary is also a query CLI. Every command runs against the running server and
prints JSON by default — add --format
table for an aligned table, or --debug to see the compiled SQL.
maple services throughput, error rate, P95 per service maple diagnose <svc> health, top errors, recent traces & logs maple service-map dependency edges with call & error rates maple top-ops <svc> operations ranked by a metric maple traces search spans by service, duration, error maple trace <id> full span tree + correlated logs maple slow-traces the slowest traces with duration stats maple errors error groups by fingerprint maple error <hash> one group: sample traces + timeseries maple logs search by service, severity, text, trace maple log-patterns cluster logs into noisy templates maple timeseries time-bucketed latency, error rate, apdex maple breakdown top-N by service / span / status / method maple compare two windows side by side (regressions) maple metrics list available metrics maple attributes keys discover attribute keys & values maple query "<sql>" raw ClickHouse SQL (local only)
The installer detects your OS and architecture, downloads the matching bundle from the
latest GitHub release, verifies its checksum, and drops the two files —
maple and
libchdb — into
~/.maple/bin, then symlinks
maple onto your PATH.