gabriel console
runs on this device. nowhere else.

messaging, rooms and calls that keep working when the network is gone.

gabriel console is a messenger companion that lives on your device. sign in with a passphrase and nothing else. pair devices by code. talk in end-to-end encrypted rooms and calls carried by a small beacon on the local wi-fi, with no internet at all. install it from this page on a phone, tablet or laptop; no store, no account, no server holding your words.

cached for offline device cryptography network
01 · sign-in

your passphrase is the whole login.

there is no username database and no password reset, because there is no one on the other end. when you create a profile, the console turns your passphrase into a key on this device and uses that key to lock a second, random key. everything you store is sealed under the random key.

unlocking is the same computation run again. a wrong passphrase does not produce an error message from a server; it simply fails to open the lock, and nothing is revealed about how close it was.

key derivation
pbkdf2 · sha-256 · 600 000 rounds · 16-byte salt
storage seal
aes-256-gcm · fresh nonce per record
where keys live
in this browser's storage for this site, wrapped. never in a cookie, never in a url, never sent.
if you forget it
the data is gone. write the passphrase down and keep the paper somewhere the phone is not.
02 · pairing

two devices, one code, six digits to confirm.

  1. each device shows its code

    a short pairing code: this device's public key, a one-time nonce and its name, as a qr code and as text you can read aloud or type.

  2. each device reads the other's code

    scan with the camera, or paste the text. no radio, no network, no account is involved; the code is the only channel.

  3. compare six digits

    both screens derive the same six-digit number from the shared secret. if they match, nobody sat in between. confirm on both, and the pair is saved, sealed, on each device.

  4. hand things across

    a paired device can receive notes as encrypted codes, one frame or several. only that device can open them.

03 · rooms and calls

a room is people you have met, carried by a box in the corner.

phones cannot talk to each other through a browser without something in between. gabriel's something is a beacon: a small program anyone runs on a laptop or a spare phone plugged into a wall, on a wi-fi hotspot that has no uplink. it forwards sealed messages by random tags. it cannot read them, it cannot tell who is who, and it keeps nothing on disk.

  1. found a room

    name it. you are its first member and the only one who can add people or rotate its key.

  2. add people you have paired with

    membership is pairing: nobody enters a room unless the founder has verified their device in person. the room key travels to them sealed under that pairing.

  3. talk

    every message is encrypted under the room's current key and signed by its sender. remove someone and the key changes; the beacon tag changes with it, so they cannot even watch the traffic.

  4. call

    audio, and video if you want it, goes straight between phones on the local network, encrypted; the beacon only carries the sealed handshake. up to eight in a call.

message seal
aes-256-gcm · epoch key · ecdsa p-256 signature
what the beacon sees
random 64-character tags that change daily, ciphertext, and how many devices are listening to each tag.
what it never sees
names, keys, plaintext, who is in which room.
running one
node, one command, a certificate you install once. see beacon/README.md in the source.
04 · shield

a screenshot should be worth as little as possible.

no web page can stop a phone from capturing its own screen; anyone who tells you otherwise is selling something. what the console does instead is limit what a capture is worth.

  • messages are blurred until you press and hold one. a screenshot shows one message, never a conversation.
  • the moment the console is not in front, it veils itself. app switchers and recording overlays get a blank card.
  • shielded text cannot be selected, copied or dragged.
  • notifications name the sender and nothing else, or show only that something arrived, or nothing at all. your choice; sender-only is the default.
  • in the native mesh app on iphone, the screen goes blank for as long as a recording or mirroring is active.

the setting that turns this on is named plainly, and says exactly this.

05 · location, only when you say

find each other without a map server.

the console never reads your position on its own. inside a room you can share where you are once, or live every twenty seconds until you stop. it goes sealed to that room and nowhere else.

whoever receives it gets distance, bearing and a compass arrow that turns with the phone. that works with no map, no tiles and no internet. if a beacon carries a map of the area, or if you explicitly allow openstreetmap.org, a real map appears too. either way there is no account and no tracking.

06 · offline

loaded once, it stays.

the first visit installs a small worker that keeps a copy of every file this site is made of. after that, opening the console reads from that copy. pull the sim card, turn on airplane mode, walk into a basement: the page opens, the vault unlocks, pairing works.

the readiness list below is measured on this device right now, not promised.

secure context
checking
web cryptography
checking
offline worker
checking
files cached
checking
network right now
checking

install it to the home screen from the browser menu and it opens like any other app, still without a connection.

07 · install

from this page, on anything with a browser.

no app store, no account, no download from somewhere else. the installed console is this page, cached, in its own window.

iphone, ipad
safari → share → add to home screen.
android
chrome or edge → menu → install app.
mac, windows, linux
chrome, edge or brave → the install icon in the address bar. safari on mac: file → add to dock.
08 · boundaries

what it never does.

  • make a network request after the first load, except to a beacon you configured yourself and, only if you switch it on, openstreetmap.org for map tiles. the worker refuses everything else.
  • create an account, ask for an email, a phone number or a name that has to be real.
  • send a passphrase, a key, a note or a device list anywhere. there is no anywhere.
  • run analytics, load fonts or scripts from other domains, or set third-party cookies.
  • keep plaintext at rest. records are sealed; the seal key is wrapped by your passphrase.
  • recover your data for you. that is the price of the line above.

everything on this page can be checked by reading the source, which ships with the console itself.