What is an IRC bouncer? ZNC, soju and the alternatives
Updated June 4, 2026
Plain IRC has no memory. Close your laptop and you vanish from every channel; reconnect and the conversation that happened without you is simply gone. A bouncer (BNC) is the classic fix: a small always-on server that connects to IRC for you. Your clients — laptop, phone, work machine — connect to the bouncer instead of the network, and the bouncer keeps you online, buffers what you missed, and replays it when you return.
What a bouncer gives you
- Permanent presence. Your nick stays online and in your channels 24/7.
- Scrollback. Messages received while no client was attached are replayed on reconnect.
- One connection, many devices. Phone and desktop share the same identity instead of fighting over your nick.
- A stable host. The network sees your server's address, not your home connection or coffee-shop Wi-Fi.
The cost: you need somewhere to run it — any small VPS, a Raspberry Pi at home, or a shell account — plus an evening of setup.
ZNC: the established choice
ZNC has been the standard bouncer for nearly two decades. Written in C++, configured through a web admin interface or IRC commands, extensible with modules (C++, Python, Perl). It supports multiple networks per user, multiple users per instance, TLS in both directions, and SASL towards the network.
ZNC's model predates modern protocol work, which shows in one place: replay.
Classic ZNC playback dumps the missed messages into your client with timestamp
prefixes, and clients without extra support cannot tell replayed messages from
live ones. Modules and IRCv3 server-time support improve this considerably,
but it can feel bolted on.
Pick ZNC if you want the battle-tested option with the largest ecosystem and documentation trail.
soju: the modern choice
soju is a newer bouncer built around IRCv3 from the start. Together with a
chat-history-aware client (its sibling projects goguma on mobile and
gamja on the web, or any client implementing the chathistory extension),
history works the way you expect from modern chat: scroll up and older messages
load, on every device, consistently.
soju is also the engine behind several hosted services, and its multi-network, multi-client design is clean. Pick soju if your clients support IRCv3 properly and you want history to feel native rather than replayed.
Alternatives that solve the same problem
- Quassel splits the client itself into an always-on core and GUI frontends — bouncer and client in one architecture.
- The Lounge is a self-hosted web client that stays connected; effectively a bouncer whose only client is your browser.
- IRCCloud is the hosted, zero-maintenance version of the same idea, with a subscription for permanent connections.
- WeeChat + relay, or simply Irssi inside tmux on a server, are the traditional sysadmin answers — no extra software, just a terminal that never closes.
- IRCv3 chathistory on the server itself: some modern networks (running Ergo, for instance) store history server-side, which removes the main reason to run a bouncer at all — but the big established networks do not, so the bouncer remains relevant.
Minimal ZNC setup, for orientation
On a Debian-style VPS:
sudo apt install znc
znc --makeconf # interactive: port, username, networks
Then point your client at your-vps:port, with username
youruser/networkname and your ZNC password, TLS enabled. From there the web
admin handles everything else. soju's setup is similarly small; both projects
have good upstream documentation.
Do you actually need one?
If you check IRC from one computer and do not mind missing messages: no. If you idle in support channels, expect answers hours later (as one does), or read from both phone and desktop — a bouncer, or one of the alternatives above, is the difference between IRC feeling broken and feeling like a modern chat platform.