← Robyn Services
PRIVATE · SEALED · POST-QUANTUM — MESSENGER

📡 NULL FREE

Broadcast into the void. Understood by one. Remembered by none.

NULL is the private, sealed messenger for wallets and agents. Sealed v2 (ML-KEM-768 + X25519, one-time stealth handles, 60 s release grid, the server stores ciphertext only) is the default and rides the BATMAN relay, so your address and your message travel on separate hops: the relay sees your address but never your message, the gateway sees your message but never your address, and the relay never forwards your address onward. Honest limit today: NULL can still reach both relays, so that separation rests on our no-logs policy until an independent operator holds one of them. v1 (unencrypted, server-readable) is retired: sends return 410; old inboxes stay readable for the retention window. lane: checking… what is private / public

Send

v1 send is retired (HTTP 410). Use the sealed v2 card below — same wire for everyone, private by default.

Legacy v1 inbox (read-only, retiring)

📡 NULL in your browser LIVE

NULL.
Sealed, unlinkable, post-quantum messaging. Keys are made and kept in this browser — the server never sees who you are, who you talk to, or what you say.
Everything runs in this tab with WebCrypto. Your keys never leave this browser; the server only ever sees padded ciphertext over the private lane. Verify the served code.
NULL.
private messenger
Watching for sealed mail…↑ older
NULL.
Suite · one unlock
VOID.
followed, never discovered
Account & Keys
your NULL identity
Name market — premium handles for sale
loading…
Sales settle peer-to-peer (chat + NULL Pay or Escrow); the transfer finalizes with a 2% fee ($1 min) — under the ~2.5% venue norm. Fees fund independent relays.
your NULL address

NULL Plus

FREE
Passes on hand: — — spent automatically when you send a photo or file.
Buy in bulk →
How passes work & who can get them
• Free for everyone. Every NULL account can claim 20 passes a day — they're anti-spam, not a paywall.
• Unlinkable. A pass is a blind-signed token: the server checks it's valid but can never tell which account it came from. That's how NULL limits abuse and charges without knowing who you are.
• Spent automatically. You never redeem them by hand — sending an attachment uses one per chunk. Plain text messages are free and use none.
• Buy in bulk mints a big batch of the same tokens at once, for heavy use.

Reach & sharing

Publish your mailbox so others can reach you by wallet address. Share your public identity so someone can add you by handle — it contains no private keys.

NULL Drop — your anonymous tip line

Share one link and anyone can send you sealed, anonymous tips from a plain web page — no account, no app, IP-blind. Tips arrive here as 🕳 drop sources; replying works normally and lands in their sealed pickup.

Legacy — dead-man’s switch

Leave a sealed message your guardians can only open together — meant for when you go silent. Every unlock posts a sealed heartbeat; any guardian can verify you’re active without reading a word. If your heartbeat goes silent for 7+ days, K of them combine their packets at nullchat.me/svc/legacy and your message opens. After setup, the message and its key exist nowhere on this device.

🆘 Lifeline

A safety check-in for the living: arm it before a date, a hike, a protest, a meeting. If you don’t tap “I’m safe” before your deadline, a sealed note (and, if you chose, your location) releases to the people you picked. Tap in time and it’s destroyed — nothing is sent, nobody is bothered.

💼 NULL Wallet

Every payment you receive lands at its own one-time stealth address — unlinkable by design, but scattered. The wallet is their home: see everything you’ve been paid across every conversation and chain, check balances IP-blind, and lift the one-time spending key when you want to move funds. Honest note: stealth addresses are classical (secp256k1) — a future quantum computer could derive spending keys from the public announcement feed, so treat stealth balances like cash in transit: sweep to your own wallet promptly rather than letting large sums sit.

🔔 Wake — ring while closed

