Even More Thoughts on XMPP and Matrix


This was originally a Fosstodon thread, and is a follow-up to this write.as post and a post on Misintelligence, entitled “I want to love XMPP. Here’s why I can’t.” The post below was manually imported from Blake’s Devlog, which was on Hashnode.

The whole XMPP versus Matrix thing (as a client developer with limited patience, it truly is a “versus”, since I can only work on one lol) really takes its toll on me. Like yes, I see the problems with Matrix and its implementations, and I see the benefits of XMPP and its implementations. It’s just that, in my position, it’s two hells and a half to try to make anything. What the fuck is SASL? Is that still the recommended way to log in? Do I have to summon Satan and then sacrifice a goat?

It’s a lot more down and dirty with XMPP since, among other things, there are a lot of server things to support: different ways of accessing it (i.e. BOSH), different types of security (i.e. :443 TLS vs STARTTLS), different authentication schemes (i.e. SASL2)… That’s before you have to figure out what kind of other things the server supports (i.e. MUCs or MAM) and end-to-end encryption, which even Tesseract[1] didn’t have, and there are at least 3 ways to do it within XMPP.

The ecosystem for XMPP is really dry. Like sure, there’s a XEP for everything, but there’s no indication of where or if anything is actually implemented, even in some example fork. A lot of features take years to implement since clients have to wait on servers to implement something before they can use it.

I’m in an MUC for the development of a Flutter-based XMPP client (Moxxy) whose codebase I do not understand in the slightest. The code is pretty repetitive and all over the place. It’s really surprising how much boilerplate code this guy is putting into this thing for it to have the most basic features working: sending and receiving DMs, as basic messages and images, and with OMEMO 2 for E2EE, which nothing but Moxxy supports. MUCs, even Moxxy’s own(!), aren’t supported yet. There’s someone who wants to start working on it (as do I, but again, I don’t understand one line of the codebase).

I’ve considered forking Moxxy to look like the Spades design-in-code I have, and adding features to both Moxxy and Spades, but once again, I have no idea how the code works or where anything is.

The bridges ecosystem is rather dry, unless you’re a sysadmin (which is about 99% of the people using XMPP). There’s one okay public gateway and it has two public instances (one of which is way behind the other), and there appear to be no public Biboumi (IRC) gateways.

Even if it’s a really active area, it’s not really vibrant and on first glance looks like it hasn’t been touched for years, no matter what you look at. Every single client and xmpp.org look ancient, because they’re built for the most conservative techies out there who were really into tech in the 80s and are now too old to mentally accept change.

(I do recognize that the one XMPP client for Android worth anyone’s time, Conversations, is getting a complete facelift. I’m excited to see what that looks like, and how that’s going to affect its many forks.)

Matrix does a few things right that XMPP does not (and likely can not):

I absolutely have to trash on Matrix too, so here is a list in the reverse; things XMPP does right that Matrix never will, from someone who hasn’t actually used it very much at all and probably will get half of these wrong:

I think a good marketing push from the XMPP Foundation would be wise, although the window is fading fast as the refugee Mastodonians who have a newfound appreciation for federated tech are way more likely to see Matrix over XMPP, and more likely to find the former useful, especially given Mozilla and KDE have Matrix homeservers (I have an account @blake:kde.org!). XMPP was never built for group conversations; many stick to IRC for that, although IRC sucks for many other reasons.

I think IRC does still have a place, though. With the right setup, users of federated protocols could easily join IRC rooms. Libera.chat does this with Matrix, although it wouldn’t be difficult to set up a public Biboumi instance tied to Libera.chat too (and I think they should someday, at least as a trial). This could lead to a Slack or Discord like use-case when done right; for example, a project-oriented IRC server with many channels tied to that project could have a Matrix space that makes that server behave more like a Discord server for Matrix users. I can’t think of an equivalent thing for XMPP although XEP-0030 Service Discovery appears to be capable of advertising public channels (and I think Biboumi does this, actually).

All that being said, because of the data model and performance benefits, I’d love to help build a modern client like Moxxy and bring more people to the XMPP side. It’s just a pain in the ass to develop for and it leads me to either go back to Matrix or give up entirely.

Right now I’m probably just going to give up and go work on my website or something.


Comments and suggestions are welcome on this Fediverse post, or directly to me at XMPP blake@federation.quest, Matrix @blake:kde.org, email me@blakes.dev, or via Mastodon DMs @blake@fosstodon.org.

Footnotes:


  1. a kinda-clunky Flutter-based Matrix client I made, which was officially declared an abandoned project a few months ago. ↩︎

  2. Element and Synapse. For XMPP, the equivalents would likely be Conversations and Prosody/ejabberd. ↩︎

  3. no, Tesseract never made it onto TWIM, although if I kept working on it, I would have asked about it. ↩︎