Repository navigation
EN Play Privacy
Français · Reference · Published, reviewed by a person · Applies from: 4.1.16
What a quest'n'click game, its Reality Bridge and its connectors keep about a player, where, for how long, and how to delete it. True from 4.1.16 (speedrun runs kept in the Bridge's SQL store); the rest says since when.
Audience, context, and the statuses of what this page rests on
Audience: player · Context: player's browser
The software keeps little, and this page says exactly what, so that whoever runs a game can tell its players. The operator who runs a Bridge and its connectors is the one who answers for that data to the players. The site that serves a game (GitHub Pages, Clever Cloud, any host) has its own server logs, which are the host's, not the engine's.
A game without Reality (reality in its content), Remix daily or mystery worlds, or online leaderboards keeps
nothing beyond the player's own device: the engine has no analytics, no tracking and no account, and it fetches only
its own files from the site that serves it.
-
The save and the sessions live in the browser's storage (IndexedDB
web-scumm-saves; local storage when IndexedDB is unavailable), on the device only. -
Settings and the chosen language live in local storage (
<game>.settings,<game>.lang). -
Speedrun records live in IndexedDB (
web-scumm-runs). - The game's files live in the browser's cache, for offline play.
-
With a world link (a Reality game), the save also holds the pseudonymous
playerIdthe Bridge gave (p-and 16 hexadecimal digits, derived from nothing about the person), the delivery cursor and the ids of the signals applied: never an email, a token, a message or a badge. The capability that reads the player's signals is kept in local storage (<game>:reality-link).
Deleting: the pause menu's Unlink this game (the default label) revokes the link on the Bridge; clearing the site's data in the browser removes the rest (Restart erases only the autosave, not the slots or the records).
Limit ·
device-storage-browser-rulesThe browser decides how long site data lives: clearing site data, a private window, a device short of space, or, in a Safari tab (not a game added to the Home Screen), seven days of Safari use without a visit (WebKit) erases saves and records along with everything else.
A Bridge (a game's Reality server) keeps, per player: the playerId, the SHA-256 of their capability, its expiry;
per signal: its id, sequence, name, source, the connector's deduplication key (a SHA-256 for the bundled connectors),
the hash of what the connector saw (evidenceHash), the signed envelope, the signal's payload as accepted (to sign it
again after a key rotation), and the times. Never a token or an email. A pairing code lives ten minutes by default.
The Bridge's log is JSON lines that name events and pseudonymous ids, with no secret.
Where it is kept depends on the store the operator chose:
| Store | Where | How long |
|---|---|---|
SQLite (local profile, the default of npm run bridge) |
one file, mode 0600 | Every signal is kept: a SQL store has no retention yet |
Postgres (distributed profile, experimental) |
the operator's database | The same: no retention yet |
| The JSON-lines journal (a configuration written before 4.1.10) |
journal.jsonl beside the Bridge's configuration |
Until compact --retention-days=<N> (90 by default) drops acknowledged signals older than N days; a player's last signal stays |
A Bridge backup holds the same data as the store it was taken from.
A Bridge with leaderboards keeps each submitted run in its SQL store: the game, the category, the run's seed and
inputs, the verdict, and a pseudonym (2 to 32 letters, digits, spaces, _ . -; an email is refused). Pseudonyms
are not authenticated, and the Bridge knows no identity behind them. The run's envelope is dropped once its verdict is
stored. A leaderboard keeps a run 90 days by default (retentionDays), and deletes it on request with the token
given at submission (DELETE /v1/runs/<id> with x-delete-token). Rate limiting keys a client by an HMAC of its
address, never the address. Daily and mystery world tokens are kept in the same store for retentionDays (30 by
default).
What leaves any connector for the Bridge: the signal's name, the player, the source, the deduplication key, the time,
and the SHA-256 of the connector's payload (evidenceHash); never the payload, the message, the line or the badge.
- Email, webhook mode: the message is read in memory and dropped; nothing is written.
-
Email, IMAP mode: the message stays in the operator's mailbox, where it arrived. With
keepDays: 0(the default) it is deleted as soon as its signal is accepted (or found already accepted); withkeepDays: N, after N days. A refused message is flagged and kept for the operator, who deletes it. A sender who sent a pairing code is remembered as a salted SHA-256 of their address (the salt is random and lives as long as the process) mapped to theplayerId, in memory, forlinkDays(30 by default); a restart forgets it. The address, the subject and the text are never logged and never sent to the Bridge (only a hash of the Message-ID and the answer's number, hashed again asevidenceHash). No reply is sent. -
Telnet and SSH: nothing typed is stored; a line is matched against the game's commands and forgotten, and the
Bridge receives only the signal's name. A resume word links a later session to the same player for 30 minutes, in
memory. The public keys an operator declares for players (
ssh.keys) stay in the connector's configuration until the operator removes them. The client's address is used for the connection only; the connector keeps no list of them. -
Open Badges: the badge and the documents it points to are fetched, checked and dropped; only a verdict leaves
the connector, with a hash of the badge's id and issuer as
evidenceHash. The email a player gives to match a hashed recipient is hashed with the badge's salt for the comparison, then dropped: never stored, logged or sent. Revocation and status lists (an issuer's, not a person's) are cached for at most a day. The addresses that post to the form are counted in memory for a minute (the rate limit), then forgotten.
Each connector's own page says how to run it: Email, Telnet, SSH, Open Badges.
Every connector logs JSON lines of events, identifiers (playerId, signal names, refusal codes) and counts. A string
that looks like content (a space, an @, a slash) is written [redacted]; the tests check that no fixture's address,
text or secret reaches a log. Metrics (/metrics) are counters in memory. How long logs live is the operator's
rotation; they hold no content to delete, and a playerId in them is pseudonymous.
-
On the Bridge:
GET /v1/admin/players/<id>(with the operator's token) exports everything held about the player;DELETE /v1/admin/players/<id>removes it (the link, the signals, the acknowledgements) and ends the player's live streams. A whole tenant:tenant exportandtenant delete --yes(the Bridge's CLI). -
In an IMAP mailbox: delete the player's flagged messages, if any (accepted ones are already gone with
keepDays: 0). - In the SSH configuration: remove the player's declared key, if any, and restart the connector.
- In memory (sender links, resume words): restarting the connectors forgets them all.
-
A leaderboard run: deleted with its deletion token; otherwise it goes after
retentionDays. - On the device: the player erases the save or the site's data.
Limit ·
backups-keep-deletedDeleting a player removes them from the live store, not from backups taken before: how long backups live is the operator's choice.
- The Reality Bridge: what it is, Guarantees, Install and run the Bridge.
- Saves, Speedrun for players.
- The code:
bridge/src/server.ts(the admin routes),bridge/src/cli-store.ts(compact,tenant),src/engine/dom/reality-ui.ts(the link on the device).
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.5.5 r1, documentation revision · révision de la documentation 301f199dc2e38aa35a552a22ef87fd1e0f1f50f7.
Latest documentation · dernière documentation: https://quest-n-click.cleverapps.io/docs · https://quest-n-click.cleverapps.io/fr/docs; earlier versions · versions précédentes: each release's quest-n-click-docs-<version>.tar.gz · l'archive quest-n-click-docs-<version>.tar.gz de chaque release, https://github.com/Quest-n-Click/quest-n-click/releases
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Start (6)
Play (9)
Install (18)
- Requirements
- Install from the release archive
- Install from npm
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.5
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits