§ Salt Crown · Privacy Policy

No account. No name. A name given freely is a claim.

Effective August 30, 2026

1. The short version

Salt Crown has no sign-up, no login, no profile, and no way for you to tell it who you are. It never asks for an email address, a phone number, a photo, a contact list, or your location. What it does do is give each install a random number and record how the night went — how far into the siege people get, what killed them, which event cards they open and which choice they take. Those records carry no identity of any kind. • No account, no name, no email, no phone number, no address — the game has no field to type one into • No advertising, no ad SDKs, no analytics brokers, no social-network SDKs, no crash reporter • No tracking across other apps or websites, so no App Tracking Transparency prompt appears • No IP-address logging, no user-agent string, no device fingerprint, no location, no cookies • Nothing you type into the game is ever transmitted — see section 5, which is the part we are proudest of • Nothing is sold, and nothing is shared for advertising The rest of this page is the detail, and section 9 is a technical appendix listing every single event and field the game is capable of sending.

2. What is stored on your device

All of this lives on your device and is never uploaded: • Your saved runs and your profile. Salt Crown keeps two save domains — the run in progress and your longer-term profile — in an IndexedDB database named "salt-crown-saves", with rotating backups. • Your settings, in local storage under "saltcrown-settings". • A local diagnostic log, in local storage under "saltcrown-telemetry". This is a developer convenience — a rolling record of the current session, held on your machine, with exactly one exit path: a manual download to a file. It is never uploaded. • A random per-install identifier, in local storage under "saltcrown-player" — described in the next section. There is no cloud save and no server-side copy of your progress. Deleting the app, or clearing site data for the website, erases all of the above permanently. We cannot restore it, because we never had it.

3. The one identifier

The first time you play, the game generates a random UUID — a version-4 random number, of the form "3f2a91c4-…" — and stores it locally under "saltcrown-player". This is the only identifier that exists. What it is not, specifically: • It is not Apple's IDFA. There is no advertising identifier in this game at all. • It is not the IDFV, the device serial, the MAC address, or anything else about your hardware. It is drawn from the browser's cryptographic random-number generator and is derived from nothing. • It is not linked to an account, because there is no account. • It is never joined with data from any other app, website, or company, and never shared with a data broker — which is precisely what "tracking" means under Apple's definition, and why the app's privacy manifest declares NSPrivacyTracking as false. Its entire job is to let us tell "twelve people played once" apart from "one person played twelve times". Clearing site data or deleting the app mints a brand-new one with no link whatsoever to the old. Alongside it, a session identifier is minted fresh on every page load and never written to disk. It groups one sitting's events together.

4. What the game sends, and where it goes

Gameplay events are batched on your device and sent over TLS to a Supabase database, which acts as our data processor. Every row carries five things and nothing else: the random install identifier, the session identifier, the build the game was compiled from, an event name, and a small set of numeric or identifier-shaped properties. In plain terms, what that adds up to is: • That a run started, and that a run ended — with the outcome, how far into the night you got, what your Tally stood at, how long it lasted, and how many defenders were still standing. • That a defender went down, and in which room. • That a Watch began, and that the Tally moved. • That an event card was opened, and which choice you took on it — by content identifier, together with how long you sat with the decision before choosing. • That a door was opened or closed, and that you pressed pause yourself (automatic pauses are dropped at the door, because the interesting question is whether players use pause to think). • That you saved the obituary card at the end of a run, and whether the browser actually let the file through. • A heartbeat once a minute while a run is in progress, so we can tell someone playing from someone who left a tab open. Section 9 lists all of that formally, field by field. Two other parties are involved in serving the game, in the ordinary way any website has a host: • Cloudflare Pages — hosting for the browser version. Keeps standard web-server request logs, as every web host does. • Apple — distribution of the iOS build and TestFlight, under Apple's own privacy policy. That is the complete list. No advertising networks, no attribution or install-tracking SDKs, no data brokers, no social SDKs.

5. Player-typed content never leaves your machine

