Skip to content
OpenE2EE

What your relay can see

The relay never needs message plaintext or device private keys. It does need routing metadata.

The delivery envelope, field by field

Plaintext and long-term private keys exist only inside a device. This is what a relay adapter receives. Sealed sender omits two of these fields.

One message traveling from one device to another through a relay Two outlined devices with readable contents and a private key inside each. Between them, sealed envelopes drawn as solid slabs leaning in the direction of travel, carrying metadata ticks on their outside edge, and the OpenE2EE mark standing in for the relay. Dotted brass rules mark where the message is sealed and where it is opened.Device A · readableDevice B · readablesealopenmetadata visiblesealedsealedrelay · never needs plaintext One message traveling from one device to another through a relay Two outlined devices with readable contents and a private key inside each, one above the other. Between them, sealed envelopes drawn as solid slabs leaning in the direction of travel, carrying metadata ticks on their outside edge, and the OpenE2EE mark standing in for the relay. Dotted brass rules mark where the message is sealed and where it is opened.Device A · readablesealsealedmetadata visiblerelay · never needs plaintextsealedopenDevice B · readable

Some fields appear only in context: recipientRegistrationId accompanies the initial handshake envelope. contentHint is optional. deliveryClass selects durable delivery or an online-only hint. Your relay also assigns its own message identifier and server timestamp.

What sealed sender does not hide

Sealed sender omits the sender fields. It does not make a sender anonymous.

  • Anonymity does not compose over a conversation

    One-sided anonymity breaks when two parties exchange several messages. NDSS 2021 research linked sealed-sender users after as few as five messages, using delivery receipts. Later work extended the technique to whole group conversations. Whether your application supplies that signal is your design decision.

  • When, and roughly how much

    Timestamps are plaintext. Message bodies are padded into 160-byte buckets, which coarsens length without concealing it. Attachments travel through a separate object store.

  • Network-level metadata

    Addresses, connection timing, and traffic patterns belong to your transport and deployment. This SDK implements no decoy traffic and no timing jitter.

  • Sealed sender is best effort

    If the recipient profile key or identity key is unavailable, the client falls back to identified delivery rather than failing the send.

Threat model boundary

An attacker in full control of your relay can serve stale or hostile responses and observe every routing field above. Once trust is pinned, an identity substitution that would reach plaintext fails closed.

First contact is trust on first use. A relay that is hostile from the first message can substitute an identity before trust is pinned. A safety-number comparison closes that gap. After trust is pinned, substituting either half of the identity tuple fails closed until a rotation is explicitly accepted.

Threat model (opens in a new tab)

What there is to check

Each figure carries the date it was measured.

7,073
test cases across 400 modules, 0 failing and 2 skipped, on 2026-09-12. An export is only cut from a revision where they pass.
6
direct production dependencies: @noble/ciphers, @noble/curves, @noble/hashes, @noble/post-quantum, async-lock, unique-names-generator. They resolve to 6 packages in total. The only edges inside the tree run between the @noble packages. Everything else is a development or optional peer dependency.
7
published specifications the implementation profile is pinned to, by revision, in the SDK README (opens in a new tab).
72 hours
to acknowledge a vulnerability report sent to security@open-e2ee.dev, and 7 days to an initial assessment. Resolution targets by severity: critical 24 to 72 hours, high 1 to 2 weeks, medium 2 to 4 weeks, low the next release cycle. Good-faith research on the SDK is covered by the safe harbor in the policy. Do not open a public issue. The full policy is in the repository (opens in a new tab).

Assurance (opens in a new tab)

Published limits

Take this to whoever signs it off

Enterprise and OEM agreements include a scoped security review, service levels, and negotiated portfolio or redistribution rights.

Licensing

Email security@open-e2ee.dev with a threat-model question, or an answer you need for a questionnaire. No license, meeting, or account first. If you are earlier than that, read E2EE changes your application architecture.