Open source

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, consent
  • Sources/StatsCloudflare — sink for ingest, query helper for reads
  • Sources/StatsTesting — recording sink, manual clock, fixed ids
  • docs/schema.md — the wire contract, v1
  • backends/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

SELF-HOSTEDHOSTED
Ingest, read API, rollups, retentionSame, plus the dashboard
Your Cloudflare bill$10 a month
Keys via the admin CLISelf-serve setup wizard
Read-outs: build your ownRead-outs on every screen

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.