Open-source XMPP server comparison chart

Note: This page is an archived copy of the page formerly located at www.jabber.org; if you would like to become the maintainer of this page, please contact Peter Saint-Andre.

Document information
Description:this document compares the six big open source XMPP/Jabber servers on different topics
Author:Frank Niedermann (XMPP / Mail)
Version:2.3
Last change:2006-08-14
Note:the comparison is based on the latest stable or development versions of the servers.
Thanks to all the developers, server admins and other people that helped collecting and updating the informations (see the Changelog below)
Select which columns you want to see open or closed. Unfortunately this does not work with all browsers and JavaScript has to be enabled. If you know a better solution let me know :) Known to work with Mozilla and khtml based brwosers.
Wildfire ejabberd Jabberd 2 Jabberd 1.4 OpenIM WPJabber Description / Example

Section: Basic - Medium - Advanced

Feature 1. Wildfire 2. ejabberd 3. Jabberd 2 4. Jabberd 1.4 5. OpenIM 6. WPJabber Description / Example








Status
up to date
up to date
up to date
up to date
needs update
needs update
Websites
  1. project page
  2. appendant company
  1. project page
  2. Process-one
  1. project page
  2. project page on jabberstudio
  1. project page
  1. project page
  1. -
License Open Source (GPL) Open Source (GPL) Open Source (GPL) Open Source (JOSL and GPL, user can choose) Open Source (BSD) Open Source (GPL)
Platforms anything that can run Java 1.5 anything that can run Erlang: many unices (including Linux, Solaris, *BSD), Windows and Mac OS X many unices (including Linux, Solaris, *BSD) and Windows many unices (including Linux, Solaris, *BSD) and Windows anything that can run Java 1.4 Linux only, for the native c2s a vanilla Linux 2.6.x or 2.4.x with epoll patch necessary
Features
  1. full web-based administration
  2. very easy setup
  3. anonymous logins
  4. built-in Multi-User-Chat module
  5. cross platform (Java)
  6. LDAP integration and ability to easily integrate with any user/auth system
  7. scalable architecture using SEDA and database back-end
  8. different translations available (English, Chinese, German, Dutch and maybe more)
  9. stringprep support
  10. support for plugins
  1. Web interface and command line tool for administration
  2. Straightforward installers for Windows and Linux
  3. built-in Multi-User-Chat module
  4. Cross platform (Erlang)
  5. Support for LDAP, external and internal authentication
  6. Out-of-the box scalability (use of Erlang lightweight processes)
  7. Localized (English, German, Spanish, French, Dutch, Polish, Portuguese, Portuguese (Brazil), Russian, Swedish, Ukrainian)
  8. IDNA and Stringprep
  9. Modular architecture
  10. SASL and STARTTLS for c2s
  11. Publish-Subscribe module
  12. Statistics Gathering module
  13. JUD module based on vCards
  14. IRC transport module
  15. Support for ACLs
  16. Blocking Communication (Privacy Rules) (module)
  17. Message expiration
  18. Sending of anounce-messages (module)
  19. Testing of ejabberd is possible with ready-to-run CDROM image (Erlang REPOS)
  20. Ahead in support for newer protocols
  21. More information can be found in the feature sheet
  22. blocking account names for registration, require min./max. length of usernames
  23. fault-tolerance, clusterable, distributable, flexible, well tested, reliable
  1. SASL and STARTTLS
  2. ahead in support for newer protocols
  3. new features planned for 2.1 (Roadmap)
  1. SASL and STARTTLS for c2s
  2. flexible
  3. well tested
  4. reliable
  5. distributable
  6. very compatible to existing software
  7. limiting spool file size and hash spool directory structure
  8. negative priority
  9. IDNA and stringprep
  10. presence information can be stored in xdb and therefore (using xdb_sql) in a SQL table, can be used by other applications
  11. blocking account names for registration, require min./max. length of usernames
  12. injecting stanzas by just moving them into a spool directory
  13. support for Flexilbe Offline Message Retrieval (JEP-0013)
  1. Java centric dev allowing full J2EE potential
  2. extensibility and easy embedded
  1. multithreaded server, can use all processors on a machine
  2. special client - server (WPJ) with sys_epoll technology, one WJP can easily handle thousands of concurrent connections
  3. modified architecture that can handle many users and external authorization modules (without blocking whole server)
  4. extra PHP module which can do everything, a few lines in a PHP script can substitute any module (example: a PHP module can be XDB, then you can use any database that is supported by PHP)
  5. the used architecture allows to have a pool of WPJ for more than one server (more domains which can be on one or several servers)
  6. support for all features from official protocol without SASL

