QERYX COMING SOON
OBSERVATORY

1.3 Disappearing & Sealed

Messages that vanish on a timer the relay is never told.

Q-METASILENCE Coming soon

Disappearing messages, sealed sender, panic wipe, and a decoy PIN. A timed message leaves this phone when its timer ends, even if the phone’s clock is set back, and a chat’s rows show black in a screenshot taken on this phone.

Coming soon

The disappearing timer opens once a two-phone test passes.

Five defenses. Tap through them.

Set a timer and each message leaves the phone when it runs out: your copy counts from the moment our relay accepts it, theirs from when they read it, and a photo or file from when it is opened. A copy never read leaves seven days after its timer would have ended. The timer rides inside the encryption, so the relay is never told it.

A clock nobody can set back: setting the phone's clock back does not keep a vanishing message. The limits: a camera can capture any screen.

Delete a message and follow what the relay keeps.

What the relay deletes

Your messages reach the relay as end-to-end ciphertext it has no key to. A delivered row is purged after the grace window, and destroying a conversation deletes the rows the relay can tie to it; a one-to-one message, sealed by default, names neither its sender nor its conversation, so the destroy does not reach it, and it leaves on its own clock, as any message does. A group message, sealed to each member by default, and a message read with Stealth Mode on or read receipts off wait for the offline horizon instead. A photo, video, file or group voice note is stored apart from its message, encrypted, and stays up to 45 days after upload, even after its conversation is destroyed, unless the sender deletes the message for everyone or a chat timer purges it sooner. Nothing on the database volume is overwritten, so bytes left in a WAL or a backup are that same ciphertext, beside the routing columns that name who wrote to whom.

Rows that arrive on the relay’s REST send lane also sit inside a second, server-side envelope whose key is derived at use, and never stored, from an operator master held in the relay’s environment. Destroying the conversation retires that envelope’s epoch: to anyone without the master its residue never opened, and against someone who holds the master the retirement is policy, not mathematics.

Wrap key
HKDF from the erasure master key in the relay’s environment · derived at use, never stored
Residue
end-to-end ciphertext · envelope-locked on REST-lane rows
Source
fsor.rs · SPEC/06

The receipt

Every destruction emits a Merkle root over the erased messages, signed under ML-DSA-87 and published at the audit endpoint, so an account holder will be able to verify it against the operator key served beside it. A receipt records that the relay deleted a row; it cannot prove that no copy of the bytes survives on a disk. Verifying and showing that receipt in the app is in development.

Receipt
ML-DSA-87 · ctx QERYX-FSOR-ROOT-v1
Verify against
TOFU-pinned operator key
Source
SPEC/06 §8.9

The catch-net

A database trigger fans each row’s purge out to the cache, and to any file-store blob linked to that row, in the same window — the path that catches what a handler missed. No chat send links its file to the row, so a photo, video, file or group voice note is not purged with its message: the media reaper deletes it at its own expiry, up to 45 days after upload.

Fan-out
the row’s cache key in the same window, other cache entries bounded by expiry; a file at its own expiry
Source
SPEC/06 §8.7

Sealed sender wire v1

The outer envelope names only the recipient; the sender's identity sits inside the seal and is readable only after decryption — the stored row carries no author at all. On the recipient's acknowledgment the row is marked deleted and stops being deliverable; the purge sweep destroys it within the following twenty-five minutes, and the destruction is receipted. A group message is sealed to each member as a row of its own, which the member's receipt does not match: that row, like a message read with Stealth Mode on or read receipts off, is retired without a receipt and waits for the offline horizon. Rows the recipient can never open — control events and undeliverable sealed blobs — are minimised on the spot: sender, recipient and content all cleared.

On ack
marked deleted, no longer deliverable
Then
destroyed by the sweep within 25 minutes, with a signed receipt · thirty-day offline horizon
A group member’s row, or a read without a receipt
retired without a receipt the relay can match · destroyed at the offline horizon
Source
SealedSenderService.swift · sender_cert_handlers.rs

Duress

A decoy PIN opens a believable decoy surface; the real account is scoped out of that unlock's view once duress fires — the decoy PIN re-scopes the messenger, it does not re-key it. Activation is the duress PIN itself, nothing quieter.

Decoy
decoy surface · opens under the duress PIN
Real account
out of that unlock’s view · re-scoped, not re-keyed

The surface

A chat’s rows render inside a secure canvas that shows black in a screenshot taken on this phone, and recordings and mirroring meet a scrim and an overlay. A photo opened full screen, and the chat list, are covered only while a recording runs, so a still screenshot of them is not blacked out. The scope is bounded and we state it: a camera pointed at the screen is out of scope, and the real-time-coercion shadow-copy risk is a policy-and-audit contract, not a cryptographic one.

Scope
secure canvas on chat rows · scrim + overlay on recordings

Deleted means the relay’s delivered rows are gone, counted, and rolled back if one survives.

The erasure invariant
2b91 cc04 e7f3 1caa 40d6 95be Expires in 00:59
Server-erased · FSOR
Destruction root · signed · ML-DSA-87
Illustration of the interface — authored demo content. Erasure states.

