Jabber/XMPP Instant Messaging
Why this post?
You probably use WhatsApp, Telegram, or Signal for everyday messaging. They’re convenient, no doubt. But there’s a catch: with all of them, you’re locked into one company’s platform. You can’t message a Telegram user from WhatsApp, and vice versa. Your account lives on their infrastructure, under their rules.
There’s also a bigger concern looming. The EU’s Chat Control legislation. You can read more about it here.
The bottom line: if the platform controls the encryption and the servers, a policy change is all it takes to compromise your privacy.
What is XMPP?
XMPP (Extensible Messaging and Presence Protocol) is an open standard for instant messaging — think of it as what email is to communication, but for chat. Just like you can email a Gmail user from a Proton Mail account, XMPP lets you message anyone on any XMPP server, regardless of who hosts it.
Some notable history: Google Talk used XMPP. Facebook Chat and WhatsApp both started on XMPP before they closed themselves off into walled gardens. The protocol has been around since 1999 and powers a federated, decentralised messaging network that nobody owns.
Key advantages:
- Federation: Pick your server, talk to anyone on any other XMPP server. No walled gardens.
- OMEMO encryption: End-to-end encryption that you control — no server-side scanning possible.
- Self-hostable: You can run your own XMPP server for full sovereignty.
- Standard-based: No single company can change the rules or lock you in.
Quick start (for a new user)
The easiest path: 3 steps, under 5 minutes.
- Go to conversations.im and create a free account. You’ll get a
username@conversations.imaddress — just like an email address, but for chat. - Install the Conversations app on Android (or ChatSecure on iOS). Log in with your new address.
- That’s it. Share your
username@conversations.imaddress with friends and start chatting. OMEMO encryption turns on automatically when both sides support it.
Need help? Contact me — happy to assist.
How XMPP works (slightly more detail)
Basically you need two things:
- Choose a server to register your account (just like choosing an email provider);
- Log in from any XMPP client (just like you’d use Thunderbird, Outlook, or a web client for email).
Your account is portable — you can switch clients anytime without losing your identity.
XMPP Servers
There are many servers to choose from, and this could be overwhelming for new users. Different servers support different XMPP Extension Protocols (XEPs). compliance.conversations.im is the best place to check if a server is compliant. xmpp-servers.404.city provides a list of public servers.
Always look for OMEMO support for end-to-end encrypted, private messages.
My recommendations:
- conversations.im — free,
username@conversations.imaccount, paid option to use your own domain. The Android app is paid, but worth it.
XMPP Clients
You can use your account in any XMPP client. Just like email, you can change it anytime and keep the same address. See xmpp.org/software/clients.html for a full list.
My recommendations:
- Conversations — Android, paid app (also available free via F-Droid)
- Snikket — Android, free app, good alternative
- Gajim — Linux/Windows (install the OMEMO, HTTP Upload and URL image preview plugins)
- Profanity — Terminal-based XMPP client
- ChatSecure — iOS
- Monal — Alternative iOS client
More information
Great reads about XMPP: Daniel Gultsch’s blog
Conversations FAQ with useful information: Conversations codebase
Not getting notifications? It might be your phone killing the app: dontkillmyapp.com
Interesting articles:
Backing Up Your XMPP Chats
Unlike centralized messengers, XMPP doesn’t automatically sync your chat history to the cloud. This gives you control over your data, but it also means you’re responsible for backing it up.
Here’s how to do it properly.
- Server-Side Archival (MAM)
Many XMPP servers support XEP-0313: Message Archive Management (MAM). When enabled:
- Your messages are stored on the server
- New devices can fetch your chat history when logging in
- History persists across client reinstallations
Important limitation: MAM does not work for OMEMO-encrypted messages due to forward secrecy. The server sees only encrypted blobs and cannot reconstruct readable history.
Check your server’s MAM support: Visit compliance.conversations.im to see which XEPs your chosen server implements. https://compliance.conversations.im/
- Local Encrypted Backups (.ceb files)
The Conversations Android app supports built-in encrypted backups:
- Creates .ceb (Conversations Encrypted Backup) files
- Stored locally on your device (usually /sdcard/Conversations/backup/)
- Protected by a password you set
- Can be restored to a new device during migration
How to create a backup in Conversations:
- Open the app → Settings → Account → Backup
- Set a strong password
- Tap “Create backup”
- Copy the .ceb file to a safe location (external drive, cloud storage, etc.)
- Exporting to Plain Text (ceb2txt)
Want your chats in human-readable format? Use ceb2txt: https://codeberg.org/iNPUTmice/ceb2txt
- Converts .ceb files to plain .txt files
- Each conversation becomes a separate text file
- Requires Java 17+
Example usage on Arch Linux:
java -jar ceb2txt.jar /path/to/backup.ceb --output ~/xmpp-export/
This is useful for:
- Long-term archival in a format you can read decades later
- Searching your chat history with grep or text editors
- Portability if you ever switch away from XMPP
- Client-Side History (Gajim, Pidgin, Desktop Clients)
Desktop clients typically store chat logs locally:
| Client | Storage Location | Notes |
|---|---|---|
| Gajim | ~/.local/share/gajim/logs/ | SQLite or plain text, depending on config |
| Pidgin | ~/.purple/logs/ | HTML/text files organised by account |
| Profanity | ~/.local/share/profanity/logs/ | Plain text, easy to grep/search |
Back up these directories regularly. On Arch Linux, a simple rsync cron job or incremental backup tool works well.
Useful links:
- Conversations Backup Guide
- ceb2txt Repository
- XEP-0227: Portable Import/Export Format — Standard being developed for future cross-platform data portability
What makes XMPP backups different?
With WhatsApp or Signal, your message history is tied to your phone number and backed up to their servers (or a cloud account like Google Drive/iCloud). With XMPP:
- Your identity (username@server) is portable
- Your message history is yours alone — no cloud, no vendor lock-in
- You must actively manage backups; there’s no automatic safety net
This trade-off is the price of sovereignty. It takes more effort upfront but pays dividends in long-term control and privacy.
Useful XMPP Links
Official Documentation
- xmpp.org — The official XMPP Standards Foundation site
- Technology Overview — Beginner-friendly introduction
- XMPP Core Specification (RFC 6120) — The fundamental protocol specification
- XMPP Instant Messaging Specification (RFC 6121) — IM and presence extensions
Server Compliance & Selection
- Compliance Checker — Verify if a server supports required XEPs
- Public Server List — Curated list of public XMPP servers
- Server Comparison Wiki — Community-maintained server features table
Security & Encryption
- OMEMO Overview — OMEMO encryption overview
- XEP-0384 (OMEMO) — Standard specification
- Security Best Practices — XMPP Security Council resources
- DontKillMyApp — Fix notification issues caused by aggressive battery optimisation
Self-Hosting
- Prosody Server — Lightweight Lua-based XMPP server (popular choice)
- ejabberd — Erlang-based enterprise XMPP server
- Openfire — Java-based server
- Install Guide (Arch Wiki) — Arch-specific server setup
Community & Discussion
- XMPP Dev Channel — Developer communications hub
- Stack Overflow XMPP Tag — Q&A for technical issues
Privacy & Policy Context
- Patrick Breyer — Chat Control — MEP advocacy against mass surveillance
- EFF — Secure Messaging Scorecard — Independent evaluation of messaging apps
- Proton — XMPP vs Centralized Messengers — Privacy-focused comparison
Tools & Utilities
- XEP Index — Complete catalog of XMPP Extension Protocols
- Account Management Tools — Account migration and backup utilities