| |

Going back to the roots for our community chat

When Discord announced the introduction of age verification, my first thought was, “That’s what I’ve been preparing for.” I logged into one of my machines and set up an IRC server.

Like many open-source communities, The Server Room has been using Discord as a chat platform for years. But I always felt like I was building on a brittle foundation. I knew that it was only a matter of time until I had to find a more future-proof solution for our real-time conversations.

When Discord announced the introduction of age verification, potentially requiring official identification and photographic evidence, that time had come. Many of our community members are working in (or adjacent to) cybersecurity. There was no way they’d be happy to provide deeply personal information to an opaque business (or to its even more questionable business partners) just to have a chat.

Even though Discord backed off their initial plan, I’m happy that I made the change.

The Problem With Building on Someone Else’s Land

The barrier to entry to Discord is low, for server operators, and even more so for community members. In comparison to other chat platforms, its less ephemeral “forum” channels that retain messages for later reading seemed ideal for a community platform that is all about sharing and preserving knowledge. But there’s a catch. (There’s always a catch.)

Discord is a business, businesses need to make money, and it was clear from the start that it won’t offer its service for free without any downsides forever. Discord looks like the ideal candidate for the Enshittification effect – a sudden push for monetization, harming its users once it reaches a certain level of popularity and funds starts running out.

The TSR community is at the heart of my whole operation. Not only is my teaching work funded by membership fees, it’s based on connections between humans. Members don’t just study my course materials in isolation, they help each other grow. I can’t build this community on a product that can take a nosedive at any time. Joan Westenberg wrote about this kind of dependency in “The creator economy trap”. I’ve seen communities switch platforms for all kinds of reasons, and every time, they lost members in the process. For a fledgling community like mine, this could be an extinction-level event. Owning your community platform not only impacts cost and control, it also is the prerequisite for continuity.

For that reason, I set up a forum using the popular open-source software Discourse (the similarity in names is so confusing) in January 2024. Other than Discord, the forum gave me confidence that the useful conversations in my community would be preserved and easy to retrieve at any time. Within a short time, the forum became the centre of our community’s activities. With this part in the bag, real-time chat needed a reliable solution, too.

Why IRC, Though?

While Discord dominates the market of chat solutions, there are alternatives. When you look for open-source solutions, you’ll find Matrix, Mattermost, Zulip, and Discord clones like Stoat. And even among proprietary group chat services, there are well-liked options such as Signal. Why on earth did I choose the oldest chat platform of them all?

One reason is certainly that I’m even older than IRC, and I used it daily in the early years of me having access to the internet. The experience of being able to chat with people in distant countries was magical, and it informed my understanding of the internet as a “global village”.

While I did receive a gentle mocking as “the old sysadmin” when I mentioned IRC as a chat alternative, there was little pushback. People rather seemed intrigued that IRC might still have its place in internet-based communication.

As a first experiment, I created a channel on Libera.Chat. Additionally, I set up a bridge between it and our main Discord channel, et voila: people were able to chat from their IRC client applications. This only took me an hour, and most of that went into the initial bridge configuration.

Another reason for my choice was that setting up an IRC server is easy. With a modern implementation like Ergo, you can get started within an hour. You don’t have to deploy a web application backed by multiple database services, there’s no need for a complex Docker stack.

Then, IRC clients are available for every popular desktop, tablet and phone OS. In addition to the GUI apps, there are (of course!) well-maintained terminal-based ones as well. I’m using weechat, for example.

Finally, IRC is still actively developed. The latest protocol revision IRCv3 brings quality-of-life improvements such as being able to retrieve chat history when connecting. With earlier IRC versions, you’ll either miss what happened in chat while you were offline, or you’ll have to set up a client application (also known as a “bouncer”) that keeps a continuous server connection. Ergo has chat history enabled by default, and modern clients such as Halloy take advantage of it.

And as a bonus, I just found out that the IRCv3 project has a Code of Conduct, which is a good sign that they’re a reliable part of the online community.

All this, together with lively IRC communities like Libera.Chat, proves that IRC is still going strong after four decades. What’s not to like?

The technical details

Getting the IRC server started on one of my virtual private servers didn’t take longer than it took setting up our Discord server back in the day. Launching a Discord server takes a few mouse clicks. Installing Ergo from the Fedora package repository took a few keystrokes.

I admit that I took a detour setting up TLS that cost me another hour. First, I tried to put the IRC server behind the Nginx Proxy Manager that I already had running for serving websites, but I couldn’t get the Gamja web interface to connect successfully. From what I found online, IRC requires a few esoteric proxy settings that are easier to configure when you can modify the nginx configuration directly, instead of having to use the limited options of the NginxPM web interface. In the end, I configured Ergo to open a TLS port itself, and installed Certbot to handle the certificate renewal with Let’s Encrypt.

Installing Gamja was a quick job, and here I was able to successfully employ NginxPM. Thanks to Gamja, community members who don’t want to install a local IRC client have the option to access chat from their web browser.

Matterbridge is a nifty self-hosted service that can cross-post messages from one chat service to another. That way, there’s no split between the people adopting IRC and the ones still stuck on Discord. Discord and IRC are only two items in the long list of services that Matterbridge supports. Since I had already been using it to bridge our channel on Libera.Chat, I just had to modify the connection details to switch to our own IRC server. Then, I added bridges for two more channels, just to have the most important ones covered.

I used the Discord API and a few bots to build admin workflows, posting of news and social media messages, and a few other fun features. IRC has been using bots for the same purposes for much longer. With Limnoria, I was able to replace all the features I wanted to have from the start. The list of available Limnoria plugins is long and provides a lot of useful (or simply fun) features. Here are some of the plugins I set up myself:

  • SedRegex allows you to correct a previous message using a quick s/what you typed/what you meant to type/. (Did you know that Skype had this built in?)
  • With Later, you can leave offline members a message that they’ll see when they post their first message after returning.
  • The Karma plugin keeps tally of up- and downvotes for a member or another thing. A neat way to show appreciation or annoyance.
  • The 3rd-party Grapnel hooks plugin installs a web API that I can use to post messages from the outside, mainly from automations I build on Make.com.

In total, I spent less than a workday on getting our new community chat platform to a sufficiently usable state. That’s perfectly okay, don’t you think?

Conclusion

With little effort, I was able to set up an online chat platform for my DevOps community that gives members a choice of either the convenience of Discord, the flexibility of their own IRC client, or the ease of an IRC web interface. In case I have to ditch Discord after all, there’ll be a well-established alternative chat service in place already. It’s nice to be able to focus on our conversations without worries.

And you’re welcome to join them, either on IRC or on Discord!

0 Comments

Leave a Reply

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)