nilalytics¶
Serverless, self‑hosted realtime analytics for web and mobile — on your own 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 data warehouse. No per‑event fees. No data leaving your infrastructure.
Why nilalytics¶
- One SDK per platform. Grafana Faro on the web, OpenTelemetry SDKs on mobile and backend services — all speak OTLP, so you capture user actions and whether the backend calls behind them succeeded. See Backend activity.
- Runs on any cloud. S3, MinIO, Google Cloud Storage, Cloudflare R2, or Azure / ADLS Gen2 — switch with one env var.
- No small‑files problem. DuckLake data inlining keeps recent events in the catalog (hot) and flushes older data to Parquet (cold), so streaming stays fast and cheap.
- Product analytics built in. Funnels, retention, user paths, errors, traces, metrics.
- Recommendation‑ready. A curated, per‑user
user_eventstable — typed columns, clustered by person — makes "one user's history" a fast read for ML/recommendations. - Cross‑device identity. Stitch a person across phone + web, pseudonymously.
- Secure by default. Token‑authenticated ingest, read‑only query authorization, and a hardened public gateway with short‑lived tokens, CORS, and optional TLS.
How it fits together¶
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| SRV
SRV --> LAKE[("DuckLake<br/>DuckDB + Quack catalog<br/>+ Parquet on object storage")]
LAKE --> READ["Reads: DuckDB / DuckDB-WASM<br/>over Quack"]
Where to go next¶
- New here? Start with Install then the Quickstart.
- Adding a website? See Web (Grafana Faro).
- Adding a mobile app? See Mobile (OpenTelemetry).
- Want the big picture? Read the Architecture.
Status
nilalytics builds on some young components (DuckLake, and DuckDB's Quack protocol, which is beta until DuckDB 2.0). It is production‑capable for single‑tenant / moderate scale today; see Deployment for the honest limits.