Acknowledgements¶
nilalytics is a thin layer over remarkable open‑source work. It is standing on the shoulders of giants — deep thanks to everyone who built and maintains the projects below. 🙏
Built on¶
- DuckDB — the in‑process analytical engine at the core, by DuckDB Labs and the DuckDB Foundation.
- DuckLake — the SQL‑native lakehouse format (catalog + Parquet) that stores every event. Its data inlining is what makes streaming ingestion cheap and fast.
- Quack — DuckDB's client–server protocol, which serves the catalog to readers and to DuckDB‑WASM in the browser.
- duckdb‑otlp by @smithclay — the embedded OTLP ingest server that lands telemetry straight into DuckLake, and does post‑seal compaction.
- OpenTelemetry (CNCF) — the vendor‑neutral standard every nilalytics client speaks.
- Grafana Faro by Grafana Labs — the web RUM SDK and its OTLP transport.
- DuckDB
httpfs/azureextensions — object‑storage access across S3, GCS, R2, and Azure / ADLS. - MinIO — S3‑compatible object storage used for local development.
Inspiration¶
nilalytics wouldn't exist without prior art that proved the shape of this idea:
- canardstack by @smithclay — querying OpenTelemetry data stored in DuckLake with a Quack catalog.
- icelight by @cliftonc — first‑party analytics.js → Iceberg on R2 → DuckDB.
- stratif.io by Carlo Abi Chahine — open‑source, warehouse‑native product analytics on DuckDB.
- Definite — for the clear writeup on using DuckDB + Quack as the DuckLake catalog.
Dependencies¶
Runtime (Python)¶
| Package | License | Used for |
|---|---|---|
| duckdb | MIT | engine + all extensions |
| requests | Apache‑2.0 | HTTP (emitter, gateway forwarding) |
| pytz | MIT | timezone support for time‑travel queries |
DuckDB extensions (auto‑installed at runtime)¶
ducklake · quack · otlp · httpfs · azure
Documentation¶
- MkDocs and Material for MkDocs by @squidfunk (Martin Donath).
Licensing¶
nilalytics is released under Apache‑2.0. Every dependency and referenced project is distributed under its own license — please review each one for your use case.