ircbits.com

Docs / What is an IRC bouncer? ZNC, soju and the alternatives

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.