SimpleX Chat: The Messaging Platform Without User Identifiers
SimpleX Chat: The Messaging Platform Without User Identifiers
Most messaging apps claim to protect your privacy, but they all share one fundamental flaw: they assign you a persistent identifier — a phone number, username, email, or even a random ID. This identifier lets the platform (and any attacker who compromises it) map your social graph, track your activity, and correlate your communications.
SimpleX Chat eliminates this vulnerability completely. It is the first messaging network that operates without any user identifiers whatsoever — not even random numbers. Every message is delivered via a unique, unidirectional queue address that exists only for the duration of a single conversation.
What is SimpleX Chat?
SimpleX Chat is a privacy-first, end-to-end encrypted messaging platform built on the SimpleX Messaging Protocol (SMP). With 16,900+ GitHub stars and a rapidly growing user base, it offers:
- Zero identifiers — no phone number, username, email, or random ID required
- Double Ratchet E2EE — Signal Protocol encryption with an additional encryption layer
- Metadata protection — the server doesn't know who is talking to whom
- Self-hostable relays — run your own SMP server and stay in control
- Multi-platform — iOS, Android, desktop CLI, and terminal app
- Tor support — route traffic through Tor for enhanced anonymity
- File sharing — via the optional XFTP file transfer protocol
The platform is written in Haskell (server) with client apps in Swift (iOS), Kotlin (Android), and Haskell (terminal/CLI).
Why is it Trending?
In an era where metadata surveillance and data breaches are the norm, SimpleX's radical approach to privacy resonates deeply. Unlike Signal (which binds you to a phone number), Telegram (username-based), or Matrix (domain-based addresses), SimpleX offers true identity-free communication.
The platform completed a Trail of Bits security audit and is recommended by Privacy Guides and Whonix. In 2026, as privacy regulations tighten and surveillance concerns grow, SimpleX has become the gold standard for truly private messaging.
Architecture Overview
Core Components
- SMP Relay Servers — Lightweight message relays that temporarily hold encrypted messages in unidirectional queues. They do NOT store user accounts, require no authentication beyond queue authorization, and have no knowledge of user identities.
- Client Applications — iOS, Android, and desktop/terminal clients that generate queue addresses locally and manage encryption keys. All data lives on the client device, not the server.
- XFTP File Servers — Optional relay servers for file attachments, running the same no-identifier model as the SMP servers.
- Out-of-Band Key Exchange — Instead of a central directory, users share a one-time link or QR code (in person, over a video call, or via any channel they trust) to establish a connection.
How Messages Flow
- User A creates a unique message queue on an SMP server and generates a one-time invitation link containing the queue address and encryption key.
- User A sends this invitation link to User B via an out-of-band channel (QR code, link, in person).
- User B uses the queue address to send encrypted messages to User A. User A reads from the queue.
- For the reverse direction, User B creates their own queue and shares the address with User A through the established encrypted connection.
- Each direction has its own unidirectional queue — the server only sees encrypted blobs with no identifiers.
This design makes network-wide attacks impossible. Even if one SMP server is compromised, only messages passing through that server are affected, and affected clients can seamlessly move to other servers.
Prerequisites
To follow this tutorial, you'll need:
- A VPS (any Linux server, 1 GB RAM minimum, 10 GB storage)
- A domain name pointed at your VPS (
smp1.yourdomain.com) - Docker and Docker Compose installed on the server
- Basic familiarity with the Linux command line and firewall configuration (ufw)
Self-Hosting an SMP Relay Server
SimpleX offers three ways to deploy an SMP server: Docker, installation script, and manual setup. We'll cover Docker — the simplest approach.
Step 1: Configure DNS and Firewall
Point an A record for smp1.yourdomain.com to your VPS IP address. Then open the required ports:
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 5223/tcp
ufw enable
Port 5223 is the default SMP server port. Ports 80 and 443 are used for TLS certificate provisioning via Let's Encrypt (handled automatically by the Docker image).
Step 2: Create Persistent Directories
mkdir -p $HOME/simplex/smp/config $HOME/simplex/smp/logs
mkdir -p $HOME/simplex/xftp/config $HOME/simplex/xftp/logs $HOME/simplex/xftp/files
Step 3: Run the SMP Server
Replace smp1.yourdomain.com with your actual server domain:
docker run -d \
--name smp-server \
-e "ADDR=smp1.yourdomain.com" \
-p 5223:5223 \
-v $HOME/simplex/smp/config:/etc/opt/simplex:z \
-v $HOME/simplex/smp/logs:/var/opt/simplex:z \
simplexchat/smp-server:latest
Optionally, add -e "PASS=your_password" to password-protect the server via the control port.
Step 4: Verify the Server is Running
docker logs smp-server
You should see output indicating the server is initialized and listening on port 5223. The server automatically provisions a Let's Encrypt certificate using the domain you provided.
Running an XFTP File Server (Optional)
If you want file sharing support, run the XFTP server alongside the SMP server:
docker run -d \
--name xftp-server \
-e "ADDR=smp1.yourdomain.com" \
-e "QUOTA=50G" \
-p 443:443 \
-v $HOME/simplex/xftp/config:/etc/opt/simplex-xftp:z \
-v $HOME/simplex/xftp/logs:/var/opt/simplex-xftp:z \
-v $HOME/simplex/xftp/files:/srv/xftp:z \
simplexchat/xftp-server:latest
Set QUOTA to the maximum file storage you want to allocate (e.g., 10G, 50G, 100G).
Configuring the SimpleX Chat App
Once your SMP server is running, configure your SimpleX Chat app to use it:
- Open SimpleX Chat on your device
- Go to Settings → Network & Servers → SMP Servers
- Tap Add Server and enter:
smp1.yourdomain.com:5223 - The app will verify the connection and add the server to the rotation
All new contacts will now use your self-hosted server by default. Existing contacts can be migrated manually via the "Change receiving address" option in each contact's profile.
Verification Checklist
- SMP server is running:
docker ps | grep smp-server - Port 5223 is reachable:
telnet smp1.yourdomain.com 5223 - TLS certificate is valid:
curl -vI https://smp1.yourdomain.com:8443 - SimpleX Chat app connects to your custom server
- You can send and receive messages through your server
- (Optional) XFTP server is running and file attachments work
Comparison: SimpleX vs Other Messengers
- User identifiers: SimpleX = None, Signal = Phone number, Telegram = Username, Matrix = Domain address
- E2EE by default: SimpleX = Yes, Signal = Yes, Telegram = No (secret chats only), Matrix = Optional
- Metadata privacy: SimpleX = Complete, Signal = Partial, Telegram = None, Matrix = Partial
- Self-hostable: SimpleX = Yes, Signal = No, Telegram = No, Matrix = Yes
- Network structure: SimpleX = Decentralized, Signal = Centralized, Telegram = Centralized, Matrix = Federated
- No single point of attack: SimpleX = Yes, Signal = No, Telegram = No, Matrix = DNS-dependent
Resources
- Website: simplex.chat
- GitHub: github.com/simplex-chat/simplex-chat
- SMP Server (simplexmq): github.com/simplex-chat/simplexmq
- Server Setup Docs: SERVER.md
- Architecture Deep-Dive: SIMPLEX.md
- Whitepaper: simplexmq/protocol/overview-tjr.md
- Security Audit (Trail of Bits): simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html
- Privacy Guides Recommendation: privacyguides.org