Privacy
What the game stores, and where
This page describes what the code actually does, feature by feature, rather than covering every case a template would. If something here does not match what you see, that is a bug worth reporting.
Written from the code, not by a lawyer. Everything below was checked against the actual game and server source. It is an accurate description of what runs, not a reviewed legal instrument.
The short version
You can play the whole game without an account, an email address, or a name. There is no analytics and no tracking script anywhere on this site or in the game — no third-party measurement tag of any kind is loaded, and no advertising network is involved. Nothing here is sold or shared for marketing.
The random ID
The first time you open the game or the site, your browser generates a random UUID and saves it in local storage. It is not derived from anything about you — not your IP address, not your hardware, not your browsing — and it is generated on your machine, not handed out by the server.
That ID is what everything else below is keyed to. The game and the site deliberately share one ID, so a purchase made on either shows as owned on both. Clearing site data in your browser deletes it, and you simply get a new one — an unavoidable side effect is that anything held under the old ID becomes unreachable from that browser unless you had signed in.
What stays in your browser
Your run history, achievements and lifetime statistics are written to your browser's local storage first, and the game reads them from there. Run history is also kept locally as a playtesting aid — it is capped at the most recent runs unless you own the store's unlimited history item.
What is sent to the server
Progress is mirrored to the server against your random ID so it survives on another device if you choose to sign in: each completed run's difficulty, waves, elapsed time, kills, gold, losses and whether you won, plus your achievements and lifetime totals. No per-session log, no page-view record.
The daily reward is the one thing that only ever lives on the server: the date you last claimed a bonus and how many days in a row you have claimed. Two values, no history. A streak your own browser could edit would not be a streak — but it is still a fact about when you play, so it is named here rather than left implied.
Everything else leaves your machine only when you do the thing that sends it:
- Sending a bug report — the title and description you type, the address of the page you sent it from, and your random ID so you can read your own reports back later. Sent from inside the game, it also carries the technical context a developer would otherwise have to ask for: mission, wave and difficulty, whether the run had started, whether the game was paused or over, game speed, the low-graphics setting and whether you or the game chose it, your smoothed frame rate, your window size and pixel ratio, whether you are on touch or mouse, your browser's user-agent string, and — when your browser exposes it — your GPU's name.
- Submitting a leaderboard run — the display name you type (choose anything; it is shown publicly), and that run's mission, difficulty, waves, time, kills, gold and losses. Leaderboard rows are append-only by design — nothing quietly edits or prunes them during normal play. A row is removed only by hand, or automatically if you delete your account (see "Deleting your data" below).
- Signing in with Google — optional, and only if you click it. Google's sign-in script loads only on the pages that offer it, and only when the site is configured for it. Google returns a signed token; the server verifies it and stores your Google account identifier, email and display name against the random ID you already had, which is what lets your progress and purchases follow you to another device.
- Buying something — payment is handled entirely by Stripe on Stripe's own pages. Card details never touch this server. What is stored here is which item you own, the transaction record, and Stripe's own notification about the payment, which includes whatever billing details Stripe collected at checkout. Ownership and refund records are kept rather than deleted, so that a refunded item can be bought again and the history stays explainable. Stripe's own handling of your payment is covered by Stripe's privacy policy, not this one.
See it for yourself
You do not have to take that list on trust. Your account page reads back what is actually held against your ID — purchases, achievements and lifetime statistics, your daily streak, your leaderboard placings, and the bug reports you have sent. No sign-in needed; it asks about the random ID your browser already has.
Deleting your data
Clearing site data in your browser removes the local copy — the random ID, run history, achievements and statistics — immediately and without asking anyone.
For the server side: if you have signed in with Google, open your account page while signed in and use "Delete my account and all data" — it asks you to sign in with Google a second time to confirm, then erases everything held against that account immediately. Purchase and refund records are the one exception that may have to be retained for accounting.
Playing anonymously (no Google sign-in) has no self-service option, because there is nothing to prove the request is yours beyond the random ID itself — anyone who saw that ID could otherwise ask for it to be deleted. For that case it is still done by hand: ask, quote the ID shown on your account page, and everything held against it is removed.
Where to ask: use the 🐛 form on the contact page. It reaches the developer directly and is a working channel for a deletion request — no account or email address of your own needed.
Changes to this page
The game is in active development, so this page changes when the code does. It is kept in the same repository as the game and updated in the same commit as whatever changed the data being described.
Something here look wrong?
If the page and the game disagree, the game is the bug. Tell me which.
Get in touch