The relay answers for its copy

The relay answers, for each message you sent, whether its copy is gone and when it was erased, and the app asks it about your newest delivered message when you open the chat. That answer is the relay’s own statement, backed by its signed destruction log once the row is purged; it is not proof that no copy exists anywhere else.

During the 10-minute delivery grace, ciphertext still exists — we say so, because the caveat is the credibility engine.

Read the retention ladder in the open.

10 min1

delivered-message hard-purge grace — during it, ciphertext still exists; we say so

30 days2

offline queue horizon for undelivered ciphertext; operator-tunable 1–90 days

ML-DSA-87

the signature on every destruction root you will be able to verify

Erasure parameters — code-true
ParameterValueSource
Destruction receipt ML-DSA-87 Merkle root, ctx QERYX-FSOR-ROOT-v1 SPEC/06 §8.9
Wrap key HKDF from the erasure master key in the relay’s environment — derived at use, never stored fsor.rs
Delivery erase soft-delete at ack, hard DELETE at the grace window handlers.rs · main.rs
Grace window 10 minutes to hard purge; the sweep runs every 15 backend env · main.rs
Offline horizon 30 days, operator-tunable 1–90 /api/v1/transparency/retention
Re-fetch of a purged row no row returned handlers.rs
Retired with no matching receipt a group message sealed to each member, or a read with Stealth Mode or read receipts off: the row waits for the 30-day horizon handlers.rs · sender_cert_handlers.rs
Cache purge trigger fan-out, same window SPEC/06 §8.7
Photos, videos, files, group voice notes stored apart from the message; the media reaper deletes each at its expiry, 45 days after upload by default handlers.rs · main.rs

Set timed deletion against a delete button.

Real workloads — category columns only
QERYX Classical E2E SMS-class
Real workloads
Deletion trace Hard delete after delivery, plus a signed receipt Delete-flag rows and backups persist The carrier retains
Coerced unlock Decoy PIN and duress paths Not included Not included
Sender metadata Stripped from the stored row; authenticated at send Sender visible to the server The sender is the routing key
Backup residue Timed messages left out of the QERYX backup file; chats kept out of device backups Restorable from backup Plaintext backups
Screenshot attempt Chat rows show black on this phone Not included Not included

Ask what survives a delete.

Is deleted really gone?

On your phone, a message that vanishes leaves the chat, the chat list, search and its media caches, and QERYX’s own backup file never carries a message that has a timer. On the relay, the row is deleted after delivery, while a photo, video or file it carried stays stored apart, encrypted, until its own expiry, up to 45 days after upload, unless its sender deletes it sooner; bytes left in a WAL or a backup are the end-to-end ciphertext the relay never had a key to, beside the routing columns that name who wrote to whom. During the delivery grace, ciphertext still exists; we say so. A group message, sealed to each member by default, and a message read with Stealth Mode on or read receipts off keep their ciphertext on the relay until the offline horizon.

Either side of a chat can set it, and the other phone takes it up from your next message. In a group, only admins can change it: our relay enforces that, and the setting reaches members inside the group’s sealed settings. The timer opens once a two-phone test passes.

Undelivered ciphertext plus the roster and routing metadata under the retention ladder, and, for a group message, sealed to each member by default, or a message read with Stealth Mode on or read receipts off, its ciphertext until the horizon. For destroyed conversations, the rows the relay can tie to them are gone from its database, but a one-to-one message, sealed by default, names neither its sender nor its conversation, so the destroy does not reach it, and one still waiting, or read with Stealth Mode on or read receipts off, stays until the horizon; an old backup of the relay holds end-to-end ciphertext and the routing columns beside it. Each photo, video or file stays, encrypted, with an upload record that names its uploader, until its own expiry, up to 45 days after upload, even after its conversation is destroyed, unless its sender deletes it sooner. Reading content requires breaking both X25519 and ML-KEM-1024.

Sender identifiers are stripped from the stored message row (sealed sender), though the relay authenticates the sender at send time; the relay routes by opaque identifiers. Undelivered messages queue with routing metadata under a published retention ladder.

It erases local key material and state on your device in one gesture. It cannot un-send what a recipient already holds — that is physics, and we put it in writing.

A believable decoy surface. The real account is scoped out of that unlock's view; the decoy PIN re-scopes the messenger rather than re-keying it, and we put that limit in writing.

On this phone, a screenshot shows a chat’s rows as black, and recordings or mirroring meet a cover. A still screenshot of a photo opened full screen, or of the chat list, is not blacked out. Another phone or a camera pointed at the screen is out of scope; no software defends against optics, and we will not claim otherwise.

Once QERYX arrives, yes, at the audit endpoint: every destroy emits an ML-DSA-87-signed Merkle root you will be able to check against the operator key served beside it. It shows that the relay recorded the delete, not that no copy exists anywhere else. Surfacing that receipt in the app is the next step, and this page will say when it arrives.

Security overview Open the defenses