Skip to main content
Nyxblog

Matrix is good in theory, not in practice

799 words, 4 min read

Matrix is an open source and full-mesh federated chat protocol. It has one complete implementation, Synapse, that claims to be the "reference implementation". It has many problems, a lot of which will be explained further down in this post.

Spec

The spec is mostly fine. It has some strange things, such as all media needing to be proxied and the fact that encryption must stay on in a chat once it's enabled for the first time, but other than that it's mostly fine.

Software

This is where the real problem is. For software, we only have a few options:

Synapse

Synapse is by far the most used implementation, because for a while it was the only implementation and it is still the only complete implementation.

Speed

Synapse isn't very fast by default. After following a guide for "extreme tuning", this one went from ~4000ms s2s ping to ~400ms s2s ping. That's somewhere around a 10 times speed improvement.

Preformance

It's made in Python, so it's horrible on resource usage.

Synapse and its Postgres connections using about 8GB of RAM. This screenshot is after the "extreme tuning" documented in the previous section. Before, the RAM usage averaged 3-4GB.

Storage

Synapse also is not light on storage. Currently, the database is at 28GB, while Prosody is at 33MB.

Moderation

All moderation in Synapse is done through an API. There's no official command line tool, no official UI, no official bot to moderate within Matrix. Community tools do exist, like synadm for a CLI, Synapse-Admin for a web UI, and Draupnir for a Matrix bot. However, all of these require trusting a third party to not have a backdoor.

Licensing

Synapse is dual-licensed with AGPL and propietary. No, this is not a joke. Because of this, it also has a CLA, so nobody under 18 can legally contribute without parental consent. (Does anyone over 18 even want to contribute?) This brings us to the next point.

Synapse Pro

Synapse Pro is a paid and propietary fork of Synapse. It has the code of Synapse, although the workers for scalibility have been rewritten into the Rust programming language. It also comes with an official moderation UI, which looks far better than any of the other UI tools that exist and a much better UX than Draupnir or synadm. Not much else is known about Synapse Pro, other than matrix.org uses it. (Yes, the flagship server of an open protocol is running propietary software.)

Dendrite

Dendrite was going to be the "next-gen" Matrix homeserver. At first, it was the most amazing thing in Matrix. It was fast, open-source, and actively developed. It would be the solution to p2p Matrix.

Now, it's anything but that.

Dendrite commits, the most recent being 2 months ago.

It doesn't even support authenticated media, which was rushed out by Element after Matrix servers were being used to proxy CSAM.

Conduit

Many users set up a Matrix server running Conduit without knowing its problems. It's a buggy mess, and it only properly supports room versions 7 and newer, while claiming to support all versions execept version one. It doesn't even support basic things like verifying other users over federation with emoji, and it's famous for state resetting rooms. It's moderately fast though.

Conduwuit

Conduwuit, the second most popular Matrix implementation. It's dead, so it shouldn't be used in production anymore (or really, at all.) It has relatively usable moderation, through a Matrix bot built-in. It still had problems with state resets, and the creator was very immature. With at least one case, she disclosed a security vulnrability to the public instead of following basic respect and telling upstream. She bragged about fixing it, before even telling Conduit. She's also done things like banning users from her chats for disagreeing with her and banned entire servers from federating with the flagship server for running competing software like Grapevine.

Grapevine

Grapevine is another fork of Conduit. It has a slower development speed than Conduwuit did to avoid burnout, but it will hopefully turn out to be usable sometime soon. This one is running a Grapevine server, open by request.

Other stuff

There's a lot of other Matrix software not mentioned here, like Tuwunel, Construct (inactive), Telodendria (inacitve), continuwuity, and a whole lot more.

Alternatives

The only real alternative to Matrix is XMPP. Prosody is light, fast, and easy to set up. Things like Ejabberd are scalable. Whenever this one sets up the everypizza.im blog, it'll document how it installed and set up Prosody.