Section: Basic - Medium - Advanced

Feature 1. Wildfire 2. ejabberd 3. Jabberd 2 4. Jabberd 1.4 5. OpenIM 6. WPJabber Description / Example








Stability high, there are many deployments, code base has been under development for several years high, it works stable on several big hosts, code base has been under development for several years, good s2s stability In production on many mid-size sites and some large sites high, works stable on several big hosts successfully used in production since January 2004 high, works stable on several big hosts
Development active, developing new enhancements and fixing open bugs active, developing new enhancements and fixing open bugs active, developing new enhancements and fixing open bugs active, developing new enhancements inactive, fixing open bugs inactive, no changes for a longer time
Amount of developers two main developers (Gaston Dombiak, Matt Tucker) and some contributors from Jive Software, Ryan Graham working on plugins and bug-fixes, some contributors also working on plugins one main developer (Alexey Shchepin, interview) and several other contributors. Code is also being exchanged with the J-EAI project, some contributions are available on the website. two (Justin Kirby, Stephen Marquard) one (Matthias Wimmer) two (Alexis Agahi) and many contributors one (Lukas Karwacki)
Support website (Wildfire support site), forum (discussion forum), knowledgebase (Jive Software knowledgebase for Wildfire), commercial support (wildfire support) mailing list (ejabberd), Chatroom, Forum, Commercial support mailing list (jabberd) website with comments (adminguide, adminfaq), mailinglist (jadmin) mailing list (users@openim.dev.java.net), forums jabberstudio.org (wpjabber on jabberstudio.org)
Bugfixes issue database for bug and enhancement reports (JIRA) bugzilla bugzilla bugzilla issue tracker on java.net bugtracker on jabberstudio.org
External components / Transports possible possible, there are a lot transport tutorials available possible (information), most transports with JCR or wrapped inside Jabberd 1.4 (sometimes with limitation of transport functions), some transports don't require Jabberd 1.4 and can easily be used (pyMSNt, jabber-gg-transport) possible JEP-0114, also support for session protocol of jabberd2 none JIT native, other transports wrapped inside Jabberd 1.4 or JCR Note: often the integration of transports is easier on Jabberd 1.4
Rostermanagement / Rosterchanges possible through the Wildfire API possible via web interface, XMPP compliant with workaround for JIT (allowing JIT to automatically add items from ICQ contact list) iq:roster is almost XMPP compliant, a template with JIDs for new rosters available, users only have entries on their roster which they have asked for very flexible and dynamic with mod_groups (existing rosters can be adjusted) but deprecated and extremely buggy, users only have entries on their roster which they have asked for (XMPP compliant, no roster pushes allowed any more) possible using custom plugin no extra tools available
Shared Roster Groups possible possible not possible (but it's possible to edit the roster tables in the database, but this is not explicitly supported by the server) not possible not possible not possible
vCards complete records complete records subset of records complete records complete records complete records
Multi-User Chat (JEP-0045) possible out-of-the-box possible out-of-the-box (default enabled module), and also possible in the jabberd2 way (http://ejabberd.jabber.ru/mu-conference) - remark: only for geeks :) possible with transport wrapped inside Jabberd 1.4 or with JCR possible with plugin not possible possible Note: Multi-User-Chat is also available as JEP-0114 component
Message logging possible via XML files, custom handling is possible possible as extension with code from the J-EAI project, also external tool available (Bandersnatch, Bandersnatch Tutorial) external tool available (Bandersnatch) possible possible possible
Security/encryption (server-side, s2s) s2s-encryption possible (TLS and SASL External) s2s-encryption possible (STARTTLS+dialback and SASL External), see http://ejabberd.jabber.ru/s2s-encryption s2s-encryption possible (STARTTLS) s2s-encryption possible (STARTTLS and SASL External) s2s-encryption with SSL no s2s-encryption
Security/encryption (client-side, c2s) SASL, TLS, SSL on separate port (deprecated) SASL, STARTTLS, SSL on separate port is also possible (but deprecated) SASL, STARTTLS SASL, STARTTLS, SSL on separate port is also possible (but deprecated) SSL on separate port (deprecated) SSL on separate port (deprecated)
Web client possible with Flash (XIFF API), JWChat tested by a few people possible with JWChat (via http-polling), manual not yet, missing a http polling/binding proxy or component that works with Jabberd 2. Could work with Punjab but this is not tested yet. possible with JWChat addon not yet (but can be embedded as a servlet using HTTP Merlin facility) not possible
Tools Smack (open source XMPP client library also developed by Jive Software) ejabberdctl (show users, register new users, remove users, backup/restore database to/from files, reopen the log-files), some contributions on http://ejabberd.jabber.ru/contributions like ejabberdctl-extra, mod_chatcommands, webadmin-commands not many tools available yet, support for service administration (jep-0133) is planned for version 2.1 many tools available none none
Ease of use to install/administer
  1. installation is quite easy, there are installers for most platforms
  2. application can also be unzipped and run directly from the command line
  3. application can be run as service on Windows or daemon on Unices (Linux for example)
  1. installation using the installers is very easy
  2. installation from source is not very hard, requires small amount of preinstalled packages (erlang, expat)
  3. administration is easy due to web-based and command-line administration interfaces
  4. application can be run as service on Windows or daemon on Unices (Linux for example)
Jabberd 2 is already included in many Linux distributions, manual installation should be straightforward (standard unix configuration/make/make install + DB setup). I'ts fairly well documented and works out-of-the-box
  1. Jabberd is already included in many Linux distributions, for manual installation only libpth is required as preinstalled package and openssl is an optional package
  2. for Jabberd 1.4 CVS libpth, libidn and expat are required, openssl is optional
  3. automake/autoconf build environment
  4. configuration is done using a XML file
  5. there is no command line configuration tool available but Jabberd 1.4 has little administration needs
installation is very easy (download merlin and type merlin-config http://www.dpml.net/ openim/configs/ openim-server-1.2.2.xml http://www.dpml.net/ openim/blocks/ openim-server-1.2.2.block) installation should be easy, standard unix installation process
Administration utilities web-based console command line utility ejabberdctl, web-based interface, simple configuration file including help text, also have a look at the Tools section few scripts on http://scriptrepo.jabberstudio.org some scripts on http://scriptrepo.jabberstudio.org JMX console via Merlin could be possible none
Maintenance simpleness easy because all data is stored in external databases, current binaries get replaced, database contents get upgraded with scripts easy, read the release notes included in new versions if you install from source. Usually few manual changes are needed. Installation via distribution package system is even more easy. Database tables will be automatically upgraded (if changed) when the new ejabberd version is started. new versions should install over the top, no database changes necessary, restart required new versions should install over the top, data will be converted by the server if necessary, adaptions to the configuration may be required easy standard unix way, there are patches and cvs versions
Documentation available Installation and operation guide, ejabberd book installation and administration guide manual-pages, a lot of documents about administration and configuration, faqs, developer guide out of date installation guide and some short tutorial some faq
Packages for operating systems Windows 2000/2003/XP, RedHat and Unices with tar.gz package Binary installers for Windows and Linux, Debian/FreeBSD/Ubuntu/..., Complete list of packages RedHat, Gentoo, FreeBSD, Debian, PLD (Wiki page) Debian, Gentoo, Redhat Source RPMs, Mandrake, OpenBSD, Solaris 2.6, Solaris 7, Solaris 8, Windows2000/2003/XP, Windows/Cygwin no packages available, merlin can be used to handle a binary version of the application no update yet

Section: Basic - Medium - Advanced

Feature 1. Wildfire 2. ejabberd 3. Jabberd 2 4. Jabberd 1.4 5. OpenIM 6. WPJabber Description / Example








Flexibility
  1. not distributable/clusterizable yet
  2. Java implementation
  3. can use JDBC or JNDI to store data in database or directory
  4. pure Java embedded database is included that can be used for small deployments
  5. extensible with plugins, they can be deployed without restarting and dynamically update the admin console
  1. fully distributable
  2. database can be replicated to many nodes
  3. The default database, Mnesia, is suitable for small, as well as big deployments.
  4. code can be updated while ejabberd is running (feature of Erlang)
  5. loading and unloading of modules while ejabberd is running is possible (feature of Erlang)
  6. Modular design
  1. only one instance of the router is possible, all components have to connect to this instance
  2. there are always multiple processes with separate config files, every socket needs an own process
  3. the database scheme of storage for the session manager depends on a finished layout and can not be changed, the c2s manager can use any schema and can be customized
  4. no option for using multiple session managers for the same domain yet
  1. multiple routers which interact with each other, c2s and s2s clusters are possible (advantageous if distributing Jabberd 1.4 to multiple different hosts)
  2. it is possible to run as one process with multiple IP adresses and one config file
  3. the data store can also be accessed via the router
  4. the database scheme is flexible and does not depend on a finished layout, thereby an existing sql storage from a website can be used for authentication on Jabber as example
  5. no option for using multiple session managers for the same domain yet (will be developed)
  1. not distributable/clusterizable yet
  2. Java implementation
  3. using Apache Avalon Merlin micro kernel, inversion of control design pattern for simple modularity (allows easy administration on cluster or a network via multiple installation)
  4. can use JDBC or JNDI to store data in database or directory
  5. can be embedded (with the help of Merlin)
  1. multiple routers which interact which each other, c2s cluster is possible
  2. it is possible to run as one process with multiple IP adresses and one config file
  3. the data store can also be accessed via the router
  4. the database scheme is flexible and does not depend on a finished layout, thereby an existing sql storage from a website can be used for authentication on Jabber as example
Example for ejabberd update while the daemon is running: a translation can be added to the server without reloading or restarting ejabberd. This is very interesting for systems that can't be putted offline for software updates (air traffic control systems or telephone exchanges for example)
Protocol-standards compatibility (XMPP Core, XMPP IM) not fully compatible:
  1. only missing privacy lists
fully compatible not fully compatible:
  1. missing support for SASL authentication on s2s links
  2. no support for xml:lang
not fully compatible:
  1. missing support for privacy lists
not fully compatible, supported features are message, presence, roster, subscription, vCard, offline storage, oob (lan file transfer), browse and search not fully compatible:
  1. incomplete support for privacy lists
  2. missing support for SASL authentication, resource binding and session establishment
  3. missing support for STARTTLS
  4. allows forbidden subscription state changes
  5. does not support negative priority values
  6. no nodeprep/nameprep/resourceprep support
  7. no support for internationalized domains
  8. no support for XMPP style stanza errors
  9. no support for internationalization using xml:lang
IPv6 possible (but not tested) possible possible possible possible not possible
Data stores storage, auth and user info data can be stored in databases
  1. storage: MySQL, Postgresql, Oracle, SQL Server, DB2, Berkeley DB
  2. auth and user info: any data store (LDAP and Active Directory for example)
only authentication data and vCards can be taken from LDAP with modules, default data is stored in Mnesia (distributed, fault-tolerant database of Erlang), ODBC data storage support (possible to use relational database storage), PostgreSQL storage and auth data can be stored on different depositions with special modules, it is possible to create an own auth plugin.
  1. storage: MySQL, Postgresql, Oracle, sqlite, Berkeley DB, file
  2. auth: MySQL, Postgresql, Berkeley DB, LDAP, PAM
storage and auth data can be stored on different depositions with special modules, storage and auth data are both handled by XDB so any XDB module can be used
  1. storage and auth: MySQL, Postgresql, Oracle, file, LDAP, Perl
storage and auth data can be stored on different depositions
  1. storage and auth: file, LDAP, Database via JDBC or Hibernate (experimental)
storage and auth data can be stored on different depositions with special modules, storage and auth data are both handled by XDB so any XDB module can be used, not all modules are available for WPJabber (needs to be ported) Example: Jabberd 1.4 can authenticate against LDAP, use the rosters in MySQL and store the vCards as files
MySQL storage supported should be possible, but not tested contained in base package supported via hibernate (experimental) and JDBC MySQL storage possible with jabberd 1.4 as background server, xdb_sql could be wrapped into a Jabberd 1.4 and used with WPJabber (like a transport), but this needs Jabberd 1.4 because JCR has no XDB support.
Virtual host support not possible yet enhanced virtual hosting possible possible, but only one SSL certificate per socket can be used (limitation of the SSL protocol), same for STARTTLS possible, virtual hosting for SSL possible using STARTTLS not possible possible, but only one SSL certificate per socket can be used (limitation of the SSL protocol) Description: multiple hostnames/domains on a single IP address
XML-Namespace handling very good not so good yet very good very good very good not so good yet
Browsing (deprecated, JEP-0011) not possible not possible possible, it has to be activated manually possible possible possible Note: Browsing is deprecated in favor of service discovery
Discovery (JEP-0030) possible possible possible possible possible possible
HTTP-polling (JEP-0025) not supported possible via built-in module possible possible possible possible Note: HTTP-polling is possible with every server using Tonneru
HTTP-binding (JEP-0124) not supported out of the box, external component that works like a proxy can be used for HTTP-binding (PunJab) not possible out of the box, external component that works like a proxy can be used for HTTP-binding (PunJab) not possible out of the box, external component that works like a proxy can be used for HTTP-binding (PunJab) not yet, planned for version 1.4.5, external component that works like a proxy can be used for HTTP-binding (PunJab) not in current bin distribution but easy to setup, also possible with external component that works like a proxy (PunJab) not possible out of the box, external component that works like a proxy can be used for HTTP-binding (PunJab)
Accounting (statistics/reporting stuff) possible (basic stats available, no complex recording backend yet), also with an external tool (V2Stats, commercial product) support for Statistics Gathering, Statistics are also available in the web interface, also see contribution http://ejabberd.jabber.ru/mod_stats2file not possible some accounting possible (amount of messages, presences and iqs can get logged) possible possible
Authentication methods (client-side, c2s)
  1. Non-SASL: plain text and MD5
  2. SASL: PLAIN, DIGEST-MD5 (only authentication part), ANONYMOUS
  1. Non-SASL: JEP-0078 (plain and digest), jabber:iq:auth
  2. SASL: PLAIN, DIGEST-MD5
  1. Non-SASL: JEP-0078 (plain and digest), jabber:iq:auth
  2. SASL: PLAIN, DIGEST-MD5 (only authentication part), ANONYMOUS
  1. Non-SASL: JEP-0078 (plain and digest), jabber:iq:auth
  2. SASL: not possible
  1. Non-SASL: JEP-0078 (plain and digest), jabber:iq:auth
  2. SASL: PLAIN, DIGEST-MD5 (only authentication part)
  1. Non-SASL: JEP-0078 (plain and digest), jabber:iq:auth
  2. SASL: not possible
Description: Possible are Non-SASL (JEP-0078) and SASL (XMPP-Core)
Migration (one server to another) possible because of open database schema, migration tools have to be written oneself at the moment Migration from jabberd 1.4, Migration from jabberd2, Migration from WPJabber (with jabberd14) migration of passwords and rosters from Jabberd 1.4 is possible, there is also a migration script available on http://scriptrepo.jabberstudio.org migration (any storage) from Jabberd 1.4 to Jabberd 2 is possible with a script which is distributed with Jabberd 2, migration from Jabberd 2 to Jabberd 1.4 is possible with a special script from Matthias not possible possible, the directories have to be converted, there is a tool to do this convertion to wpjabber
User management possible possible via web interface, ejabberdctl (command line tool), Tkabber planned for version 2.1 (via client, JEP-0050) planned (management per client with admin-user) for version 1.4.5 nothing dedicaded none
Debugging possible, can be changed without restart at the administration webconsole very verbose debugging possible (maybe not usable for everyone), recompile and restart necessary to enable / disable debugging possible, compiling with --enable-debug and running with -D necessary, debugging can be enabled individually for each component but the server has to be restarted, the usual C debugging tools can be used (gdb, etc.) possible with command line parameter (-D) or configuration setting, configuration setting can be changed without restart possible, log debug levels can be configured and jvm debug feature can be used, server has to be restarted no update yet
Welcome and auto-reply messages not possible welcome message is possible (messages to server-jid will be dropped) welcome message possible, auto-reply messages not possible both can be configured in the configuration file with additional languages, an XMPP compatible client will display the appropriate version possible with small coding addition no update yet
Examples of live environment over 1000 concurrent users in several production environments, tested to support around 5000 concurrent users mxit.co.za, about 23000 users maximum online (test environment with benchmark tools had 29000 concurrent users), Known ejabberd Servers Page for more examples mxit.co.za, 9000 concurrent online users reported amessage.info, almost 2000 users maximum online, about 3500 users per day jabber.open-im.net, almost 50 users maximun online, about 20 users per day; there are corporate environments with more users jabber.wp.pl, almost 50.000 users maximum online during tests, about 20.000 users per day

Ideas:

Changelog:

Copyright (c) 2004 Frank Niedermann. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available on http://www.gnu.org/copyleft/fdl.html.