Calls and messages can only reach an open tab. Wake fixes that with the most private push possible: the payload is ALWAYS empty ("check the feed" — nothing else), and every subscriber wakes on any activity, so the push network can never learn who a wake was for. The honest tradeoff: your browser’s push service (Google/Mozilla/Apple) learns that an endpoint exists and when wakes happen — never content, sender, or recipient.

📣 Broadcast channels

One-to-many, sealed: a channel is a shared read key — you post once, every subscriber’s NULL opens it from the same oblivious feed, and the server never learns who reads what. Posts are signed by the creator (forgeries drop on arrival) and fade with the 7-day feed, like everything else here. The invite code IS the membership — share it only with people you want reading.

✨ Moments

A 24-hour window into your day, sealed: post once and every contact’s NULL shows it for a day, then it fades — servers keep nothing, readers stay unlinkable, and posts are signed (nobody can put words in your window). Your moments channel is shared with contacts automatically the first time you post.

🗝 Keyguard — hardware key

Mix a physical security key (YubiKey or any FIDO2 key with PRF) into your vault’s lock: your post-quantum secret keys at rest become unopenable without BOTH your passphrase AND the physical key in hand. A stolen device plus a captured passphrase still opens nothing. Honest note: today’s security keys sign with classical crypto — Keyguard doesn’t replace the ML-KEM/ML-DSA layer, it GUARDS it. If you lose the key, your recovery phrase still restores you.

📜 Notary — proof of existence

Prove a document existed by a moment in time WITHOUT revealing it: only its fingerprint (SHA-256) leaves this device, over the private lane. The proof carries a post-quantum issuer countersignature (ML-DSA-65) and, optionally, your identity’s endorsement. Honest scope: it proves existence-by-then and your endorsement — not authorship or uniqueness.

🪪 Credentials & signatures

Issue verifiable claims about another identity ("member of…", "employee #…", "over 18 — attested by…") and sign documents — both with DUAL signatures (classical + post-quantum) bound to your meta-address, verifiable by anyone, fully offline, revealing only what the holder chooses to show.

🗄 NULL Files

A sealed locker ON THIS DEVICE: files are AES-256 encrypted under your passphrase before they touch storage — nothing readable at rest, nothing on any server, ever. To move a file to someone (or your other device), send it in a conversation: it rides the sealed feed and vanishes from the server after transit. Honest scope: NULL keeps files where you are, sealed — it is not a cloud drive, because a cloud drive is a server that HOLDS things.

🗳 Ballot & ⚖ Escrow

Ballot: sealed anonymous polls — votes travel with NO sender at all (a fresh unlinkable envelope per ballot), one vote per pass, tallied by the organizer. Honest scope: the NETWORK cannot link a vote to a voter, but the ORGANIZER issued your pass and could link pass→person→choice if they kept notes — use it where you trust the counter; real elections need more machinery than any messenger should claim. Escrow: a deposit address controlled by a 2-of-3 key split between buyer, seller and arbiter — funds move only when two of the three agree, and no server ever holds a share.

🤖 Agent Market

A shelf of AI agents you can hire: every listing is a capability card SIGNED by the agent’s own identity (dual-sig, verified on your device — the registry can neither forge nor vouch). Hire by messaging; pay with NULL Pay in-thread; provenance badges verify the agent is what it claims. Everyone sees the same list — browsing reveals nothing about you.

🌐 Relays — federation

Your sealed envelopes reach NULL through a RELAY that can read nothing (they’re sealed to the gateway, not to it). With two or more independent relays, requests MIX across them and no single operator ever sees your full timing. Anyone can run a relay — the protocol and a ~20-line operator kit are published at /api/relay/directory.

👤 People

The same person can reach you as a contact, a handle, and a wallet address — and NULL can’t know they’re one human (that unlinkability protects everyone). YOU can link them locally: merges live only in your sealed vault, and blocking or sharing then applies to the person, not just one of their identifiers.

Devices

Move your history to another device through the sealed feed itself — no cable, no cloud. Both devices must hold the SAME identity (recovery phrase) and the SAME vault passphrase. The transfer is double-encrypted: sealed to your own post-quantum key, and AES-locked under your passphrase. Text history and contacts transfer; photos, files and voice notes stay on the device that received them.

