Recently I accidentally made a Fediverse post which went viral:
stop using discord for your open source communities
That post is short, punchy, opinionated, and prescriptive, which I suspect is the cause for its virality.
Unfortunately, like many micro-blog posts, it lacks nuance, which many replies highlighted. I made the post to vent my frustration at needing to join a Discord server to interact with a community, so it is far from a measured critique of the subject.
This blog post is an attempt to address those nuances in greater detail. This is not an exhaustive analysis, and I’ve resolved to not let “perfect” be the enemy of “done”.
Starting an open source community can be a lot of work. Often founders of such communities are software developers who have chosen to open source a tool they’ve developed for themselves, only to find that others also find that tool useful, and suddenly, this person is not just a software developer, but a community manager. They find themselves responding to bug reports, feature requests, pull-requests, and requests for software support, among other things. All this communication has to happen somewhere, and ideally needs to be appropriately moderated so that the community feels safe and discussions remain relevant and on-topic.
This is A Lot.
This is not a post about community management or content moderation. I have lots of opinions on those, but this post is primarily to address why I am frustrated with Discord as a platform for managing specifically open source software communities, and to offer some potential alternatives.
The short version of why I don’t like Discord for this use-case is:
- I need to join Yet Another Server to be able to see chat history for a given community
- I need an account to join that server
- I need to use the Discord website or app, which often has flashy distractions and “What’s new” pop-ups1
- Searching history to see if my question has already been answered is hard
- If a community decides to move from Discord to another platform down the line, it is likely tricky (if not impossible) to export all that discussion content elsewhere, given Discord is a walled garden
There are many pros and cons this list doesn’t account for. In the rest of this post, I’ll try to cover these off a bit more thoroughly, and offer some alternatives as well as some of their pros and cons.
Pros and cons of community platforms
Discord’s original target market was gamers, so it makes sense it has a fun, colourful interface with lots of features like custom emojis, as well as voice- and video-chat. When it comes to using it for an open source community though, I think it misses the mark a bit.
- Low barrier to entry
- Well-known and familiar
- Many people already have accounts
- Good access controls through roles
- Relatively friendly mobile, desktop, and web apps
- Good app accessibility? (according to a vision-impaired friend)
- Proprietary (what if you need to move else where in future?)
- Focussed on fun and gaming (UI can be busy and obnoxious)
- Closed (need to have both a Discord account and be a member of that server to see chat history)
- Hard to search
Slack is best known in the corporate world, and is a professional chat platform with similar features to Discord. One the things I dislike about it is that for every Slack Team (equivalent to a Discord Server) you join, you require a separate account, despite all accounts being hosted by Slack.com. Lots of folks likely already have Discord accounts, and you only need one of those for the entirety of Discord, so it makes sense this is a lower barrier to entry. Add that to the fact Discord is less corporate-focussed, meaning more folks are familiar with it, and the fact that unlike Slack, Discord (to my knowledge) doesn’t limit history visibility for free communities, and I see why Discord is more appealing.
Nonetheless, let’s take a brief look at how Slack stacks up.
- Targeted at productivity, rather than gamers
- Less obnoxious UI
- Similar vendor lock-in to Discord
- Requires using their own apps
- Limited message history for free teams
- Requires a separate account per team
Hosted alternatives to Discord
IRC has been around for decades and has both proven itself, and is showing its age. While some IRC clients offer relatively rich features such as link previews, they can be hard to come by, and still are limited by the features supported by the protocol itself.
To use IRC, one can download a client (or use a web-based client) and join an IRC network like Libera.chat, then create or join a channel for their community. Usually this can be done without creating an account.
- Protocol, rather than platform; choose your own client
- Well-established history
- Often doesn’t require an account; reduced barrier to entry
- Not many user-friendly clients
- Protocol, rather than platform; overwhelming choices of client, and the need to understand decentralisation/federation and to join a particular server/network
- Doesn’t natively support many features people expect these days, such as replies, threads, emoji reacts, chat history
- Often doesn’t require an account; prone to spam and abuse
I haven’t used XMPP in earnest for around a decade, so am not up-to-date with its current capabilities, but:
XMPP hasn’t been around as long as IRC, but is still a tried-and-proven protocol. It supports more features than IRC does, though many of these are implemented as extensions to the protocol, and therefore aren’t supported by all servers and clients.
- Protocol, rather than platform
- Not all clients and servers have the same supported features
- Protocol, rather than platform
- Federated, so need to choose a particular server to join
- Requires creating an account
Matrix is my favourite chat protocol currently. Because it’s a protocol, rather than a platform, it offers multiple server and client implementations, which can make it both flexible and overwhelming to get started with. One of Matrix’s big features is native support for chat bridges that allow interoperability with many other chat networks, including IRC, XMPP, Slack, Discord, and many others. Not all of these bridges are 100% reliable though, so your mileage may vary.
- Protocol rather than platform
- Supports bridging to many other platforms and protocols
- Supports rich chat features such as emoji reacts, replies, threads, multi-line messages, code formatting, file and image uploads
- Has a relatively polished client, Element to get new users started
- Many free hosted servers exist
- Protocol rather than platform
- Bridges aren’t always reliable or easy to set up
- New users may be overwhelmed with choices of client or server
I know little about Revolt but it was recommended in response to my original post. It seems to be an intended alternative to Discord. At first glance, it looks like a hosted service on which you can create an account. Reading through some of their documentation, they state their platform is open source, and I can see they also have a self-hosting option.
Zulip is another Slack/Discord-type alternative which is entirely open source. I’ve not tried it myself, but from what I’ve read, they offer a free hosted option for open source communities, and allow you to self-host if you prefer.
Non-chat (asynchronous) alternatives
Unlike chat platforms, forums have the advantage that content is more easily searchable, can be better categorised, and usually doesn’t require an account to see historical content. In many cases, this seems like a better alternative for running an open source community, when synchronous communication isn’t a necessity.
Discourse is an open source forum platform designed to be self-hosted by communities. Apparently, they also offer a chat feature which integrates the forum feature and allows chats to be converted to forum posts if applicable. To my knowledge, Discourse does not offer mobile or desktop apps for its forum or chat features. I can confirm that for its forum features, the web app works well on both desktop and mobile, but I can’t vouch for the usability of the chat function, as I’ve not tested it myself.
- Forums can be made visible to non-members allowing anonymous read-only access to historical content
- Content can be categorised into different topics to aid discoverability and organisation
- There’s a badge system that awards contributors different levels of access based on their frequency and quality of contributions, helping with moderation
- Needs to be self-hosted, or need to pay a hosting provider
- Need an account to contribute (but not necessarily to read)
- Not as easy to have synchronous back-and-forth conversations (EDIT: Apparently this can be done with the aforementioned chat feature)
Your software forge’s bug tracker
If you’re already using a software forge such as GitHub, GitLab, Gitea, Forgejo, SourceHut etc. to host your open source project, many discussions can happen on that platform too. Each of these platforms has their own equivalent of Issues and Pull Requests, and Issues are a great way to have discussions about features or bugs, with the benefit that anyone can search through historical discussions
- Discussion history likely visible to anonymous users
- Keeps discussion alongside the code for your project
- Makes it easier for users to contribute both code and feedback using the same account
- Familiar interface to many software users
- Usually requires an account to contribute
- GitHub is a proprietary walled garden
- Not as easy to have synchronous back-and-forth conversations
Self-hosted alternatives to Discord
Of the alternatives mentioned above, Matrix, XMPP, IRC, Discourse, GitLab, Gitea, Forgejo, and SourceHut can all be self-hosted. I acknowledge that self-hosting requires either a lot of effort and probably some systems administration knowledge, or the ability to pay somebody else to host the service for you, and it’s possible that neither of these are within reach of new open source community leaders. The great thing though, is that some of these services offer free, hosted platforms, such that you could get started on those, and choose to migrate to a self-hosted platform down the line, if it became relevant.
In response to my initial post, somebody mentioned using Signal or Session as alternatives to Discord. When it comes to one-on-one direct messages, or small group chats, using end-to-end encrypted platforms such as Signal, Session, Matrix, Briar absolutely make sense.
When it comes to discussions in open source communities though, end-to-end encryption makes less sense. When you want anybody to be able to join in your discussion, and ideally be able to search chat history, encryption can become more of a hindrance than a benefit. This isn’t even to mention the computational expense of managing all the encryption keys of a chat-room with many hundreds of users in it.
One of the things I like about Matrix is that it supports end-to-end encryption, and enables it by default for direct messages, but also allows you to have public chat rooms that are encrypted in transit with TLS, but not actually end-to-end encrypted. These rooms can also then be upgrade to E2EE rooms in future if necessary (though all previous messages will not be retroactively encrypted, and enabling E2EE on a room is a one-way process).
“Don’t use GitHub”
Several other responses to my original post discouraged the use of GitHub for software development, because GitHub is owned by Microsoft, is yet another closed-source, proprietary, walled garden, and while Git repositories are portable by their very nature, it’s not always as easy to migrate GitHub Issues or Pull Requests out of GitHub to another platform.
I don’t see GitHub in the same way as I see Discord in this particular instance. As mentioned above, GitHub is at least searchable without requiring users to create an account. Further to this, many other forges, including GitLab, Gitea, and Forgejo, make it easy to import your GitHub repository (Issues, Pull Requests, and all) using GitHub’s API. While I acknowledge this is not guaranteed to continue to work in future, at present, it improves my disposition to GitHub.
- Git itself is distributed, so at least your repository can easily be migrated elsewhere
- Many self-hostable and FOSS platforms, including Forgejo, Gitea, and GitLab can also import not just repositories, but Issues and Pull Requests etc too
- Content can be searched and accessed without requiring an account
- Many folks already have n account
- Also proprietary
- Requires a GitHub account to contribute/interact
Alternative FOSS Forges
As mentioned earlier, there are plenty of other FOSS Forges out there. Many of these offer hosted instances you can create an account and project on, rather than self-host, while still offering the flexibility of self-hosting if you choose.
The downside of this is that until better support for federation, OpenID, or Passkeys exists, users will need to create accounts on all these forges too, in the same way they’d need to create accounts on various other chat platforms if that were where you hosted your community discussions. I acknowledge this raises the barrier to entry, but hopefully this friction can be sufficiently reduced such that it is outweighed by the benefits of these alternatives.
All platforms have their pros and cons, and there’s no perfect solution. The bottom line is to spent a bit of time thinking about which platform is best for your community (and who you might be excluding based on your choice), and re-evaluate semi-regularly in case your needs, or those of your community, change. Hopefully this post gives you an adequate starting point to evaluate the merits of each platform and make a more informed decision.
I’m trying out Discord’s “reduce motion” accessibility options to see if it makes this more tolerable. ↩︎