Telemetry
create-avalanche-app counts scaffolds anonymously so we can show that AvaKit gets used. Here is exactly what that means, and how to turn it off.
Turn it off
Any one of these is enough, and they persist:
$ export AVAKIT_TELEMETRY_DISABLED=1 # or DO_NOT_TRACK=1
npm create avalanche-app@latest my-app -- --no-telemetryChanged your mind? --telemetry opts back in. It is also off automatically in CI — a robot's scaffold is not adoption, and counting it would let our own test suite inflate the number we publish.
Why we collect anything
AvaKit is asking the Avalanche ecosystem — Team1 grants, infraBUIDL(AI), Retro9000 — to back it, and every one of those asks the same question: does anyone actually use this? npm's download count is public but it cannot tell a human from a CI mirror, and it cannot say which template anyone picked. Roughly a hundred anonymous counters answer both, and they also tell us which templates to keep building.
What is sent
One small JSON body per scaffold, and nothing else. In full:
{
"event": "scaffold",
"anonymousId": "6f1d1b1e-0b3a-4c2f-9c5e-1a2b3c4d5e6f",
"template": "nft-mint",
"wallet": "injected",
"chain": "fuji",
"pm": "pnpm",
"ok": true,
"cliVersion": "0.3.0",
"platform": "darwin",
"nodeMajor": "22"
}anonymousId is a random UUID generated on your machine the first time you run the CLI and stored in ~/.config/avakit/config.json. Nothing about your machine, your network, or you is derived from it — it exists only so we can tell "ten people ran it once" apart from "one person ran it ten times". Delete that file and you are a new person to us.
What is never sent
- Your project name, or any file path
- Any code, any file contents, any contract address
- Any environment variable, key, or credential
- The text of an error — a failure reports only a coarse
errorKind(dir-existsorscaffold-failed), because error messages carry paths - Your IP. The collector is written never to store one
SHA-256(secret salt + your IP + today's date). That row is deleted the next day and cannot be walked back to an IP without the salt. Your anonymousId is hashed the same way, so even the random id never lands in the database.It cannot break your scaffold
Telemetry runs beside the work, never in front of it. If the collector is down, slow, or blocked by your firewall, the request is destroyed after 1.5 seconds and the CLI carries on as if nothing happened. A failure to report has never failed a scaffold and is not able to.
Check for yourself
Don't take our word for any of this. The client is about 200 lines in src/telemetry.ts, the collector is in services/telemetry, and everything we count is public at avakit.dev/stats. You can also just watch it: point the CLI at your own machine and read the request.
$ AVAKIT_TELEMETRY_URL=http://localhost:8787/e \
npm create avalanche-app@latest my-app -- --yesHonesty about the numbers
Because this is self-reported by a client we don't control, and because opting out is easy and CI never counts, our scaffold count is a floor rather than a measurement — and a determined person could inflate it. We publish it next to the npm download count for exactly that reason: one is spoofable and specific, the other is independent and blunt. Treat both as evidence, not as audited figures.
