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

pounceIRC pouncer :3

pounce(1) is a multi-client, TLS-only IRC bouncer. It maintains a persistent connection to an IRC server, acting as a proxy and buffer for a number of clients. When a client connects, any messages received since it last disconnected will be relayed to it. Unlike some other bouncers, pounce uses a single buffer for all IRC messages, which acts as a queue from which each client reads messages independently.

pounce speaks regular modern IRC to both servers and clients, using the server-time extension to indicate when messages originally occurred. Clients identify themselves to pounce by their IRC usernames. 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 OpenBSD, where it is sandboxed with pledge(2) and unveil(2). FreeBSD, Linux and macOS are also supported.

./configure
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 OpenBSD the recommended way to run pounce is with the process supervisor kitd.

Additional functionality can be provided by special-purpose clients connected to pounce.

litterbox
provides logging and search.
pounce-notify(1)
provides notifications by running an external command. Configure with --enable-notify to build.
pounce-palaver(1)
provides push notifications for the Palaver IRC app. Configure with --enable-palaver to build. Requires and .

bounce.h
declarations and common functions
bounce.c
configuration and event loop
local.c
local server binding
server.c
remote server connection
client.c
remote client connections
state.c
state shared between clients
ring.c
buffer between server and clients
config.c
getopt_long(3)-integrated configuration parsing
xdg.c
XDG base directories
dispatch.c
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 McEnroe, IRC Suite, https://text.causal.agency/010-irc-suite.txt, June 19, 2020.

October 21, 2023 Causal Agency
0'>2020-12-29Reconfigure C macro start conditionsJune McEnroe 2020-12-29Document HTML class namesJune McEnroe 2020-12-29Rename Tag class to IdentifierTagJune McEnroe 2020-12-29Change HTML class from hi to hilexJune McEnroe You can tell I was just copying the HTML code huh. 2020-12-29Add hilex HTML outputJune McEnroe