{{Infobox Software
| name = XMPP
| logo = XMPP logo (without text).svg
| developer = ProcessOne
| repo = {{URL|https://github.com/processone/ejabberd}}
| programming language = Erlang, Elixer
| operating system = GNU/Linux
| license = GPLv2
| website = [https:xmpp.nixnet.services/ xmpp.nixnet.services]

{{Note|Due to a ridiculous number of automated account registrations, I've rate-limited signups to 1 per hour. This will restriction will likely remain in place for the foreseeable future.|warn}}

XMPP stands for ''e'''X'''tensible '''M'''essaging and '''P'''resence '''P'''rotocol''. It was originally called ''Jabber'' and some people still use that, however. XMPP is an instant messaging protocol that provides near-real-time communication, presence information (online/offline status, typing indicators), and contact list management. You can communicate with individuals as well as join larger Multi-User Chats (MUCs). XMPP is incredibly extensible (after all, it's in the name) and even allows for voice and videos calls as well as end-to-end encryption via protocols such as OMEMO.

XMPP is a ''federated'' protocol meaning that every server can communicate with every other server. Think of it like email: <code>bob@gmail.com</code> can send a message to <code>alice@yahoo.com</code> even though the email services are provided by entirely different (and competing) companies. If you like the idea of XMPP but don't like my domains, you can register with another provider and have a very similar experience! [https:providers.xmpp.net/ XMPP Provider] is a very convenient website that curates these various providers and categorises them based on quality of service. Any provider in Category A should be a wonderful host so picking between them is pretty much down to domain preference.

The server running on NixNet is [https:www.ejabberd.im/ ejabberd], one of the more modern and robust implementations available.

{{Note|Make sure you read the Terms of Service.|reminder}}

Registration =

There are two ways to register with this service: from [https:xmpp.nixnet.services the web UI] or from within your client. The latter is probably simplest and what I recommend. Whichever registration method you choose, you'll need to come up with a username and pick a domain from those listed below. Your Jabber ID (JID) is what people use to contact you; it's similar to a Twitter handle. Your JID will look like <code>username@nixnet.services</code>, <code>username@paranoid.network</code>, etc.


Once you've come up with an awesome JID, you need to get registered with it!

Client registration ==

As I said above, this method is probably simplest. Take a look at the recommended clients, pick one, install, and open it up. There will usually be a dialogue prompting you to either log in or create an account. You want to create an account. It should be pretty self-explanatory from there, aside from the CAPTCHA. Due to a large amount of abuse, I've had to implement a CAPTCHA to deter bots from mass-registering and sending copious amounts of spam to other users. Your client may display the CAPTCHA for you but, if it doesn't, you'll need to copy the provided URL, open it in your browser, then enter the generated numbers back in your client.

That should be it!

Web registration ==

For this one, head over to [https:xmpp.nixnet.services xmpp.nixnet.services], pick your username, enter one of the domains listed above, and generate a strong password to store in your password manager. Fill in the CAPTCHA, hit the <code>Register</code> button, then take a look at the recommended clients.

Clients =

If you’re not sure what client to use, here is a list of some of the more popular clients for each of the major platforms! If you have any recommendations, please let me know and I'll add to the lists.

[https:f-droid.org/en/packages/eu.siacs.conversations/ Conversations]
*Ubuntu Touch
[https:www.kaidan.im/ Kaidan]
[https:gajim.org/ Gajim]
[https:dino.im/ Dino]
[https:profanity-im.github.io/ Profanity] (TUI client)
[https:gajim.org/ Gajim]

I do not have any Apple devices and cannot test these but I have heard good things, especially about Snikket.
[https:apps.apple.com/us/app/snikket/id1545164189 Snikket]
[https:beagle.im/ Beagle]
* There's apparently an issue with Beagle at the moment. When signing in, you'll need to click the drop-down on the right and check both <kbd>Disable TLS 1.3</kbd> and <kbd>Use Direct TLS</kbd>.
[https:siskin.im/ Siskin]
[https:monal.im/ Monal IM]
[https:apps.apple.com/us/app/snikket/id1545164189 Snikket]
[https:siskin.im/ Siskin]
[https:monal.im/ Monal IM]

Personally, I use Conversations on Android, Dino on Linux, and Gajim on Windows.

Connecting over Tor ==

If you want to use this XMPP server over Tor, first install and enable the daemon.

# Installation for Debian and Debian-based distributions like Ubuntu or Linux Mint
# sudo apt install tor

# Installation for Arch and Arch-based distributions
# sudo pacman -S tor

# Installation for RedHat and rpm-based distributions like Fedora
# sudo dnf install tor

# This command should™ work whether your init system is systemd or OpenRC. I'm not sure about runit or other alternatives
# sudo service tor enable --now

After that, there are a few settings you’ll have to change depending on your client. At a birds-eye view, you want to enable a SOCKS5 proxy; some clients allow for this and some don't. Gajim does and that's my preferred client so I'll describe its process. Go to Gajim -> Preferences -> Advanced and simply set the '''Global Proxy''' to '''Tor'''. As long as your Tor daemon is up and running properly, the default settings should work perfectly fine.

Account management =

Passwords can be changed and accounts created or deleted from the web UI.


{{Note|Note that because we do not collect email addresses at registration, there is no way to recover a lost password. Please store it in a password manager such as [https:bitwarden.com/ Bitwarden] or [https:keepassxc.org/ KeePassXC].|warn}}

Encryption =


Group chat =

In XMPP, group chats are called '''''M'''ulti '''U'''ser '''C'''hats'' or MUCs. To create a MUC on any of the domains above, you'll first need an account on this server. It ''shouldn't'' matter which domain you're using, you just need an account on one of them. When creating the MUC, you'll be asked for an address. This usually takes the form of <code>name@muc.example.com</code> or <code>name@conference.example.com</code>. My domains all use <code>muc.</code> so that would be …


After the room has been created, you can send people a join link in the form of <code>xmpp:name@muc.example.com?join</code>. For example, clicking this link will prompt you to join the NixNet Community MUC: [xmpp:nixnet@muc.nixnet.services?join xmpp:nixnet@muc.nixnet.services?join]

Audio and video calls =

The only clients I know of supports A/V calls at the moment is Conversations on Android, Dino on Linux, and Siskin on iOS (if you know of any more, let me know and I'll update this page). This feature should Just Work™ and, if so, there will be a telephone icon somewhere in the UI (typically the top right).

Storage Limits =

*Upload limit for individual files is set to 100 MB
*Total upload limit per-user is set to 1 GB; when this limit is reached, the user's oldest uploads are automatically deleted until the total used storage is less than 1 GB
*Uploads older than 14 days are deleted automatically
*Messages stored with '''M'''essage '''A'''rchive '''M'''anagement are retained indefinitely

Support =

*Group chat: [xmpp:nixnet@muc.nixnet.services?join nixnet@muc.nixnet.services]
*Direct message: [xmpp:support@nixnet.services support@nixnet.services]