atcomm

atproto DMs over DIDComm

End-to-end encrypted direct messages for your atproto identity.

Why it exists

Direct messages on today's atproto apps are not end-to-end encrypted, and there is no open, published way to do E2EE DMs bound to an atproto identity. Existing E2EE options are proprietary. atcomm publishes an open binding, a small lexicon plus a DIDComm v2 profile, so any client, in any language, can interoperate.

How it works

Your messaging identity is your atproto identity. You publish a keyPackage record in your own PDS pointing at a DIDComm messaging key and the mediator(s) that hold your mail. To message someone, resolve their handle, fetch their keyPackage, and send a DIDComm v2 encrypted message via their mediator. Infrastructure sees ciphertext only.

handle  →  DID  →  PDS keyPackage  →  did:peer + mediator  →  DIDComm v2 (E2EE)

Roughly: an MX record for end-to-end-encrypted messaging.

The spec

The binding is published as two lexicons and a DIDComm message profile:

See the spec for record shapes, the message envelope, and the raw lexicon files.

Self-hosting

Self-hosting atcomm is, at its core, running a DIDComm mediator: one standard, open-source component. Everything else is already open (the clients and the lexicon), so the only piece of infrastructure you run is the mediator. Two independently hosted mediators interoperate by construction, so you are never locked into ours.

A dedicated self-hosting guide is coming separately. For now, see the source repository.

Limitations

This is a proof of concept. What it does not do yet, stated plainly:

Request access

The demo is invite-only during the proof of concept.

Invites are coming soon. Check back shortly.