Qarmor is a local-first browser application for encrypting and decrypting files. Its Rust cryptography core is compiled to WebAssembly, so files and keys stay in your browser—nothing is uploaded to a Qarmor server.
- Try it: https://qarmor.jesed.dev/
- CLI companion: qarmord
- CLI releases: https://github.com/jesedv/qarmord/releases
Open https://qarmor.jesed.dev/ in a browser.
- Encrypt: click Encrypt, pick a file, enter a passphrase → downloads
file.qarmor - Decrypt: click Decrypt, pick a
.qarmorfile, enter same passphrase → downloads original file
Everything runs locally in WASM. No upload to any server.
Qarmor v3 uses Argon2id plus ChaCha20-Poly1305 for passphrase encryption and ML-KEM-1024 (FIPS 203), HKDF-SHA-256, and ChaCha20-Poly1305 for recipient-key encryption. The complete public envelope header is authenticated as AEAD associated data; the original filename is encrypted with the file contents.
Passphrase, image, and SSH-key modes are only as strong as their secret input. WebAuthn mode requires an authenticator that supports the WebAuthn PRF extension; Qarmor does not derive an encryption key from a public credential identifier. Qarmor is not formally verified and should not be described as "quantum-proof" for every key method. See the v3 format.
No encryption method can promise permanent protection against every future quantum computer. The practical distinction is:
| Key method | Post-quantum status | Notes |
|---|---|---|
| ML-KEM-1024 key pair | Recommended for post-quantum recipient encryption | FIPS 203 ML-KEM-1024 establishes the file key; use this when someone else should be able to encrypt to you, including files committed to Git. |
| Passphrase | Conditional | ChaCha20-Poly1305 is symmetric cryptography, but security depends entirely on passphrase entropy. Use a unique, randomly generated secret for long-term protection; Argon2id cannot make a weak passphrase post-quantum. |
| WebAuthn PRF | Conditional | A compatible authenticator can supply high-entropy hardware-backed secret material. It must support the WebAuthn PRF extension; ordinary passkeys without PRF do not work for this encryption mode. |
| Image + passphrase | Conditional | The image is not a cryptographic secret. Only a high-entropy passphrase provides the meaningful security boundary. |
| Image only | Not recommended for post-quantum protection | Images are often copied, guessable, and low-entropy. |
| SSH (Ed25519) key | Not post-quantum | A sufficiently capable quantum computer can attack the elliptic-curve system behind an Ed25519 public key. |
ML-KEM is standardized by NIST as a KEM believed secure against adversaries with quantum computers, but this application has not been independently audited or formally verified.
For Git, CI, encrypted dotenv files, and in-memory process execution, install qarmord, the Qarmor CLI companion:
cargo install --git https://github.com/jesedv/qarmord --tag v0.3.1 qarmord
qarmord encrypt .env
qarmord run -- npm startSee the qarmord quick start and its release downloads.
.qarmor v3 files encrypted with a passphrase or an ML-KEM-1024 recipient key
are interoperable with qarmord. v2 files are deliberately not accepted; decrypt
them with the previous release before upgrading.
# Build the WASM package and static site
./scripts/dev.sh build
# Web UI
cd ui && npm run dev
# Tests
cargo test --workspaceQarmor is designed to process files locally, but browser extensions, malware, screenshots, and compromised devices remain outside its security boundary. See SECURITY.md for reporting and scope.
Contributions are welcome. Read CONTRIBUTING.md and CODE_OF_CONDUCT.md before opening a pull request.
MIT. See LICENSE.