What we once had (at the height of the XMPP era of the Internet)

August 4, 2023 by Noah

A discussion thread I got pulled into on Mastodon had me suddenly nostalgic for something we once had on the Internet, and which was really nice while it lasted: the Extensible Messaging and Presence Protocol, or XMPP, or sometimes referred to by its original name, Jabber.

What kicked off the discussion was somebody asking about a more modern "decentralized chat platform" known as Matrix (not the movie). A lot of people online talk about how they like Matrix, but I one time had a go at self-hosting my own Matrix node (which I feel I should rant about briefly, below), and the discussion turned back towards something that we used to have which was (in my opinion) loads better, XMPP.

My experience with self-hosting Matrix

So, to briefly summarize Matrix: in theory it is a decentralized instant messenger where anybody could set up their own Matrix server if they wanted to (on their own custom domain name), and regardless of which server your account is signed up on, you can chat with and interact with other Matrix users on their respective servers. It's a bit like Mastodon or the the Fediverse of social websites but for instant messaging and chat.

Sounds great. Is it?

In my opinion (and based on my direct experience in trying to set up my own Matrix node, just for myself, on my domain name), I think Matrix has a severe scaling problem and that you will only have a good experience using it if you stick only to the flagship instance for your account (or sign up on a third-party server run by somebody who has deep pockets for running the sort of monstrously beefy server machine that it requires to run a Matrix server well).

Here's my story with it. So, I have a smartphone that runs GNU/Linux, the Pinephone, and I basically wanted to use Discord or Slack on it. The problem is, there is no Discord or Slack app that runs on ARM Linux or on the small form-factor of a mobile phone screen. There are Matrix apps that fit the bill, and I heard that Matrix can set up bridges to Slack and Discord and a bunch of other useful things, to where I might use a Matrix client and (connecting through my server) get what I wanted out of my Pinephone.

But, you basically need to run your own Matrix server to do this. Not a problem: I am well versed in self-hosting apps. I elected to install the standard Matrix Synapse server on my machine (which had 4 GB RAM -- plenty plenty to run nearly everything that I would want to install for personal use). This was apparently a mistake.

So here's what happened: I got it all set up and I logged on using a desktop Matrix client and, like any new Matrix user would probably want to do, I joined "the" Matrix channel on - the big, "main" channel that everybody would want to join. It would be a good test that my server federates correctly with and everything as well.

And: my modest little web server could not cope. Apparently, the way Matrix federates between servers is that your server needs to download the entire world of all the chat history since the beginning of all time on that remote chat room. In my desktop client I was seeing spinning, timeouts, and connection errors. I only knew my server was busy doing something because I could watch its log file. Now, mind you, my Matrix server was only for myself, I was the only user on it. Imagine I had a second user, and their Matrix client is hanging and stalling and timing out, and they don't know why and what a sour taste they would get about this whole Matrix thing.

For me to run my own single user Matrix instance, just for myself and join the channel (the channel), I would need at least twice the server hardware specs and that is just too high of a price tag for it to ever be worth it (e.g. $40/mo. at minimum, and that's all for Matrix, as any other app I run on that server would compete for those resources; and a $40/mo. "subscription" for a single-user Matrix instance is just absurd).

Anyway, let's move on to XMPP because that shit was actually nice to run.

What XMPP was like

So, XMPP was a similar idea. Anybody could run their own XMPP server and your username looked like an e-mail address and you could add your friends to your buddy list and chat, share files or go on webcam with each other (depending on the capabilities of each of your servers - XMPP was extensible after all and things like video sharing were extensions added on).

But the best part of XMPP was how well it played with the wider Internet community:

  • Google Talk and Facebook Messenger both had XMPP bridges to their networks. From my XMPP account I could add my friends to my buddy list and chat with them right from there, and same for Google Talk.
  • Like Matrix, XMPP had bridges to other instant messengers such as AIM and MSN. Now, back in the day we had desktop apps like Trillian or Pidgin that allowed you to sign on to all your messengers from a single buddy list, but XMPP bridges were done on the server side. So my Pidgin would log in only to my XMPP server and I would automatically be on AIM, MSN, Yahoo! Messenger and elsewhere. When my AIM buddies would send me a message, their XMPP 'e-mail address' ended with an domain suffix under my server domain.

Also importantly: XMPP server software ran lightweight as fuck. My favorite XMPP server software was called Openfire, and it has been by far the best experience I'd ever had installing any kind of server. I simply apt install openfire and it's running, and had a nice web UI for me to set up the admin account and configure my app. I literally had to not touch a single config file. Not at all like Matrix for example where I needed to configure my NGINX reverse proxy and fuck with a bunch of files on disk to get it working.

Anyway. XMPP still technically "exists" but nobody uses it anymore. Well, some companies use it for their own internal purposes. On Android, apps such as Kik and Grindr use XMPP for their messenger service, but their servers don't federate with others and act as private walled gardens.

Google and Facebook had long ago closed down their XMPP bridges in favor of holding their users hostage. AIM, MSN and other classic instant messengers no longer exist. It's a bit sad: if you look for XMPP server software today you still see references to AIM or MSN bridges but they won't work anymore, and bridges for more modern networks like Discord are either hard to find or non-existent.

In my opinion, the height of the open Internet was exemplified by XMPP and how it inter-operated with all the messengers people used and even the big sites like Google and Facebook were open to federating with XMPP servers. Nowadays, while you could still install an XMPP server (it is free and open source, and an open standard network protocol, and nothing about that has changed), you would be on a lonely island to yourself since basically nobody uses it anymore.

It's what Matrix should be, if only Matrix were better designed and didn't have that scalability problem that it currently faces.

You shouldn't require a monster server with 32 GB+ RAM and a 5 Terabyte hard drive just to run a Matrix node and have breathing room besides. I used to be able to run XMPP alongside a dozen other self-hosted apps. I could run XMPP alongside things like Nextcloud, Gitea, my blog, a Minecraft server, a Jellyfin server, and probably a dozen other apps who would all comfortably share a modest server with only 4 GB of memory on it. Hell, 2 GB would be plenty for most single-user self-hosting purposes, if you kick out the Minecraft server.

Anyway, I was just feeling nostalgic and sad about how there isn't anything quite like XMPP in the modern era and Matrix is far, far from it and I don't know of anything better than Matrix anymore.

I am optimistic recently about Mastodon and the Fediverse, with sites like Threads (Meta) or Tumblr (Automattic) considering federation with these apps via the ActivityPub protocol. We might get back to a more friendly, more open Internet again -- hopefully these companies won't pull another XMPP move and defederate again once they see a shot they can take to hold their users hostage again (the ol' reliable EEE strategy).



