At the risk of sounding like an unhinged fanboy: XMPP is pretty awesome! I’ve been involved in one way or another with XMPP, the network protocol that is an open standard for messaging and presence, for the last two decades. Much of that revolves around development of Openfire, our XMPP-based real-...
Sorry if this isn't the right venue for that, I thought it'd be in the tone of "self-hosting" and "federation" :)
tl;dr: some XMPP servers started to deploy a mod to report back about how they federate with the rest of the network, and now there is a pretty graph to show for it at https://xmppnetwork.goodbytes.im/webgl.html
They both qualify as "open, federated messaging protocols", with XMPP being the oldest (about 25 years old) and an internet standard (IETF) but at this point we can consider Matrix to be quite old, too (10 years old). On the paper they are quite interchangeable, they both focus on bridging with established protocols, etc.
Where things differ, though, is that Matrix is practically a single vendor implementation: the same organization (Element/New Vector/ however it's called these days) develops both the reference client and the reference server. Which incidentally is super complex, not well documented (the code is the documentation), and practically not compatible with the other (semi-official) implementations. This is a red herring because it also happens that this organization was built on venture capital money with no financial stability in sight. XMPP is a much more diverse and accessible ecosystem: there are multiple independent teams and corporations implementing servers and clients, the protocol itself is very stable, versatile and extensible. This is how you can find XMPP today running the backbone of the modern internet, dispatching notifications to all Android devices, being the signaling system behind millions of IoT devices, providing messaging to billion of users (WhatsApp is, by the way, based on XMPP)
Another significant difference is that, despite 10 years of existence and millions invested into it, Matrix still has not reached stability (and probably never will): the organization recently announced Matrix 2 as the (yet another) definitive answer to the protocol's shortcomings, without changing anything to what makes the protocol so painful to work with, and the requirements (compute, memory, bandwidth) to run Matrix at even a small scale are still orders of magnitude higher than XMPP. This discouraged many organizations (even serious ones, like Mozilla, KDE, ...) from running Matrix themselves and further contributes to the de-facto centralization and single point of control federated protocols are meant to prevent.
I've used Matrix for months and agree with most points. I would like to try XMPP but it is clear that it does not have the best onboarding experience.
The problem I've observed with XMPP as an outsider is the lack of a standard. Each server or client has its own supported features and I'm not sure which one to choose.