The Quick and Easy Guide to Jabber/XMPP

↩ home

XMPP_logo_(without_text).svg

Why XMPP matters

XMPP (also known as Jabber) is the Internet Standard for instant messaging.

  1. It supports modern chat features in a standardized and interoperable way (unlike IRC). Features include -
    • Multi-device support, offline messages, multi-line messages, message styling, end-to-end encryption, message correction, message deletion, message receipts, read markers, typing notifications…
    • Contact and room synchronization, avatars, file transfer, image previews, stickers, message reactions, encrypted audio and video calls, message threads…
  2. It's federated, rather than centralized (unlike Telegram, Discord, Signal, Slack, …). That makes it resistant to enshittification - if one operator shuts down, or goes evil/anti-user 1 …as commercial services are so prone to - see Google, Facebook, Reddit, StackOverflow, and many more. , you can switch servers and continue to access the rest of the network and using your existing apps.
  3. It has a diverse ecosystem of free software clients and servers. (Unlike Discord, Slack, …)
  4. It's easy and lightweight to self-host. (Unlike Matrix.) This has given rise to a thriving network of public servers.
    • Matrix servers are resource- and maintenance-heavy to run, which has resulted in most of the Matrix community being concentrated around the matrix.org server. The cost of running a Matrix server regularly forces smaller, community-run servers to give up on it, who often fall back to XMPP.

      That effectively makes Matrix a centralized protocol, with all the drawbacks that implies. If or when the matrix.org service shuts down or becomes anti-user, there will not be enough community-run servers to take in any refugees.

  5. The clients are also lightweight and performant. (Again, unlike Matrix.)
  6. The protocol is governed by a privacy-conscious community (the XSF) rather than a single company.
  7. It has bridges to other chat protocols.
    • Biboumi for IRC
    • Bifrost for Matrix
    • Slidge for Discord, Facebook Messenger, Matrix, Mattermost, Signal, Skype, Steam Chat, Telegram, and WhatsApp.

Getting started

The easiest way to join the XMPP network is to install Quicksy from the Google Play Store or the Apple App Store. It uses your phone number for registration, contact discovery, and password recovery. The Quicksy account works like any XMPP account and can be used from any XMPP client.

I recommend Quicksy to the majority of people who

  • don't want to spend time selecting a server,
  • don't use a password manager, 2 For some reason, most public XMPP servers don't provide any kind of account recovery. The upside is that you don't even need to provide an email address to register. The downside is that people who don't use password managers are quite likely to get locked out of their account. and
  • don't mind using their phone number to register.

If that's not you, you need to select a server, make an account, and install a client. 3 Even if your account is not on Quicksy, you can still use Quicksy to associate your account with a phone number. That makes it easier for your Quicksy contacts to discover your account.

Select a server and make an account

Public server recommendations may be found at https://providers.xmpp.net/ or https://compliance.conversations.im/old/. Some servers support registering from the client (called In-Band Registration - IBR), others require you to register on their website to prevent spam.

If you're interested in self-hosting a private server, Snikket aims to make it really simple. It also rebrands popular XMPP servers and clients to provide an experience similar to centralized services. 4 No need to explain that App A and App B and Server C all work together and speak the same protocol…everything is just "Snikket". Users don't install A, B, or C on Android and D, E, or F on iOS…they just install "Snikket".

Snikket and conversations.im also offer paid hosting.

Install a client

For clients, we recommend

  1. Monocles Chat or Cheogram 5 Monocles Chat and Cheogram are both forks of Conversations. Cheogram has some additional features. Monocles Chat has even more, and takes many cues from WhatsApp. for modern Android devices
  2. Yaxim for old/low-end Android devices
  3. Monal or Siskin for iOS
  4. Gajim or Dino on the desktop
  5. Movim (social-network-like), Prose (Slack-like), or Converse.js on the web
  6. Poezio or Profanity in the terminal

More clients can be found at https://xmpp.org/software/

Bridges