There are 5 comments on this page. Add yours.

Avatar image
Marc posted on August 4, 2023 @ 06:21 UTC

Hi, xmpp is still a thing and some people are using it ! I have a server running at home and all my close relatives are on it (between 10-20 people). We do instant messaging, video calls, file transfer, group chat... It works very well !

How I did it ? I always consistently refused anything else than xmpp (why settle down with inferior solutions ?) and at every family gathering I took the phone of people to install an xmpp client on it (Conversations these days). It took a small decade but the strategy worked.

Avatar image
Arthur posted on August 22, 2023 @ 09:09 UTC

I would love a blog post on how to install winNT3.51 on VB and on a real hardware. Other than that, it's niece you still keep on posting on your blog.

Avatar image
Herwig Hochleitner posted on August 26, 2023 @ 22:22 UTC (updated 8/26/23 22:35 UTC)

My experience with self-hosting matrix is very similar: I also joined a large large public room as a test. Fortunately, I saw what was happening early, so wasted only about 1G of disk space before leaving the large room and restarting (which - praise be - also stopped the download). So far I'm relying on not joining any large rooms from my private instance and instead using fluffychat as a client (to allow multiple accounts [lol]).

Though for my intended use case, synapse seems to work well enough: Even after downloading all of my telegram conversations (which is what I want in this case) the server remains snappy and lightweight at a couple of 100 MB disk space. Crossing my fingers that WhatsApp and Signal will go as smooth.

In general, your comments touch on a huge issue, that the fediverse is facing: Distribution of disk space and processing power (as well as moderation and a crop of other social issues). There is an evergrowing pile of public data, and we're not taking advantage of shared storage for that public data, even in our most community-focussed apps. In raw (computing, storage) power, we're easily outscaling the corpos, but how to utilize it?

I think if the fediverse managed to take a step back, and rethink a few basics about storage and hosting, we could find a solution like the following:

Consider, a repurposed the bittorrent network (DHT) and add a dash of git (CRDT) with a sprinke of rsync (CDC). That way, everybody could just hold their fair share of data.

Many community conversations, that now involve discussing about getting a strong enough server [1], could go very differently, if a complete fediverse node would fit on a raspi. Or into a browser service worker.

[1] or being willing / able to maintain and moderate a full node for that matter

Avatar image
Anonymous posted on September 14, 2023 @ 07:53 UTC

Why is XMPP talked about in the past tense? There is still an active community around it making servers and clients with modern chat features without all the Electron bloat. I'm using XMPP almost exclusively with my family and friends since 2020.

Avatar image
Anonymous posted on October 15, 2023 @ 08:58 UTC

Unfortunately I think the possibility of Facebook "rejoining" the open internet/fediverse has already been killed off from the other side. Many Mastodon instances have already defederated from Facebook/Threads out of pre-empted hatred and it hasn't even fully been launched yet. It's only a matter of time before it turns into a "your instance federates with Threads so we're going to defederate from you too" war, while the users on the Threads side who would have otherwise potentially discovered and explored the fediverse will instead be left knowing "it's this thing that exists but it doesn't work properly with Threads anyway because they all hate us".

Add a Comment

Used for your Gravatar and optional thread subscription. Privacy policy.
You may format your message using GitHub Flavored Markdown syntax.