How we count
We separate our numbers into two kinds, and label which is which: verified means a third party controls it and you can check it yourself; self-reported means we measure it, and we tell you precisely how.
Verified verified — numbers we don't control
These come from platforms we don't own, so we can't inflate them. They're the anchor for everything else.
- GitHub release downloads — the sum of
download_countacross every release asset. The homepage figure is this total. Verify it yourself, two ways (both bypass us):- An independent render by shields.io (which we don't control) — this badge queries GitHub live:
— it should match the number on our homepage.
- The raw source:
GET /repos/vyomi-cloud/appliance/releases— each asset'sdownload_countis right there in the JSON; sum them and you get our figure.
- An independent render by shields.io (which we don't control) — this badge queries GitHub live:
- GitHub stars — from the same public API (and visible on the repo page).
- Docker Hub pulls — the public pull count, minus a conservative owner/CI offset (default 250) so it reflects external pulls, not our own release pipeline. Cross-check on the Docker Hub page.
Self-reported install funnel self-reported
On first boot each appliance sends one anonymous record — no IP, no PII. We measure it as follows:
Deduplicated per install
Each appliance has a stable, SHA-256-derived install_id (24 hex chars, no PII). It is the primary key of the
record, so re-registrations on every boot update the same row — we count installs, never boots.
Internal / dev installs excluded
Our own development, CI, and demo installs are suppressed from the public counts (configured allow-list,
VYOMI_INTERNAL_INSTALL_IDS) — the same principle as the Docker owner-offset above. The suppressed count is
exposed as excluded_internal so the number stays auditable.
The funnel
- Downloaded → fired by the package-manager post-install step.
- Installed → the simulator container is healthy (appliance boot hook).
- Activated → a license was applied (paste-key or device flow).
- Active (30 days) → installs whose last check-in was within 30 days — a live, churn-honest number, not cumulative-forever.
Countries & the globe
Country is a two-letter code from Cloudflare's edge (CF-IPCountry), or the appliance's own country hint when it
isn't behind Cloudflare. We never read or store the source IP — only the country string. Unknown countries (??)
are excluded from the map so it doesn't render a false dot at (0,0).
Audit it yourself
The aggregate is a public, unauthenticated endpoint — inspect the raw numbers any time:
/api/stats/installs— the install funnel, countries, theverifiedanchor block, andexcluded_internal.- GitHub Releases — cross-check every download number.
If a number can't be backed by one of the sources above, we don't show it.