XMPP, formerly Jabber, is a messaging protocol standard that is highly extensible. It is federated meaning there is not one central server but different servers can all communicate with each other, similar to how email works across multiple domains and email providers.
DevDungeon runs an XMPP server as part of the DevDungeon infrastructure. The
email@example.com chat room is open to the public and anyone can join.
If you a member of the DevDungeon Virtual Hackerspace, you get your own account
For a longer list of available clients, check out https://new.xmpp.org/software/clients.html.
Profanity is a terminal client that supports HTTP file uploads and OTR/PGP/OMEMO encryption. It's a great client. I have a dedicated page: Profanity - Terminal XMPP client
Converse.js is a web-based and cross-platform client for XMPP that supports OMEMO encryption and HTTP file uploads. You can use their hosted web client to login to any server (including the DevDungeon one). You can use their hosted full-page version or the DevDungeon hosted web client at https://xmpp.devdungeon.com:7443/inverse/ or you can download their desktop version. If you're using the desktop version, the HTTP bind URL for DevDungeon server is
Psi+ is a desktop client that supports PGP encryption and direct file transfer.
Pidgin is a desktop client that supports direct file transfer and OTR encryption (with a 3rd party plugin).
Gajim is a desktop client that is cross-platform. It supports HTTP file uploads and OMEMO encryption.
Spark is a desktop client written in Java. It supports direct file transfer, has built-in translation features, and a screenshot feature.
The Thunderbird email client also supports XMPP chat although not with a ton of features. It does support OTR encryption.
OpenFire is an XMPP written in Java. It has a feature-rich web interface. The project also has a Java library for XMPP named Smack and a Java desktop client for XMPP chat named Spark. Together, they provide a complete suite for XMPP. There are also a number of Openfire plugins that extend the server.
For instructions on setting up Openfire XMPP server, see: Openfire XMPP Server Setup.
https://prosody.im/ “Prosody is a modern XMPP communication server. It aims to be easy to set up and configure, and efficient with system resources. Additionally, for developers it aims to be easy to extend and give a flexible system on which to rapidly develop added functionality, or prototype new protocols.
Prosody is open-source software under the permissive MIT/X11 license.”
https://www.ejabberd.im/ “Robust, Scalable and Extensible Realtime Platform XMPP Server + MQTT Broker + SIP Service”
You could simply use one A record for your server, like
xmpp.devdungeon.com. However, you might not want your account to be
firstname.lastname@example.org and instead be
email@example.com, but the host running your XMPP server may not correspond to the top level domain.
To allow the use of
@devdungeon.com even though the XMPP server may be
xmpp.devdungeon.com, you can use SRV records in DNS. You can read more at https://wiki.xmpp.org/web/SRV_Records.
Here are some examples showing the two records you'd need for a client and one for s2s.
_xmpp-client._tcp.devdungeon.com. 18000 IN SRV 0 5 5222 xmpp.devdungeon.com _xmpp-server._tcp.devdungeon.com. 18000 IN SRV 0 5 5269 xmpp.devdungeon.com # For conference rooms _xmpp-server._tcp.conference.devdungeon.com. 18000 IN SRV 0 5 5269 xmpp.devdungeon.com.
You can use
dig to check a domain's records:
dig SRV _xmpp-client._tcp.devdungeon.com dig SRV _xmpp-server._tcp.devdungeon.com