What is stored

Each game keeps four records and a count: best score, best rally, best time, best stage reached and how many times you have played it.

Alongside those, the site stores your favourites list, a recently played list capped at sixteen entries, a per-game play count, your sound and theme preferences, and tournament bracket progress for the games that have one.

Every key is prefixed 'ppa:' so it is identifiable, and the cookie policy page lists all of them along with a button that clears the lot.

How localStorage behaves

localStorage is per-origin and per-browser. Data written by this site is readable only by this site, only in the browser that wrote it, and only on that device.

It differs from a cookie in three ways that matter. It is never attached to network requests, so it does not travel anywhere. It is not readable by any other site. And it has no expiry — it persists until something removes it.

Those properties are why it is the right tool for game records and the wrong tool for anything that needs to be shared, synchronised or verified.

It can fail, and that is normal

Storage throws in a private window, when site data is blocked, when a quota is exceeded, and inside some embedded browsers. A game that assumed it always works would break in all of those cases.

Every read and write here is wrapped so a failure is silent. If storage is unavailable, the games play normally and simply do not remember anything between runs.

That is the correct trade. A game that crashed because a high score could not be saved would be a worse game than one that quietly continued, and the score is not the point of playing.

Why there is no global leaderboard

This is a static site. There is no server, no database and no account system, which means there is nowhere for a shared high-score table to live.

Even with somewhere to put it, there would be no way to verify a submitted score. Anything running in a browser can be inspected and modified by the person running it, so a leaderboard built this way would be a list of whatever people chose to send.

So there is no leaderboard, no player count, no download figure and no rating anywhere on this site. Any of those would be fabricated, which is why the fact-checking policy lists them explicitly as things we will not publish.

The one place the site orders games by something resembling popularity is the popular games page, and it is labelled carefully.

It orders by your own play counts and favourites in this browser, weighted three to one, falling back to editorial picks before you have played anything. The page says so directly.

Presenting one device's activity as a site-wide ranking would be exactly the kind of fabricated statistic the rest of the site avoids, so it is described as what it is.

What this means in practice

Some consequences worth knowing, because they surprise people.

  • Scores do not follow you between devices, or between browsers on the same device
  • A private window starts empty and keeps nothing after it closes
  • Clearing site data removes everything permanently, and we have no copy to restore
  • A tournament bracket resumed later must be resumed in the same browser
  • Nothing you do here is visible to anybody else, including us

Why local-only is not merely a limitation

It is genuinely a constraint imposed by the architecture, and it also happens to have advantages worth naming.

There is nothing to sign up for, nothing to remember and no data about you held anywhere. A visitor who never wants to think about privacy on a games site does not have to, because there is nothing to think about.

It also changes what the score means. Without a leaderboard, the only comparison available is against your own previous run — which is, for most people, the comparison that actually motivates.

Key takeaways

  • Each game stores best score, rally, time and stage, plus a play count, all prefixed 'ppa:'.
  • localStorage is per-origin and per-browser, never sent with requests and never expiring on its own.
  • Every read and write is wrapped, so blocked storage means the game forgets rather than breaks.
  • A static site cannot host or verify a leaderboard, so there is none and nothing pretends otherwise.
  • The popular page orders by your own local activity and says so explicitly.

Frequently asked questions

Where are my high scores stored?

In your browser's localStorage, on the device you played on. They are never uploaded and we have no copy of them.

Will my scores follow me to another device?

No. localStorage is per-browser and per-device, and there is no server to synchronise through.

What happens if my browser blocks storage?

The games play normally and simply do not remember anything between runs. Every storage call is wrapped so a failure is silent rather than fatal.

Why is there no global high score table?

Because this is a static site with no server to host one and no way to verify a submitted score. A leaderboard built this way would be a list of whatever people chose to send.

References and further reading

  1. MDN Web Docs — Window.localStorage