The SDK and the backend are MIT. The dashboard is what we sell.
You can read every line that decides what is collected, run the whole pipeline in your own Cloudflare account, and leave whenever you want. That is the point of publishing it, not a trial balloon.
github.com/awizemann/swift-stats →What is in the repo
Sources/Stats— the emitter: client, durable queue, dispatcher, identity, sessions, consentSources/StatsCloudflare— sink for ingest, query helper for readsSources/StatsTesting— recording sink, manual clock, fixed idsdocs/schema.md— the wire contract, v1backends/cloudflare— Worker, D1 migrations, rollup cron, admin CLI, conformance suite
The hosted dashboard runs your code path
Every number on the hosted dashboard is computed by the same module that serves the public read API — imported, not copied, and pinned to a fixed commit rather than a branch.
A dashboard whose numbers disagree with the API is worse than one that is down, because nothing tells you which is lying. So there is no second implementation to drift.
Self-hosted vs hosted
Contributing
Issues and pull requests are welcome. Two rules save everyone time: the schema comes first — a change to the wire format changes docs/schema.md in the same PR, and a breaking one needs a v2 rather than an edit to v1. And no new dependencies in Stats.
MIT licensed. Copyright © 2026 Alan Wizemann.