Vasant's Notes

Introduction

Tanelorn.net operates a Discord instance with ~100 simultaneously online users. Discord is a venture capital-funded[^1] online service which can be used for free and without ads. Because of concerns that the service might get significantly worse (because of „enshittification“), alternatives for such a community were to be examined.

Requirements

Initially, a replacement was only examined relating to the text-based features of Discord. This encompasses the following features:

  • Creating instances („servers“) with custom categories and text channels
  • Setting permissions per text-channel and category for specific users and user groups
  • Kicking and banning users by administrators and moderators
  • Emoji-reactions for messages
  • Replying to messages (with notification of the author)
  • Quoting messages
  • Embedding pictures and videos
  • Creating threads inside of text channels
  • Support of Markdown formatting
  • Using various devices to retrieve messages, no matter when this devices was online
  • Access via app and webclient

Evaluation

A user account and a private, encrypted text channel („room“) was created on rollenspiel.chat. The server was chosen because according to the Matrix Federation Tester , it was running an up-to-date version of the server software and passing all technical checks. Furthermore, the topic of the service is TTRPG-related (as is tanelorn.net) and has a very helpful administrator. Since a custom matrix server („home server) would be hosted by tanelorn.net in case they wanted to move to Matrix, a custom homeserver was chosen instead of the reference server matrix.org by the Matrix developers. However, matrix.org was tested as a possible homeserver for participating users. Four testers with user accounts on different home servers were invited one after the other. The general chat functions were tested with different clients on different machines and OSes. An instance („space“) to group rooms, users and permissions was created. This kind of organization mirrors the way a Discord server is organized. In this space, an additional room visible to all members of this space was created and the test members were invited.

Results

Text Chat

Matrix’ text chat supports all of the required features. However, not every client supports every feature. The Matrix website offers an overview of Matrix clients and their features. If a Matrix client doesn’t support threads, the user can’t see these. Using the reply feature to reply to a message in a thread will still sort the reply into the correct thread, though. Markdown support isn’t activated by default in all clients, but widely available. The implementation is slightly different than the one of Discord, and in some regards – e.g. marking spoilers – even differs between clients.

Creating and Managing Rooms and Spaces

Most of the UI to create, edit or manage rooms and spaces worked intuitively and smoothly. Spaces can be created before and after the rooms they contain (or about to). Rooms can also be part of multiple spaces and are independent of the homeserver they were created as long as those are federated. Spaces and rooms can be public or private: For rooms, it is a sensible feature to only grant access to members of a specific space. This way, you can create a community with a public and a members-only part. Executing this wasn’t without problems: If you don’t want to make a space fully public – so everyone can see and join it as they wish – you have to set them to invite-only. Invites can’t be sent as links like in Discord; you have to invite users via the client. Strangely, I could invite users from the matrix.org homeserver (the official homeserver of the Matrix project) with my rollenspiel.chat test account to rooms, but not spaces. Reporting this on the Matrix GitHub, I was referred to my server admin who couldn’t solve the issue. After all, room invites and such worked perfectly. The default roles are „administrator“, „moderator“ and „user“. You can also set a custom permission level, which is a number you can assign specific permissions to. „User“ is like the Discord’s role „everyone“ and has the level „0“. It doesn’t seem possible to define roles that have access to specific rooms this way, for example

  • General: Everyone can enter
  • Tinkering: Access only to users with the „tinkerer“ role
  • Con-Organising: Access only to users with the „con-organiser“ role Instead, the users in questions would have to be invited directly. Another interesting permission setting is „knocking“: When a user wants to enter a text channel, a moderator would get a notification about an access request they could accept or decline. Although this feature is part of the newest version of the server, it was not visible in the reference client Element. After setting it with the client Fluffychat (who did display it), it did not work, either. A good idea for spaces are „featured rooms“, so a new user won’t immediately get overwhelmed with all rooms linked to a space. Users can also mark rooms as favourites (which are grouped separately) or create a private Space with their favourite rooms from various spaces and home servers as they wish. Notifications can be set per room („all messages“, „mentions and keywords“, „off“). The default setting can also be modified.

Encryption

Matrix supports end-to-end encryption for direct chats as well as for private rooms. One tester had problems with the encryptions and could only read the messages of specific users in a room. 

An encrypted room doesn’t support Bots or Bridges. Presumably, bigger public rooms shouldn’t be encrypted. For direct messages, however, this is a good feature that worked flawlessly. 

Federation

In principle, you can create your account on any home server and then communicate with users and rooms of any other home server. That’s very commendable and worked mostly flawless, save for some issues with spaces and users on the home server matrix.org.

Clients

Matrix supports different clients and doesn’t, for example, forbid using them in their terms of services (like Discord does). The clients have different sets of features, though, which can lead to confusion. For example, if a moderators asks the participants in a room to move their specific topic into its own thread, as it is often the case in bigger Discord communities, some users couldn’t follow that request because of their client.

Multi-account support

The usage of multiple accounts is not supported by Matrix by default. If you registered as @queerponylover99:matrix.org, you’re supposed to also use this account in the matrix space of your university or your rugby team. The nicknames are freely configurable, but the account name is always publicly visible. Some clients like Fluffychat do support multiple clients. If you like to use Element, however – e.g. because of the support for threads – you have to use workarounds like multiple Private Browsing tabs.

Conclusion

Matrix is a very promising messaging protocol that seems well-suited to replace Discord for an already existing community with federated, free and open-source software. However, since we already ran into problems with just five testers that couldn’t be solved by the server admin or the Matrix devs on GitHub, I’m afraid I can’t recommend a move at this time.

Acknowledgements

Thanks to Bel-Chion, schneeland, Eris2Cats and Orko for their patient testing, Tealk of RollenspielMonster for providing the server and giving technical support and the matrix community on GitHub for their quick and technically versed answers.

[^1]: Hammer & Chisel pivots to voice comm app for multiplayer mobile games