Comparison
Keylane compared with Signal, Matrix, Session, Threema and SimpleX
Comparison pages written by vendors are usually worthless, because the vendor picks the rows. We have included the rows where Keylane loses, because a table you cannot trust is not worth reading.
Compiled 18 August 2026 from public documentation and vendor security whitepapers. The SimpleX column was added 19 August 2026, checked against v6.5.6 and its published source. Found something out of date or wrong? Tell us and we will correct it.
Signal is the most mature and most thoroughly audited of these, and for most people it is the right default. SimpleX goes further than we do on metadata — no user identifiers at all, self-hosting that works today, and two published audits — and if metadata is your first concern it is the strongest thing on this page. Keylane is worth considering for two things nothing else here does the same way: post-quantum protection applied to whole conversations, group messages and identity keys included, rather than to the opening handshake alone; and on-device storage whose key is destroyed every time you lock the app, by default and on every platform, rather than as an expert option. Identity without a phone number matters too, but Threema shipped that years ago and Matrix has federated for longer than we have existed. On almost everything else — completed audits, published client source, self-hosting, maturity — the older projects have a head start we do not pretend to have closed.
Feature comparison
| Keylane | Signal | Matrix | Session | Threema | SimpleX | |
|---|---|---|---|---|---|---|
| Phone number required | No | Yes | No | No | No | No |
| Identity model | Device key pair | Phone number | Homeserver account | Random Session ID | Random Threema ID | No identifier, per-contact queues |
| Network architecture | Federated | Centralized | Federated | Decentralized onion network | Centralized, Swiss | Client-composed relay network |
| End-to-end encryption | Always on | Always on | On by default for private rooms | Always on | Always on | Always on, except public channels |
| Post-quantum key exchange | Yes, hybrid | Yes, hybrid | Not standard | No | Announced, not shipped | Yes, hybrid |
| Post-quantum in group chats | Yes, per-device wraps | Yes, via pairwise sessions | Not standard | No | Announced, not shipped | No, direct chats only |
| Post-quantum identity keys | Yes, Ed25519 + ML-DSA | No | No | No | No | No |
| Forward secrecy | Yes | Yes | Yes | No, by design choice | Yes, since Ibex | Yes |
| Server stores sender identity | No | No, sealed sender | Yes | No | Yes, routing IDs | No |
| Server can link your conversations to each other | Yes, by destination device ID | Yes, by account | Yes, by account | Yes, by Session ID | Yes, by Threema ID | No, one queue per contact |
| Server-side history | No, 14-day spool | No | Yes, encrypted room state | No, short TTL | No, dropped on delivery | No, 21-day spool |
| Hides your IP from the server | No | No | No | Yes, onion routed | No | Partly, two-hop routing; yes over Tor |
| Self-hostable server | In development | No | Yes | Service node network | Yes, commercial OnPrem | Yes |
| Client fully open source | Core only, full release in preparation | Yes | Yes | Yes | Yes | Yes, AGPLv3 |
| Independent security audit | Not yet | Yes | Yes | Yes | Yes | Yes, two reviews |
| Voice and video calls | Yes | Yes | Yes | Yes | Yes | Yes |
| Desktop client | Planned | Yes | Yes | Yes | Yes | Yes |
| Same identity on several devices | No, one device today | Yes, linked devices | Yes | Yes | Yes | No, by design; desktop drives the phone |
| Maturity | Public beta | Mature | Mature | Mature | Mature | Mature |
| Funding model | Self-funded company | Non-profit foundation | Foundation and vendors | Foundation and token | Paid app purchases | Venture capital, token planned |
On the phone itself
Comparisons usually stop at the network hop, where all six of these are strong. But the copy of your conversation that lives longest is the one sitting on your own device, and that is the copy a thief, a border officer, or a forensic suite actually gets. What differs enormously is how much of it a seized phone gives up.
Every app here encrypts with a full-entropy random key; none of them derive it from anything you type, and Keylane does not either. So the question that decides the outcome is not the cipher or the key length but what has to happen before that key can be used again. A key the app can unwrap unattended is a key an examiner with the phone can unwrap too. A key wrapped under a secret of yours resists that, and instead becomes as strong as the secret — which is why what the app lets you choose as that secret matters as much as the cipher. Keylane’s takes 4–32 arbitrary characters, typed on a keypad the app draws itself.
| Keylane | Signal | Matrix | Session | Threema | SimpleX | |
|---|---|---|---|---|---|---|
| Content key itself | Random 256-bit | Random 256-bit | Random | Random 256-bit | Random 256-bit | Random, or your passphrase |
| Message content encrypted by the app | Yes, per record and per file | Yes, whole database | Client-dependent | Yes, whole database | Yes, whole database | Yes, whole database |
| Opening it needs a secret you know | Yes, your PIN unwraps it | No | No | Optional, desktop only | Optional, Android only | Optional, off by default |
| Where the key rests while the app is closed | Wrapped under your PIN, nowhere else | OS keystore, usable unattended | Keystore, keyring, or browser storage | Keystore on mobile, config file on desktop | Keystore, under your passphrase if set | Keychain or Keystore; nowhere, if you set a passphrase |
| Locked app on a seized phone gives up history | No | Yes, with keystore access | Yes | Yes | Yes, unless a passphrase is set | Yes, unless a passphrase is set |
| Keys erased from hardware when the app locks | Yes | No lock of that kind | No | No | On restart, if a passphrase is set | No |
| Copied store attackable offline, without the device | Yes, at the entropy of your secret | No, wrap key never leaves the phone | Client-dependent | Mobile no, desktop yes | Yes, unless a passphrase is set | Only with a passphrase set, at its entropy |
| Readable with no key at all | Timestamps, ordering, contact IDs, ratchet state, call log | Nothing | Client-dependent | Nothing | Nothing | Nothing |
| Duress code that wipes the data | No | No | No | No | No | Yes, self-destruct passcode |
Two of those rows are a design choice rather than a scoreboard. Encrypting the whole database file, which is what SQLCipher does for Signal, Session and SimpleX, leaves nothing legible without the key — the structure in the last row included. Encrypting record by record, as Keylane does, leaves that structure exposed but means a running app never holds a decrypted archive at all: only what is on screen is in the clear, and the key comes out of hardware one operation at a time, so a live memory capture takes the screen rather than the history. The cipher strength is equivalent either way; the two choices survive different attacks. The reasoning, and what it costs us, in full.
Forensic work splits a seized phone into two states. Before First Unlock — powered off, passcode never entered since boot — is close to a sealed box for every app on this page, ours included. After First Unlock is the phone in your pocket, screen locked, unlocked once since it booted. That is the state phones spend nearly all their time in, and the state almost every real seizure catches them in.
So the fourth row is not one row among nine; it is the one the others are a rehearsal for. An app whose store key can be unwrapped without you present hands over the whole history in that state — which covers Signal, Session, Element, Threema without its passphrase, and SimpleX in the configuration it ships with. Keylane is the one entry where that is never the case, because the key was destroyed when the app locked and the only thing that regenerates it is a PIN that exists in your head. SimpleX reaches the same place, but only for the minority who set their own passphrase and decline to store it on the device. That single row is the reason the app is built the way it is.
The rows we lose are worth just as much of your attention: a copy of the profile taken away and attacked offline, the metadata sitting in the clear either way, and the duress code SimpleX has and we do not. The first of those is now bounded by the secret you pick rather than by ten digits — the keypad takes letters and symbols, up to 32 characters — but it is bounded by nothing else, and the default is still four to ten digits.
- Signal
- On Android the message database is SQLCipher-encrypted, but its key is wrapped by an Android Keystore entry the app can use at any moment, with no PIN or passphrase in front of it. A full-filesystem extraction plus Keystore access reads the whole history; the app’s screen lock gates the interface, not the key. On desktop that key sat in plain text in
config.jsonfor roughly six years, until a change in July 2024 moved it behind Electron’ssafeStorage— DPAPI on Windows, Keychain on macOS, the session keyring on Linux. That stops a different user account on the same machine. It does not stop code running as you, which is the case that matters. - Session
- A Signal fork, so its mobile storage behaves much the same. On desktop it is a step behind: the SQLCipher key is written to
config.jsonin the clear unless you set an application password, and published forensic walkthroughs treat that file as the entire answer. Setting the password is the difference between an encrypted database and a decorative one. - Matrix
- There is no single answer, because Matrix is a protocol with many clients — which is itself the finding. Element Android encrypts its local store under a Keystore-held key; Element Desktop keeps its pickle key in the system keyring; Element Web holds room data and crypto state in IndexedDB, protected by browser-profile boundaries rather than by anything you supply. Assume nothing about a given Matrix client until you have read that client’s own storage documentation.
- Threema
- One of the two apps here, with SimpleX, that will put a secret of yours in front of the database. On Android its own AES-256 layer covers messages, media, and the ID private key, and the master key can be wrapped in an optional Master Key Passphrase, re-entered after every restart; Threema states plainly that without one the protection is limited. On iOS it leans on the platform instead — Data Protection keyed to your device passcode, with the ID key in the Keychain. Its in-app PIN lock is a UI gate with no cryptography behind it. Worth noting against our own row above: a well-chosen Master Key Passphrase used to resist an offline attack on a copied store better than a Keylane PIN could, because it took arbitrary characters where ours took ten digits. That gap is closed — Keylane’s secret now takes the same arbitrary characters — and the difference that remains is which way round the protection is optional: Threema’s passphrase is opt-in and Android-only, and without one Threema says plainly that the protection is limited, while a Keylane secret is required on every platform.
- SimpleX
- Its SQLCipher database is opened with a passphrase generated at random when you install, and kept in the platform store — on iOS as a Keychain item created with
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, which is precisely the state a seized phone is normally in. An extraction that reaches the keychain therefore reads the whole database, and SimpleX Lock gates the interface rather than the key. It also offers the strongest opt-out on this page: you can replace that random passphrase with one of your own and decline to store it on the device at all, after which a stopped app yields nothing and the offline attack is bounded by your passphrase over PBKDF2-SHA512, at iteration counts comparable to ours. The costs are typing it at every launch and losing reliable notifications, and it is off by default. On desktop the database is not encrypted at all unless you choose a passphrase — skip the prompt and the random one is written to disk in the clear. Two things SimpleX has that we do not: everything lives inside the encrypted database, including the metadata we leave legible, and a self-destruct passcode wipes the data and opens a decoy profile. - Keylane
- Records and files are encrypted individually rather than by locking one database, under a random 256-bit key. Your PIN does not become that key; it derives, through 600,000 PBKDF2 iterations, the key that unwraps the profile the storage key sits in. While the app runs, the storage key is instead sealed by a Secure Enclave or Keystore key that is deleted outright the moment Keylane locks, so an image captured after that cannot be opened later, by an examiner or by us. Two honest costs. The shape around the content — timestamps, ordering, unread counts, your contacts’ Keylane IDs, live ratchet state — is stored in the clear. And an adversary holding a copy of the profile can attack it offline, where no attempt limit applies, at whatever the secret is worth: four digits is trivial, ten digits is around thirty-three bits and a matter of days on rented GPUs. That ceiling is a property of digits rather than of the derivation, which is why the keypad also draws letters, numbers and symbols — 4–32 characters, no system keyboard involved, so nothing you type passes through a third-party IME. Ten mixed characters is roughly sixty-five bits — on the order of four billion times the work — and a short passphrase is more again; the same 600,000 iterations then run over it unchanged. Two honest caveats on that: the numeric pad is still the default, and a random key sealed in a phone’s secure hardware, as Signal uses, has no offline attack against it at all, whatever you type. The whole design is written out in client security.
Every app here decrypts your messages in order to show them to you, so an implant running while the app is unlocked reads plaintext regardless of how the keys are stored. On-device encryption answers for the seized, stolen, and imaged phone — not the compromised one.
And Keylane has no desktop client yet, so it sits out the desktop half of this comparison rather than winning it.
Where each one is strongest
Signal
The best-audited encrypted messenger available, run by a non-profit with no commercial incentive to change. Its protocol is the reference the rest of the field is measured against, including ours.
The trade: a phone number is mandatory, and the network is centralized. If your concern is that a number ties your identity to a real person, that is not a problem Signal is trying to solve.
Matrix
The most established federated protocol, with a large ecosystem, mature self-hosting, and bridges into almost every other network. Well suited to organizations that want to own the whole stack.
The trade: homeservers hold substantial room state and metadata, so a compromised server reveals considerably more than a Keylane relay would.
Session
The only one here that hides your IP address from the network by routing through onion nodes. If network-level anonymity is your requirement, this is the one that addresses it directly.
The trade: Session dropped forward secrecy as a deliberate design decision. A future key compromise exposes past messages in a way it would not on the others.
Threema
Phone-number-free identity, shipped years ago, audited, and sold as a paid app rather than funded by anything else. It is also the only other client here that will put a passphrase of yours in front of its local database.
The trade: the network is centralized and Swiss, federation is a commercial on-premises product rather than something an individual runs, and post-quantum key exchange is announced but not yet shipped.
SimpleX
The most thorough answer to metadata here. There is no account and no user identifier of any kind: each contact is reached over its own pair of one-way queues, so a relay cannot tell which conversations belong to the same person, and two-hop private routing keeps your address away from your correspondent’s server. Open source throughout, two Trail of Bits reviews, self-hostable today.
The trade: post-quantum protection covers direct chats only — group messages and signature keys are still classical — and the scalable public-channel format is not end-to-end encrypted at all. One identity across several devices is unsolved by their own account, and the at-rest protection that matches ours is a passphrase you have to opt into.
Keylane
Post-quantum protection across the whole conversation rather than its first handshake: group payloads are wrapped per device with the same hybrid key exchange, and identity keys are hybrid as well. Local storage whose key is destroyed in the device’s hardware the moment you lock the app — the default everywhere, with no passphrase to opt into. Identity is a key pair rather than a phone number, and the relay keeps no sender records.
The trade: the youngest project here. No completed independent audit, the full client source still in preparation, self-hosting unfinished, and no desktop client yet.
What about WhatsApp, Telegram and Viber?
Those three are where most of the world actually messages, so their absence from the table needs an explanation rather than a silence. They are absent because including them would flatter us. They would lose almost every row, and a table in which the vendor’s own product wins fifteen out of sixteen tells you about the vendor’s choice of rows, not about the products.
There is a category problem too. Telegram’s ordinary chats are not end-to-end encrypted at all, so a cell reading “yes” on the strength of its Secret Chats would mislead more than it informed. What follows is the short, fair version of each instead.
The encryption is not the weak point, and anyone who tells you otherwise is overselling their alternative. Messages and calls are end-to-end encrypted by default, using the same Signal protocol Signal does.
The objections are everything around it. A phone number is mandatory, the client is closed source, and the metadata — who you talk to, when, how often, from which address, in which groups — is exactly the part Meta needs and the part no end-to-end encryption covers. On the device, the message database is encrypted with a key that sits in the app’s own directory for anything with filesystem access to collect, which is the same shape as Signal’s Android storage. End-to-end encrypted cloud backups exist, but they are opt-in; if you never turned them on, the copy in Google Drive or iCloud is not protected from WhatsApp itself.
Telegram
The one where the default genuinely matters. Cloud chats — every group, every channel, and every ordinary one-to-one conversation — are encrypted between you and Telegram’s servers rather than end to end, and Telegram holds those keys.
Its end-to-end mode, Secret Chats, is one-to-one only, does not sync across your devices, and is not available in the desktop client at all, so a good number of people who believe they are using it are not. The underlying MTProto design has never earned the reputation the Signal protocol has. The clients are published source; the server is not. Of everything named on this page, Telegram is the only one whose everyday messages are readable to a compromised or compelled server — which makes it the one case where switching changes whether you have end-to-end encryption, rather than how good it is.
Viber
End-to-end encrypted by default for one-to-one chats, group chats, and calls since 2018, which puts it on the wire in the same category as WhatsApp.
What is missing is everything that would let you verify that. The client is closed source, there is no published independent audit of the implementation to point at, and the local message store on Android has long been an ordinary SQLite database that forensic tools read directly, without the encrypted-store layer every app in the table above has. A phone number is mandatory. It is owned by Rakuten, and it carries advertising.
Which should you use?
Most people should use Signal. It is mature, audited, well funded, and the encryption is excellent. Recommending a beta product to someone who just wants private messaging would be self-serving.
Use Matrix if you are an organization that wants to own its infrastructure today and needs bridges to other networks.
Use Session if hiding your IP address from the network is a hard requirement and you accept the forward-secrecy trade-off.
Use SimpleX if metadata is your first concern — if what matters most is that no server can work out which conversations are yours — and you accept group chats that are not post-quantum, a desktop app that mostly drives your phone, and a passphrase you must set yourself for the strongest storage protection.
Use Threema if you want identity without a phone number from something mature and audited today, and you would rather pay for the app than wait for federation or post-quantum.
Use Keylane if you want post-quantum protection over whole conversations rather than the handshake alone, and a locked phone that gives up nothing without your PIN — and you are comfortable running beta software while the audit, the client source release and self-hosting land.
These are not exclusive. Installing more than one costs nothing, and the right answer for a threat model that matters is usually not to depend on any single tool.
Check our claims
Every claim made about Keylane in the table above is documented rather than asserted. Start with the threat model, which is where the limits are written down.