Get on XMPP!

Published: 2022-08-08 - Updated: 2022-08-08

The hell is XMPP?

XMPP is a protocol for instant messaging. It supports most things you'd expect from an instant messaging software, like: chat, sending images/videos/other files, chatrooms, and even calling (both voice and video).

It offers a few advantages over traditional protocol/applications, such as the following:

Fair enough, how do I join?

To be able to use XMPP, you need a client. Below, you can find a few popular choices for each platform. I personally use both Gajim and blabber.im, and haven't had too many problems with them.

Linux

Windows

Android

iOS

Ait, I have a client now!

Now, you'll need to pick a server to sign up for. You can find a list of "fully compatiable" servers at compliance.conversations.im. Remember to also look at their privacy policy before signing up. A few popular options are trashserver.net and snopyta.org.

Registering an account may differ from server to server, some make you register through their website, but most let you register straight from your client. Once you've registered, you'll have a JID (Jabber ID), which could look something like this: username@server.example. The JID will be your contact information.

Encryption

XMPP supports end-to-end encryption (E2EE), meaning only you and your contact will be able to read the messages you send to each other. This can be achived through OMEMO, which is supported by all clients mentioned above.

OMEMO is relativly painless to use, you just enable it and aslongest the recipent supports it, it will just work. Currently most clients will automatically trust all fingerprints of new contacts, and then prompt you to trust them or not if they were to login with a new device (More info on the topic).

If you wish to provide some way of verifying yourself to your contact, you can give them your OMEMO fingerprints. Where your fingerprint can be found depends on your client.

Also depending on Linux distro, you may also need to install a secondary package gajim-omemo for support of encryption in Gajim.

Archiving of messages (MAM)

What if you want to send a message to someone who is offline, there's where MAM comes in. MAM allows messages to be stored/archived on the server for later retrieval.

How long they're stored depends on the server's policy. Note: MAM stores messages the way they were sent, so if you send a message without encryption it will be stored unencrypted. If you wish to configure MAM for whatever reason, it can be easily done in most clients.

Group chats

Another great feature of XMPP is group chats (MUCs), there's both private and public. The difference being that, private allows you to use OMEMO (encryption) and is invite-only. Creation of rooms is done through your client.

Once you have created a room you should be able to invite your friends through your client, otherwise you could try giving them the address. It's also possible to create invite links in the following format: xmpp:test@muc.urof.net?join. You would of course replace the address with the ID of your room.

If you're looking for public rooms to join you can checkout this list which features tons of rooms with various topics.

Calls

Voice and video calling is quite the experimental feature in most clients, to use this feature your server also need to support it. As of currently, I've personally only been able to communicate between Android clients (Conversations/blabber.im).

Note: If you're using OMEMO with your contact, the call will also be encrypted.

I don't have anyone to test XMPP with!

Well, feel free to message me on XMPP. I'm avaliable under the following JID: urof@urof.net. If you wish to verify me, I have the following OMEMO fingerprint:

27B81A09 4727BBB8 806865B0 2501C237 4F6CD239 39A3A03B 2709475B 47D8E952
Questions or comments? contact me!