Leaving Discord
Intro
Just as a lot of others, I have been looking for a self-hostable alternative to Discord.
I have been using it since early 2020, and I have made a lot of friends there, but the direction of the platform has been worrying me for some time, and with the latest news about age verification and teen-by-default, I realized it is not the type of network to keep me forever.
Alopex Networks recently published a Ditching Discord post on their search for an alternative, which is the same exact situation I am in. The same goes for James Liu's In Search of a Discord Replacement.
My needs
I love digital sovereignty is finally discussed in public.
To me, having all my chat data stored in a US datacenter is better than Asia, but given the reality of the 2020s I would prefer all my personal chats were stored in a country I see no risk of pronouncing Europe a threat. I have a confidence in most of the VPS providers in Europe, but I already own hardware I physically control.
This is the wish list I am basing my search on:
- Should be open source: Very often (probably too often) I need to read the source code to debug a deployment. I could make an exception if the software worked flawlessly and was transparent about what it does in its black box.
- Should have more than two maintainers: I love home grown projects born out of love, but I want something with low bus factor for something to rely on.
- Must be self-hostable: See the Discord enshittification.
- Should be understandable: Threat modelling is important to me. If the application has lots of features that are underdocumented, I will not feel safe self-hosting it.
- Must publish OCI containers: I am not willing to run 3rd party software without isolating it from the host system.
- Must have proper tests: Every software has bugs, but I do not love having to fix database migration issues or search upstream issue trackers when something essential stops working after an update.
- Should have sane tags: I have autoupdates enabled. Keeping a pinned release up to date is not sustainable.
- Must have a decent client: Linux and Android, optionally web UI.
- Must have decent UI and UX: It is not 2010 anymore. I am comparing everything to Discord and Slack.
- Must put me in control of its deployment.
- Must allow me to self-manage certificates and reverse proxying: I need control to see what is happening in my infrastructure, where the TLS certificates live and what is flowing into and out of my servers.
- Must work in air-gapped environments: My homelab/staging environment has very limited access to the outside internet.
- Must work with self-issued CA: My homelab/staging environment has custom CA certificate I import into devices on the network.
Nice to haves:
- Support for attachments: I am not big on images, but file support is definitely a plus.
- May allow end-to-end encryption: I do not mind keeping the data unencrypted on my own hardware, but on a VPS I would be more cautious. I want to be in control of my private life.
- Post-Quantum security awareness: If the application supports end-to-end encryption, it should have plans/documentation for migration to post-quantum capable cryptographic schemes.
Direct Experience
Over the last month or so, I have been looking around and trying stuff out. Most of it did not work, some did but I did not feel comfortable using as a to-go platform to replace Discord with.
IRC
I did not grow up with IRC and it feels obscure to me, and I have decided to not pursue it for user experience and deployment experience reasons.
Hosting IRC by-itself is easy, both ngircd and Soju felt rock solid, with easy to understand ways to deploy it. The Goguma Android client looks very nice.
I never got history working reliably enough to be confident it would work across the clients. Especially in Linux desktop apps the support for the history extension seems insufficient.
If I did not need chat history, or knew all clients would support it, I would pick IRC.
XMPP
I have tried ejabberd. I have tried Prosŏdy. I have tried Snikket.
With each I had to dig into repositories and OCI metadata to understand implicit deployment expectations. They insisted on self-managing TLS certificates, and did not do a great job doing it.
Matrix
No.
I have read enough about Matrix to know to stay away from it. Maintainers, I am deeply sorry, nothing personal.
Mumble
I can imagine Mumble being a one-off thing when your text-only platform friends need to talk to you.
Deployment was flawless. I have no use for it though.
Mattermost
Self-hosted Mattermost consists of an all-in-one container and a PostgreSQL database. It feels like a cousin of Discord and Slack living abroad in a country with lower GDP.
Mattermost supports hosting multiple isolated teams ("guilds" in Discord terms) and has custom emojis. The UI is fine; its thread handling is kind of strange, but you get used to it once you mentally isolate the concept from Discord. Supports voice calls with RTC and STUN via a plugin.
The search feature seems to miss a lot of terms, I frequently get no results when I search for URLs or substrings.
Zulip
I had to deploy Zulip to realize its UX model was not working for me and my friends. We found the UI confusing and 2010s-era. Forced threading is not our thing.
Though I have torn down my test instance, I have kept the Quadlet files, as they might be useful for others or to me in the future. I plan to write a blog post on my experience migrating the Zulip Docker Compose to Podman Quadlets.
Stoat
Stoat, formerly Revolt, is a Discord reimplementation that aims to be scalable to 10k+ users.
The deployment consists of fourteen (!) containers, and their Web UI is currently being rewritten and is not feature complete.
It is noticable self-hosting was not a direct requirement when they were implementing the stack, as parts of it break under the original assumptions:
- the registraiton form insists it sent you en email even if SMTP is disabled,
- the UI loads resources from both
stoat.chatandrevolt.chat, breaking in air-gapped environments, - the services only provide minimal logging and you are supposed to self-host full Sentry stack.
The UI feels very fast and snappy, and once you deploy all containers, they fit together nicely. I did not try out voice calls.
I plan to continue with the evaluation.
On My Watch List
Rocket.Chat
Self-hosted Rocket.chat version has a limit of 50 users, which is comfortable for me, but raises questions about other limits now or in the future.
My use-case is not really "military, intergovernmental, and public-private coalitions", but it is good rocket-to-rocket federation is considered. Clearly documented are air-gapping, zero-trust, information governance and server-side encryption -- good. They list both political organizations and companies as customers, so they got both funding and reasons to do testing before a release.
I did not look into self-hosting details yet.
Fluxer
Fluxer has a big red box in their GitHub README warning against self-hosting, because it is not ready yet.
I may revisit it in a few years, but the fact they have two full-time employees who are aware of the limits of their software feels like a really good sign.
Sharkord
Sharkord does look promising long-term. Scaling Sharkord across friend groups would require multiple instances. Lacks mobile client, but perhaps a web view would suffice.
Fediverse
I have not considered it until I started writing this blog post, but perhaps some of the Fediverse applications would work.
You would write a message and people would either reply or not. The channels on our Discord server were more of a hint than a requirement anyway.
I would just lock the access down, disable federation and we would be good. I would just need to host an instance per friend group, if I did not want them to mix.
I am putting Akkoma and GoToSocial on my list of sofware to try.
Outro
My friends group currently lives on a Mattermost instance my friend is hosting. He has a good laugh every time I complain about the other software I am failing to self-host.