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.
Most observability stacks need Grafana, Prometheus, and a dedicated storage backend before you see a single trace. Nabatshy takes a different approach.
OTLP ingestion, trace storage, query engine, and UI all ship as a single Go binary with an embedded DuckDB database. One file on disk.
Accepts standard OTLP over HTTP (JSON or Protobuf). Works out of the box with any OpenTelemetry SDK: Go, Node.js, Python, Java, and more.
Run the binary, point your OTel SDK at localhost:4318, and open the UI at localhost:8081. That's it.
Built for production apps with moderate traffic, local development, side projects, and internal tools.
Search by service, operation, duration, and attributes with real-time percentile charts.
Flame-graph-style span bars with proportional widths, error highlighting, and click-to-inspect.
P50 / P90 / P99 duration charts, error rates, and throughput trends per service and endpoint.
Ingest OTLP logs alongside traces. Search log bodies with DuckDB's built-in FTS extension.
Visualize OTLP metric data points alongside traces for full observability in one place.
Schedule SQL queries to delete old spans and logs and keep your DuckDB file lean.
Build once, run anywhere. The UI is embedded into the binary at compile time with no separate deploy needed.
Clone the repo and install frontend dependencies.
Build the UI. Output is embedded into the Go binary.
Build & run the binary. Three servers start concurrently.
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