An end-to-end encrypted messenger where the server stores nothing it doesn't have to.
Windows .exe · Linux AppImage + .deb · install instructions · privacy contract · macOS: coming soon
Cipher is a desktop messenger built around a privacy contract — a public document that says, line by line, what the server stores, what it does NOT store, and how anyone can verify the promise. Every claim is enforced by code and checked by automated tests in CI.
Cipher is also the first consumer-facing client for the Eidolon post-quantum vault identity system. Users can authenticate via an Eidolon keybundle (.eidolon_keybundle) instead of a traditional mnemonic — their vault file IS their key material, and Cipher never sees the raw secret.
If you've ever wondered "how do I know my messenger isn't lying about end-to-end encryption?", this repository is the answer for Cipher: read CIPHER_PRIVACY_GUARANTEES.md, then check the schema, then run the invariants.
| Property | Signal | SimpleX | Cipher | |
|---|---|---|---|---|
| Public privacy contract | ✗ | ✗ | partial | ✓ |
| CI-enforced privacy invariants | ✗ | ✗ | ✗ | ✓ |
| Server retains zero plaintext | ✓ | ✓ | ✓ | ✓ |
| Server retains zero IP / user-agent | ✗ | partial | ✓ | ✓ |
| Server retains zero auth log | ✗ | partial | ✓ | ✓ |
| Server-side message history | indefinite | ~30 days | none | 0–30 days, user-configurable |
| User owns and exports their data | partial | partial | ✓ | ✓ |
| Eidolon vault identity integration | ✗ | ✗ | ✗ | ✓ |
| Federated / self-hostable | ✗ | ✗ | ✓ | planned (post-1.0) |
- Download
Cipher-Setup-1.3.4.exefrom the latest release. - Windows SmartScreen will show "Windows protected your PC — Unrecognized app". This is expected during alpha — see the box below. Click "More info" → "Run anyway".
- Pick an install directory and finish.
About the SmartScreen / antivirus warning — please read before running
The Windows installer is not yet code-signed. SmartScreen and some antivirus engines (Defender, Avast, etc.) flag any unsigned
.exethey have not seen before. It is a heuristic, not a malware detection.Microsoft-validated code signing via Azure Trusted Signing is planned for the next release (the workflow scaffolding is already in place, see
docs/azure-trusted-signing.md; only the Azure account provisioning is left to do — ETA next week). Once active, SmartScreen will display "Cipher · Verified Publisher" and most antivirus warnings will go away on their own as the certificate accumulates reputation.Until then, three ways to convince yourself the binary is safe:
Read the source. Every line that ends up in the
.exeis in this repo. The build is reproducible from.github/workflows/release.yml; you can re-run it on a fork and get a byte-identical artifact.Check it on VirusTotal. Drop the
.exeon virustotal.com — most engines show clean. False positives on Electron apps are common (heuristics flag the embedded Chromium / Node), and you can compare across releases.Verify the SHA256 against
SHA256SUMS.txtpublished next to the binaries on the release page. Open that file in your browser, then compare the line for your download:# Linux — one-shot verification of every artifact in the file sha256sum -c SHA256SUMS.txt# Windows — print the local hash, eyeball-match the line in SHA256SUMS.txt Get-FileHash .\Cipher-Setup-1.3.4.exe -Algorithm SHA256
SHA256SUMS.txtis generated inside the GitHub Actions runner from the binaries it just built and published in the same job — there is no human in the loop between the build and the upload.If your antivirus quarantines the file outright, the fastest fix is a false-positive report to your AV vendor — clears the heuristic for everyone. Defender: aka.ms/wdsi.
Two formats are produced from the same CI build, both unsigned during alpha. Pick whichever matches your distro.
AppImage (works on most distros, no install required):
chmod +x Cipher-1.3.4-x86_64.AppImage
./Cipher-1.3.4-x86_64.AppImageDebian / Ubuntu (.deb):
sudo dpkg -i Cipher-1.3.4-amd64.deb
sudo apt-get install -f # only if dpkg reports missing dependencies
cipher # launch from anywhereBoth artifacts live on the latest release page next to the Windows installer.
Not yet shipped as a packaged binary. Code-signing macOS apps requires an Apple Developer Program subscription (99 $/year), planned alongside the CipherMobile iOS release. Mac users can build from source — the npm run build:mac target produces a working (unsigned) .dmg and .zip when run on macOS.
For paranoid users who want to verify the binary matches the source.
- Node.js ≥ 22
npm(bundled with Node)- A working internet connection (for fetching deps)
git clone https://github.com/Oykdo/cipher.git
cd cipher
npm install --workspaces
cd apps/frontend && npm install
cd ../bridge && npm install
cd ../..
# Windows installer
npm run build:win
# macOS DMG (requires macOS to run; produces unsigned binary on other OSes)
npm run build:mac
# Linux AppImage + .deb
npm run build:linuxThe installer lands in release/. Compare its SHA-256 with the value published on the GitHub release page.
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Cipher │ E2E ciphertext envelope │ Bridge │ E2E ciphertext envelope │ Cipher │
│ (Alice) │ ◀────────────────────▶ │ (Fastify │ ◀────────────────────▶ │ (Bob) │
│ │ │ on Fly) │ │ │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ PostgreSQL │ │
│ │ (ciphertext │ │
│ │ only, TTL 7d)│ │
│ └────────────────┘ │
│ │
▼ ▼
KeyVault sealed KeyVault sealed
by user password by user password
(mnemonic, master (mnemonic, master
key, history, key, history,
decrypted cache) decrypted cache)
- The server (
apps/bridge) is a routing relay. It sees opaque ciphertext envelopes and a recipient ID, nothing else. - The browser-grade frontend (
apps/frontend) does all the cryptography in the user's process: BIP-39 mnemonic generation, X3DH + Double Ratchet sessions, attachment encryption, time-lock via tlock/drand. - All long-term secrets (mnemonic, master key, decrypted message cache) live in an encrypted IndexedDB sealed by the user's password (PBKDF2-SHA256, 600k iterations).
- Messages are deleted server-side 7 days after delivery (configurable). Never-picked-up messages are dropped after 30 days.
- The user can export their full history at any time (
Settings → Backup → Export), bring it to a new device, and the server is never the source of truth.
The full picture is in Documentation/internal/MESSAGE_WORKFLOW.md.
The four invariants from CIPHER_PRIVACY_GUARANTEES.md are enforced in CI by apps/bridge/src/__tests__/privacy-invariants.test.ts. To run them yourself:
cd apps/bridge
DATABASE_URL_TEST=postgresql://user:pass@your-test-db npm run test:invariantsEach invariant has a one-line failure message that names the offending column, table, or row. Any regression breaks the build.
If you self-host the bridge, you can also inspect your own database directly:
-- Should list: attachments, conversation_members, conversation_requests,
-- conversations, identity_keys, messages, metadata, one_time_pre_keys,
-- refresh_tokens, signature_keys, signed_pre_keys, users.
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
-- Should return zero rows.
SELECT column_name FROM information_schema.columns
WHERE table_schema = 'public'
AND (column_name = 'mnemonic'
OR column_name = 'sender_plaintext'
OR column_name LIKE 'master_key%'
OR column_name LIKE 'password%');Cipher is alpha. It works end-to-end (we shipped the privacy-l1 milestone on 2026-04-27 with all invariants passing in production), but you're early. Specifically:
- Windows and Linux pre-built downloads are available now. macOS is not yet shipped as a packaged binary.
- Eidolon vault identity is live. Users can import an Eidolon keybundle to authenticate instead of using a BIP-39 mnemonic. The bridge stores only a PSNX SHA-256 hash — never the vault file itself.
- Mobile is in design. See
CipherMobile/ARCHITECTURE.mdfor the target architecture (React Native + Expo, same crypto core as desktop). - No code signing yet. The
.exeis unsigned during alpha; SmartScreen will scream. Mac signing requires an Apple developer account, Windows signing a code-signing cert — both planned for the 1.0 release. - No mobile push. That's blocked on the mobile companion app being built first.
What works today:
- Mnemonic-based account creation, locally generated, never sent to the server
- Eidolon keybundle login — import a
.eidolon_keybundlefrom your Eidolon vault and authenticate via PSNX hash proof (no mnemonic needed) - Quick-unlock via password (PBKDF2 600k, byte-compatible across devices)
- 1-to-1 E2E encrypted text messages (Double Ratchet + sender re-read via self-encrypting envelope)
- Group conversations (2–10 members, e2ee-v2 only, deterministic keypair per user)
- Attachment encryption + upload + download
- Burn-after-reading (server-side scheduler, true DELETE)
- Time-lock via drand (cryptographic, no server enforcement)
- Local export of full history to a password-encrypted file
- Vault resonance sphere — real-time PSNX tokenomics from Eidolon Connect
Research in progress. A third temporal primitive is being studied as a complement to time-lock and burn. Where time-lock controls when a message becomes readable and burn controls when it stops existing, this third axis would target how a message reveals itself across time. No release timeline yet — the design is being prototyped against the privacy contract before any implementation work begins.
If you can spare 20 minutes to install Cipher, create an account, send a few messages, and tell me what surprised you (good or bad), please open an issue or send me an email. The privacy story only matters if it's defensible to actual users — your honest reactions are worth more than another feature in this repo.
This repository is a monorepo:
Cipher/
├── main.js, preload.cjs — Electron entry
├── apps/
│ ├── frontend/ — React + Vite (the UI + crypto)
│ └── bridge/ — Fastify + Postgres (the relay)
├── scripts/ — Build + ops scripts (+ Eidolon venv bundler)
├── Documentation/internal/ — Design docs (workflow, audits)
├── CIPHER_PRIVACY_GUARANTEES.md — The contract (read this first)
├── INFRA_NOTES.md — Operational follow-ups
└── README.md — You are here
Sister projects in the same Chimera ecosystem (separate repos):
- CipherMobile — React Native + Expo companion (in design).
- Eidolon — Post-quantum vault identity system. Cipher is the first client to ship Eidolon keybundle authentication; the bridge verifies PSNX hash proofs and derives vault identities without ever seeing the raw key material.
If you've read CIPHER_PRIVACY_GUARANTEES.md and have a PR that respects the three pillars (decentralized, personal data portability, hardened security), please open it. Any PR that contradicts the contract — even with good intent — must be rejected per the contract's own governance section.
Bug reports are very welcome at this stage. Be specific: which OS, which build, what you did, what happened, what you expected.
MIT — do whatever you want with the code, just keep the notice.
This README describes Cipher as of v1.3.4 (2026-05-22). The French version
(README.fr.md) is the historical dev-focused doc and predates this
rewrite — it is being kept while it remains useful but the canonical product description
is here.