Dionaea

Product analytics that only captures what you declare.

Dionaea is an open-source product analytics engine written in Rust. Every event must follow a schema you declare: anything not in the schema is dropped at the door, so user content is never collected by construction. It runs as a single binary on top of ClickHouse.

Follow on GitHub
schema.toml TOML
[events.checkout_started.fields.items]
kind = "count"
max = 1000
required = true

[events.checkout_started.fields.coupon]
kind = "text"
max = 32

[events.checkout_started.fields.region]
kind = "enum"
values = ["us-east", "eu-west"]

[traits.plan]
kind = "enum"
values = ["free", "pro"]
An example schema. Anything not declared here is not collected.
schema.toml TOML
[events.checkout_started.fields.items]
kind = "count"
max = 1000
required = true

[events.checkout_started.fields.coupon]
kind = "text"
max = 32

[events.checkout_started.fields.region]
kind = "enum"
values = ["us-east", "eu-west"]

[traits.plan]
kind = "enum"
values = ["free", "pro"]
Field kinds such as counts, bounded text, enums and durations.

A declared schema

Each site declares, in a TOML file, the events and identity traits it accepts. Events outside the schema are dropped and undeclared fields are stripped.

terminal Shell
dionaea schema check schema.toml
dionaea schema diff old.toml new.toml
dionaea schema json-schema > dionaea-schema.json
Commands that already work on local files.

Schema as code

The CLI validates the file, reporting problems by file, line and column, and compares two versions to tell whether a change is breaking. It also prints a JSON Schema for editor completion.

What it does

  • Screens, taps and app lifecycle are first-class events.
  • Sessions, error stacks, issues and release health, including crash-free sessions.
  • Measurements and performance sampling.
  • Erases a user from every table, on request.
  • Configurable retention and an API with roles (viewer, admin and owner) and per-site read tokens.
  • A single binary, on top of ClickHouse.

Where we are today: It is in early development: there is no usable release yet and no published package. The event format and the API are drafts and will only be declared stable with the first release.

Frequently asked questions

Not yet. It is in early development and there is no usable release. Today you can follow the code on GitHub.

Open source from the start

The code is available under the Apache License 2.0.

Explore the code