Salt Crown lets you name your defenders. Those names are never transmitted, and this is not a promise to be careful — it is the shape of the code. Three gates sit between the game and the network, in series: 1. Only events on a fixed allowlist are forwarded at all. An event not named in section 9 is never sent, no matter what it contains. 2. Within a forwarded event, only allowlisted property keys survive. Everything else is discarded before the row is built. 3. Every surviving value is passed through a sanitiser that accepts finite numbers and booleans, reduces strings to the characters A–Z, a–z, 0–9, dot, underscore, colon and hyphen, and truncates them at 64 characters. Objects and arrays are dropped outright. A name routed into a value slot by some future mistake would arrive as a punctuation-free fragment at best, and as nothing at all if it is not written in Latin script. There is no free-text field anywhere in the database schema for it to land in. The names are in fact stronger than that: they are not even written to your save file. That is a deliberate design rule in the game's own canon — what you remember about a defender is yours, not the software's.

6. Why we collect any of it, and how to turn it off

One reason, and no others: to find out whether the game is any good. The event stream answers questions we cannot answer by playing it ourselves — which Watch people die on, which event card everyone picks the same option for, whether the difficulty curve is a curve or a wall. It is never used to build a profile of you, to target advertising, or to make any decision about you as a person. There is nothing in it that could be. Turning it off: • In the browser, add "?metrics=0" to the URL — for example https://saltcrown.pages.dev/?metrics=0 — and the game sends nothing for that session while playing exactly as it otherwise would. • Play offline. Nothing queues up to be delivered later beyond a small in-memory buffer capped at 200 rows, which is discarded rather than retried. • Development builds send nothing at all, ever.

7. Retention, and deleting your data

Local data stays on your device until you delete the app or clear site data. Event rows are retained on Supabase for as long as they remain useful for tuning the game. Because they carry no identity, they are effectively anonymous statistics once they arrive. If you want the rows for a particular install removed, email games@arkynate.com and we will purge every row matching that install identifier. We will need the identifier itself, because it is genuinely the only thing connecting the rows to anything: • On the web version, open your browser's developer tools, go to Application → Local Storage → the game's domain, and read the value of "saltcrown-player". Paste it into the email. • On iOS, deleting the app erases the identifier and stops any further data being sent. If you want rows already sent purged as well, write to us and we will help you retrieve it. If it cannot be retrieved — because you already deleted the app — then we genuinely cannot tell which rows were yours, which is the most concrete measure available of how anonymous they are. We do not operate a formal rights-request portal, an identity-verification process, or a ticketing system. It is one person reading an inbox. Write, and we will do it.

8. Children, and changes to this policy

Salt Crown is not directed at children and is not distributed in Apple's Kids Category. It contains no user-generated content that anyone else can see, no chat, no messaging, no in-app browsing, and no links out to social networks. If what the game collects changes, this page is updated and the effective date at the top changes with it. The App Store privacy declaration and the app's bundled privacy manifest are updated to match before the new version ships. Updates are always posted at this URL — https://arkynate.com/saltcrown/privacy Questions about any of the above: games@arkynate.com. Salt Crown is made by Arkynate, a one-person studio; expect a best-effort reply within a few days.

9. Technical appendix — the complete allowlist

This is the whole of it. An event not in this table is never transmitted; a field not listed against its event is never transmitted. Both lists are additive-only by design — shipping a new field means coming here and writing it down first. Every value is a finite number, a boolean, or a content identifier reduced to [A-Za-z0-9._:-] and capped at 64 characters.

EventSent whenFields
run_startA night begins.seed · resumed · run_index_in_session · platform
run_endA night ends, won or lost.outcome · watch_reached · tally · ember_remaining · duration_ms · tick_reached · defenders_alive · seed · resumed · platform
defender_downA defender falls.room_id · sim_tick · watch
tally_markThe Tally moves.marks · watch
watch_beginA new Watch starts.watch · phase
event_openAn event card is shown.cardId / card_id · watch
event_choiceYou answer an event card.cardId / card_id · choiceId / choice_id · dwellMs / dwell_ms · watch
door_toggledA door is opened or closed.door_a · door_b · to · while_paused · sim_tick
pause_toggleYou pause or unpause. Automatic pauses are not sent.paused · sim_tick
obituary_savedYou save the end-of-run card.outcome · watch · tally · saved
heartbeatOnce a minute while a run is live.watch · tally · run_index_in_session

Every row additionally carries the random install identifier, the session identifier, and the build string the game was compiled from. Nothing else. There is no free-text column in the schema.

← Salt CrownSalt Crown support →