nilalytics
The batteries‑included, OpenTelemetry‑native way to run your own web & mobile product analytics — on a DuckLake in your object storage.
nilalytics collects product events, errors, and performance data over OpenTelemetry (OTLP), stores them in a DuckLake lakehouse on any major cloud's object storage, and serves sub‑second reads over DuckDB's Quack protocol — no warehouse, no per‑event fees, no data leaving your infrastructure.
- Web, mobile and backends: Grafana Faro (web), OpenTelemetry SDKs (mobile + server) → OTLP. Record user actions and whether the backend calls behind them succeeded — in one lake.
- Runs on any cloud: S3, MinIO, Google Cloud Storage, Cloudflare R2, or Azure / ADLS Gen2.
- Small files solved: DuckLake data inlining keeps streaming writes fast and cheap.
- Batteries included: funnels, retention, errors, traces, metrics, cross‑device identity.
- Secure by default: token‑authenticated ingest, read‑only query authz, a hardened public gateway.
📖 Full documentation: https://angelerator.github.io/nilalytics/
Install
pip install nilalytics
Also works with
pipx install nilalyticsoruv tool install nilalytics. Bleeding edge from source:pip install git+https://github.com/Angelerator/nilalytics.
60‑second local demo
# 1. object storage (local MinIO)
minio server .minio-data --address 127.0.0.1:9100 --console-address 127.0.0.1:9101 &
mc alias set nila http://127.0.0.1:9100 minioadmin minioadmin
mc mb --ignore-existing nila/nilalytics
# 2. run the pipeline
nilalytics server & # ingest + Quack catalog
nilalytics gateway & # public ingest gateway (CORS + tokens)
# 3. send + query
nilalytics emit --count 200 --persons 5
nilalytics query report
Architecture
flowchart LR
W["Web · Grafana Faro"] -->|OTLP + token| GW
M["Mobile · OpenTelemetry"] -->|OTLP + token| GW
GW["Ingest Gateway<br/>CORS · tokens · TLS"] --> SRV["OTLP server<br/>(duckdb-otlp)"]
B["Backend services · OpenTelemetry"] -->|"OTLP · private net"| SRV
SRV --> LAKE[("DuckLake<br/>DuckDB + Quack catalog<br/>+ Parquet on object storage")]
LAKE --> READ["Reads: DuckDB / DuckDB-WASM<br/>over Quack"]
Acknowledgements
nilalytics stands on the shoulders of giants. Huge thanks to DuckDB, DuckLake and Quack (DuckDB Labs / DuckDB Foundation), duckdb‑otlp (@smithclay), OpenTelemetry (CNCF), Grafana Faro (Grafana Labs), and MinIO — plus the projects that inspired it: canardstack, icelight, and stratif.io.
Full credits and dependency list: Acknowledgements.
License
Apache‑2.0 © Angelerator
Metadata
Release files for nilalytics 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nilalytics-0.3.0.tar.gz | 67.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nilalytics-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.7 kB
Release files / nilalytics-0.3.0.tar.gz
| Download URL | nilalytics-0.3.0.tar.gz |
|---|---|
| Size | 67.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7052c40b9ecdc566c9bab0be9801270fe52b47661e0d694c73982b7f3eb971dc
|
|
BLAKE2b-256 checksum How to use checksums |
008128f47082cd72e8bb4fb438994888771b4d156d1f08e8f080c4df668a9e08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / nilalytics-0.3.0-py3-none-any.whl
| Download URL | nilalytics-0.3.0-py3-none-any.whl |
|---|---|
| Size | 37.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
717d1e31f5b0fb8dc97cf61980b03b498d82ded5e1b719861e88abc2e6079b77
|
|
BLAKE2b-256 checksum How to use checksums |
ce3bd2f5e13cfd195361a663826b5f9cf15d95da654cb53f65126a6f46d10448
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency log