Jabber / XMPP server with focus on performance and scalability, by Erlang Solutions
Erlang C JavaScript Shell API Blueprint Makefile Other
Latest commit abcd1b0 Sep 28, 2016 @bartekgorny bartekgorny committed on GitHub Merge pull request #996 from esl/remove-usage-of-deprecated-escalus-f…
…eatures

Remove usage of deprecated escalus features
Permalink
Failed to load latest commit information.
.github [skip ci] move templates to .github dir and fill the content Feb 29, 2016
apps [REST API] address @gadgetci suggestions Sep 27, 2016
doc Merge pull request #1003 from esl/rest-api-list-my-rooms Sep 28, 2016
examples Cleanup `examples` Aug 20, 2014
priv Finalize rename to MongooseIM Feb 19, 2014
rel Merge pull request #998 from esl/fix-rebar-clean Sep 27, 2016
src universal version generator Oct 19, 2015
test/ejabberd_tests Merge pull request #996 from esl/remove-usage-of-deprecated-escalus-f… Sep 28, 2016
tools print link to the s3 browser for easier navigation Sep 22, 2016
.gitignore Ignore temporary files Aug 18, 2016
.gitmodules Use rebar dependencies instead of submodules for tests Sep 5, 2012
.travis.yml run pgsql_mnesia job on Erlang/OTP 19 Sep 21, 2016
.travis_deploy_rsa.enc Upload CT-reports to esl github account Jan 26, 2016
CHANGELOG.md update CHANGELOG re 2.0.0beta2 [skip ci] Aug 29, 2016
CONTRIBUTING.md [skip ci] roadmap influence Jul 22, 2016
COPYING * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) Oct 9, 2004
Makefile Do not print warnings from cover tool Aug 16, 2016
README.md [skip ci] typo Sep 6, 2016
VERSION bump version to 2.0.0beta2 Aug 29, 2016
dialyzer.ignore-warnings added dialyzer targets to makefile Apr 14, 2012
dialyzer.mk refactor dialyzer section in Makefile [skip ci] Dec 11, 2015
elvis.config tune down Elvis' sensitivity to code duplication (reason: it complain… Sep 26, 2016
index.html Swagger HTTP API doc (#880) Aug 25, 2016
mkdocs.yml Roadmap (#954) [skip ci] Sep 5, 2016
readlink.sh fix compatibility issues with OS X Nov 12, 2014
rebar update rebar to 2.6.4-4-g576e121 Sep 26, 2016
rebar.config update MongooseIM config to compile and run on Erlang/OTP 19 Sep 21, 2016
rebar.config.script remove workaround for cowboy and R15B03 Dec 8, 2015

README.md

MongooseIM Build Status Documentation Status Coverage Status Buildtime trend GitHub release

MongooseIM is Erlang Solutions' robust and efficient XMPP server aimed at large installations. Specifically designed for enterprise purposes, it is fault-tolerant, can utilize resources of multiple clustered machines and easily scale in need of more capacity (by just adding a box/VM).

MongooseIM can accept client sessions over vanilla XMPP, Websockets, and HTTP long-polling (a.k.a. BOSH).

Its home on GitHub is at http://github.com/esl/MongooseIM.

The product page is available at https://www.erlang-solutions.com/products/mongooseim.html

Download packages

For a quick start just download the pre-built package that suits your platform: Ubuntu, Debian, CentOS, and Mac OS X.

An experimental Docker image exists on: https://registry.hub.docker.com/u/mongooseim/mongooseim-docker/ You can contribute on: https://github.com/ppikula/mongooseim-docker

Main differences from the parent project

This project began its life as a fork of ejabberd v.2.1.8 back in 2011, and later underwent some major cleanup, refactorization and optimization.

Major steps performed at that time:

  • bringing the project source tree to compliance with OTP project structure recommendations,
  • swapping autotools for the Erlang community-standard build tool rebar,
  • removal of obsolete and/or rarely used modules to reduce maintenance burden,
  • reduction of runtime memory consumption by refactoring the code to use Erlang's binary data type for string manipulation and storage instead of operating on linked lists of characters,
  • functional test coverage of the system according to corresponding RFCs and XEPs.

Key differences today:

  • massive scalability
  • code quality, through extensive refactoring, substantial optimisations, and continuous integration
  • unique version, fully open source, fully open standards, innovations contributed to the XSF
  • professional support, and flexible customer service

Documentation

Up-to-date documentation for the MongooseIM master branch can be found on ReadTheDocs:

When developing new features/modules, please take care to add basic documentation to the doc/ directory, and add a link to your document in doc/README.md.

Original documentation for Ejabberd-2.1.8, from which MongooseIM was forked, is preserved in doc/ejabberd-2.1.8-OLD.

Features and supported standards

  • XMPP Core: RFC 3920, RFC 6120
  • Client connections over TCP (with TLS/STARTTLS available), Websockets, and HTTP(S) (BOSH).
  • Configurable database backends: MySQL, Postgres, generic ODBC. Mnesia and Redis for transient data.
  • Supports XEPs:
XEP-0012: Last Activity XEP-0016: Privacy Lists XEP-0018: Invisible Presence XEP-0022: Message Events
XEP-0023: Message Expiration XEP-0030: Service Discovery XEP-0045: Multi-User Chat XEP-0049: Private XML Storage
XEP-0050: Ad-Hoc Commands XEP-0054: vcard-temp XEP-0055: Jabber Search XEP-0059: Result Set Management
XEP-0060: Publish-Subscribe XEP-0068: Field Standardization for Data Forms XEP-0077: In-Band Registration XEP-0078: Non-SASL Authentication
XEP-0079: Advanced Message Processing XEP-0082: XMPP Date and Time Profiles XEP-0083: Nested Roster Groups XEP-0085: Chat State Notifications
XEP-0086: Error Condition Mappings XEP-0092: Software Version XEP-0093: Roster Item Exchange XEP-0114: Jabber Component Protocol
XEP-0115: Entity Capabilities XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH) XEP-0126: Invisibility XEP-0138: Stream Compression
XEP-0157: Contact Addresses for XMPP Services XEP-0160: Best Practices for Handling Offline Messages XEP-0163: Personal Eventing Protocol XEP-0175: Best Practices for Use of SASL ANONYMOUS
XEP-0185: Dialback Key Generation and Validation XEP-0191: Blocking Command XEP-0198: Stream Management XEP-0199: XMPP Ping
XEP-0202: Entity Time XEP-0206: XMPP Over BOSH XEP-0212: XMPP Basic Server 2008 XEP-0237: Roster Versioning
XEP-0248: PubSub Collection Nodes XEP-0279: Server IP Check XEP-0280: Message Carbons XEP-0313: Message Archive Management
XEP-0313: Message Archive Management XEP-0313: Message Archive Management XEP-0313: Message Archive Management XEP-0352: Client State Indication

How to build

  1. Requirements.

    To compile MongooseIM you need:

    • GNU Make,
    • GCC,
    • Libexpat 1.95 or higher,
    • Erlang/OTP 17.5 or higher,
    • Reltool 0.6.6 or higher,
    • OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption,
    • Zlib 1.2.3 or higher for Stream Compression support (XEP-0138). Optional.
  2. Compiling on UNIX-like systems.

    To compile MongooseIM, go to the main repo directory $REPO and execute the command ($ stands for the shell prompt):

    $ make
    

    or

    $ ./rebar get-deps
    $ ./rebar compile
    

    To generate full MongooseIM release (with mysql, pgsql or other deps):

    $ make rel
    

    If more advanced release is required (with some specific db support only, f.e. mysql or pgsql) or you want to set prefix or user for the installation script please refer to the release configuration page in our documentation

    make rel commands will generate a self-contained OTP system image in the project's rel/mongooseim subdirectory. The contents of that directory are as follows:

    • rel/mongooseim/bin - startup/administration scripts,
    • rel/mongooseim/etc - configuration files,
    • rel/mongooseim/lib - MongooseIM binary, header and runtime files,
    • rel/mongooseim/var - spool directory,
    • rel/mongooseim/log - log file directory,
    • rel/mongooseim/releases - release files directory.
  3. Running MongooseIM.

    To run MongooseIM from the project tree after compiling it, change to $REPO/rel/mongooseim.

    There you can use the mongooseim command line administration script to start and stop MongooseIM. For example:

    $ bin/mongooseim start
    

    will start the server.

    You can also run the server in interactive mode:

    $ bin/mongooseim live
    

    There's also a tool called mongooseimctl allowing you to perform some operations on a running instance, e.g.:

    $ bin/mongooseimctl status
    MongooseIM node mongooseim@localhost:
      operating system pid: 86026
      Erlang VM status: started (of: starting | started | stopping)
      boot script status: started
      version: 1.6.2-61-g48b8332
      uptime: 1:12:46
      logs:
        log/ejabberd.log
    
  4. Building the testing target and running tests.

    For testing purposes there's a different make target available:

    $ make devrel
    

    which will generate releases in $REPO/dev/ and prepare them for testing and generating coverage reports.

    To run the tests (from project's root directory, i.e. $REPO):

    $ dev/mongooseim_node1/bin/mongooseim start
    $ dev/mongooseim_node2/bin/mongooseim start
    $ make quicktest
    

    The test results will show up in the console`.

Test suite

In order to test and validate your XMPP servers, here are useful tools:

  • escalus: Erlang XMPP client
  • amoc: a load testing tools

Public testing

Continuous integration: https://travis-ci.org/esl/MongooseIM

Code coverage: https://coveralls.io/github/esl/MongooseIM

Want to get in touch with us?

In case of any suggestions, questions or any thoughts on this project, please feel free to contact us by the standard GitHub ways or at mongoose-im@erlang-solutions.com.

Want to discuss MongooseIM, problems with your deployement or anything else? Try: https://erlangcentral.org/forum/mongooseim/.

Announcements mailing-list

We have set up a new public mailing-list for all announcements of major events happening on the MongooseIM front. Expect one or two emails per month, the archives are free and open. We highly encourage you to subscribe here: https://groups.google.com/d/forum/mongooseim-announce Click on the blue button "Join group", then click in "Email delivery preference" on "Notify me for every new message".

Client libraries

We recommend following client libraries:

Social media

Follow us on Twitter and Facebook, please ask questions, and propose features!

Twitter: https://twitter.com/MongooseIM

Facebook: https://www.facebook.com/MongooseIM/