VECTORHEAVY

VectorHeavy · Air Traffic Control Simulator

What leaves your browser

The game itself runs on your machine. Five things go out over the network, and one of them sends more than you would guess. All five are below, in plain terms, and then what we keep once it arrives.

Page counts

Every page here loads a GoatCounter script from vectorheavy.com, self-hosted on our own server. It sends the page path, the referrer, the page title, and your screen size. There are no cookies. Your IP address and user agent are salted and hashed so repeat visits can be counted as one visitor, and the raw values are not stored. (That is GoatCounter's own copy. Our server is separate and keeps your raw IP with anything you submit — see below.)

The game adds counters of its own. They are counters in the literal sense: a name is incremented, and nothing about you rides along with it. What is counted: that a session started and which airport you picked, that it ended and roughly how long it ran, whether you were new or returning, how the radio turned out and how long it took to be ready, the sim speed you used, and — added 2026-07-31 — roughly how many commands you issued (a bucket, not a number) and how far into the shift your first one came.

That last pair is there for one reason, and it is worth saying plainly. Most shifts end in under five minutes, and we could not tell whether those players never worked an aircraft or worked several and left anyway. Those call for opposite fixes. No command text, no callsign, no aircraft, and no identity is recorded — only how many and how soon.

High scores, and what a record carries

Beat your own previous best at an airport and the game posts that record to our server by itself. No prompt, no notice. It fires on a personal best, not only on a global one. What goes with it:

  • a stable anonymous player id, generated in your browser
  • your callsign, the score, and the airport
  • a context block: browser user agent, the sim seed, a session code, your theme, and the build commit
  • your IP address, stored in full, exactly as sent (what that means)
  • the full session tape: the seed plus your complete command log, up to about 60 KB

That last line deserves saying straight. The tape is a keystroke-level record of the session you just played: every command you issued, in order, with its timing. It exists because the sim is deterministic. Feed the tape back in and it reproduces that session move for move and lands on the same score, which is how a leaderboard claim gets audited instead of taken on faith. A score with no tape behind it is a number somebody typed.

The radio voices

The voices are a Kokoro model, 88.6 MB, fetched from huggingface.co and cached by your browser after that, so it happens once. Individual voices are about 510 KB each and come down as they are needed. Hugging Face therefore sees your IP address and user agent. If it is unreachable, the same files come from vectorheavy.com/models instead. Leave the radio off and none of it is fetched. WHEN it comes down is worth being exact about, because it is not always the moment you arm the radio. On a desktop browser the download may start earlier, while you are still on the lobby choosing a field, so the radio is ready by the time you take the position. That only happens once you have been on the page a few seconds or reached for something on it, never the instant you arrive, and never if you have muted the radio or your browser is set to save data. On iPhone and iPad no model is fetched at all: voices are not available on those devices, so the radio plays as text and nothing goes to Hugging Face.

The email box

If you type an address into the notify box and press the button, it goes to our server so we can mail you when the next thing ships. Nothing sends it for you, and nothing else on the site asks you for anything about yourself.

Bug reports

Sending a bug report is something you start: you open the box, type it, and press send. A checkbox there attaches your session tape, checked by default and yours to uncheck, and it rides along only with bug reports; the report itself carries the same context block a record does, browser user agent, sim seed, session code, theme, and build commit, plus your email if you type one.

Your IP address

Our server keeps it. Every high score, every bug report, and every address typed into the notify box is stored with the IP address it arrived from, in full, exactly as sent. It is not hashed and not shortened, and it stays with the row.

Two things about that are worth being exact on, because the sentence about the page counter further up says the opposite and it would be easy to read it as covering everything. It does not: the salting and hashing described there is what GoatCounter does with its own copy. Our server is a separate thing and it keeps the raw value. And because a personal best is posted by itself, with no prompt, playing the game is enough for your IP address to reach us. You do not have to fill in anything.

What it is for: refusing floods, and telling one person apart from a script when something is being abused. It also appears in the notification mail that reaches us when a record is set. It is not sold, not shared, and not used to build a profile of you. There is no automatic deletion today, which is a thing to fix rather than a policy to defend, and this page will say so when it changes.

What is not here

No web fonts loaded from someone else's server, no ad network, and no third-party tracker beyond the page counter above. Nothing is sold or handed on. The only two places anything goes are our own server and Hugging Face for the voice model.


Credits and licenses

  • Voices: Kokoro-82M v1.0 ONNX, run in the browser through kokoro-js and Transformers.js. The model weights and both libraries are Apache 2.0.
  • Scope rendering: PixiJS, MIT.
  • Airports, fixes, procedures, and phraseology: published FAA products, the FAA CIFP cycle, FAA Order JO 7110.65, and the AIM. Works of the US government, in the public domain.

VectorHeavy is an independent game, not affiliated with, sponsored by, or endorsed by the FAA. Airport and procedure data are derived from publicly available FAA products, and where the game simplifies a real rule the Fidelity Ledger says so and names the paragraph it departs from.

If anything on this page is wrong, out of date, or unclear, write to hello@vectorheavy.com and it gets fixed.