Why I don't use Matrix

Matrix doesn't even have a native client.

I could just bundle converse.js into an Electron app and call it done if that's all I cared about.

Reinventing the wheel, poorly

Matrix going off and re-implementing XMPP poorly in its entirety is just stupid and it's like spinning your wheels out, never making any forward progress. They didn't have to go the NIH syndrome route. They could have joined the great XMPP ecosystem and become a polished client and server vendor like yax.im, conversations.im, blabber.im, movim.eu, etcetera.

Using JSON instead of XML as a marketing point

Dropping XML is a bad thing and it's not suited for the application that XMPP and Matrix position themselves in. JSON doesn't do namespacing; reasons beyond that are just bikeshedding. I say that as someone who's programmed with both JSON and XML and even implemented custom software for processing ONIXmessage packets, an international standard for computer exchange between publishing houses, libraries, and e-commerce industry.

Matrix itself IS harmful to its own goal, if that goal is prolific decentralized and standardized instant messaging.

I have no problems with Matrix going off and being an XMPP client or at the very least properly implementing XMPP federation. However that's not the case. The only federated instance is the central matrix.org server, and its XMPP federation is suspiciously so bad in its implementation I think it's fair game to assume malicious intent. If I try to run service discovery for MUCs on matrix.org, it can freeze my client until I get a angry red popup saying FATAL ERROR: XML not well-formed or CRITICAL ERROR: XML malformed.

There is really no excuse for sending malformed XML as with XML (unlike JSON) you have something called DTD (document type definition) which any XML library can use to determine the validity of an XML stanza. It also describes the exact schema used and what schema a namespace contains (think using the XHTML schema namespace for rich text (bold/italic/font/fontsize/fontcolors) inside of an XMPP message stanza or using an SVG namespace inside of an XMPP stanza for a realtime scratchpad or embedded vector graphics)

But if you were to drag the bikeshed all the way out, it doesn't need to take place here because that's already been done. There was a paper written about it. I am sorry but I just don't wish to carry a XML vs JSON debate at this point in time further.

Moreso, it looks like a Microsoft-esque Embrace, Extend, Extinguish tactic akin to the AARD code where you break things but only break things one way on purpose to make another product look bad when it's not that other product's fault. Sending valid, non-malformed stanzas is and should be a minimum baseline or expectation for anything.

In addition to that, if you join a Matrix chat and somebody quotes some text from the Matrix side it barfs software gore into the chat of random control codes. There's absolutely zero valid reason for that to happen or for control data to end up inside of a element.

Matrix lies about their ""users""

Matrix just borgs into existing popular IRC channels and then claims all the IRC idlers there are "Matrix users" while injecting annoying advertising into the chat via user's nicknames by appending [m] to the end of it.

This kind of marketing comes across as extremely dishonest and sleazy, and plain ugly if you've got a really polished and consistent UI that you spent time on, then having somebody coming along and start injecting ads into fields. It is effectively "stretching the truth" calling borged identities "Matrix users". It has privacy implications.

On Matrix federation

There is no graceful degradation. There is no schemas. No namespaces. There's just "protocol upgrades". The cabal chooses what the new version of the protocol contains, and if you don't also update to that protocol you're kicked out of the federation. Compound this with there's only one practically usable server implementation in Matrix vs the wide diversity of usable servers in XMPP and actual decentralization. That one usable server implementation "Synapse" is made by the same people who dictate the protocol spec.

All this muddies the water and puts of walls and barriers that don't need to exist, even if you wanted to create your own 'product' you control. You can always have private XEPs you can experiment with on your own platform with your own XML namespace like conversations.im have done. Then perhaps contribute back to the greater XMPP ecosystem by working with the XSF to standardize the XEPs. This is why the version version of OMEMO (now XEP-0384) used the "eu.siacs.conversations.axolotl" namespace and then switched to "urn:xmpp:omemo:1" in the later more standardized revisions. Here is a video detailing the namespace change.

Learning from Matrix

I don't have a problem with "learning from" Matrix, as the newest revision of the experimental XEP-0384 has when revising OMEMO to "urn:xmpp:omemo:1".

I will however continue to complain and raise concerns about Matrix until it becomes an XMPP client/server implementation, or at the very least standardized XMPP federation and interoperability is fixed in good faith.

I hope I have convincingly reasoned why [I don't use Matrix].

Further Reading:


  • Disroot's blog on the closure of their Matrix server
  • Privacy research paper on Matrix
  • Yaxim enters the matrix (April fools blog post)
  • Valid XHTML 1.1