Overview
Discover what makes ejabberd powerful
`ejabberd` is a production‑grade, Erlang/OTP based real‑time platform that bundles an XMPP server, MQTT broker, and SIP service into a single process. The core is written in **Erlang**, leveraging the language’s built‑in support for concurrency, hot code swapping, and fault tolerance. The server exposes a rich REST API, an `ejabberdctl` CLI, and optional WebSocket/BOSH interfaces for web clients. Its modular architecture allows developers to enable or disable protocol stacks at runtime, making it suitable for both lightweight chat applications and large‑scale IoT deployments.
Multi‑protocol support
Cluster‑ready
Hot upgrades
Extensible plugin system
Overview
ejabberd is a production‑grade, Erlang/OTP based real‑time platform that bundles an XMPP server, MQTT broker, and SIP service into a single process. The core is written in Erlang, leveraging the language’s built‑in support for concurrency, hot code swapping, and fault tolerance. The server exposes a rich REST API, an ejabberdctl CLI, and optional WebSocket/BOSH interfaces for web clients. Its modular architecture allows developers to enable or disable protocol stacks at runtime, making it suitable for both lightweight chat applications and large‑scale IoT deployments.
Key Features
- Multi‑protocol support: XMPP (RFC 6120), MQTT (v3.1/3.1.1), and SIP/SDP for voice/video, all sharing the same authentication and presence infrastructure.
- Cluster‑ready: Nodes join a cluster with consistent hashing; every node is active, so any request can be handled by any member. Cluster state is stored in a replicated ETS table or external DB, ensuring zero data loss during rebalancing.
- Hot upgrades: Thanks to Erlang’s OTP release handling, new code can be pushed without stopping the node, maintaining 99.999% uptime for mission‑critical services.
- Extensible plugin system: The
mod_*architecture lets developers write Erlang modules that hook into the XMPP stream, MQTT topics, or SIP signaling. The repo ships with over 30 community modules (e.g.,mod_presence,mod_mamfor message archiving,mod_websocket).
Technical Stack
| Layer | Technology |
|---|---|
| Runtime | Erlang/OTP 24+ (BEAM VM) |
| Data store | Built‑in Mnesia for lightweight persistence; optional PostgreSQL, MySQL, or MariaDB for scalable user tables and MAM archives |
| Networking | TCP/UDP sockets, TLS via Erlang’s ssl module; WebSocket support through cowboy |
| API | REST (JSON over HTTP), CLI (ejabberdctl), XML‑based XMPP stream |
| Containerization | Official Docker images (ejabberd:ecs and ejabberd) support both x86_64 and arm64; images expose standard ports (5222, 5269, 8888 for REST) and are ready for Kubernetes or Docker‑Compose |
Deployment & Infrastructure
Running ejabberd on bare metal, VMs, or cloud instances is straightforward. The server’s configuration file (ejabberd.yml) is declarative, allowing developers to specify modules, listeners, and database connections in a single YAML file. For high‑availability clusters, the ejabberdctl cluster command distributes state across nodes and can be scripted in CI pipelines. Containerized deployments benefit from Helm charts or Docker‑Compose templates, and the built‑in mod_cluster module automatically balances load across pods.
Integration & Extensibility
- REST API: Exposes endpoints for user management, MUC creation, and server monitoring. Authentication can be token‑based or mutual TLS.
- Webhooks: Modules such as
mod_webhookallow outbound HTTP callbacks on events (message received, presence change), enabling real‑time integrations with external services. - Custom modules: Developers can write Erlang modules that implement
ejabberd_mamorejabberd_sip, leveraging OTP behaviours. The community provides a repository of reusable modules, and the official docs detail the callback signatures. - Mobile SDKs: XMPPFramework (iOS), Smack/Retrofit (Android), and Strophe.js (web) are supported, with optional TLS pinning for hardened deployments.
Developer Experience
The documentation portal (docs.ejabberd.im) is comprehensive, featuring a searchable API reference, example configurations, and migration guides. The GitHub repository follows semantic versioning; each release is accompanied by CI checks, test coverage reports, and Docker image builds. The community is active on GitHub Issues, Zulip chat, and the official forum, ensuring rapid support for production bugs. Licensing is Apache 2.0, which removes commercial restrictions and aligns with open‑source best practices.
Use Cases
- Enterprise Chat – Deploy a private XMPP server with MUC rooms, file transfer, and SIP VoIP, all managed via a single cluster.
- IoT Messaging – Use the MQTT broker for low‑latency telemetry, while retaining XMPP for device provisioning and command/control.
- Real‑time Collaboration – Combine WebSocket clients (via Strophe) with XMPP MUCs for live document editing or gaming lobbies.
- Disaster‑Resilient Communication – Leverage the fault‑tolerant clustering and hot upgrade features for mission‑critical messaging in remote or unstable network environments.
Advantages
- Performance: The BEAM VM handles millions of concurrent connections with minimal memory overhead, as demonstrated by the 2 M user benchmark on a single node.
- Flexibility: One binary serves XMPP, MQTT, and SIP; no need to run separate brokers for each protocol.
- Extensibility: The plug‑in architecture and Erlang’s OTP behaviours make adding new features a first‑class citizen.
- Reliability: Built
Open SourceReady to get started?
Join the community and start self-hosting ejabberd today
Related Apps in apis-services
Mastodon
Decentralized, real‑time social networking
Discourse
Open‑source community forum platform with real‑time chat and AI
Rocket.Chat
Secure, open‑source team communication platform
Novu
Unified notification platform for multi‑channel delivery
Mattermost
Secure, self‑hosted team collaboration with chat, voice, and AI
Jitsi Meet
Free, encrypted video conferencing for everyone
Weekly Views
Repository Health
Information
Explore More Apps
Hyrax
Digital repository framework built on Ruby on Rails
Open Food Network
Open-source marketplace connecting local farmers and food hubs
Grocy
Manage groceries and household tasks from your browser
Keystone
Developer‑centric CMS delivering powerful GraphQL APIs and a sleek admin UI.
Readflow
Collect, organize, and read web articles anywhere.
Shelf
Open‑source asset management for teams and institutions
