This is still the header! Main site

Snikket, XMPP and how ready we are


... can we ditch Discord yet?

This is post no. 84 for Kev Quirk's #100DaysToOffload challenge. The point is to write many things, not to write good ones. Please adjust quality expectations accordingly :)

I installed Snikket on a VPS fairly recently. The install process is, by the way, impressively easy; everything Just Works. (It's also a brand new VPS, so there was no proxying hackery going on; regardless, I'm impressed, despite that it involved Docker. Probably this is where Docker actually shines.)

So... with the install done so easily, I can just invite all my friends, throw out all other chat apps, and be done with things, right?


Weeeell... not so fast. To begin with: Snikket has a web UI. A web admin UI. Where you can administer your users, your circles, etc.

It is, however, not a web XMPP client. You can't actually chat / call people on it. (This was actually new to me.)

Given that I like to do most of my typing at an Actual Computer with a Keyboard, I immediately started looking for non-phone clients. This is XMPP; you can use it from any client that says "XMPP" on it.

I launched Pidgin. Logged in. It worked! I also downloaded Dino, which also did. Except... for OMEMO, the encrypted messages. Which was... kind of a hit and miss.

Group chats

The intensely confusing part of it was group chats though.

It's not that intensely confusing, actually. After trying out Converse.js (... which was, after Xabber, the second web client I went through), registering a second (test) account on my server, and messaging / joining / exiting rooms several times, I kinda start getting it.

My main concern is that 95% of prospective users will definitely not do this.

So I decided to write about this a bit, trying to preserve my state of confusion for possible further improvements.

To begin with... Snikket has the concept of "circles": a group of users that are automatically added to each other's contact lists. There is also a group chat associated with each one. Meanwhile... there is a default circle, associated with the server itself, running under the name

There is also... a server account? thing? that sends you a welcome message. It is called... well, (These are two different things though.)

At the same time, there is a "General" multi-user chat, that you can list & get into from some of the XMPP clients. It is not showing up in Snikket in default, but if you do join... then it does. Meanwhile... you can leave multi-user chats in the Snikket client, at which point it's a bit unclear how to find them again, unless you look under Bookmarks, even though... I'm not sure I acutally bookmarked them?

... conclusions?

Given how XMPP started from a state where it didn't have end-to-end encryption or server-side history (... since, at that point, these were not things that IM clients were doing), it's really cool that we could get these things mostly working. By "mostly", I mean "most of the time within Snikket, and a decent amount across clients".

Meanwhile, this entire thing works a lot better for people who do know what's going on. (New users don't though.)

I do have high hopes for XMPP to catch up; in theory it's possible! Nevertheless... I don't think we are there yet. There are way too many things (encryption, list of group chats, message sync) that should work, that you want to believe that it is working, because why wouldn't it work, you read the standard, you can imagine it working... you might even be able to figure out how it works and / or how to get it working! But, by default, it just doesn't.

And most people will, upon encountering the first bug out of the unnoticed many (... I can't quite find the Drew de Vault article about writing down every software bug you encounter during a day, but... I can imagine there would be quite a few of them)... most people just... give up. Or go back to Discord.

A significant portion of these aren't even bugs! At least not in the sense of how a long-time XMPP developer thinks about them. Well of course you don't get channel history between messages X and Y if you quit and rejoin and (... etc); of course encryption doesn't work if you have 4 different clients connected to the server and (insert some extra condition here). We wouldn't even need to make these things work; it'd be enough to just add meaningful error messages or explanations or label a few buttons on the UI differently. But the people who could do this often don't, since you know these things anyway.

Overall... we're getting there! Hosting a Snikket server is super easy, and it works well for a lot of use cases they're explicitly covering. However, as of now, it's not a Discord / Signal replacement in practice.

... yet?

... comments welcome, either in email or on the (eventual) Mastodon post on Fosstodon.