1. Documentation
  2. Configuration
  3. Telemetry
ReadmenpmGitHub
  • Introduction
  • Quickstart
  • Configuration file
  • Monitors
  • Checks and scheduling
  • Notifications
  • Incidents and maintenance
  • Subscribers
  • Metrics and badges
  • Identity and appearance
  • Telemetry
  • The check run
  • Uptime and history
  • Automatic incidents
  • Notification delivery
  • Public subscriptions
  • StatusPage component
  • Themes
  • UI primitives
  • Colour mode
  • React Router
  • Next.js
  • Astro
  • SQLite
  • Cloudflare D1
  • PostgreSQL
  • Schema and migrations
  • Cloudflare Workers
  • Vercel
  • Self-hosting
  • API overview
  • Status endpoints
  • Incident and maintenance endpoints
  • Subscriber endpoints
  • Badges, feeds and metrics
  • Admin endpoints
  • CLI commands
  • Package exports
  • Security
  • Troubleshooting

Telemetry

What the anonymous adoption ping contains and how to turn it off.

Heyo Status can send one anonymous adoption ping. It exists to show which runtimes, databases and features are actually used, and it is designed so that nothing identifying can be in it.

ts
telemetry: false,                                  // offtelemetry: true,                                   // on, default endpointtelemetry: { enabled: true, endpoint: "https://telemetry.acme.com/status" },
enabledbooleanoptional

Defaults to true.

endpointstringoptional

Defaults to "https://telemetry.heyo.sh/v1/status". Must be an HTTP(S) URL.

Opting out

Any of these disables it, and environment opt-outs always win over the configuration flag:

MethodEffect
telemetry: falseDisabled in configuration.
HEYO_TELEMETRY_DISABLED=1Disabled by environment.
DO_NOT_TRACK=1Disabled by the standard opt-out variable.
CI=trueAutomation is not adoption.
NODE_ENV=testTest runs never report.

While telemetry is enabled, heyo-status dev prints a single line saying so:

text
Anonymous usage telemetry is enabled. Opt out with HEYO_TELEMETRY_DISABLED=1 or telemetry: false.

What is sent

The ping is only sent by heyo-status dev — not on requests, not on check runs, not from a deployed server. The payload is:

json
{  "schema": 1,  "package": "@heyo-sh/heyo-status",  "version": "0.2.0",  "projectId": "4f2b1ac09d7e3c58",  "runtime": "bun",  "runtimeVersion": "1.4.3",  "platform": "darwin",  "monitors": {    "total": 6,    "private": 1,    "groups": 3,    "byType": { "http": 4, "ssl": 0, "tcp": 1, "dns": 1, "composite": 0 }  },  "features": {    "theme": "slate",    "mode": "system",    "incidents": true,    "maintenance": true,    "subscribers": false,    "badges": true,    "prometheus": false,    "latencyChart": true,    "notificationChannels": ["slack", "webhook"],    "displayDays": 90,    "retentionDays": 90  }}

projectId is the first eight bytes of SHA-256("heyo-status:" + siteUrl || title) — a stable, irreversible hash used only to avoid counting the same project twice.

What is never sent

  • Monitor names, URLs, hosts, ports or request headers
  • Incident and maintenance content
  • Subscriber addresses or webhook URLs
  • Tokens, secrets, connection strings or webhook endpoints
  • Check results, uptime values or latencies
  • IP addresses or any visitor data

Failure behaviour

reportTelemetry() resolves to false instead of throwing, has a two-second timeout, and is never awaited on a path that matters. Telemetry cannot break a check run, a request or a CLI command.

Inspecting it yourself

ts
import { createTelemetryPayload, isTelemetryEnabled } from "@heyo-sh/heyo-status";import { statusPage } from "./heyo-status.config";console.log(isTelemetryEnabled(statusPage));console.log(await createTelemetryPayload(statusPage));

Point endpoint at your own collector if you want the same adoption signal for an internal fleet of status pages.

Related

  • Security checklist
  • Configuration reference
Identity and appearance< PreviousThe check runNext >

Powered by heyo

On this page

Opting outWhat is sentWhat is never sentFailure behaviourInspecting it yourself