Prologue
XMPP stands for the "eXtensible Messaging and Presence Protocol". It is currently one of the, if not the best choice for instant messaging currently available. You can read all the specifications, called "XEPs" on their website.You can even use the fabled IRC through XMPP, by way of Biboumi, of which there are many public instances.
Just starting out with XMPP, the first thing to do is to pick a client, then pick a server.
You may hear the terms "S2S" and "C2S" used sometimes. S2S means "Server-to-Server" (meaning federation between servers) and C2S means "Client-to-Server" (meaning the connection between the XMPP client and the servers it connects to).
Chapter 1
Clients
Things that are nice to have:- Supports OMEMO
- Supports MAM (Message Archiving, AKA History)
- Is not GTK3 or GTK4
- Written in a fast, simple, compiled language (Not Python or Rust)
- Allows multi-line message copying
Name | License | GUI Toolkit | Platform |
Adium | GPLv2 | macOS | |
Apple Messages | Proprietary | macOS | |
AQQ | Proprietary | Windows | |
AstraChat | Proprietary | Linux, macOS, Windows, Android, iOS | |
aTalk | Apache 2.0 | Android | |
BeagleIM | GPLv3 | macOS | |
Beejive | N/A | N/A | |
Bitlbee | GPLv2 | TUI | Linux |
Beem | GPLv3 | Android | |
blabber | GPLv3 | Android | |
BlueJab | ? | Android, Blackberry, Symbian | |
BombusMod | GPLv3 | Android | |
BuddyCloud | Apache 2.0 | GUI Toolkit | Web, Mobile |
Candy | MIT | JavaScript | Web |
Chat-O-Matix | GPLv2 | Haiku | |
ChatSecure | GPLv3 | iOS | |
Coccinella | GPLv3 | Tk | Linux, macOS, Windows |
Conver6ations | GPLv3 | Android | |
Conversations | GPLv3 | Android | |
Converse.js | MPL-2.0 | JavaScript | Browser |
Conversant SoapBox Communicator | Windows | ||
Coyim | GPLv2 | Linux, macOS, Windows | |
Crosstalk | iOS | ||
Chatty | GPLv3 | PureOS | |
eM Client | Windows | ||
Empathy | GPLv2 | GTK | Linux |
Finch | GPLv2 | TUI | Linux, BSD |
GNU Freetalk | GPLv3 | TUI | Linux |
GreenJab | Proprietary | IBM i | |
Dino | GPLv3 | GTK3 | Linux |
EyeCU | GPLv3 | QT | Linux |
Fnord | GPLv3 | Android | |
Gajim | GPLv3 | GTK3 | Linux, macOS, Windows |
Instantbird | GPLv2 | XUL | Linux, macOS, Windows |
irssi-xmpp | GPLv2 | TUI | Linux, BSD, Solaris, Haiku, macOS, Windows (Cygwin) |
Jackline | BSD | TUI | BSD, macOS |
Jabber.el | GPLv2 | Emacs | |
Jabberwocky | GPLv2 | Amiga | |
JabMe | ? | iOS | |
JAJC | Proprietary | Windows | |
Jappix | AGPLv3 and others | Web | |
Jitsi | Apachi 2.0 | JavaScript | Web |
JSXC | MIT | JavaScript | Web |
JWChat | GPLv2 | Web | |
Kadu | GPLv2 | QT | Linux, BSD, macOS, Windows |
Kaidan | ??? various open source ones | QT | Linux |
Kaiwa | MIT | JavaScript | Web |
Kopete | GPLv2 | QT | Linux |
Libervia | GPLv3 | TUI, Browser | Linux, Android |
Mcabber | GPLv2 | TUI | Linux, BSD |
Miranda NG | GPLv2 | Windows | |
Mjabber | ? | Java Platform Micro Edition | |
Monal | ? | iOS | |
Moxxy | GPLv3 | Android | |
OneTeam | MPL 2.0 & GPLv2, components under others | XULRunner | Linux, macOS, Windows, iOS |
Opa | MIT | JavaScript | Web |
Pade | Apache-2.0 | JavaScript | Web |
Pidgin | GPLv3 | GTK | Linux, BSD, Windows |
Poezio | GPLv3 | TUI | Linux |
Profanity | GPLv3 | TUI | Linux, BSD, macOS, Windows, Android (Termux) |
PSI | GPLv2 | QT5 | Linux, macOS, Windows |
PSI+ | GPLv2 | QT5 | Linux, BSD, macOS, Windows, Haiku |
Quicksy | GPLv3 | Android | |
Quiet Internet Pager | Proprietary | Windows | |
qutIM | GPLv3 | Linux, BSD, Solaris, OS/2, macOS, Symbian, Maemo/Meego, Windows | |
Renga | MIT | Haiku | |
Shmoose | GPLv3 | SailfishOS | |
Sim-IM | GPLv2 | QT | Linux, BSD, Windows |
Siskin | GPLv3 | iOS | |
Smuxi | GPLv2 | GTK | Linux, BSD, macOS, Windows |
Spark | Apache | Linux, "Unix", macOS | |
Stork | AGPLv3 | Android | |
Swift | GPLv3 | QT | Linux, macOS, Windows |
Thunderbird | MPL | Linux, macOS, Windows | |
Tkabber | GPL | Tk | Linux, BSD, Solaris (anything Tk supports) |
Trillian | Proprietary (?) | Linux, Mac, Windows, Android, iOS | |
UWPX | MPL-2.0 | UWP | Windows |
Vacuum | GPLv3 | QT4 | Linux, macOS, Windows |
Vayusphere XMPP/Jabber Solution for BlackBerry | Proprietary (?) | Blackberry | |
VSTalk | Visual Studio | Windows | |
V&V Messenger | Proprietary (?) | Windows | |
WeeChat-XMPP | MPL-2.0 | TUI | Linux, BSD, Solaris/Illumos, Haiku, Hurd, macOS, Windows (Cygwin), Android (Termux) |
WTW | Windows | ||
Xabber | GPLv3 w/various components being under others | Android, Web | |
xmpp | Public Domain | TUI | plan9 |
xmppchat | JavaScript | Web | |
xmpp-client | BSD | TUI | Linux |
xmppwebchat | LGPLv3 | Web | |
Yaxim | GPLv3 | Android | |
Name | License | GUI Toolkit | Platform |
Adium
A macOS-only client that says it works with Jabber, IRC and more.
Apple Messages
Dropped support probably in Mojave. Don't use Crapple.
AQQ
?
AstraChat
...
aTalk
...
BeagleIM
...
Beejive
Blabber
Conversations fork.
Beem
Last updated 9 years ago. Not maintained. Repository 404s.
There is a fork. Supposedly does not even have MUC support.
There is a fork. Supposedly does not even have MUC support.
BlueJab
The team was unable to connect to the website. It reportedly cost $9 dollars.[1]
- 1. Bluejabb: Messenger MSN en tu celular y chat por bluetooth - Universo Celular, 9/8/2008 https://universocelular.com/2008/09/08/bluejabb-messenger-msn-en-tu-celular-y-chat-por-bluetooth/ http://web.archive.org/web/20140901012129/http://universocelular.com/2008/09/08/bluejabb-messenger-msn-en-tu-celular-y-chat-por-bluetooth/
BombusMod
...
BuddyCloud
Vague on what "mobile" means. It seems to be more of a builder for web apps and "mobile" apps than anything else?
Candy
...
Chat-O-Matic
Based on another client called "Caya".
ChatSecure
...
Conver6ations
Conversations fork with IPv6 and other improvements, including themeing.
Conversations
One of the most common clients. Can be gotten for free on F-Droid. Its forks are better.
Coccinella
Says it's a "communication tool" with a "built-in whiteboard".
Converse.js
A JavaScript web client. Obviously not recommended, except as a way to onboard cattle. If setup correctly, you get a little "join in browser" button on the Jabber list, where it can connect to anonymous.yourxmppdomain.whatever.
Conversant SoapBox Communicator
Apparently dead, linked is the archive. It was reportedly approved by the DoD for military use.[2]
- 2. US DoD approves Coversant SoapBox software products for military use - Army Technology, 9/6/2012 https://www.army-technology.com/news/newsus-dod-approves-coversant-soapbox-software-products-for-military-use/ http://web.archive.org/web/20210625025823/https://www.army-technology.com/news/newsus-dod-approves-coversant-soapbox-software-products-for-military-use/
Crosstalk
Archive linked due to expired domain.
Chatty
Purism.
Coyim
...
EM Client
An email client that also supports XMPP.
Empathy
...
Finch
Pidgin but terminal.
GNU Freetalk
...
GreenJab
The website is inanely JavaScripted. Site looks like it's from the 90s, which is cool, but further deeply calls into question its need for JavaScript. Says the client costs $1.15 PER DAY to use.
Seems to be mostly geared towards communicating to the IBM i system rather than as a general purpose XMPP client (though they do mention you can do human to human messaging).
Seems to be mostly geared towards communicating to the IBM i system rather than as a general purpose XMPP client (though they do mention you can do human to human messaging).
Dino
Very "GNOMEified".
EyeCU
Last updated 2 years ago. Fork of Vacuum-IM.
Fnord
Conversations fork by the Kallist people.
Gajim
Started looking more like Discord with version 1.4, where they also got rid of multi-line copying, and the history manager. Some people either use 1.3 or 0.16 still due to not liking the changes in interface design (ie GTK2 vs GTK3 among other things), or the disabling of OMEMO in public chats.
Instantbird
Development supposedly ceased in 2017.
irssee-xmpp
A plugin for irssi, a famous IRC client.
Jackline
...
Jabber.el
An XMPP plugin for the Emacs text editor/operating system.
Jabberwocky
XMPP client for the Amiga OSs (3, 4, MorphOS, maybe AROS).
JabMe
...
JAJC
"Just Another XMPP Client".
Jappix
Less of a client, more of a social network.
Jitsi
More of a Zoom replacement than an XMPP client. While better than the spyware known as Zoom, it's still a bloated web app. I would suggest looking into SIP (covered in mobilecomms), Mumble, and Jingle rather than becoming further dependent on WHATWG-dependent/JavaScript nonsense (covered in browsers).
JSXC
"JavaScript XMPP Client", "Make XMPP Great Again".....lol
JWChat
Web client designed to support Netscape 6 & 7, Mozilla version since 1.0.2.
Kadu
...
Kaidan
...
Kaiwa
...
Kopete
There is also a TDE version.
Libervia
Used to be called Salut a Toi.
Mcabber
Terminal client that supports most things.
Miranda NG
Continuation of Miranda IM.
Mjabber
A client designed to run on PDAs, really old phones and the like.
Monal
No license or source is obvious on their Tor-blocking website.
Moxxy
...
OneTeam
...
Opa
...
Pade
A browser extension for Chrome and Edge for Converse.js and Jitsi meet.
Pidgin
Limited.
Profanity
...
PSI
PSI+ but less developed, with less platform support.
Quicksy
Conversations fork.
Quiet Internet Pager
Archive linked due to site not working. Russian.
qutIM
Seems to support a lot of platforms.
Renga
...
Shmoose
...
Sim-IM
...
Siskin
...
Smuxi
...
Spark
Related to the OpenFire project.
Stork
...
Swift
...
Thunderbird
The spyware email client can also do XMPP.
Trillian
...
UWPX
For all your Shattered 10 devices!
Vacuum
...
VSTalk
Just a plugin for Visual Studio.
V&V Messenger
...
WeeChat-XMPP
Potentially very interesting.
WTW
Polish.
Xabber
...
xmpp
XMPP client for the plan9 family.
xmppchat
Last commit 2012.
xmpp-client
Written in Go.
xmppwebchat
...
Yaxim
...
Chapter 2
Server Software
Name | License | Platform |
Apache Vysper | Apache 2.0 | Linux, Windows |
Cisco Meeting Server | Proprietary | ESXi |
Citadel | GPLv3 | Linux |
Communigate Pro | Proprietary | Linux, macOS, Windows |
Conversant SoapBox Server | Proprietary | Windows |
DJabberd | GPLv3 | Linux |
Ejabberd | GPLv2 | Linux, Solaris, macOS, Windows |
IceWarp | Proprietary | Linux, Windows |
iChat | Proprietary | macOS |
in.jabberd | GPLv2 | Linux |
Jabberd14 | GPLv2 | Linux |
Jabberd2 | GPLv2 | Linux, BSD, Solaris, Windows |
Jabber XCP | Proprietary | Linux, Solaris, Windows |
Jerry Messenger | Proprietary | Linux, Windows |
Kwickserver | GPL | Windows |
Metronome | ISC/MIT | Linux, macOS |
MongooseIM | GPLv2 | Linux, macOS |
Isode M-Link | Proprietary | Linux, Solaris, Windows |
OpenFire | Apache 2.0 | Linux, Solaris, macOS, Windows |
Oracle Communications Instant Messaging Server | Proprietary | Linux, Solaris, Windows |
Prosody | MIT/X11 | Linux, macOS, Windows |
Psycd | GPLv2 | Linux, macOS, Windows |
Tigase | AGPL | Linux, Solaris, macOS, Windows |
Vines | MIT | Linux, macOS |
Wokkel | MIT | Linux, Solaris, macOS |
Xabber | AGPLv3 | Linux, Solaris, macOS, Windows |
Apache Vysper
...
AstraChat
Seems proprietary.
Cisco Meeting Server
Claims to have "ability to execute" and "completeness of vision", has been recognized as a "Leader".
Maybe it can synergize well with a dynamic, high-focus work environment.
AKA corporate buzzwords and fluff text marketing speak that means nothing.
AKA corporate buzzwords and fluff text marketing speak that means nothing.
Citadel
Does a lot more than just XMPP.
Communigate Pro
...
DJabberd
...
Ejabberd
One of the most common implementations. Written in Erlang.
IceWarp
...
iChat
Deprecated.
in.jabberd
Seems abandoned and targeted at embedded systems.
Jabberd14
Website seems to have been replaced by a JavaScript dependent GitLab instance.
Jabberd2
Says it's the "next generation" and is not to be confused with Jabberd14. No commits since 2018.
Jabber XCP
Page blocks Tor. There is a "Retirement Notice" PDF on the page too.
Jerry Messenger
Dead. Archive is linked.
Kwickserver
Dead. Archive is linked. Supposedly it could only be gotten via CD.
Metronome
Fork of Prosody.
MongooseIM
Apparently used by WhatsApp.
Isode M-Link
Definitely one of the most interesting servers in this list, it is designed for military applications. There's lot of interesting stuff on their site, including STANAG 5066 (XMPP over HF radio).
OpenFire
Written in Java.
Oracle Communications Instant Messaging Server
Big and corporate.
Prosody
The other most common implementation. The only implementation with known working darknet support, and therefore the only recommended one. Darknet addons include mod_onions, which only supports Tor, and its fork, mod_deepweb which supports Tor and I2P (the name mod_darknet which only supports I2P was already taken and appears to be a dead project, and is only mentioned in the I2Pd docs).
When setting up mod_deepweb, be sure to enable it on your MUC modules as well as globally, otherwise those also using it will not be able to connect:
Be sure to generate certs, or you will not be able to connect to some servers:
Be sure to set file permissions and ownership accordingly.
You can also setup Biboumi for accessing I2P-IRC (ie Postman). Make sure your tunnels are correct (this is for i2pd):
Now add the component to the Prosody config (note: as of this writing it is unconfirmed if this works with federating or not). It is also highly recommended you install mod_e2e_policy as Biboumi by default offers no security (unless you want it to be totally public):
When setting up mod_deepweb, be sure to enable it on your MUC modules as well as globally, otherwise those also using it will not be able to connect:
Component "example.b32.i2p" "muc"
name = "Shadowy chat room server"
restrict_room_creation = true
--- Store MUC messages in an archive and allow users to access it
modules_enabled = {
"vcard_muc",
"muc_mam",
"deepweb",
"s2s_bidi"
}
Set your maps (this is also a list of all known servers that support S2S Tor or I2P):
onion_map = {
["nuegia.net"] = "ovbikg4xvmpceljba3tj2i3qyzhdfic76rvkuzpzquayiaecvydd7oid.onion";
["conference.nuegia.net"] = "ovbikg4xvmpceljba3tj2i3qyzhdfic76rvkuzpzquayiaecvydd7oid.onion";
["proxy.nuegia.net"] = "ovbikg4xvmpceljba3tj2i3qyzhdfic76rvkuzpzquayiaecvydd7oid.onion";
["pubsub.nuegia.net"] = "ovbikg4xvmpceljba3tj2i3qyzhdfic76rvkuzpzquayiaecvydd7oid.onion";
["biboumi.nuegia.net"] = "ovbikg4xvmpceljba3tj2i3qyzhdfic76rvkuzpzquayiaecvydd7oid.onion";
["kalli.st"] = "kallist4mcluuxbjnr5p2asdlmdhaos3pcrvhk3fbzmiiiftwg6zncid.onion";
["muc.kalli.st"] = "kallist4mcluuxbjnr5p2asdlmdhaos3pcrvhk3fbzmiiiftwg6zncid.onion";
["biboumi.kalli.st"] = "kallist4mcluuxbjnr5p2asdlmdhaos3pcrvhk3fbzmiiiftwg6zncid.onion";
["patchysicp.xyz"] = "sicp22p3jmr4yvlkqw3daf45uh6h7yyej3x5jxtolwjlygxf75xgiqad.onion";
["chat.patchysicp.xyz"] = "sicp22p3jmr4yvlkqw3daf45uh6h7yyej3x5jxtolwjlygxf75xgiqad.onion";
--["13f0.net"] = "cniqtqmoqo4rmruewilw5kf5nnsx3bef5ddjjygtqtnc7d2swangload.onion";
--["muc.13f0.net"] = "cniqtqmoqo4rmruewilw5kf5nnsx3bef5ddjjygtqtnc7d2swangload.onion";
["digdeeper.club"] = "sefm6o6zuv6ebscvxasbjkr5gozns4hdayqrjbpo2ebjf6aebfbsw4id.onion";
["muc.digdeeper.club"] = "sefm6o6zuv6ebscvxasbjkr5gozns4hdayqrjbpo2ebjf6aebfbsw4id.onion";
["kyoko-project.wer.ee"] = "inf256higpgthvgzwd3je2fcqwuwjtodbvjx66cyolt67uskyh25wdqd.onion";
["chat.kyoko-project.wer.ee"] = "inf256higpgthvgzwd3je2fcqwuwjtodbvjx66cyolt67uskyh25wdqd.onion";
--["kyoko-project.wer.ee"] = "kyoko2r2dnumkuatsax5ddzojc6ei7lw4qeyrs6irb6f6kicrn2qtjyd.onion";
--["conference.kyoko-project.wer.ee"] = "kyoko2r2dnumkuatsax5ddzojc6ei7lw4qeyrs6irb6f6kicrn2qtjyd.onion";
--["proxy65.kyoko-project.wer.ee"] = "kyoko2r2dnumkuatsax5ddzojc6ei7lw4qeyrs6irb6f6kicrn2qtjyd.onion";
--["share.kyoko-project.wer.ee"] = "kyoko2r2dnumkuatsax5ddzojc6ei7lw4qeyrs6irb6f6kicrn2qtjyd.onion";
--["anon.kyoko-project.wer.ee"] = "kyoko2r2dnumkuatsax5ddzojc6ei7lw4qeyrs6irb6f6kicrn2qtjyd.onion";
}
i2p_map = {
["13f0.net"] = "p5wpch3po6hqol5msq3p4wotjyhympopgtix7rp4bo6yq6bpjbdq.b32.i2p";
["muc.13f0.net"] = "p5wpch3po6hqol5msq3p4wotjyhympopgtix7rp4bo6yq6bpjbdq.b32.i2p";
["retroimages.net"] = "frix7bctof2n7hdxx5jwzzpsfc6yawucmjdzbiogdkklzr57yntq.b32.i2p";
["muc.retroimages.net"] = "frix7bctof2n7hdxx5jwzzpsfc6yawucmjdzbiogdkklzr57yntq.b32.i2p";
--["digdeeper.club"] = "eayfsyxga3xoutjupgpb3sqvddv6smqtdfade6kigw6esgsnbjaq.b32.i2p";
--["muc.digdeeper.club"] = "eayfsyxga3xoutjupgpb3sqvddv6smqtdfade6kigw6esgsnbjaq.b32.i2p";
["kyoko-project.wer.ee"] = "wq6nioyfocsug7md3o5cedcihbdlgzel65bb53wlzj4xt6vcpk4a.b32.i2p";
["conference.kyoko-project.wer.ee"] = "wq6nioyfocsug7md3o5cedcihbdlgzel65bb53wlzj4xt6vcpk4a.b32.i2p";
["proxy65.kyoko-project.wer.ee"] = "wq6nioyfocsug7md3o5cedcihbdlgzel65bb53wlzj4xt6vcpk4a.b32.i2p";
["share.kyoko-project.wer.ee"] = "wq6nioyfocsug7md3o5cedcihbdlgzel65bb53wlzj4xt6vcpk4a.b32.i2p";
["anon.kyoko-project.wer.ee"] = "wq6nioyfocsug7md3o5cedcihbdlgzel65bb53wlzj4xt6vcpk4a.b32.i2p";
}
If you want an I2P and Tor only setup, aside from setting:
deepweb_only = true;
deepweb_tor_all = true;
You may also wish to setup a non-darknet blocking firewall.
Be sure to generate certs, or you will not be able to connect to some servers:
openssl genrsa -out /etc/prosody/certs/xxx.b32.i2p.key 4096
openssl req -new -x509 -key /etc/prosody/certs/xxx.b32.i2p.key -out /etc/prosody/certs/xxx.b32.i2p.crt -days 3650
Be sure to set file permissions and ownership accordingly.
You can also setup Biboumi for accessing I2P-IRC (ie Postman). Make sure your tunnels are correct (this is for i2pd):
[prosody-biboumi]
type=server
host=127.0.0.1
port=5269
inport=5269
keys=biboumi.dat
address = 0.0.0.0
destination = 0.0.0.0
[IRC-IRC2P]
type = client
address = 127.0.0.2
port = 6667
destination = irc.postman.i2p
destinationport = 6667
keys = irc-keys.dat
Set your /etc/biboumi/biboumi.conf correctly:
hostname=example.b32.i2p
password=inserttokenhere
xmpp_server_ip=127.0.0.1
port=5347
admin=user@example.b32.i2p
realname_customization=true
realname_from_jid=false
log_file=
ca_file=
outgoing_bind=
db_name=/etc/biboumi/biboumi.sqlite
persistent_by_default=true
Note: you may have to create the DB and set the directory and DB permissions correctly.
Now add the component to the Prosody config (note: as of this writing it is unconfirmed if this works with federating or not). It is also highly recommended you install mod_e2e_policy as Biboumi by default offers no security (unless you want it to be totally public):
Component "example.b32.i2p"
component_secret = "inserttokenhere"
modules_enabled = {
"e2e_policy",
"deepweb",
"s2s_bidi"
}
e2e_policy_whitelist = { "user@example.b32.i2p" }
Edit your /etc/hosts file too:
# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.2 irc.postman.i2p
Now with all this setup you should be able to join, for example #saltr%irc.postman.i2p@example.b32.i2p
Psyched
Says there is work being done to make it federate over Tor.
Tigase
Some Java thing.
Vines
Last commit 2014.
Wokkel
...
Xabber
Claims to have "improvements" to the protocol, and a web interface.
Is actually a bundle, including ejabberd, a script and some other things.
Is actually a bundle, including ejabberd, a script and some other things.
Chapter 3
Providers
It should be noted that the vast majority of providers do not have darknet S2S. Some will have darknet (usually Tor/onion only) C2S. You can check servers for compliance (unrelated to darknet support) using this tool.
KyokoNet supports Tor and I2P federation, Kallist supports Tor (and has a free Biboumi instance which can be accessed with or without an account), and both have application forms you can fill out. RetroImages also supports both, but does not have an application form. Do not attempt to get an account from Nuegia. Digdeeper does not give out accounts except to friends. Patchysicp also has sign up open according to the owner.