about summary refs log tree commit diff
README(7) FreeBSD Miscellaneous Information Manual README(7)

IRC pouncer :3

pounce(1) is a multi-client, TLS-only IRC bouncer. It takes a simple approach, using a multiple-consumer ring buffer and the IRCv3 server-time extension to communicate with clients.

See QUIRKS(7) for notes on connecting pounce with particular networks and clients.

As a former znc(1) user, I was dissatisfied with the multi-client experience it offered. I wanted to connect from both my laptop and my phone and have full chat history on both. With znc(1), my options were either having both clients spammed with redundant history every time they connect, or having one client consume the buffer and the other get no history at all.

With a multiple-consumer ring buffer, each client has its own place in the history and can be brought up to date independently. Additionally, by expecting clients to implement the server-time extension, all events can be accurately replayed, rather than being limited to messages.

pounce requires libtls, provided by either LibreTLS (for OpenSSL) or by LibreSSL. pounce and libtls may be packaged for your system. Check the Repology pages for pounce and libretls.

pounce primarily targets FreeBSD, where it is sandboxed with capsicum(4), and OpenBSD, where it is sandboxed with pledge(2) and unveil(2). Linux and macOS are also supported.

make all
sudo make install

If installing libtls manually to /usr/local, for example, make sure /usr/local/lib appears in /etc/ld.so.conf or /etc/ld.so.conf.d/* and be sure to run ldconfig(8) once the library is installed. Set PKG_CONFIG_PATH for ./configure to find it.

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure

On FreeBSD and OpenBSD the recommended way to run pounce is with the process supervisor catsit.

Additional functionality can be provided by special-purpose clients connected to pounce.
  • Logging can be provided by litterbox.
  • Push notifications for the Palaver IRC app can be provided by pounce-palaver, located in the extra/palaver directory. It additionally requires libcurl and libsqlite3.
  • Generic notifications can be provided by pounce-notify, located in the extra/notify directory.

declarations and common functions
configuration and event loop
local server binding
remote server connection
remote client connections
state shared between clients
buffer between server and clients
sandboxed certificate reloading
getopt_long(3)-integrated configuration parsing
XDG base directories
SNI socket dispatch

The upstream URL of this project is ⟨https://git.causal.agency/pounce⟩. Contributions in any form can be sent to <list+pounce@causal.agency>. For sending patches by email, see ⟨https://git-send-email.io⟩. Mailing list archives are available at ⟨https://causal.agency/list/pounce.html⟩.

Monetary contributions can be donated via Liberapay.

calico(1), pounce(1)

Central logging with full-text search: litterbox

June Bug, IRC Suite, https://text.causal.agency/010-irc-suite.txt, June 19, 2020.

May 27, 2021 Causal Agency