MCPSERV.CLUB
ejabberd

ejabberd

Self-Hosted

Scalable XMPP, MQTT, and SIP real‑time platform

Active(100)
6.5kstars
1views
Updated 3 days ago
ejabberd screenshot 1
1 / 5

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_mam for message archiving, mod_websocket).

Technical Stack

LayerTechnology
RuntimeErlang/OTP 24+ (BEAM VM)
Data storeBuilt‑in Mnesia for lightweight persistence; optional PostgreSQL, MySQL, or MariaDB for scalable user tables and MAM archives
NetworkingTCP/UDP sockets, TLS via Erlang’s ssl module; WebSocket support through cowboy
APIREST (JSON over HTTP), CLI (ejabberdctl), XML‑based XMPP stream
ContainerizationOfficial 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_webhook allow 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_mam or ejabberd_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

  1. Enterprise Chat – Deploy a private XMPP server with MUC rooms, file transfer, and SIP VoIP, all managed via a single cluster.
  2. IoT Messaging – Use the MQTT broker for low‑latency telemetry, while retaining XMPP for device provisioning and command/control.
  3. Real‑time Collaboration – Combine WebSocket clients (via Strophe) with XMPP MUCs for live document editing or gaming lobbies.
  4. 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

Weekly Views

Loading...
Support Us

Featured Project

$30/month

Get maximum visibility with featured placement and special badges

Repository Health

Loading health data...

Information

Category
apis-services
License
NOASSERTION
Stars
6.5k
Technical Specs
Pricing
Open Source
Database
Multiple
Docker
Official
Supported OS
LinuxDocker
Author
processone
processone
Last Updated
3 days ago