Want a private comms channel without relying on Discord or Slack?
IRC is alive, and you can run your own today.
A small, well-configured IRC server gives you privacy, control, and minimal attack surface – all in a few commands.
Some people think that IRC is dead.
Some of them don’t even know what is it.
They’re young, grew up on modern comms.
IRC is the protocol that laid the foundation of modern chats.
Networks used large footprint ircd daemons for the base.
They registered services daemons for channel and nick retention.
TLS settings were rare and uncomfortable.
SASL authentication was hardly set.
Then new developments appeared.
The old technology got a modern revision.
Ergo Chat
Ergo Chat is a modern IRC server.
Written in Go its footprint is extremely small.
The architecture includes:
- the IRC daemon
- an integrated services (Nickserv, Chanserv)
- TLS configuration
- SASL authentication
One binary contains an entire IRC service.
It’s ideal for small teams on moderate hardware.
The Goal
The goal is to:
- Build a stable IRC service
- Use services (Nickserv, Chanserv)
- Run as TLS-only
- Host a single domain (e.g. irc.tomsitcafe.com)
- Minimal attack surface
Preparation
You want to run Ergo as a service.
Not as root.
As an ordinary user account.
The user is irc in this example.
sudo useradd --system --home /var/lib/ergo --shell /sbin/nologin irc
The directory structure is simple.
They will hold your data.
Configuration: /etc/ergo
Data store: /var/lib/ergo
Binary: /usr/local/bin
sudo install -o irc -g irc -d /etc/ergo /var/lib/ergo
Install The Ergo Binary
Download the latest version from GitHub.
Always check what is the latest version number.
wget https://github.com/ergochat/ergo/releases/download/v2.18.0/ergo-2.18.0-linux-x86_64.tar.gz -O ergo.tar.gz
Extract the archive.
tar xzf ergo.tar.gz
Move it to a system $PATH.
sudo mv ergo-2.18.0-linux-x86_64/ergo /usr/local/bin/ergo
Give it execute rights.
sudo chmod +x /usr/local/bin/ergo
Operational security, set the owner to root:
sudo chown root:root /usr/local/bin/ergo
Install The Language Packs
Most operators forget it.
Ergo needs its languages.
sudo cp -r ergo-2.18.0-linux-x86_64/languages/ /var/lib/ergo/sudo chown -R irc:irc /var/lib/ergo/languages/
Firewalling
Based on your configuration the necessary ports can change.
For IRC over TLS: 6697/tcp is mandatory.
Let’s Encrypt validates your domain via 80/tcp.
Configure the firewall for your architecture.
Let’s Encrypt With Certbot
Valid TLS certificates are mandatory.
sudo certbot certonly --standalone \ -d irc.tomsitcafe.com \ --non-interactive \ --agree-tos \ -m admin@domain.tld
Deploy the certs into the ergo config directory:
sudo mkdir -p /etc/ergo/certssudo cp /etc/letsencrypt/live/irc.tomsitcafe.com/fullchain.pem /etc/ergo/certs/sudo cp /etc/letsencrypt/live/irc.tomsitcafe.com/privkey.pem /etc/ergo/certs/sudo chown -R irc:irc /etc/ergo/certssudo chmod 600 /etc/ergo/certs/privkey.pem
Deploy hook to move certs to etc/ergo/certs:
sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy# thensudo nano /etc/letsencrypt/renewal-hooks/deploy/ergo.sh
The hook script:
#!/bin/bash
set -e
cp /etc/letsencrypt/live/irc.tomsitcafe.com/fullchain.pem /etc/ergo/certs/
cp /etc/letsencrypt/live/irc.tomsitcafe.com/privkey.pem /etc/ergo/certs/
chown -R irc:irc /etc/ergo/certs
chmod 600 /etc/ergo/certs/privkey.pem
systemctl restart ergo
Make it executable:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/ergo.sh
Test the flow:
sudo certbot renew --dry-run
Configuration
Configure Ergo for your needs.
Config file: /etc/ergo/ircd.yaml
MOTD file: /etc/ergo/ircd.motd
Certs: /etc/ergo/certs/{fullchain.pem,privkey.pem}
Lock file: /var/lib/ergo/ircd.lock
DB file: /var/lib/ergo/ircd.db
Configure the network and server:
- network.name
- server.name
- opers.admin.password
In the extracted package the default.yaml is the configuration reference.
Set up the paths properly.
Systemd Service
You want to run your IRC daemon as a service.
Create a systemd unit file.
nano /etc/systemd/system/ergo.service
Add this:
[Unit]
Description=Ergo IRC Server
After=network.target
[Service]
Type=simple
User=irc
Group=irc
ExecStart=/usr/local/bin/ergo run --conf /etc/ergo/ircd.yaml
Restart=on-failure
RestartSec=5
# Basic Hardening
NoNewPrivileges=yes # prevents Ergo from gaining extra privileges
PrivateTmp=yes # gives Ergo its own /tmp directory
ProtectSystem=strict # limits file system access
ProtectHome=yes # prevents access to user home directories
ReadWritePaths=/var/lib/ergo # only this path is writable
[Install]
WantedBy=multi-user.target
It is a basic, hardened service unit file.
Add it to systemd and start Ergo:
sudo systemctl daemon-reloadsudo systemctl enable ergosudo systemctl start ergo
Your IRC server is fully functional.
Backup & Restore
This configuration is simple.
The files you want to backup:
- Config file:
/etc/ergo/ircd.yaml - MOTD file:
/etc/ergo/ircd.motd - DB:
/var/lib/ergo/ircd.db
IRC Clients
On Linux on desktop or server weechat is secure and easy to use.
Android has HexDroid that supports Ergo pretty well.
Final Thoughts
With this setup you have a small, almost zero footprint comms server.
It’s secure by default.
- TLS
- SASL
- Services
IRC is alive in 2026. It just chooses its community carefully.