ZNC
Advanced and flexible IRC bouncer
ZNC is a long-established IRC bouncer that detaches the IRC client from the server, keeping connections alive and logging conversations. It is highly extensible through modules.
Key features
- Stays connected to IRC
- Extensive module system
- Multi-user support
- Web admin interface
Pros & cons
Strengths
- Very stable and mature
- Highly configurable
Trade-offs
- Dated configuration model
- IRC-only
ZNC replaces
Last reviewed Sep 13, 2026 · 822 words
ZNC or The Lounge is the real decision, and it turns on one question: do you want to keep using your own IRC client. If the answer is yes (WeeChat in tmux, Textual on a Mac, Goguma on a phone), ZNC is the bouncer that stays connected on your behalf, keeps your nick, logs every channel, and replays the backlog to each client as it attaches. If you would be happy reading IRC in a browser tab, The Lounge is a web client with a bouncer built in and you do not need ZNC at all. Both idle at well under 100 MB. ZNC has been doing this since 2004, has 2,124 stars, and remains the most configurable option, which is both its selling point and the reason its configuration feels its age.
Docker with a generated config, then never touch the file
The official image is znc/znc, and the sanctioned first run generates the config interactively into a volume:
mkdir znc-data
docker run -it --rm -v $(pwd)/znc-data:/znc-data znc/znc --makeconf
Answer the prompts: listening port (6697 is the convention for TLS), your admin username and password, and the first network with its server, port and + prefix for TLS. That writes znc-data/configs/znc.conf. From then on, run it detached with the same volume and port, and change settings through the web admin at https://your-host:6697/ or through /msg *controlpanel in any connected client, because ZNC rewrites znc.conf itself and hand edits while it is running are lost. A Let's Encrypt certificate goes in znc-data/znc.pem as key plus chain concatenated in one file; without it, clients see a self-signed warning on every connect.
Connecting a client is one password with a slash in it
Every client authenticates to ZNC with username/network:password in the server password field, which selects both the ZNC user and which network that connection should attach to. WeeChat:
/server add znc-libera your-host/6697 -ssl -password=alice/libera:hunter2
Attach a second client with the same credentials and both see the same channels; detach one and it receives the missed messages next time. Multiple IRC networks under one ZNC user mean one bouncer connection per network per client, each with its own user/network pair.
Four modules do most of the work
ZNC ships with dozens of modules and loads them per user or per network with /msg *status loadmod name. The ones that earn their keep: sasl for authenticating to Libera and OFTC without NickServ juggling; log to write plain-text channel logs into the data volume, which is the archive that makes a bouncer worth running; nickserv for networks without SASL; and the third-party playback module (with a client that supports it) so replay gives you exactly the lines since your last read instead of the fixed buffer count the default buffer behaviour uses. push sends highlights to a phone via a dozen notification services, though Goguma with the built-in chathistory support has largely replaced that use for me. The multi-user mode lets one ZNC host a family or a small team, each with their own networks and modules, and 64 MB covers a handful of users comfortably.
The parts that show the age
The web admin is functional and looks like 2008. IRCv3 support lags: ZNC handles server-time and chathistory partially, and newer capabilities arrive slowly because the codebase is C++ with a small maintainer team. Configuration is the flat znc.conf format with no environment variable overrides, so automating it in a compose stack means pre-generating the file rather than passing variables. And it is IRC only; if your community moved to Matrix, the Matrix and XMPP category is where to look, not here. soju is the modern bouncer written for the IRCv3 era and worth a look if you run Goguma or Senpai as clients; it lacks ZNC's module library and web admin but does the core job with a cleaner model.
What I'd do
If you live in a terminal client, run ZNC in Docker on the same host as your reverse proxy, TLS on 6697, sasl and log loaded on every network, and a nightly tarball of the data volume so the logs survive. If you mostly want IRC on a phone and in a browser, run The Lounge instead and skip the bouncer layer; it does what ZNC plus a web client does with one config file. Pair either with WeeChat if you want the best terminal experience, and consider InspIRCd only if you are hosting the network itself rather than sitting on someone else's. Against IRCCloud, ZNC gives up the polished apps and gets you the logs on your own disk, which is the trade a self-hoster came here to make.
Compare ZNC
1 head-to-head comparisons.
Similar matrix & xmpp apps
Tinode
Matrix & XMPPOpen-source instant messaging server
Replaces WhatsApp, Slack
Element Web
Matrix & XMPPGlossy Matrix client for the web and desktop
Replaces Slack, Discord
ejabberd
Matrix & XMPPRobust, scalable XMPP messaging server
Replaces Slack, WhatsApp
Dendrite
Matrix & XMPPSecond-generation Matrix homeserver written in Go
Replaces Slack, Discord
Synapse
Matrix & XMPPReference homeserver for the Matrix network
Replaces Slack, Discord
Cinny
Matrix & XMPPSimple, elegant and secure Matrix client
Replaces Slack, Discord