This is a document written by tei, intended as a starting point for fans who run communities on Discord considering moving or backing up those spaces on IRC. It is based on the ongoing testing of my own server’s migration, and as such is a WIP. If you would like to discuss, feel free to email me, find me on the fediverse, or join the #fandom channel on the slashnet IRC server.

Why leave Discord?

The history of fandom is full of incidents where fans are forcibly removed from platforms owned by corporations who either actively consider fan content a liability, or are willing to let it get caught in the crossfire with a war on other content: Strikethrough on Livejournal, the tumblr NSFW ban, Elon Musk’s purchase of twitter, etc. While the creation of Archive of our Own has substantially solved the issue when it comes to fanfiction, there is still no obvious location when it comes to casual conversation, socialization, and meeting new people in fandom. Discord is one currently popular option, a corporate platform that has all the hallmarks of yet another exodus waiting to happen, and partially in progress:

Where to go?

Obviously, this is a decision that might look very different for different people and groups depending on their preferences and use cases, and I am not making any claims that this solution is right for you. I can only offer my experience, which was setting up test instances of several alternative options for my discord group, including:

IRC seemed, at first, to be a bit of a dark horse. On the plus side, IRC is a fully decentralized protocol that is literally older than the World Wide Web. It’s owned by nobody and will survive as long as there are working computers. But my memories of IRC are from over a decade ago, when it meanst no message history, no images, and being constantly disconnected whenever you left your computer.

However, those are to a large extent solved issues with modern IRC servers and clients. All three of those issues– message history, easy image upload, and staying connected across multiple devices in the way discord users expect– are fully solved in the fully self-hosted solution described here. I’ll also describe how to test out IRC by making your own space on an already existing server and using downloadable clients.

First, some terminology:

Protocol: IRC is a protocol, that is to say, a set of rules about how something should work. If you haven’t heard this term before, think of it by analogy to email. The protocols underlying email make it possible for different computers using different pieces of software to send messages to each other. There are lots of different services offering email, and lots of different ways to access your email messages, but they all work together; you’re free to send a message to a gmail account from your outlook account.

Server: The IRC server, also called IRC daemon or IRCd, is the software that keeps track of the messages. It’s almost always going to be housed on a virtual machine hosted in some data centre that sells hosting services (you can host such things from a server housed in your actual house, but that’s far beyond what I’m willing to do or would recommend anyone who needs this guide do.)

Client: This is the software that gets the messages from the server and delivers them to your eyeballs. Lots of different clients can connect to the same server, and everyone chatting will be seeing the same messages even if they’re using different client software from each other. There are lots of IRC clients that are desktop software downloaded to your actual computer, so they live in your house instead of in a data centre. However, the client I’m going to describe setting up is a webapp, so you’ll install it on a remotely hosted machine and then install the webpage on your computer or phone as an app. From the end user perspective, there shouldn’t be much obvious difference between these things, but I wanted to mention it so you get why you can’t take thelounge (the webapp client we’re going to be using) and install it on your computer in the same way that you would, say, HexChat, a popular cross-platform IRC client.

IRCv3: In order for any IRC client to be able to connect to any IRC server, everyone needs to agree on how the thing works. The specifications are the set of rules for the protocol, and IRCv3 is the latest, in-progress update of those rules. You don’t really need to know anything about it, but Discord users wanting to reproduce the Discord experience as much as possible will likely be interested to know what features currently exist as drafts: multiline messages (who fix IRC’s annoying habbit of splitting up long messages into several messages), metadata which will allow profile pictures and emoji reactions, message deletion, chat history, and direct replies to messages. In order for these features to exist to the user, both the server and the client has to be implementing them: the IRCv3 site has lists of which pieces of software implement each new feature on the page for that feature. The server I use, ergo, has bleeding-edge IRCV3 support; however the client has only implemented some, but not all, of these features. (“So why not just use a different client!” you ask. Great question with lots of complicated answers! If I have an update involving a client that I’ve fully tested that implements all these features succesfully and is easy to self-host, I will let you know!)

Lets get on IRC!

These are self-hosting instructions. That means that the point at which they start is where you have a Virtual Private Server, and are ready to start installing stuff on it. That’s already a pretty advanced stage of computer touching for a lot of people, and the reason I’m not providing a comprehensive set of instructions on how to get to it isn’t because I’m assuming it’s an obvious process everyone knows but because I’m not the best person to create that kind of guide, and there are better ones than I could hope to make out there. I recommend– if you can get past the goofy name and framing– https://landchad.net. Start by following the main five steps on the front page, which will get you set up with a domain name and server.

The Full Shebang: Host your own server, host a client for users

If your goal is to provide as seamless as possible an experience to Discord users, this is the way to go. By maintaining control over the configuration of both the IRC server and the client that people are using to connect to it, I can have the following features:

Here are some screenshots of the chat app:

Mobile:

Desktop:

To do this, you need to host the server (also known as IRC daemon or IRCd), and also a client. The combination that I’m using is ergo (server) and thelounge (client). Thelounge has an excellent progressive web app, which allows installation of an app that works just like any other, but bypassing the restrictions inherent in an app store-verified app. We’ll install the server first then the client.

The server: ergo

The reason I chose ergo is because of its excellent IRCv3 support but also because it has a very complete instruction set on that very same site I recommended above for basic self-hosting instructions: https://landchad.net/irc/

That walks you through installing and basic configuration of the server. For the most part, you can use the defauly configuration values and the changes suggested by landchad. There are some items in the configuration (i.e., when you’re editing the ircd.yaml file) that I would make the following suggestions about:

Ergo has a whole section on message history– but you can actually ignore it, because in our case message history is going to be handled by thelounge. You can keep it as-is in case you want to allow people to connect via other clients, but don’t bother setting up a database or anything.

At this point you have an IRC server which can be accessed by a client, but its only address on the web is the raw IP address of your VPS. You can still connect to it and check out that it all works, but the next step is going to be to set up a reverse proxy with nginx so that your users can connect to irc.yourdomain.com/6697 in their clients, which is friendlier than a bunch of numbers.

This instruction set is a WIP. Items remaining:

The client: thelounge

Thelounge has fairly complete installation documentation here

To come:

There are instructions and screenshots of installing the app and setting up notifications on mobile and desktop over on the info page for my community’s server setup, so head there for more information on app installation. There is also a section on formatting text in the mobile version, which is fuller-featured than discord (colours!!) but takes a bit of setup on mobile.

Least Effort: Make a channel on a public server, let users choose their own clients

Coming soon…

In between options: host just a server, or just a client

Yeah you can also do this…