SPELT

What the game sends, and what it never sends.

SPELT has no accounts and no cookies. Every puzzle is generated ahead of time and solved entirely on your own device, and the game works with the network off.

Three things travel, and this page is the whole list of what is in them. Two of them happen on their own, and the usage data switch in Settings turns both off together. The third is the drop box, which sends nothing until you type a message and press send.

The usage stream

The usage stream is how the game knows whether it is any good: whether people come back, where a puzzle loses them, and whether anything is broken. It is anonymous, it is never on the path of play, and every field it may carry is listed below.

Why it is allowed to happen at all: this is first-party audience measurement, done for the game itself, with no identifier that survives clearing site data, no profile, no advertising, and nothing passed to anyone else. Under UK and EU rules that is the legitimate-interests basis rather than consent, and the switch in Settings is the objection you are entitled to. Under US state privacy law there is no sale and no sharing, so there is nothing to opt out of — and the game honours Global Privacy Control anyway: a browser sending that signal is read as having turned the switch off, and nothing is sent.

What identifies this browser

deviceId

Random id for this browser, stored on your device. Not derived from anything about you, your hardware or your network. Clearing site data destroys it permanently

firstPuzzle

The puzzle number this browser first played, so a returning player is not counted as a new one

sessionId

Random id for this tab, held in memory only and destroyed when the tab closes

visitDays

How many separate days this browser has opened the game

How the puzzle went

backtracks

How many times a letter already placed was taken back

bucket

Which time band the solve fell in, the same band the day's readout counts

clean

Whether it was solved without taking anything back

cta

Which onward button was pressed — the solved card's next puzzle, a handover to an unplayed today (the welcome's, or any card's once the daily outranks the road), the welcome's handover to the board a share link named, skipping the welcome, falling through to practice once the archive is spent, the Play button that closes How to play, or the line in Settings that hands the game to somebody without a solve first — so a door offered can be told from a door used One of: nextPuzzle, todaysPuzzle, linkedPuzzle, skipWelcome, practice, helpPlay, invite.

depth

How many of those buttons this session had taken in a row, the first being 1, so a chain of puzzles can be read by how far it ran

hard

Whether hard mode was on, which plays without the row ticks

hint

Whether the one hint was used

linked

Which puzzle number the arriving share link named, when one did — what the link asked for, so a puzzle event for that board says whether the tap became a play

mode

Whether it was the day's puzzle, one from the archive, or the welcome puzzle One of: daily, archive, welcome, practice.

on

What it was set to

panel

Which panel was opened One of: help, settings, stats, archive, win, giveup, feedback, privacy.

placed

How many letters were on the board at the time

poolLeft

How many letters were still in the pool when it was left

puzzle

Which puzzle number this was

resumed

Whether this continued a solve already in progress

setting

Which switch was thrown One of: hard, sound, usage, motion, text, contrast, theme.

streakBand

How long a run of days this solve stood on, as a band rather than a number: 0 none, 1 a single day, 2 two, 3 three to six, 4 a week or more, 5 a fortnight, 6 a month or more

via

What first showed somebody was there: a press, a key, a wheel or scroll, or the page simply being visible and in front of them for twenty seconds. It separates a person who looked and left from an automated fetch that renders the page and presses nothing One of: pointer, key, wheel, scroll, dwell.

How long things took

queuedMs

For a batch that could not be sent at the time and waited on your device: how long it waited

sentAtMs

How long this session had been active when the batch was sent. It places each event at the moment it happened rather than the moment it arrived, and its largest value is how long the session lasted

timeMs

How far into the puzzle this happened, counting only time the tab was open and visible

How you got here

campaign

A short source tag carried by the link you arrived through, if it had one. First visit only

referrerHost

The site you followed a link from, if any. The host only, never the full address

How the game itself is doing

batchSeq

Which batch this is within the session, so a duplicate can be discarded

build

Which build of the game this was, so a fault can be tied to a version

flush

Why this batch was sent One of: manual, full, idle, hidden, pagehide, freeze, optout.

installed

Whether the game was opened from a home screen rather than a browser tab

message

The error's own message, with any web address stripped out of it before it is stored

method

How the share went: handed to the system share sheet, opened and dismissed without sending, copied to the clipboard, or refused outright One of: share, cancelled, clipboard, failed.

offline

Whether the device reported being offline at the time

payloadVersion

Which version of this format the batch was written in

step

The install funnel, in order: the browser offered a prompt (or iOS made one impossible), the card showed its line, the browser prompt was accepted or waved away, the app landed — so the funnel's narrowest step can be found rather than guessed One of: offered, shown, accepted, dismissed, installed.

where

A short label for the part of the game that failed

The counters

The readout on the Solved sheet is a second, separate flow. When you solve the day's puzzle the game adds one to a set of counters for that puzzle number, and reads the totals back so the sheet can say how the day went.

The counters are the whole record: how many solved it, how the times were spread, and how many did it clean, with a hint, or in hard mode. Nothing holding a result is stored per player, which is why the sheet can tell you how the room did and can never rank anyone in it.

One thing is stored per device, and only to stop a browser being counted into the same puzzle twice: a short token worked out from your device id and that puzzle's number. It is stored on its own, with no result and no id attached to it, and it is deleted after a week. Because the number is part of it, the token is different for every puzzle, so these cannot be joined together to follow a browser from one day to the next.

Only the day's puzzle is counted. Solving one from the archive changes no total, because a puzzle from three weeks ago solved today is not part of how that day went.

The drop box

The drop box is the game's one text input, and the third thing that travels. Nothing goes through it unless you type a message and press send.

What is stored is what you wrote, the puzzle you were on, and an address only if you chose to leave one. It is deliberately not on the usage data switch: that switch governs collection the game does in the background, and a message you wrote and sent is an act rather than a background collection.

Sending is limited to five messages a day. The limit counts a one-way hash of your network address, salted with a secret only this stack holds, and that counter deletes itself after two days. The address itself is never stored.

How long any of it is kept

Batches are kept in the form they arrived in for 35 days.

The folded daily record of play is kept for 400 days.

What is never collected