1. The only stable and maintained implementation is "matrix-synapse" and it is written in Python.
2. The most commonly used client is "element", and it is governed by the same people. So it feels we are the mercy of a single company.
I wanted hard to go with a more established protocol like XMPP but failed to get a server running properly :)
That IMAP auth trick is really awesome thinking BTW, kudos!
Dovecot is really great, and a ton of stuff supports using it as a sasl auth backend (postfix being an important one). I made a simple facade service that feeds it and postfix from couchdb via its dict backend[0] and postfix's tcp_tables[1], then point everything at dovecot for auth. Couch document IDs map really well to email/user, domain, and sieve script lookups; helluva lot simpler than setting up and managing LDAP.
If you want to selfhost just make it easy and get Conduit. Its single binary and uses embedded db (rocksdb or sqlite). I cant say about federation but for private chat server this has been solid for me for years. I still run it with sqlite (worse than rocksdb) and with 30 very active people its more responsive than Synapse ever was.
curl example.com/.well-known/matrix/client
responded with an incorrect base_url.