More Thoughts on XMPP

It’s been a couple of days since getting into XMPP with my own server, so I wanted to give a quick follow-up with my impressions so far.

(I realize now after writing this that it’s anything but quick. Oh well!)

If you’re not familiar with XMPP, this might be of some interest to you and help you decide if it’s something you want to use. You certainly don’t have to host your own server, but if you’re a little technical and want to be as in control of your communications as possible then I can definitely recommend it so far!

The good stuff

Setup and maintenance

If you’re looking to host an XMPP server yourself, Snikket makes it extremely easy. Things might get a little dicey if you hit any snags and aren’t familiar with Docker, but Snikket fortunately has a troubleshooting page full of solutions to common issues.

I haven’t been running my server for very long, but I don’t foresee having to do any serious maintenance on it. Certificates are set up to auto-renew and old messages are routinely cleaned up from the server.


The server software I went with, Snikket (based on Prosody), is extremely lightweight using only around 100 MB of memory and practically no CPU. I expect that things would get a little heavier the more users you add, but this is a great starting point.

Snikket app

Snikket’s Android app, a fork of the popular Conversations app, is fairly straightforward and works very well. It actually works so well and is generally so easy to use that I prefer it to using a desktop client (even Dino).


It just works. I’m glad I didn’t have to jump through any hoops since encryption should have as few barriers as possible.

The not so good stuff

No push notifications

This isn’t as big a deal as it sounds. I still get reliable notifications on my phone, but it requires an ongoing background process to keep a connection to the server open. This does result in heavier than normal battery usage, but it’s likely not enough for most people to notice.

Potentially confusing UX

I said Snikket’s Android app was fairly straightforward, but there are still things that are confusing to XMPP newcomers. What’s OMEMO? Why am I seeing this warning when contacting someone new? Why can’t I see any of my encrypted messages right after logging into a new client? With Snikket, if say you’ve accidentally signed out of your account, there’s no obvious indicator that that’s the case which might lead less technical people to wonder why they aren’t receiving messages.

The client situation

Choosing a client can seem complicated. On Android the question is basically “which fork of Conversations do I want?”, which isn’t so bad since Conversations is a good client. Looking for a desktop client is overwhelming unless you have someone to get recommendations from. I hear the client selection on Mac and iOS devices especially is lacking, but I don’t have a way to check that.

How does it compare to Matrix?

If you’re looking for a private, decentralized messenger you’ll probably find yourself trying to compare XMPP and Matrix.

Note that I don’t have any experience hosting a Matrix server (yet), so if something I say here isn’t totally accurate please let me know and I’ll be happy to make a correction. I have been using Matrix for a while though, so the user experience is mostly what I’ll be focusing on.

Ease of hosting

As of right now, XMPP is much more lightweight than Synapse, the most mature Matrix server. Something to consider if you’re interested in hosting. There are other Matrix servers in development that solve that problem though.

XMPP, from what I’ve learned, seems the simpler of the two protocols.


Encryption from a user’s perspective is just as easy to implement between the two in my opinion.


Matrix from what I can tell does offer push notifications. This gives it an advantage by making it lighter on battery and making notifications less confusing for users.


Matrix has an ‘official’ client in Element, giving users an easy choice for getting started. That’s nice since Element is available on every major desktop OS, mobile OS, and as a web app. There’s also plenty of other in development clients, though most of them aren’t as mature as Element.

Most XMPP clients have been around for a while and are very mature, but as a consequence they don’t feel quite as modern as Matrix clients.


I criticized the UX of XMPP a little bit, but I think Matrix (or more specifically Element) is very slightly worse off. This is partly due to the complexity of Matrix, and partly due to Matrix being younger and undergoing rapid development.


I’m very happy with XMPP so far and am going to be sticking with it. Thanks to everyone so far who has reached out to chat or just to send a quick test message! I’ve already met several fun people to chat with and found some groups to hang out in. I’m also really liking the simplicity of XMPP.

That being said, I don’t plan on using XMPP for chatting with family or real life friends. Despite excellent modern-feeling clients like Snikket and Dino, using XMPP still feels more like using early internet instant messaging than using a modern texting app.

I may encourage friends and family to move to a self-hosted Matrix server once that matures a little bit more. In the meantime, there’s Signal which, despite its shortcomings, does a lot of great things for making private conversation easily accessible.

Like I said before, feel free to contact me if you have any extra insights or found any part of this post lacking. I’m still not super familiar with any of this and these are only my impressions so far.

#privacy #self-hosting #tech