
Ejabberd offers a range of editions to cater to different needs and requirements.
The Community Edition is free and open-source, making it an excellent choice for small-scale deployments and development purposes.
This edition is suitable for small teams and individual developers who want to experiment with Ejabberd without incurring any costs.
The Enterprise Edition, on the other hand, is designed for large-scale deployments and offers advanced features and support.
It's ideal for organizations that require a high level of customization and support, and are willing to invest in a premium solution.
The Cloud Edition is a managed service that provides a scalable and secure messaging solution in the cloud.
It's perfect for teams that need to quickly set up a messaging system without worrying about infrastructure and maintenance.
For another approach, see: What Is the Cloud Foundry
Features
Ejabberd has a high level of compliance with XMPP. It provides a web interface which can be translated into other languages. ejabberd supports distributed computing by clustering, supports live upgrades, shared roster groups and provides support for virtual hosts. Database management systems supported include PostgreSQL and MySQL, and ODBC is supported for connectivity to other systems. LDAP authentication is supported, as is login via SSL/TLS, SASL and STARTTLS.
Modules in ejabberd can provide support for additional capabilities such as saving offline messages, connecting with IRC channels, or a user database which makes use of user's vCards. Modules can also provide support for extensions of the XMPP protocol, such as MUC, HTTP polling, Publish-Subscribe, and gathering statistics via XMPP.
Here are some of the database management systems supported by ejabberd:
- PostgreSQL
- MySQL
- ODBC (for connectivity to other systems)
Mod Pubsub Serverinfo
Mod Pubsub Serverinfo is a feature in ejabberd that allows you to expose S2S information over the Pub/Sub service.
With mod_pubsub_serverinfo, you can now access S2S information through the Pub/Sub service, making it easier to manage and configure your ejabberd server.
This module was originally part of the ejabberd-contrib package, but it's now included in ejabberd, so you can remove any existing installations.
Here are some key improvements and fixes in mod_pubsub_serverinfo:
- Support for XEP-0485: PubSub Server Information
- Support for older Matrix rooms versions starting from version 4
- Don't send empty messages in Matrix rooms (#4385)
- Fix key validation in mod_matrix_gw_s2s:check_signature
- Handle term that is key-value list when encoding JSON (#4379)
Xep-0431: Full Text Search
Support for XEP-0431: Full Text Search in MAM has been added to ejabberd.
For now, it only works if mod_mam is using the MySQL storage backend.
This means that if you're using MySQL, you can take advantage of full text search in MAM.
The option called default_host, previously documented for the ejabberd_http listener, still doesn't work correctly.
It's worth noting that this new feature is a significant improvement for ejabberd users who rely on MAM for searching and retrieving messages.
Three Editions for All Needs
Ejabberd offers three editions to cater to different needs. The Community Edition is an open-source version supported by a thriving community.
The Business Edition comes with ProcessOne’s long-term support (LTS) and additional features like mobile enhancements, compliance options, improved clustering, and monitoring. It's available for on-premise deployment or as a dedicated platform managed by ProcessOne.
You can also choose fluux, a managed solution that provides an efficient way to scale with ejabberd Business Edition. This means a seamless experience with ProcessOne fully operating it.
Here's a summary of the three editions:
The Business Edition also receives improvements and bugfixes, including a bugfix on max_concurrent_connections for mod_gcm, mod_webhook, and mod_webpush.
Improved Offline Messages for Auth Without User Lists

Ejabberd's new release has improved offline messages handling for authentication methods without user lists. This includes methods like JWT token or tls certificate authentication.
These authentication methods had issues processing offline messages because they couldn't determine if a user existed when they weren't logged in. The new code now consults data stored by mod_last to fix this problem.
Users who have logged in at least once before should see improvements in offline messages processing. This is a significant improvement for users who rely on these authentication methods.
The new code reuses information stored by mod_last to determine if a user exists, which should improve mod_offline and mod_mam handling of offline messages.
Added PEP Native Bookmarks
ejabberd now supports XEP-0402: PEP Native Bookmarks, which allows for a more efficient and scalable way to store chatroom bookmarks.
This feature is an improvement over XEP-0048: Bookmark Storage, which stored bookmarks in a single Private XML Storage or a single PEP node.

The bookmarks_to_pep command can be used to synchronize bookmarks from Private XML Storage and store them in PEP nodes as described in XEP-0402.
Here's a brief overview of the supported bookmark formats:
This support for PEP Native Bookmarks is a significant improvement for ejabberd users, allowing for more efficient and scalable bookmark management.
Security
Security is at the core of ejabberd, supporting the latest encryption standards and end-to-end encryption for enhanced privacy.
ejabberd has implemented XEP-0480: SASL Upgrade Tasks, which allows compatible clients to automatically upgrade encrypted passwords to more secure formats with minimal user intervention.
This feature enhances security without requiring users to take any extra steps, making it a seamless and efficient process.
Trustworthy Security
Ejabberd's new features focus on enhancing security with minimal user intervention. The mod_scram_upgrade module implements XEP-0480: SASL Upgrade Tasks, allowing compatible clients to automatically upgrade encrypted passwords to more secure formats.
This upgrade process is seamless and doesn't require users to take any action. Users' existing passwords are automatically updated to the new, more secure formats.

The auth_stored_password_types option allows server admins to specify the password formats that will be stored in the database. Currently recognized formats include plain, scram_sha1, scram_sha256, and scram_sha512.
By using multiple password formats, ejabberd helps with migration to newer, more secure authentication methods. This feature is especially useful for users who may not have the latest clients or may not be able to update their passwords immediately.
The auth_password_types_hidden_in_scram1 option gives server admins the ability to choose which password types should not be presented to SASL1 clients. This option takes a list of password types from auth_stored_password_types that should be disabled.
This option is particularly useful for server admins who want to phase out older password formats and encourage users to update to newer, more secure ones. By disabling older password formats, admins can ensure that users are using the most secure authentication methods available.
See what others are reading: Live Communications Server 2005
IQ Access for Privileged Entities
IQ Access for Privileged Entities is a significant security feature, especially for XMPP gateways using the Slidge library. This feature now supports IQ permission based on version 0.4 of XEP-0356: Privileged Entity.

The mod_privilege module has been updated to incorporate this new feature, making it easier to manage privileged entities. The new IQ permission system provides an additional layer of security for these entities.
This feature is especially useful for XMPP gateways using the Slidge library, as it allows for more precise control over access and permissions. See #3889 for more details on this feature.
Performance and Scalability
Ejabberd is built for scale, and its performance has been proven at WhatsApp-scale. It's capable of handling hundreds of millions of users.
One of the key highlights is its massive concurrency, which was successfully tested with 2 million concurrent sessions on a single node. This offers unmatched concurrency.
Ejabberd's native clustering allows it to handle massive user bases with ease, making it a great choice for internet-scale applications.
Here are some key performance and scalability features of ejabberd:
- Massive Concurrency: Successfully tested with 2 million concurrent sessions on a single node.
- Internet-Scale Clustering: ejabberd’s native clustering allows it to handle massive user bases with ease.
Management
Ejabberd's clustering capabilities and support for seamless upgrades ensure exceptional uptime. This is made possible by its ability to upgrade without downtime.
Comprehensive monitoring is available in the Business Edition, providing over 300 metrics to give you deep insights into your platform's performance.
You can view message counts, remove all MAM messages, or only for a specific contact, and also view the MAM Archive directly from WebAdmin.
Here are some improvements in commands:
- create_rooms_file: Improved, now it supports vhosts with different config
- evacuate_kindly: New command to kick users and prevent login (#4309)
- join_cluster: Improved explanation: this returns immediately (since 5a34020, 24.06)
- mod_muc_admin: Renamed arguments name to room for consistency, with backwards support (no need to update API clients)
Easier Erlang Node Name Change with Mnesia
Changing the Erlang node name can be a hassle, but thankfully, ejabberd has made it easier with the mnesia_change command. This command is a game-changer for anyone who's had to deal with the frustration of having to follow a 10-step tutorial just to update the node name.
The mnesia_change command is a direct implementation in the ejabberdctl command line script, which means you don't have to worry about running multiple commands or restarting ejabberd multiple times. It's a one-stop solution that gets the job done.
If you're not sure how to use the mnesia_change command, here's a quick rundown of the process:
- Run the command: `ejabberdctl mnesia_change`
- Follow the instructions to update the node name
- Restart ejabberd to apply the changes
That's it! With the mnesia_change command, you can easily update the Erlang node name stored in the mnesia database without having to go through a lengthy tutorial.
Easy to Manage

ejabberd boasts exceptional uptime, made possible by its clustering capabilities and support for seamless, on-the-fly upgrades without downtime.
Comprehensive monitoring is also available, providing over 300 metrics to give you deep insights into your platform’s performance, all within your preferred monitoring tools.
The Business Edition offers a robust and reliable solution for managing your ejabberd platform.
Web Admin Permissions
In the ejabberd 24.06 release, the WebAdmin interface was improved to reuse existing commands, making it easier for developers to add new pages.
The default ejabberd configuration allowed admins to log in to WebAdmin from any machine, but only allowed them to run commands from the loopback IP address.
A bug showed similar symptoms when entering the WebAdmin from one host and then logging in as an account in another host.
To fix this, you need to update your configuration by adding permission from web admin to execute all commands to accounts logged in with admin privilege.
You can customize access as much as you want, for example, only from specific IP addresses, only to certain accounts, or only for specific commands.
Here are some examples of how to configure WebAdmin permissions:
The default ejabberd.yml configuration file already defines "admin access" that allows access from loopback IP address and accounts in the admin ACL to execute all commands except stop and start.
You can define fine-grained restrictions for accounts in WebAdmin, for example, by specifying which commands they can execute.
Halt Command
The halt command is a new addition to ejabberd's management tools.
It abruptly stops the ejabberd node without taking care to close its components gracefully, resulting in an error code 1.
This command is useful in situations where a problem is detected while ejabberd is starting.
For example, it's used in the ecs and ejabberd container images when CTL_ON_CREATE or CTL_ON_START commands fail to execute correctly.
You can use the halt command to stop ejabberd in a hurry, but keep in mind that it's not the most gentle way to shut down the server.

Here are the differences between the stop, stop_kindly, and halt commands:
Remember, the halt command is a last resort, and you should use it only when absolutely necessary.
Message Archive Management
Message Archive Management is a feature that stores every message sent between users, affecting the privacy of your users. This is implemented by the mod_mam module, which follows the XEP-0313 standard.
The database can store a maximum of 2GB of messages. This means you'll need to regularly clean up the archive to avoid running out of space.
To configure message retention policy, set the Clean messages older than X days option. This will automatically purge archived messages that are no longer needed.
With Message Archive Management, you can view message counts, remove all MAM messages, or only for a specific contact, and also view the MAM Archive directly from WebAdmin. This is a useful feature for administrators who need to manage chat history.
The WebAdmin interface has been improved to make it easier to add new pages and commands. This change allows developers to quickly add new features and administrators to manage the server more efficiently.
You can also ask for deletion of archived messages using the new support for XEP-0424: Message Retraction. This feature gives users more control over their message archiving.
Development
Ejabberd development is tracked using GitHub Issues, so you can check out the CONTRIBUTING document for more details. This is where you'll find information on submitting bug reports and feature requests.
You can find nightly builds of ejabberd on GitHub Actions, specifically in the Installers page. To download the installers, follow these steps: Go to the most recent commit on the Installers page.On the bottom of that commit page, download the ejabberd-packages.zip artifact. Alternatively, you can also download the ejabberd container image from the ejabberd Github Packages.
Here's an interesting read: Website to Download Programs for Free
Mod Providers for XMPP File Serving
Mod Providers for XMPP File Serving is a game-changer for developers. It allows you to serve XMPP Provider files easily.
The standard way to serve XMPP Provider files involves generating a Provider File, storing it on disk, and then serving it using an HTTP server or mod_http_fileserver. This process needs to be repeated for each vhost.
But with mod_providers, you can automate this process and set some values according to your configuration. It's like having a personal assistant for your XMPP files.
You can configure ejabberd by checking the URL https://localhost:443/.well-known/xmpp-provider-v2.json, and then fine-tune it by setting a few mod_providers options.
On a similar theme: Xmpp Clients
Development
Development is an open process, with bug reports and features tracked using GitHub Issues. Check out the CONTRIBUTING page for details.
Bug reports and features are tracked using GitHub Issues, so you can stay up to date on what's happening in the development process.
The ejabberd documentation for developers is available in the ejabberd docs: Developers section. This is a great resource if you're trying to get started with the development process.

Nightly builds of ejabberd are available for both the master branch and for Pull Requests. You can find these builds by going to GitHub Actions: Installers and downloading the ejabberd-packages.zip artifact from the most recent commit.
To get the ejabberd container image, you can go to ejabberd Github Packages.
If you have security concerns or reports, it's best to report them privately to ProcessOne. You can send an email to contact at process-one dot net or use another method from ProcessOne Contact.
Erlang OTP 27 & Elixir 1.17
ejabberd now shows its version number, as well as the Erlang/OTP and Elixir versions being used, in the log during server start. This makes it easier to identify the software versions being used, which is helpful when investigating problems.
The ejabberd.log file now displays the version information, making it easier to troubleshoot issues.
ejabberd support for Erlang/OTP 27.0 has been improved, and the jiffy dependency is no longer needed when using this version.
The lowest supported Erlang/OTP version remains 20.0, but it's recommended to use 26.2, which is included in the binary installers and container images.
Elixir 1.17 works correctly with ejabberd, and the lowest supported Elixir version is 1.10.3.
Elixir Authentication Modules
Elixir authentication modules are a game-changer for developers.
You can write custom authentication methods in Elixir, which is a great option for those who prefer the Elixir programming language.
Ejabberd modules can be written in Elixir since version 15.02, and now authentication methods can also be written in Elixir.
Place your custom authentication method in the lib/ directory, compile ejabberd, and configure it in ejabberd.yml.
The old mod_presence_demo.ex has been renamed to mod_example.ex for consistency with the file naming scheme.
Commands
Commands are a crucial part of ejabberd's administrative tasks. The ejabberd WebAdmin got support to execute around 200 API commands, which are clearly described and documented.
You can now execute these commands in various ways, including using a XMPP client that supports XEP-0050 Ad-Hoc Commands and XEP-0030 Service Discovery. This is made possible by the new mod_adhoc_api ejabberd module.
Some examples of commands include kicking all logged users for a given host with the kick_users command. This command is particularly useful for administrative tasks.

Here are some key changes to the get_roster command:
- ask is renamed to pending
- group is renamed to groups
- the new groups is a list with all the group names
- a contact that is in several groups is now listed only once, and the groups are properly listed.
The new get_roster command also returns results with list elements separated by semicolons. This change is part of the ejabberd 23.XX and newer versions.
ModMuc Occupant ID Module
The mod_muc_occupantid module is a useful addition to ejabberd, allowing for anonymous unique occupant identifiers in MUC rooms. It's especially helpful in anonymous MUC rooms.
Ejabberd now implements XEP-0421 0.1.0 in mod_muc_occupantid. This means you can enable it in the modules section of your ejabberd.yml configuration file and restart ejabberd or reload_config to start using it.
Only one client, Dino, has been found to support XEP-421 since version 0.4. This is a good starting point for testing the module's capabilities.
The mod_muc_occupantid module has a simple design with no configurable options. This makes it easy to set up and use.
A fix has been implemented to handle multiple occupant-ids correctly. This was a problem where the server would replace only the first instance of an occupant-id with its own version, leaving others untouched.
Notify On Push

The new notify_on option in mod_push gives you more control over when you receive notifications.
With the notify_on option, you can choose to receive notifications on all kinds of XMPP stanzas, which is the default value.
You can also opt to receive notifications only for actual chat messages with a body text, or some encrypted payload.
The possible values for notify_on are listed as follows:
- all: generate a notification on any kind of XMPP stanzas.
- messages: notifications are only triggered for actual chat messages with a body text (or some encrypted payload).
This means you can tailor your notification preferences to suit your needs, whether you want to stay on top of all activity or just important messages.
Ejabberd
Ejabberd is a powerful chat server that can be integrated with Webtop and client networks. It's an open-source solution that's directly integrated with Webtop.
One of the key features of Ejabberd is its ability to support multiple protocols, including Jabber/XMPP. This makes it a versatile solution for developers who need to work with different communication protocols.
Ejabberd is also known for its ease of use, thanks to its user-friendly interface and intuitive design. This makes it a great choice for developers who are new to chat servers.
If you're looking to install Ejabberd, you can use the ejabberd Community Server Docker Image. This image is available on standard ports (5222 or 5223) and supports TLS.
To use Ejabberd, you'll need to add the mod_auth_fast module in the modules section. This will enable the Fast Authentication Streamlining Tokens feature, which allows clients to request time-limited tokens from servers.
Here are the supported versions of Erlang/OTP and Elixir:
It's worth noting that only one instance of Ejabberd can run on a node to prevent TCP port conflicts. This means you'll need to carefully plan your deployment to ensure that Ejabberd is running correctly.
Distribution
Ejabberd is available in various operating system distributions, including Debian, Fedora, Gentoo, Ubuntu, Arch Linux, OpenSolaris, FreeBSD Ports, OpenBSD ports, and NetBSD port.
You can also find ejabberd in the TurnKey Linux Virtual Appliance Library and the Comprehensive Erlang Archive Network (CEAN), which offer convenient and easily deployable versions of the software.
Additionally, an older version of ejabberd is included in the Unison unified communications software.
Rest Proxy
Rest Proxy plays a crucial role in Distribution. You can make modules using the rest.erl module use HTTP proxy when performing HTTP requests.
New options have been added to help with this. These options are rest_proxy, rest_proxy_port, rest_proxy_username, and rest_proxy_password.
The rest_proxy option specifies the address of a HTTP Connect proxy. This is a game-changer for those who need to add new password types to existing installations.
The rest_proxy_port option specifies the port of a HTTP Connect proxy. This is used in conjunction with the rest_proxy option.
The rest_proxy_username and rest_proxy_password options are used to authenticate to the HTTP Connect proxy. These options are optional.
Here's a quick rundown of the new options:
- rest_proxy: Address of a HTTP Connect proxy
- rest_proxy_port: Port of a HTTP Connect proxy
- rest_proxy_username: Username used to authenticate to HTTP Connect proxy (optional)
- rest_proxy_password: Password used to authenticate to HTTP Connect proxy (optional)
These new options were added to help with adding new password types to existing installations. This was necessary because adding new password types would cause problems for users who didn't have the new password type stored, and which clients used SASL1 authentication.
Distribution Methods

Ejabberd is available in various operating system distributions, including Debian, Fedora, Gentoo, Ubuntu, Arch Linux, OpenSolaris, FreeBSD Ports, OpenBSD ports, and NetBSD port.
You can also find ejabberd in the TurnKey Linux Virtual Appliance Library and Comprehensive Erlang Archive Network (CEAN).
An old version of ejabberd is included in the Unison unified communications software.
The Nintendo Switch uses ejabberd for its "Nintendo Switch Push Notification infrastructure" (NPNS), which handles 10 million simultaneous connections.
Versioning
Versioning is a crucial aspect of ejabberd's distribution. The log file now shows the Erlang/OTP and Elixir versions being used, making it easier to identify software versions and troubleshoot issues.
This feature is especially useful for administrators who need to investigate problems and explain them to others. The ejabberd.log file now displays the version numbers, which can be a huge help in resolving issues.
To continue using API version 0, you can use the `--version 0` switch with `ejabberdctl`, or add `v0` to the `request_handlers` path in the ejabberd configuration file.
Here are the specific steps to follow:
- Use `ejabberdctl --version 0` to specify API version 0.
- Add `v0` to the `request_handlers` path in the ejabberd configuration file.
API versioning has been around since ejabberd 16.04, but it's only now being fully utilized. API version 1 is the default, but you can continue using API version 0 if you prefer.
Notable Deployments
Ejabberd has been used in several notable deployments.
One notable example is the use of Ejabberd by the US government's National Institute of Standards and Technology (NIST) for their instant messaging system.
Ejabberd's scalability was a key factor in its selection by NIST, with the system able to handle over 10,000 concurrent users.
The use of Ejabberd at NIST also allowed for the integration of other services, such as authentication and presence management.
This flexibility and scalability made Ejabberd an attractive option for NIST's instant messaging needs.
Documentation
Documentation for Ejabberd is easily accessible, especially when compiling from source code. You can get some help with translations online using Weblate or on your local machine as explained in Localization.
Ejabberd's documentation has been improved, with recent changes including fixing the matrix_id_as_jid option documentation for mod_matrix_gw and adding an example configuration for the welcome_message option in mod_register.
Here are some recent documentation updates:
- mod_matrix_gw: Fix matrix_id_as_jid option documentation
- mod_register: Add example configuration of welcome_message option
- mix.exs: Add ejabberd example config files to the hex package
- Update CODE_OF_CONDUCT.md
These updates don't affect the API, so you can rest assured that your existing configurations will continue to work as expected.
Configuration
Before you start configuring Ejabberd, make sure to create a name record in your DNS server. This is a crucial step to ensure smooth communication between your server and clients.
You'll also need to create a Let's Encrypt certificate, as file sharing clients won't connect to the server if the certificate is self-signed. This is a mandatory requirement for file sharing clients.
To configure Ejabberd authentication, you'll need to integrate it with your LDAP user domain, which can be done at User domains. This will allow your users to log in securely.
The Ejabberd administrators can access the web admin page on port 5280, where they can manage various aspects of the server, including accounts, Shared Roster Groups, and server statistics.
You might like: Live Communications Server 2003
The administration page is available at https://IP_OR_FQDN:5280/admin. From here, administrators can configure various advanced options, including enabling the built-in web administration interface, S2S federation, message archive management, file upload, and file transfer speed.
Here are some key advanced options that can be configured:
- Enable built-in web administration interface
- S2S federation
- Message archive management
- File upload to exchange data among clients using URL
- File transfer speed
Macro as Environment Variable
You can define macros in the ejabberd configuration file since version 13.10.
This feature allows you to define a value once at the beginning of the configuration file and use that macro to set up options values several times during the file.
To define the macro value as an environment variable, the environment variable name should be EJABBERD_MACRO_ + macro name.
For example, if you've configured a macro in ejabberd.yml, you can define and overwrite that macro definition when starting ejabberd.
Starting ejabberd in interactive mode allows you to do this, for example: EJABBERD_MACRO_my_macro=my_value ejabberd -config ejabberd.yml.
This is especially useful when using containers with slightly different values, such as different hosts or port numbers.
Configuration

Before you start configuring your Ejabberd instance, make sure to create a corresponding name record in your DNS server. This is a crucial step that ensures your server is accessible to clients.
To use Ejabberd as a Webtop chat engine, enter the same domain name used by Webtop in the Maildomain field on its Settings page. This will enable seamless integration between the two services.
Let's Encrypt certificate is mandatory for file sharing clients, as they refuse to connect to the server if the certificate is self-signed. This is a security measure to ensure the integrity and authenticity of data transferred between clients.
To configure Ejabberd authentication, integrate it with your LDAP user domain at User domains. This will allow users to log in securely and access their accounts.
Ejabberd administrators can access the web admin page on port 5280, where they can manage various aspects of the server, including accounts, Shared Roster Groups, and Mnesia database management.
The administration page is available at https://IP_OR_FQDN:5280/admin, where administrators can configure advanced options such as:
- enable built-in web administration interface
- S2S federation
- message archive management
- file upload to exchange data among clients using URL
- file transfer speed
HostsAlias

You can use the hosts_alias option to resolve domain names into vhosts served by ejabberd.
The hosts_alias option is used by the ejabberd_http listener to resolve domain names.
For example, if you configure DNS so xmpp.redacted.lan resolves to a host, ejabberd_http will accept https://xmpp.redacted.lan/conversejs and deliver it to the corresponding vhost.
Configure the hosts_alias option in ejabberd to enable this feature.
For another approach, see: XMPP Standards Foundation
Predefined Keywords
Predefined keywords are a valuable tool in ejabberd configuration. They allow you to use specific keywords in your configuration files to make your setup more flexible and easier to manage.
ejabberd 25.03 introduced new predefined keywords like HOST, HOME, VERSION, and SEMVER. These keywords provide a standardized way to access specific information about your ejabberd setup.
HOST and HOME are two of the new predefined keywords added to ejabberd. They can be used to access the hostname and home directory of your ejabberd server, respectively.
In addition to HOST and HOME, VERSION and SEMVER are also predefined keywords in ejabberd. VERSION provides the version number of your ejabberd installation, while SEMVER provides the semantic version number.
These predefined keywords can be used to simplify your configuration files and make them more readable. For example, you can use HOST to specify the hostname of your ejabberd server instead of hardcoding the value.
Additional reading: Mobile Web Server
Use Alternative Stun Port
Using the standard STUN port can make it easier for attackers to discover your service, so consider using a non-standard port. This is because STUN via UDP can easily be abused for reflection/amplification DDoS attacks.
Modern XMPP clients discover the port via XEP-0215, so there's no advantage in sticking to the standard port.
Unix Socket Listener
You can now define a listener with a unix_socket option to create and listen on a unix domain socket.
The unix_socket option allows you to customize some options of that unix socket file, such as the mode, owner, and group.
The mode option should be an octal value, which means it's a number in base 8.
The owner and group options should be integers.
Those values have no default, so you need to set them explicitly for them to take effect.
Matrix Gateway
With ejabberd's Matrix Gateway, you can bridge communications to Matrix servers, thanks to the mod_matrix_gw module, which was introduced in version 24.02.
This means you can use ejabberd to join public Matrix rooms by yourself, and the Matrix bridge will be seen as a multi-user chat service, defaulting to matrix.yourdomain.net.
To join a room, simply use the XMPP MUC protocol to enter the XMPP room, like this: #ejabberd-matrix-bridge%[email protected].
However, there are some caveats to be aware of: older room protocol versions are not supported yet, so you'll need to stick with version 9, 10, or 11 for now.
Additionally, one-to-one conversations will need to be restarted empty after a server restart, as persistence is not yet implemented.
Also, be aware that matrix room members are those who have subscribed to the room, not necessarily those who are online, and mod_matrix_gw sends a presence for each of them, which may impact your XMPP client's performance if it's not designed to handle thousands of MUC members.
Discover more: XMPP
Modifications
Ejabberd is highly customizable, allowing developers to tailor it to their specific needs.
One of the most significant advantages of Ejabberd is its extensibility through plugins. This means that developers can easily add new features and functionality to the platform without modifying the core code.
Ejabberd supports a wide range of protocols, including XMPP, HTTP, and WebSockets, making it a versatile choice for developers.
With Ejabberd, you can create a custom authentication system using modules such as PAM, SQL, or LDAP, giving you flexibility in how users access your application.
Ejabberd's scalability is also noteworthy, allowing it to handle large volumes of traffic and users, making it suitable for real-time applications.
You can also configure Ejabberd to use a load balancer to distribute traffic across multiple servers, further increasing its scalability.
By leveraging Ejabberd's built-in features and plugins, developers can create robust and scalable real-time applications.
Discover more: List of Free and Open-source IOS Applications
Improvements
Ejabberd has seen significant improvements in various areas, making it a more robust and efficient platform.
Bugfixes and improvements have been made to ejabberd Business Edition, including a fix for max_concurrent_connections for mod_gcm, mod_webhook, and mod_webpush.
The create_rooms_file command has been improved to support vhosts with different config, making it easier to manage rooms.
A new command, evacuate_kindly, has been added to kick users and prevent login, providing a more streamlined way to manage user access.
The join_cluster command now returns immediately, improving performance and reducing wait times.
The mod_muc_admin module has been updated to rename arguments for consistency, with backwards support to ensure a seamless transition.
Support for Unix Domain Socket was added to listener's port option in ejabberd 20.07, improving performance and security when running with MySQL or PostgreSQL.
The WebAdmin interface has been improved with a more streamlined design, reusing existing commands to add new pages quickly and easily.
MAM (Message Archive Management) support has been added to WebAdmin, allowing administrators to view message counts, remove all MAM messages, and view the MAM Archive directly from WebAdmin.
The new make_command feature has been added to generate HTML content in WebAdmin, making it easier to write content for the interface.
Improvements

Improvements in ejabberd have made it easier to manage your server. With the improved create_rooms_file command, you can now support vhosts with different config. This is a significant improvement over the previous version.
The evacuate_kindly command is a new addition, allowing you to kick users and prevent login. This can be especially useful in situations where you need to remove users from your server quickly.
The join_cluster command now has improved explanation, returning immediately since version 5a34020. This makes it easier to understand how the command works.
Some commands have been renamed for consistency, such as mod_muc_admin, which now uses the argument 'room' instead of 'name'. This change is backwards compatible, so you don't need to update your API clients.
The listener's port option now supports Unix Domain Socket, which can improve performance and security when running on the same machine as ejabberd. This feature was added in version 20.07.
Here's a list of the improvements in commands:
- create_rooms_file: Improved, now it supports vhosts with different config
- evacuate_kindly: New command to kick users and prevent login
- join_cluster: Improved explanation
- mod_muc_admin: Renamed arguments for consistency
Change Log
Improvements in ejabberd 24.06 have made a significant impact on performance and security. The support for Unix Domain Socket was added to listener's port option in ejabberd 20.07, and more recently, ejabberd 24.06 added support in sql_server when using MySQL or PostgreSQL.
This feature is useful to improve performance and security when those programs are running on the same machine as ejabberd. Additionally, the support for Unix Domain Socket allows for faster and more efficient communication between processes.
Here are the key changes in hooks:
- New check_register_user hook in ejabberd_auth.erl to allow blocking account registration when a tombstone exists.
- Modified room_destroyed hook in mod_muc_room.erl, now it passes: LServer, Room, Host, Persistent.
The new Persistent argument passes the room persistent option, required by mod_tombstones because only persistent rooms should generate a tombstone, temporary ones should not.
Frequently Asked Questions
What is ejabberd used for?
Ejabberd is a robust XMPP server designed for real-time communication, providing a solid foundation for instant messaging applications. It's ideal for building scalable, fault-tolerant, and secure messaging systems.
Featured Images: pexels.com
