quest'n'click 4.5.0 · r1

Built for quest'n'click 4.5.0, revision r1. Whether it is published, and which one is current, is recorded at publication.json.

The Reality Bridge: what it is

Français · Type: explanation · Audience: author, admin · Context: Reality Bridge · Status: ready · Applies from: 4.2.5

The Reality Bridge, local profile (SQLite) · contract: stable · verified by CI (support matrix of 4.4.0, 2026-10-23): Node 22.13+ with node:sqlite, on Ubuntu; Chromium and WebKit end to end · automated checks: jobs reality, reality-xcheck; CI plan reality; 2 test files · people's passes: none · known limits: bridge-not-a-game-server, bridge-experimental-parts

The Reality Bridge, distributed profile (Postgres) · contract: experimental · verified by CI (support matrix of 4.4.0, 2026-10-23): Postgres 16 in CI; The qualification profile: HTTPS, three instances (ops/qualify/) · automated checks: jobs bridge-postgres, deployment-smoke; CI plan reality; 1 test file · people's passes: bridge-postgres-https not run (#77) · known limits: bridge-not-a-game-server, bridge-experimental-parts

The connectors (email, Telnet, SSH, Open Badges) · contract: experimental · verified by CI (support matrix of 4.4.0, 2026-10-23): Node 22 on Ubuntu (Telnet and SSH not on Windows) · automated checks: jobs connectors, connector-archive-e2e; CI plan reality; 3 test files · people's passes: connectors-real-security not run (#79) · known limits: bridge-not-a-game-server, bridge-experimental-parts

A quest'n'click game can react to a fact from the world outside: an email answered, a webhook called, a badge shown, a command typed in a terminal. The game itself never touches the network. A separate service, the Reality Bridge, turns the fact into a short signed signal, and the game applies it like a player's input: once, saved, and replayable offline. This page says what the pieces are and why they are cut this way. To try it, read Quick start; to run one, Install and run the Bridge.

What it is

Three hands carry a fact to the player, each one checking the one before:

PieceRuns whereDoesHolds
A connector (email, Telnet, SSH, Open Badges, or the Bridge's demonstration webhook)its own process, beside the Bridgereads the outside input as hostile, binds it to a player, proposes a declared signal with a deduplication keyits own Biscuit token, its own secrets (a mailbox password, a host key)
The Bridge (bridge/src/, the package quest-n-click-bridge)a small Node serviceauthorises the connector (Biscuit), checks the signal against the game's manifest, deduplicates, numbers it per player, signs it (Ed25519), keeps it until the player acknowledgesthe event-signing key, the hashes of the players' capabilities, the signals
The player (the game in the browser)the player's deviceverifies the signature before reading anything, applies the signal as an event, saves, then acknowledgesa capability that reads and acknowledges its own signals, nothing else

A signal is only an identifier from a finite list the game declares (mail.answer.correct): no text, address or payload from outside reaches the game. It arrives as the game's event of the same name. The engine applies it at most once, as an entry of the session, saved before it is acknowledged (src/engine/reality/protocol.ts verifies, WorldSignalPort is the transport, and a game without reality loads none of this code).

The Bridge exists since 4.1.1, the four connectors since 4.1.9, several instances and several tenants on one store since 4.1.10. Its local profile (SQLite) is stable; its distributed profile (Postgres, several instances) and the connectors are experimental (Stability and support).

Why

Alternatives set aside

Trade-offs

Limit · bridge-not-a-game-server The Bridge carries declared signals from outside to one player's game. It runs no game logic, holds no save, and does not share a game's state between players.

Limit · bridge-experimental-parts The connectors and the distributed profile are experimental: every contract and abuse test runs in CI, but no person has yet run a connector against a real email provider, a real badge or a terminal exposed on a network, nor the distributed profile behind a real domain for 24 to 48 hours.

Decisions and ADRs


Edit the source of this page · Report an error