paapereira.xyz

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:

Quick start (for a new user)

The easiest path: 3 steps, under 5 minutes.

  1. Go to conversations.im and create a free account. You’ll get a username@conversations.im address — just like an email address, but for chat.
  2. Install the Conversations app on Android (or ChatSecure on iOS). Log in with your new address.
  3. That’s it. Share your username@conversations.im address 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:

  1. Choose a server to register your account (just like choosing an email provider);
  2. 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:

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:

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.

  1. Server-Side Archival (MAM)

Many XMPP servers support XEP-0313: Message Archive Management (MAM). When enabled:

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/

  1. Local Encrypted Backups (.ceb files)

The Conversations Android app supports built-in encrypted backups:

How to create a backup in Conversations:

  1. Exporting to Plain Text (ceb2txt)

Want your chats in human-readable format? Use ceb2txt: https://codeberg.org/iNPUTmice/ceb2txt

Example usage on Arch Linux: java -jar ceb2txt.jar /path/to/backup.ceb --output ~/xmpp-export/

This is useful for:

  1. Client-Side History (Gajim, Pidgin, Desktop Clients)

Desktop clients typically store chat logs locally:

ClientStorage LocationNotes
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:

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:

This trade-off is the price of sovereignty. It takes more effort upfront but pays dividends in long-term control and privacy.

Official Documentation

Server Compliance & Selection

Security & Encryption

Self-Hosting

Community & Discussion

Privacy & Policy Context

Tools & Utilities

#XMPP #Jabber #Linux #Android