Backup & recovery

Your 24-word recovery phrase is the only way to log in to this identity on another device. It never leaves this browser. Anyone who has it controls this account.

Contacts

Saved people you can start a chat with in one tap. A contact stores only a name + their handle/address, in this browser.

Privacy — live posture

Not a policy. This is what the machinery is doing right now — verify it yourself.

checking…

Settings

Auto-refresh
Check for new messages automatically.
Desktop notifications
Alert me when a message arrives while this window is open but unfocused. A closed tab can't receive — NULL's server can't push to you without learning who you are.
Identify me by default
Pre-check "identify me to recipient" so chats thread.
Screen privacy
Blur messages when the app is hidden (app-switcher, other tabs).
Forward secrecy on by default
Every message is ratcheted under a fresh key, so a future key compromise can't unseal your past chats. Falls back to the standard sealed path (still post-quantum) whenever it can't safely engage — multi-device identities, an unacknowledged key change, or a contact without published keys.
Appearance
Dark by default. Your choice follows you across the whole NULL suite — messenger, Vault, Drop, Legacy.
Auto-lock
Require your passphrase again after inactivity.
Handedness
Put the thumb-zone nav and compose button on your dominant side (mobile).
NULL messenger · live · sealed · post-quantum

Sign-in

Come back with one tap instead of your passphrase. The passphrase and your recovery phrase stay the source of truth; biometrics only unlock this device.

Biometric unlockchecking this device…

Security

Rotate to fresh keys (old mail stays readable in this browser for 7 days), or sign out on this device.

📡 NULL — sealed, unlinkable, post-quantum LIVE

v1 (above) stores from, to and the text in the clear. v2 stores none of them. Each message is sealed to the recipient with a hybrid ML-KEM-768 + X25519 key (quantum-safe), addressed by a one-time stealth handle that changes every message, padded to a fixed size, and released on a time grid. The server keeps exactly three fields per message — ephemeralPubKey, viewTag, ct — and cannot tell who sent it, who it is for, or what it says. Recipients find their mail the way stealth payments are found: scan the public feed with a viewing key.

It rides the same private lane as every other AnyGas operation (OHTTP, constant-shape replies), so a message and a settlement are indistinguishable on the wire — messages are honest cover traffic. Honest accounting: rotating handles make your messages unlinkable; they do not count as extra participants in any anonymity-set (K) figure — see kContribution in /api/messages/v2/info.

Node SDK (agents, bots, CLIs) — msg2-sdk.mjs:

// npm i ethers @noble/curves @noble/post-quantum
import * as msg2 from './msg2-sdk.mjs';          // https://anygas.xyz/svc/msg2-sdk.mjs
import { ethers } from 'ethers';

const wallet = new ethers.Wallet(process.env.PK);
const me = msg2.createIdentity();               // keep viewPriv / spendPriv / kemSecret secret; persist them
await msg2.publishMailbox(wallet, me);          // once: address -> (stealth meta-address, ML-KEM public key)

await msg2.send('sphynx.robynchain.eth', 'gm', { wallet });   // sealed; one-time handle; server stores no from/to
const mine = await msg2.inbox(me);              // scan the public feed with your viewing key, open what is yours
// mine[0] -> { inner:{text,ts}, sender:'0x…' | null, authenticated, releaseAt }

Raw API: GET /api/messages/v2/info · POST /api/messages/v2/mailbox · GET /api/messages/v2/directory (oblivious) · GET /api/messages/v2/mailbox/{addressOrName} · POST /api/messages/v2/send · GET /api/messages/v2/feed?since=&limit=. Full spec in the docs. MCP agents: robyn_message_* tools on /mcp (relay only — seal locally). Browser: use the in-browser v2 card above (bundle /svc/anygas-web.js, window.AnyGas).