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, deletion, replies, 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

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 you - install Quicksy, and skip ahead to check out some more clients to use your Quicksy account with.

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 providers.xmpp.net or 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 or Bruno for old/low-end Android devices
  3. Monal or Siskin for iOS
  4. Convo for KaiOS/JioPhone
  5. Monal for Mac
  6. Gajim for Windows
  7. Gajim or Dino for GNU/Linux
  8. Movim (social-network-like) and Converse.js for the web
    • Prose (Slack-like) is very new and incomplete, but worth keeping an eye on
  9. Poezio or Profanity for the terminal

More clients can be found at xmpp.org/software

Public channels on XMPP

You can use 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. A place to 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 Mental Health Chat, a safe space to talk about mental health
  15. The channel for LGBTQIA+ and their allies.
  16. The channel for Indians and Indophiles

Some technical channels

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

Bridges

If you don't know what bridges, IRC, or Matrix are, skip ahead to the final section.

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

For more information, check out the Biboumi user documentation.

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

Some rooms need a different syntax, such as the OSM IRC channel -

#_oftc_#osm#matrix.org@aria-net.org

In addition to the aria-net.org Bifrost instance, there's also one on matrix.org.

You can also bridge Matrix and XMPP rooms together, so if either one goes down, the other keeps running as usual, and the XMPP room is discoverable to XMPP users via search.jabber.network.

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

The downsides of bridges

While bridges are rather fashionable at the moment, there are several serious issues with them that conventional wisdom usually downplays.

In most cases, bridges are developed and encouraged only as far as they can help existing communities move to somebody else's ecosystem. The one controlling the new ecosystem is usually a heavily-funded party with the motive of poaching users. These parties may have you convinced (through excellent marketing) that their motives are purely altruistic, but look even a little closer and the façade fizzles away.

Downsides of bridges in general

  1. Spam
  2. Downtime, resulting in dropped messages
  3. Messages arriving out of order
  4. Being restricted to the mutually-supported subset of functionality.
  5. Bridges may expose your XMPP address to all participants.
  6. Bridges in general destroy any data sovereignty/privacy assurances you might otherwise have had. This is important even for public rooms. This is especially relevant when bridging to proprietary networks, but also when bridging to Matrix.

Downsides of bridges to proprietary software

  1. Bridges keep us stuck in the past instead of improving things. Instead of helping people get away from legacy, proprietary, or centralized networks, bridges help people stay on them. They can even encourage people to move away from free networks to the proprietary/centralized networks.

Downsides of Matrix bridges in particular

  1. As with Matrix itself, Matrix bridges give a false sense of increased population - typically a 10:1 ratio of ghost users to real users. Plenty of people fall for this trick and are tempted to bridge to Matrix. Obviously, this inflated participant count does not result in an actual increase in activity.
  2. The Matrix-XMPP bridges changes XMPP links to Matrix links, so Matrix don't have to leave Matrix to use XMPP. On the other hand, the bridge doesn't similarly translate Matrix links for XMPP users, encouraging them to join Matrix. This gives further weight to the suspicion that bridges are really a means of poaching users.
  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 can also take an age to connect to.

Bridges are antithetical to my aim of moving people from proprietary and centralized networks to federated networks of free software. Thus, I prefer to be in unbridged XMPP rooms, and to get existing communities to move to XMPP.

Further reading - https://www.freie-messenger.de/en/matrix/gedanken/#bridges

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. Minimize the value you create for other platforms, by…
    1. Making yourself harder to reach there, e.g. checking them less often than XMPP, replying on them less quickly than XMPP, etc.
    2. Minimizing your activity on them, e.g. using them only to invite others to XMPP.
    3. Quitting them entirely.
  2. Increase the value you create for XMPP, by…
    1. Making XMPP your primary means of communication.
    2. Actively participating in XMPP communities.
    3. Informing people that you prefer to be contacted over XMPP. If asked, tell them why.
    4. Helping onboard friends, family, colleagues, students, etc to XMPP. If necessary, introduce them to mutual contacts, and channels they may be interested in.
    5. Moving existing communities, teams, companies, etc to XMPP.
    6. Choosing XMPP as the primary chat for new communities, teams, companies, etc.
  3. 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. 6 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.