The observability platform that fits in a single binary

Free and open source. Drop in a single executable, point your services at it with OpenTelemetry, and get a full observability UI with traces, metrics, logs, and dashboards. No external database. No infrastructure to manage.

Get Started Live Demo View on GitHub
docker run -p 4318:4318 -p 3000:3000 -p 8081:8081 adham99/nabatshy ⎘ copy

No cluster required

Most observability stacks need Grafana, Prometheus, and a dedicated storage backend before you see a single trace. Nabatshy takes a different approach.

📦

Zero infrastructure

OTLP ingestion, trace storage, query engine, and UI all ship as a single Go binary with an embedded DuckDB database. One file on disk.

🔭

OpenTelemetry native

Accepts standard OTLP over HTTP (JSON or Protobuf). Works out of the box with any OpenTelemetry SDK: Go, Node.js, Python, Java, and more.

Up in under a minute

Run the binary, point your OTel SDK at localhost:4318, and open the UI at localhost:8081. That's it.

See it in action

Traces: search and filter distributed traces
Traces: span details panel
Traces: span timeline with system metrics
Traces: correlated logs for a trace
Dashboards: latency, throughput and error charts
Dashboards: top 20 slowest traces
Metrics: OTel metrics list
Metrics: individual metric detail
Logs: log aggregation with full-text search
Cron: scheduled data retention jobs

Everything you need

Built for production apps with moderate traffic, local development, side projects, and internal tools.

Trace search & filtering

Search by service, operation, duration, and attributes with real-time percentile charts.

Span timeline visualization

Flame-graph-style span bars with proportional widths, error highlighting, and click-to-inspect.

Service metrics & percentiles

P50 / P90 / P99 duration charts, error rates, and throughput trends per service and endpoint.

Log aggregation with full-text search

Ingest OTLP logs alongside traces. Search log bodies with DuckDB's built-in FTS extension.

OTel metrics

Visualize OTLP metric data points alongside traces for full observability in one place.

Cron-based data retention

Schedule SQL queries to delete old spans and logs and keep your DuckDB file lean.

Running in four steps

Build once, run anywhere. The UI is embedded into the binary at compile time with no separate deploy needed.

1

Clone the repo and install frontend dependencies.

2

Build the UI. Output is embedded into the Go binary.

3

Build & run the binary. Three servers start concurrently.

4

Point your SDK at http://localhost:4318 and open http://localhost:8081.

# 1. Clone
git clone https://github.com/adhamsalama/nabatshy
cd nabatshy

# 2. Build the UI
cd ui && npm install && npm run build && cd ..

# 3. Build & run
go build -ldflags="-s -w"
./nabatshy

# Servers now running:
#   OTLP collector → :4318
#   Query API      → :3000
#   UI             → :8081

# Or use the pre-built Docker image:
docker run -p 4318:4318 -p 3000:3000 -p 8081:8081 \
  -v $(pwd)/data:/data adham99/nabatshy