(If you don't know what IRC or Matrix are, skip ahead to public channels on XMPP.)

Joining IRC channels

You can join IRC channels by joining #<channel>%<IRC server>@<Biboumi server>. For example -

#commonlisp%irc.libera.chat@irc.jabberfr.org

In addition to irc.jabberfr.org, hmm.st is another public Biboumi instance.

Similarly, you can send PMs to <username>%<IRC server>@<Biboumi server>. For example, to register your nickname on OFTC, send a message to -

nickserv%irc.oftc.net@irc.jabberfr.org

Persistent IRC connections

You probably want to make Biboumi's connection to an IRC channel persistent. That way, you will remain in the IRC channel, even if your XMPP client is disconnected. That prevents sending excessive joins and parts to the IRC channel if you have a patchy network, and you won't miss the room history when disconnected.

For that, you may need to make a one-off configuration for each channel using an XMPP client which supports Ad-Hoc Commands (AHC). These include -

  • Converse.js or Movim (web)
  • Gajim (desktop)
    • open an IRC channel, click on the overflow menu - "Execute Command" - "Configure a few settings for this IRC channel" - enable "Persistent"
  • Monocles Chat (Android)
    • open an IRC channel, and tap on the "Commands" tab - "Configure a few settings for this IRC channel" - enable "Persistent"
  • Poezio or Profanity (terminal)

Joining Matrix rooms

You can join Matrix rooms by joining #<room>#<Matrix server>@<Bifrost server>. For example -

#malleable-systems#matrix.org@aria-net.org

You can also bridge Matrix and XMPP rooms together, so if either one goes down, the other keeps running as usual.

  1. Invite @_bifrost_bot:aria-net.org to the Matrix side
  2. Type !bifrost bridge xmpp-js <XMPP room domain>.<tld> <XMPP room name>

Downside of bridges

That said, experience tells me that bridges aren't a good idea.

  1. They destroy what data sovereignty/privacy assurances you might otherwise have had. If you join a room bridged to a spyware platform like Discord, Telegram, or WhatsApp, you're now subject to the same spying as Discord, Telegram, or WhatsApp users.
  2. IRC bridges worsen the UX for either the XMPP side (by forcing XMPP users to use a small, IRC-friendly subset of features) or the IRC side (IRC users typically don't like multi-line messages, quoted replies, and having to open a web browser to read each message).
  3. Matrix bridges (just like Matrix servers) require significant server resources and human effort (in maintenance) to run. Low-resource community-run bridges may thus suffer from significant downtime. They also take an age to connect to.
  4. Bridged rooms expose your XMPP address to all participants.
  5. The bridges I most commonly encounter are bridgebots, which have terrible UX.
  6. Bridges keep us stuck in the past. If we just keep joining IRC channels via bridges, we further cement primitive IRC's position as the platform of choice, while keeping better platforms (XMPP) out of the spotlight. 6 Biboumi's strength - that it is unintrusive enough to be almost undetectable to people on the IRC side - is also its weakness here. If we keep joining rooms bridged to spyware platforms like Discord, Telegram, or WhatsApp, we're silently assenting to and endorsing their spying, and hindering progress towards more user-respectful alternatives.

Thus, I prefer to be in unbridged XMPP rooms, and to get existing communities to move to XMPP.

Public channels on XMPP

You can use https://search.jabber.network/ to find public channels. Most XMPP clients have a channel search feature, too.

Here are some channels I can recommend.

Non-technical channels

  1. The Art Café

    For admirers & creators of all arts. Share and discuss literature, poetry, music, sound, painting, illustration, comics/graphic novels, photography, sculpture, dance, theatre, film, TV, games, crafts…

  2. Wanderer's Inn, the channel for travelers, their stories, and their gear
  3. The gaming channel, a safe space for gaming discussion
  4. The anime and manga channel, a safe space for fans of anime and manga
  5. The channel for vegans, with frequent food pictures and cooking discussions
  6. The bicycles channel, hosted by a professional bicycle repairer. Has some velomobile users too.
  7. The XMPP Railway Yard - a channel for fans of trains. Very active, and just a little crazy.
  8. The Little Project Hub - dedicated to physical DIY projects, including gardening, housing, woodworking, welding, 3D printing, car tuning, etc.
  9. The channel for DnD and other tabletop RPGs
  10. The anarchism channel
  11. The channel for natural sciences
  12. The philosophy channel
  13. The channel for Nonviolent Communication / Compassionate Communication
  14. The channel for Indians and Indophiles

Some technical channels

  1. Tinkerspace, a safe space for programming and general tech discussion
  2. The Guix channel
  3. The Emacs channel
  4. The Lisp channel (for Common Lisp, Scheme, Emacs Lisp, Clojure, PicoLisp, and others)
  5. The Open Hardware Chat
  6. An unofficial channel for LineageOS and other Android ROMs
  7. The Free Software Community of India
  8. The Mechanical Keyboards channel

But nobody [in my circle] is on XMPP!

It's not hard to fix. I was in the same position, when I first joined XMPP many years ago.

Do as many of the following as possible -

  1. Make XMPP your primary means of communication. Quit other platforms, or minimize your activity on them. Actively participate in XMPP communities.
  2. Inform people that you prefer to be contacted over XMPP. If asked, tell them why you prefer it.
  3. Help onboard friends, family, colleagues, students, etc to XMPP. If necessary, introduce them to mutual contacts, and channels they may be interested in.
  4. Move existing communities to XMPP.
  5. Choose XMPP as the primary chat for new communities.
  6. Tell others to engage in the same steps above.

This is an easy way to contribute to free software and privacy-respecting technologies, without requiring the skills of a programmer, translator, or designer. 7 Of course, XMPP clients are also - like most FOSS projects - in need of developers, translators, and designers.

Those suggestions come from experience - they are proven to work, provided you possess the necessary spine and steadfastness.

  • When I first joined, many channels of my interest were missing. I made 9 of the channels I listed above, publicized them so people would join them, talked to channel participants to increase activity, and minimized my participation in IRC and Matrix. (Most of my activity on IRC these days is aimed at encouraging people to try and move to XMPP.)
  • As a frequent organizer of OpenStreetMap mapping parties, I onboarded many people to XMPP, and made the OSM India XMPP channel.
  • I've been part of efforts to spread awareness of XMPP at local FOSS conferences.
  • It's also why I made this page - to remind people about XMPP, introduce it to them, and get them to join.

The more people who use and promote XMPP exclusively, the sooner we get a world where private, federated, featureful, user-friendly, and sustainable communication built on free software becomes the norm.