XMPP and Matrix still suck

Recently I was permanently locked out of my proprietary messenger due to some unfortunate circumstances around 2FA. I took it in stride though. For years switching to XMPP had been on my todo list. Standardized, decentralized, end-to-end encrypted; whats not to like? Well…

Problems with XMPP

Using XMPP as a messenger has a bit more hidden complexity to it than meets the eye. XMPP by default is about as featureful as IRC. No encryption, no file sharing, just a plain transfer protocol. XMPP gets its good features from XEPs. These are extensions built on top of the XMPP protocol that provide all kinds of functionality needed for a modern messenger like end-to-end encryption, profile pictures, media sharing, even voice calls.

The problem is that:

  1. XEPs only work if the clients add support for them
  2. The clients are not required to support XEPs

For many of the most important XEPs like the ones that add message encryption, no modifications are needed on the XMPP server’s part. It all happens client side. The nail in the coffin of XMPP is that there are no cross platform open source client. That means the clients on Android support a different set of XEPs than the ones on Windows, and on iPhone, Mac, etc. There is no cohesive standard for modern XMPP messengers that is widely enforced. Unless all the clients settle on supporting the same set of XEPs, someone is going to have a broken experience. So, unless you are ready to excommunicate the iPhone users among us and live the very lonely life of a hermit, XMPP is off the table. You can see a list of client software and their feature support below.

XMPP client software features

Now to touch on user experience. Setting up Prosody, the XMPP server I chose, wasn’t too bad. I used lots of clients during testing and Dino was probably the nicest looking, but it doesn’t work with self-signed SSL certificates. In most other clients like Conversations and Gajim they give the user a warning with the option to trust the certificate. Dino does not, it refuses to work without a CA cert. Conversations had a pretty average user experience. Gajim is dead ugly (this matters to normal users).

So due to bad cross platform and even cross client incompatibility, XMPP is off the table.

Matrix

The next chat solution I settled on after giving up on XMPP was Matrix. Specifically the Element Matrix client. I’ll spoil the surprise upfront by telling you that I did choose to use Matrix for my chat solution. On the surface it seems like Matrix has all of the benefits XMPP offered: decentralized, standardized, open, and has end-to-end encryption. So why didn’t I choose Matrix from the start? The short version is that Matrix is a lot heavier than XMPP; the Element app is slow, the server software is written in Python and its also slow, and the setup is much more complicated.

I’ve been using Matrix/Element with my group for some time now, and it has managed to be just okay enough that I didn’t lose any friends over it. But that doesn’t mean Matrix is good.

Problems with Matrix

Note that the following complaints may just apply to the Element client, not the Matrix protocol itself.

  1. No support for self-destructing messages.
  2. Messages that have a user tagged in them (@user) are red. This makes users think there is a problem with the message e.g. the message wasn’t sent correctly/was not encrypted. Multiple users commented on this.
  3. Messages that contain a users name (not preceded by the @ symbol) are also colored red. This makes the use of the @ symbol less clear. In addition some usernames are common words or phrases. Imagine how disjointed the chat must look to someone whose name is ‘a’ or ‘the’.
  4. You can not pin chats or rooms so that they always appear in a specific order.
  5. Replies to an image or video do not show the thumbnail of the file, they show the file name instead.
  6. When creating a room, the members you invite during the room’s creation are all given Admin permissions. This is unclear to the user and poses a severe security risk when everyone in the group has those permissions.
  7. Downloading files from the Element Flatpak package crashes the app.
  8. Multiple users, myself included, find the desktop experience to be better than on mobile. The UI/UX just isn’t as polished as the mainstream chat apps like WhatsApp and Signal.
  9. No out of the box support for voice calls. You need to setup a TURN server in addition to Matrix.

There are also the more technical issues like the meta-data leakage issue of the Matrix protocol, but I’m not going too in depth here. On a more positive note, the Matrix developers have been working on a better server implementation for a while now which promises much better performance. In addition fixing some of those UI complaints would not take much effort and would significantly improve the sanity of the user experience. One thing that I don’t think anyone is working on is a Matrix server installer/setup wizard. That would have greatly benefited me since I just wanted a vanilla setup, and the setup process seems much more involved than you would expect. The docs were okay but there is no comparison between reading docs and running an installer. Overall, if you have a day to spend tinkering with Matrix, I do think its worth setting up. Just be prepared for a less than consumer grade experience.

The mediocre Matrix experience has me trying even more chat solutions. In particular peer-to-peer apps like Briar, Jami, Session, and Quiet. I will be writing another post about those apps after I test them.