SimpleX Chat rethinks secure messaging by eliminating user identifiers entirely — no phone numbers, emails, or even random UUIDs. Instead, it uses one-time invitation links to establish pairwise addresses unique to each contact. This approach fundamentally changes how routing and message delivery work under the hood, offering a different privacy model from apps like Signal or Matrix.
What simplex chat does and how it is structured
SimpleX Chat is a messaging protocol and client implementation written in Haskell. Its main architectural feature is the absence of any persistent user identifiers. Connections between users happen through one-time invitation links. Each link generates pairwise addresses used exclusively between two contacts, so every contact sees a different address for the same user.
The protocol relies on relay servers that temporarily hold encrypted messages. These servers are designed not to know any metadata about sender or receiver relationships, preserving privacy at the network layer. Data storage is entirely client-side, which means users keep their chat histories locally rather than on centralized servers.
Cryptographically, SimpleX Chat uses double ratchet end-to-end encryption — similar in spirit to Signal’s protocol — but adds an additional encryption layer to further protect message metadata. The relay servers only handle encrypted payloads, never decrypting or having routing context beyond temporary message forwarding.
The project supports self-hosted relay servers and maintains interoperability with the public SimpleX network. Deployment targets include mobile apps for iOS and Android, as well as a terminal CLI client available on Linux, macOS, and Windows. This multi-platform support extends the protocol’s reach beyond just mobile devices.
Technical strengths and tradeoffs of the identifier-less architecture
The standout technical aspect of SimpleX Chat is its identifier-less design. Most messaging apps rely on stable user identifiers — phone numbers, emails, or randomly assigned UUIDs — to route messages and manage contact lists. SimpleX avoids this completely, instead deriving pairwise addresses from one-time links.
This design provides strong privacy guarantees because no persistent identifier can be linked to a user across contacts. Each contact relationship is unique and isolated, reducing metadata leakage about social graphs and contact patterns.
However, this approach brings tradeoffs. Managing pairwise addresses and routing messages via relay servers requires more complex state management on the client side. Users must handle address derivations and maintain local storage of contact-specific keys and histories.
The relay server architecture is intentionally minimalistic, holding only encrypted messages temporarily. This means the system depends on clients being online or frequently connecting to pull messages — a tradeoff compared to always-available centralized servers.
Implementing this protocol in Haskell is an interesting choice. Haskell’s strong type system and functional paradigm can help model complex cryptographic protocols and state transitions safely. The code quality is surprisingly clean given the complexity of the protocol layers, with a clear separation between core protocol logic, encryption layers, and networking.
Still, Haskell can be a steep learning curve for many developers, and the niche language choice may limit community contributions or adoption speed.
Quick start
SimpleX Chat offers several ways to get started quickly:
Mobile apps are available for Android (Google Play and APK) and iOS (App Store and TestFlight). The TestFlight preview for iOS allows early access to new features but is limited to 10,000 users.
The terminal app can be installed quickly with this command:
curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash
After installation, run simplex-chat from your terminal to launch the client.
More detailed installation and usage instructions are available on the project’s website and README.
Verdict
SimpleX Chat is a technically intriguing experiment in privacy-preserving messaging. By removing user identifiers and relying on pairwise addresses with relay servers, it offers a fresh privacy model that avoids metadata leakage common in mainstream apps.
This project is particularly relevant for privacy-conscious users and researchers interested in alternative cryptographic messaging protocols. The client-side data storage and relay server model emphasize decentralization and user control.
However, the identifier-less architecture introduces complexity in managing contacts and message routing. It requires users to adopt new mental models around messaging identities and depends on clients for data availability.
The Haskell implementation showcases strong protocol design and code quality but might be less approachable for developers unfamiliar with the language.
Overall, SimpleX Chat is worth exploring if you care deeply about metadata privacy and are comfortable experimenting with novel communication protocols. For general users seeking mainstream ease-of-use, more conventional apps may still be preferable.
→ GitHub Repo: simplex-chat/simplex-chat ⭐ 11,014 · Haskell