We added encryption to Discord because they wouldn't.
A MV3 browser extension that adds end-to-end post-quantum age encryption to Discord.
Messages are encrypted on your device before being sent —
Discord's servers only see ciphertext.
- 🔒 End-to-end encryption – Messages are encrypted on the sender’s device and decrypted only on recipients’ devices.
- ✍️ Digital signatures – Messages are signed using public-key cryptography, providing authenticity and non-repudiation.
- 🔐 Passphrase protection – Encryption keys are unlocked with your passphrase for each session.
- ⚛️ Post-quantum cryptography – Uses ML-KEM-768×X25519 hybrid key encapsulation for quantum-resistant key exchange.
- 🦀 Memory-safe algorithms – Rust-based implementations of ML-DSA-87, Argon2id, XChaCha20-Poly1305, and SHAKE256 compiled to WebAssembly via rustcrypto-wasm.
Encryption uses age (ML-KEM-768×X25519 hybrid key agreement + ChaCha20-Poly1305), a modern and well-audited encryption format. Each message is also signed with an ML-DSA-87 signature, which guarantees that a message could only have been sent by the person who owns that keypair – any tampering or forgery is flagged immediately.
Your data is stored encrypted at rest on your device using Argon2id + XChaCha20-Poly1305. It is never uploaded anywhere.
✉️ Message format
Encrypted messages are sent as Discord file attachments (.age files). Each file begins with a version byte, followed by an ML-DSA-87 signature, a sender public-key hint, and the age ciphertext. The signature input binds a channelId (and serverId for servers) to prevent cross-channel replay. Messages are encrypted to all recipients and the sender, so the relevant parties can read the conversation.
Key fingerprints
Each contact's public key is displayed as a SHAKE256 (64-byte output) fingerprint. You can verify a contact's key out-of-band by comparing fingerprints with them directly if you wish.
🚧 Limitations
❌ No forward secrecy. If your private key is ever compromised, past messages encrypted to it could be read. Keep your passphrase strong and your private key safe.
🔏 No age compatibility. Agecord uses a custom message format to provide additional security properties within a instant messaging platform, making its encrypted files incompatible with standard age tooling.
See USAGE.md.
See TROUBLESHOOTING.md.
See NOTICES.md for the third-party notices.
Not affiliated with Discord Inc. Research project, use at your own risk.