Security with no server to trust
Every session is end-to-end encrypted. Identity keys never leave the device. Nothing in the path can read what it carries, and nothing has to be reachable for two devices to trust each other. This page states the model, its controls, and its limits the way our published threat model does.
Diagram: one message travels from unit-07 to unit-12 through a relay. The sender and recipient phones show the plaintext. The relay holds only a sealed frame it cannot open. A device in radio range sees only the two addresses on the frame. Offline Protocol runs no server in the path.
One message, as each party in the path sees it. The relay carries a sealed frame it cannot open. A device in radio range sees the two addresses and nothing more. No server is in the path to see anything at all.
The boundary is the session, not the infrastructure
One server holds everythingA conventional system concentrates risk. One host stores the data, brokers the identities, and routes the messages, so one breach or one outage compromises everything attached to it.
Keys stay on the deviceEach device generates its own Ed25519 key in platform secure storage and never transmits it. An address is derived from the key, so two devices verify each other directly, with nothing to look up.
Every party in between sees lessA relay or gateway forwards sealed payloads it cannot open and routes by envelope. Only the members of a session can decrypt, so carrying traffic for the mesh exposes nothing of it.
What protects what
Each layer, the control that guards it, and the standard behind it. The full list of controls and the attack each one answers is in the threat model.
RFC 9420Ed25519Signed and boundedRFC 9420, or signedLeaf bindingKeychain and Keystore, or a store keyOpt-in, scrubbedThe end-to-end boundary is the only one that survives a hostile relay, and it is the one every other control exists to protect. Sessions are keyed to OfflineID identities, and the mesh carries only what those keys have sealed.
Built for adverse conditions
When one transport is jammed or an internet link drops, the switch fails over to another radio. The mesh degrades path by path instead of going dark.
Multi-hop routing with acknowledgement, retry, and deduplication reroutes around a device that leaves. Delivery is confirmed, not assumed.
Identity, routing, and discovery run with zero connectivity. There is no server whose loss takes the network down and no lookup that must succeed for two devices to trust each other.
What it does not do
A security page that lists only strengths is not one. These are the non-goals and the residual risks, stated as the threat model states them.
Offline Protocol is a connectivity, identity, and coordination layer. It does not replace your organization's operational security, endpoint hardening, or key-custody policy. It gives you a transport and trust model that assumes the network can fail and keeps working when it does.
Reporting a vulnerability
We follow coordinated disclosure. Security fixes land on the current release line, and every channel shares one version number: the git tag, the npm package, and the crates.
Security FAQ
Is Offline Protocol end-to-end encrypted?
Yes. Every session is encrypted with MLS (RFC 9420), the IETF standard for group messaging security. Only the members of a session hold the keys to decrypt its traffic, and those keys never leave the device that generated them.
What can a relay see?
Ciphertext, and the addresses on the envelope. Relays forward MLS-encrypted payloads without the keys to open them and route by envelope, not content. A device relaying traffic for others cannot read it.
Does the protocol send anything to a server?
Local mesh traffic stays local. Messages between nearby devices travel peer to peer, end-to-end encrypted with MLS, and identity verification, routing, and service discovery happen device to device. Hosted services are opt-in and store only what they need: the internet relay carries sealed messages between devices that are far apart, OfflineID keeps accounts, and telemetry, off until your app enables it with a key from the developer portal, uploads scrubbed event summaries over TLS with no message content and no addresses. What each service keeps is set out in our privacy policy.
How are identities verified with no connectivity?
A peer's address is derived from its Ed25519 public key. Presenting the key proves the address, so verification needs no lookup, no certificate authority, and no round trip. A mismatch is refused and reported.
Are service discovery calls encrypted?
Calls are, once a session exists. Since SDK 0.29, a service request or response between two devices on 0.29 or later is sealed inside their MLS session as soon as it is confirmed, and the provider sees the requester that MLS authenticated. Discovery queries and answers, the first request to a provider a device has never met, and calls to older devices are control messages signed with the sender's Ed25519 key: attributable and tamper-evident, and readable by the devices that carry them. The HTTP front always carries a call inside an MLS-encrypted message.
What happens if a device is lost or a key is compromised?
Sessions with the affected peer are re-keyed, issued credentials expire on their fixed lifetime, and a reinstalled device binds a fresh key to the account through the hosted directory, so the account moves to the new key. Verifiers that work offline pick up the change the next time they refresh the credential.
How do I report a security issue?
Email security@offlineprotocol.com. We acknowledge within 48 hours, return an assessment and a remediation timeline within 7 days, and credit researchers in the release notes unless they prefer otherwise. Please do not disclose publicly until a fix is available.
Which versions receive security fixes?
The current release line, 0.31.x. A fix ships in the next release on that line, under one version number across the npm package, the crates on crates.io, the PyPI package, and the git tag.
Do apps that use telemetry need to update?
Yes, if they call enableTelemetry on SDK 0.26.0 to 0.29.0. Those versions trusted the whole bundled Mozilla root set for the telemetry upload, which still included an eMudhra root withdrawn after the October 2026 key compromise, so someone holding one of those keys on the network path could have read the telemetry API key and the batches. SDK 0.30.0 and later trust only the roots the ingest uses. Apps that never enable telemetry are not affected, and mesh traffic, which MLS protects end to end, was never part of it.

