Building an XMPP resources list

I’m curating a list of XMPP resources.

I linger in a lot of XMPP channels, and there is a constant set of questions being asked that folks then answer in chat, which are then lost in the stream. There are certainly resources out there that are useful, lists of clients and servers and such, but the folks asking for help always seem to have a criteria that isn’t tracked anywhere… so I’m gonna give it a try.

I’ll use this topic to first gather links and notes to things, to get a sense of which data is useful and interesting to structure.

What I’m looking for:

  • clients (gajim, dino)
  • servers (prosody, ejabberd)
  • libraries (python-nbxmpp, strophe.js)
  • projects (Snikket, Modern XMPP)
  • people (folks working this stuff)
  • documentation and such
    • Oh yeah, I’d love a single line summary of most XEPs, for reference

After I’ve gotten a bunch here I’ll sort it and put it somewhere nice. For the time being, we’ll just post a single resource per reply (if you have a discussion reply, make it separately), and when I need more info for them I’ll move them out into their own topic for breakout discovery.

59 posts were merged into an existing topic: Building an XMPP Clients list

Prosody is the jabber server I’ve used the most, and maybe 10 years ago I just stopped looking at other servers as I don’t personally use much more than the default config options in Prosody; complexity in configuring XMPP servers is a tradeoff for the modularity of XEPs, and is why “good defaults” are a feature.

I haven’t used ejabberd in a very long time, so I can’t speak to the project at the moment.

A library a lot of folks mention; I don’t habitually interact with XMPP at this level.

A JavaScript XMPP library.

We are developing a handful of simple documents aimed at people who wish to build on top of XMPP. The recommendations are derived from healthy discussions between developers from multiple XMPP projects and other members of the XMPP community.

Our recommendations highlight only the XEPs you need to implement for a modern messaging application, ignoring historical cruft and excessive backwards-compatibility.

Because I have a limited time on Earth, I’ll focus on the XEPs from this meta-project.

Okay, I just went through and highlights the example resources I referenced. Next steps will be hitting up existing lists:

Any other lists I should check? I imagine after the first three there will be a lot of redundancy.

a pure-python XMPP library using the asyncio standard library module from Python 3.4 (and available as a third-party module to Python 3.3).

an easy-to-use and well-documented .NET assembly for communicating with an XMPP server. It supports basic Instant Messaging and Presence funtionality as well as a variety of XMPP extensions.

The home page explains it best:

libraries for XMPP poets

Strophe is a collection of libraries for speaking the XMPP protocol. While most XMPP libraries and implementations are focused on chat-based applications, Strophe takes a grander view. It has been used to implement real-time games, notification systems, search engines, as well as traditional instant messaging.

The implementations are production ready, well documented, easy to use, and easy to extend.

MatriX is a SDK / library for the eXtensible Messaging and Presence Protocol (XMPP, also known as Jabber) written in managed C# dedicated to .NET and Silverlight technologies.

For, not the Matrix protocol.

An XMPP library in Go.

Python library that provides a way for Python applications to use Jabber/XMPP networks in a non-blocking way.

Slixmpp is an MIT licensed XMPP library for Python 3.7+. It is a fork of SleekXMPP.

Slixmpp’s goals is to only rewrite the core of the library (the low level socket handling, the timers, the events dispatching) in order to remove all threads.

Smack is an Open Source XMPP client library for instant messaging and presence. A pure Java library, it can be embedded into your applications to create anything from a full XMPP client to simple XMPP integrations such as sending notification messages and presence-enabling devices.

StanzaJS is a JavaScript/TypeScript library for using modern XMPP, and it does that by exposing everything as JSON. Unless you insist, you have no need to ever see or touch any XML when using StanzaJS.

Swiften is a robust, high-quality, standards-compliant, cross-platform, and performant C++ library for implementing XMPP applications.


Stroke is a native Java (no JNI) port of the Swiften C++ library for implementing XMPP applications.


Strophe.js is a JavaScript implementation targeting browser-based clients. It uses BOSH, a binding of XMPP to HTTP using long polling and WebSockets, a full-duplex single socket connection to a server. Strophe.js makes creating real-time web applications easy.


libstrophe is a C library for XMPP clients and components. It has very minimal dependencies and was designed with both POSIX and Windows systems in mind.

Tinder is a Java based XMPP library, providing an implementation for XMPP stanzas and components.

Tinder’s origins lie in code that’s shared between Jive Software’s Openfire and Whack implementations. The implementation that’s provided in Tinder hasn’t been written again “from scratch”. Instead, code has moved from the Openfire and Whack projects into Tinder, preserving all of the existing features and functionality.