Profile picture showing a purple space pirate folf with some darker accents. His fur is starry and he has a cybernetic collar. The background is a snowy landscape. Art by me.

blog.fawx.news

Perhaps we need a new chat protocol?

5 min

Introduction

If you’re reading this, it’s very possible you’ve already seen me rant about chat protcols on fedi, sometimes with a bit too much passion. In my opinion the problem is that pretty much all of them have design issues that make them poor competitors to their centralized counterparts, especially Discord. Let’s go over them!

Matrix

This is possibly the closest thing we have to Discord right now in terms of features, it has a healthy selection of clients (though annoyingly every one of them does almost everything right except that one thing you need, so you can never find one that satisfies you, don’t even try) and even a couple server implementations.

So what’s the catch?

Complexity. Lots of it. And also bugs…

…and legal issues, and Element the company, and… yeah.

The root failure of Matrix imho is the set of design requirements it has given itself, which are at best contradictory and burdensome, or at worst legal/ethical nightmares, the kind you don’t want if you’re hosting anything under your name. You can’t really host a chat with Matrix, all of the participating servers hold their own copies of a room and do a thing called state resolution to figure out who is actually a member of a room and what powers they hold. This is problematic, for multiple reasons.

The first obvious scenario is where servers start to disagree on what a room is, this is how you get a split room and a giant mess, since there’s no authoritative source of truth to correct it. The potential for this grows as more implementations are added, since you can never be quite sure where bugs will crop up.

Then there’s the legal and moderation side of this. Since all servers are partially responsible for hosting the room, who has the responsibility to take it down if needed? You could block a room on your end, sure, but now you’re duplicating a lot of effort across the network just to definitively kill a room that has gotten out of paw. This is made worse by defederation being effectively impossible without breaking the protocol.

Also the cost… Want to host your little home server on an SBC? You better hope the network doesn’t grow bigger! All that federation load that comes with a large room, the task of distributing the messages, that falls on you, not whoever hosts the room! This fundamentally flips the relationship we usually have with online spaces, even big services like Discord have limits on the size of communities they want to handle by default and have special agreements for ones that need to be larger, they certainly won’t dump that load on your device (tbf it’s also because they don’t care about you).

I could really go on with this and all the other problems that show up in Matrix as a result of this approach, but alas it’s time for…

XMPP

I won’t be nearly as harsh here. XMPP is old, and it was designed for times when instant messaging looked way different than it does today. One thing XMPP has going for it is that the federation model is sane, you host a chat server, and other servers can connect to it to serve their clients, all is well. And to be entirely fair there have been efforts to get the protocol up to speed, and I wish them all well!

Where XMPP currently fails is UX, the selections of clients is not super impressive, feature support is spotty, and things often feel janky. It also doesn’t work super well as a Discord replacement, it’s closer to platforms that strictly offer group chats, like Telegram.

To have a chance at beating Discord we need the UX, features need to work seamlessly, but also be powerful!

XMPP’s extensibility can definitely also be a hurdle when developing for it, as well as the use of XML. It’s just more difficult than interacting with a modern web API that’s based around REST and perhaps websockets.

Secure messengers

SimpleX, and whatever else is out there…

They have their merits, you should probably use them if you want secure DMs and groups with as little metadata leakage as possible! They just don’t fit the public use cases, like hosting a community chat with lots of rooms, a support channel, or anything like that.

What to do?

It’s time for the unthinkable, let’s put xkcd 927 into reality once again by making a shiny new thing that will definitely solve all the problems!

I’ve been talking to some folks about what a new protocol could potentially look like. There are absolutely differing perspectives, as is always the case with these things (I assume, this is a first for me), but I think the discussions were productive.

I might actually take this on and play around with these ideas, see where it goes, but I can’t say anything for sure.

One thing I can guarantee though. If things go well and we actually have a protocolâ„¢ at the end of this, I will make sure stickers are a first class citizen, that is my contribution to fellow furries!

Comments

With an account on the Fediverse or Mastodon, you can respond to this post. Just copy the link into the search bar on your home instance.

Learn how this is implemented here.