ejabberd
Robust, scalable XMPP messaging server
ejabberd is a robust and scalable XMPP server powering instant messaging, presence, and real-time communication. It targets operators running large messaging deployments. It is deployed via Docker or native packages.
Key features
- Highly scalable XMPP server
- Clustering support
- Many extension modules
- MQTT and SIP support
Pros & cons
Strengths
- Extremely scalable
- Battle-tested
- Standards-based
Trade-offs
- XMPP UX depends on clients
- Advanced config is complex
ejabberd replaces
Last reviewed Sep 13, 2026 · 767 words
ejabberd is the XMPP server you run when a Prosody deployment would eventually need to become two Prosody deployments. For a family, a friend group or a 30-person community, Prosody or Snikket gives you the same modern-XMPP feature set with a tenth of the configuration surface. ejabberd's reason to exist is scale: clustering across nodes, an SQL backend, and a 20-year record of carrying millions of concurrent sessions. It will also run your 5-user server perfectly well; it just makes you learn more than you need to.
The ports and the one config file
Everything lives in ejabberd.yml. The listeners you care about are 5222 for clients, 5269 for federation with other servers, 5443 for HTTPS (file upload, BOSH and WebSocket, the admin console), 1883 if you turn on MQTT, and 3478 for the built-in STUN/TURN that voice and video calls need. The official ejabberd/ecs image puts the config at /home/ejabberd/conf/ejabberd.yml and the database under /home/ejabberd/database; mount both. Add your own account to the admin ACL in that file and the web admin console on port 5443 becomes usable for day-to-day tasks, though most people end up back at ejabberdctl. Creating the first account is one command:
docker exec -it ejabberd ejabberdctl register alice example.com 'a-long-passphrase'
DNS needs _xmpp-client._tcp and _xmpp-server._tcp SRV records pointing at your host, and the certificate has to cover the base domain plus the subdomains your modules use, typically conference. for group chats and upload. for files. ejabberd has ACME built in, so it can fetch and renew those certificates itself, which removes one of the classic XMPP setup failures.
Modern XMPP is a checklist, and the defaults pass it
An XMPP server from 2010 works with a 2026 client but feels broken: no message history across devices, no push notifications, no file sharing. The fix is a set of modules, and the default ejabberd.yml enables the important ones: mod_mam for archives, mod_carbons for multi-device sync, mod_stream_mgmt for flaky mobile connections, mod_http_upload for files, mod_push for iOS and Android notifications, mod_pubsub so that OMEMO encryption keys can be published, and mod_muc for rooms. Once deployed, run the public XMPP compliance tester against your domain; a fresh ejabberd scores at or near 100 percent, and the report tells you exactly which module to turn on if it does not.
The encrypted tag on the listing is accurate but needs a footnote: transport encryption is the server's job, and it does it. End-to-end encryption with OMEMO is entirely the client's job. Conversations on Android, Monal on iOS, and Gajim or Dino on the desktop all handle it, and which client your users pick shapes their experience far more than the server does.
Clustering is the reason to be here
A second ejabberd node joins the first with ejabberdctl join_cluster, after which sessions, rooms and routing are shared across both. This is what a community server with 10,000 accounts or a company that cannot tolerate a single box rebooting needs, and it is what Prosody does not offer. At that scale you also move off the built-in Mnesia store to PostgreSQL or MySQL, which ejabberd supports natively. Setting this up is where the Hard difficulty rating comes from: Erlang node names, cookies and network topology are unfamiliar to most self-hosters, and mistakes are quiet rather than loud.
MQTT in the same process
ejabberd includes an MQTT broker that shares the server's authentication and clustering. For a homelab that already runs an XMPP server, it means one fewer service under home automation; for anyone else it is a curiosity. It is also a hint at the project's shape: a general real-time messaging platform that happens to speak XMPP first, rather than a chat server.
What I'd do
If your user count has 2 digits, run Snikket, which is Prosody with the client apps, invitations and certificates already arranged, and you will have a working, encrypted, federated messenger in under an hour. If it has 4 digits, or you need a cluster, or you are replacing an internal messaging system for a company, run ejabberd from the official image with PostgreSQL behind it, verify with the compliance tester, and read the Matrix and XMPP category once to decide whether Synapse and Matrix fit your users better, since that decision is about which clients your people will tolerate, not about the server.
Compare ejabberd
27 head-to-head comparisons.
- ejabberd vs Tinode
- ejabberd vs Element Web
- ejabberd vs Dendrite
- ejabberd vs Synapse
- ejabberd vs Cinny
- ejabberd vs Converse.js
- ejabberd vs FluffyChat
- ejabberd vs Openfire
- ejabberd vs Nheko
- ejabberd vs Dino
- ejabberd vs Conduit
- ejabberd vs Movim
- ejabberd vs MongooseIM
- ejabberd vs gomuks
- ejabberd vs Profanity
- ejabberd vs Convos
- ejabberd vs Syphon
- ejabberd vs Dendrite Lite
- ejabberd vs Element X
- ejabberd vs Fractal
- ejabberd vs JSXC
- ejabberd vs Continuwuity
- ejabberd vs Gajim
- ejabberd vs SchildiChat
- ejabberd vs Tigase XMPP Server
- ejabberd vs Metronome IM
- ejabberd vs Monocles Chat
Similar matrix & xmpp apps
Tinode
Matrix & XMPPOpen-source instant messaging server
Replaces WhatsApp, Slack
Element Web
Matrix & XMPPGlossy Matrix client for the web and desktop
Replaces Slack, Discord
Dendrite
Matrix & XMPPSecond-generation Matrix homeserver written in Go
Replaces Slack, Discord
Synapse
Matrix & XMPPReference homeserver for the Matrix network
Replaces Slack, Discord
Cinny
Matrix & XMPPSimple, elegant and secure Matrix client
Replaces Slack, Discord
Converse.js
Matrix & XMPPWeb-based XMPP/Jabber chat client
Replaces Slack