Setting up chats on IRC (tut/en)

🏠 Home

Do you remember IRC (Internet Relay Chat)? No? Never heard of it? It's one of the original ways of chatting on the internet. If you are following what is happening with Discord nowadays (age verification requirements), you may be considering alternatives. There's quite a few options: Stoat, Fluxer, Matrix and others. None of them have all of Discord's features, or are in a fully polished state.

I have tried Matrix before. Unlike Discord, or really any major chatting apps like Messenger or Whatsapp, it is a protocol -- a more decentralized way of organization. This means people can develop customized apps to access it (called "clients"), and register not only on the default, largest matrix.org "server" (a place where all data is stored), but also use alternative ones, such as gnulinux.club or unredacted.org. These servers interoperate, and if one goes down, other servers are still running and the network is not completely shut down.

But it has its issues -- it feels a bit buggy and sluggish. That's what lead me to try out Stoat. It is the most obvious Discord clone, though, unlike Discord you can selfhost a server. I keep it as a backup option, as it is very user friendly, and getting people on any service can be substantially more challenging the more hiccups there are.

So, why I'm trying out IRC now? It does not have voice or video calls, no message history when you are offline (can be solved!), no default way to send media, and is significantly more "nerdy". What appeals to me is its unrivaled resource efficiency, simplicity and openness of the protocol and, of course, decentralization. Though it is no way as comfortable to use at the beginning as other chat apps, I will walk you through what I have learned so far in the past 3 days. And maybe, just maybe (after the overwhelmedness cools down), you will see the appeal too.

Where do I start?

First I'll link a great resource, if you want to explore a bit on your own:

https://libera.chat/guides/basics

That site (Libera.chat) is home to the currently largest "network" (consisting of a bunch of "servers" -- I'm using these terms interchangeably here). Now I'll tell you how I set up IRC on my phone and computer. Feel free to explore beyond that!

1. Do you want message history?

I sure do want to read messages that were sent when I was offline. For that, services known as "bouncers" are used, and messages are stored on such service's servers. One great free option is:

https://irctoday.com/

Keep in mind though that it is only free when connecting to channels on the "irc.libera.chat" server!

I have made an account on IRCToday. For chatting, you can use their Webchat interface, where you can manage channels. You can add or remove servers you want to be on through the Dashboard.

(You can also do without a bouncer, and also without registration! But that you have to do directly through the server, for instance using Libera.chat's Webchat, or inputting its address instead of the bouncer's into the client of your choice. I'm not going through that option here.)

2. Servers and channels

There are multiple "servers" (and you can join multiple of them), but I went with "irc.libera.chat" for now. On each "server" there are multiple "channels": imagine them as group chats with a name (beginning with a hashtag, such as #food) and a topic. Each server has its own list of channels, so there can be multiple #food channels, each existing on a different server!

3. Joining a channel

When you open Webchat, you may not be joined in any channel. To join one, go to the top right and click "Join Channel". Alternatively use the text input field at the bottom and type /join <#channel-name>. For instance /join #libera or /join #halloy. To show the available channels, type in /list. This may take a while, there are tons of channels on the irc.libera.chat server!

4. Start chatting

You can now choose a channel in the left pane and start typing! There is some etiquette you may want to learn, and some frequently used commands:

To join a channel: /join <#channel>
To leave a channel: /leave <#channel>
To view a channel's topic: /topic
To go offline: /quit <optional reason>
To write a special message (i. e. "/me is tired"). The "me" part will be replaced by your name: /me <message>
To write a direct message: /msg <nickname> <message>

That's for the essentials.

What about the apps (sorry, "clients")

I prefer them over the Webchats.

1. The computer

On my computer, I use Halloy; on Windows I downloaded the .msi installer, on Mac that would be the .dmg version. (On Linux, I would rather get it from Flathub):

https://github.com/squidowl/halloy/releases

It looks beautiful in my opinion, but pretty geeky. There are of course more clients available, so try a less overwhelming-looking one if you want to. One aspect that I would like to be improved is adding a visual Settings menu. For now, you set everything up through a text Config file. No worries, it's not that difficult! Open it through the bottom-left hamborgir menu. /silly

This is how I set it up in the beginning.

# Halloy config.
#
# For a complete list of available options,
# please visit https://halloy.chat/configuration.html

[servers.irctoday]
nickname = "danchi"
server = "irctoday.com"

[servers.irctoday.sasl.plain]
username = "danchi"
password = "************"

The first lines beginning with # are comments and will be ignored. They are there just for your information. Have a look at the manual if you want to set up more things, and just write the commands you need into this document.

The second section sets up my nickname and server (I use a bouncer, so I have written in the address of the bouncer).

The third section is for authentication. Put in your username and password, the same used for your bouncer account.

I have then added some more lines after sifting through the docs:

[buffer.server_messages.condense]
messages = ["join", "part", "quit"]
dimmed = true

[actions.buffer]
click_channel_name = "replace-pane"
click_highlight = "replace-pane"
click_username = "replace-pane"
local = "replace-pane"
message_channel = "replace-pane"
message_user = "replace-pane"

[actions.sidebar]
buffer = "replace-pane"

[notifications.channel."#libera"]
sound = "zone"

The first one condenses the /join, /part and /quit messages into a collapsed dropdown, so they pollute the chat less on busy channels.

The second one makes the channel views always replace the current view. This means that instead of splitting your screen into sections as you open conversations, those will instead all be full-screen.

The third one does the same as the second, but for windows? views? opened from the left sidebar, instead of the main messaging view (called "buffer").

The last section sets off a notification tone when someone writes a message in the #libera channel. The sound is set to "zone", but there are multiple to choose from the docs -- or you can add your custom sounds.

2. The phone

It's a lot easier on the phone (but also less configurable), as I have chosen the Goguma client. I downloaded it from F-droid.org, but you can use the Play Store, or AppStore on an iPhone. The documentation from IRCToday is quite easy to follow:

https://blog.irctoday.com/help/goguma/

Closing words

Yeah, you are set up now! There are of course more things I have yet to explore: new specifications under the IRCv3 umbrella are being continuously added for more comfortable use; you can use file sharing handled by the XDCC protocol (for now mostly utilized by pirates, yarr harr) or by clients themselves, you can host your own server and bouncer... It can be a fun rabbit hole, filled with excitement about the early, more optimistic and open days of the internet. IRC is a living piece of history.

2026-02-18