This is a technical post. FastMail users subscribed to receive email updates from the FastMail blog can ignore this post if they are not interested.

We've just replaced the XMPP/Jabber server we use for our chat service. Previously we had been using djabberd. While this worked well for us for the last few years, unfortunately it hasn't been receiving much development recently. This means many newer XMPP extensions aren't available.

We looked at a number of alternate server options: Tigase, Prosody, ejabberd, OpenFire. In the end, we settled on ejabberd because of it's relative maturity, good administration documentation, it's widespread use in existing large installations, the active development community and it's support for multiple domains (in the newest version).

Fortunately our existing architecture separated the XMPP/Jabber server from the backend storage details of our system (eg. user lists, user rosters, chat logging, etc) with an HTTP JSON API. Because of this, it was fairly straightforward to completely remove djabberd, write the equivalent interfacing components for ejabberd and slot that into place. A perfect two month piece of work for our summer intern student Samuel Wejeus. Thanks Samuel!

That work has now been done, and yesterday we completely removed djabberd and replaced it with ejabberd. For users that use our chat service, there shouldn't actually be any noticeable difference at this point, everything should just continue to work as it did, but with this new base we should be able to add more features in the future.