Although most of my friends prefer Matrix these days, XMPP is still my favorite way of chatting. You can easily run your own Prosody instance [1] on a $5/month VPS and have a very modern chat experience - offline messages, syncing between devices, OMEMO end-to-end encryption, group chats, push notifications, HTTP file upload, etc. My wife and I use it for all our communications.

There are some great clients for Android [2], iOS [3] and Linux/Windows [4] that support all the modern XEPs. Sadly, there aren't any mature, actively developed clients for OS X that I've found. Adium is pretty much abandoned. Monal is in active development though and seems promising.

It's so nice to use an open protocol with native clients. Most other self-hosted chat solutions require electron apps, which can be painful to use unless you have top of the line hardware.

[1] https://github.com/cullum/dank-selfhosted/blob/master/roles/...

[2] https://conversations.im/

[3] https://chatsecure.org/

[4] https://gajim.org

"Easily" and "modern" chat experience with XMPP?

I used to run my own Prosody server for some years before switching out to Matrix and there was nothing "easy" and "modern" with XMPP. Sure, I could get the fancy features such as end-to-end encryption, push notifications and file sharing... with Conversation for Android. But I could never properly sync my messages and conversations with a PC client.

I'm glad I don't have to deal with XMPP anymore, I know that the HN crowd likes to dream with it but the reality is that it was a major pain.

> it was a major pain

It demonstrated that it can overcome major pain points though: Gajim (Desktop), Conversations (Android) and Monal (iOS) [edit to add: and conversejs on the web] cooperate quite well these days.

Matrix? Let's see how they overcome their first major paradigm shift (such as the introduction of mobile devices with spotty ever-changing network environments, or E2E encryption both of which took a while for XMPP to handle gracefully)

E2E hasn't come gracefully to me yet, because my Pidgin still only has OTR support, and so does the one one of my primary Jabber contacts uses, except Conversations has now dropped it in favor of going all-OMEMO. My current answer is to ignore the mobile case like I did most of the time before, but that's not a good answer.

I guess maybe I need to switch to Gajim, but this sure isn't frictionless, mostly due to the lag-induced fragmentation.

Pidgin has OMEMO support.

https://github.com/gkdr/lurch

This works fairly well for me.