I’ve been on IRC almost daily for close to 7 years now. Initially I was using whatever desktop or even browser-based client I could find, but at some point I wanted to be logged in 24/7 so that people could message me at any time and I could catch up with all those extremely important discussion that happened while I wasn’t online :)

Enter ZNC

My initial attempt at this involved using a so-called bouncer, ZNC specifically. It works reasonably well if you are connecting to it from only one machine - it just dumps the lines since your last login (limited by the buffer size you’ve configured) and that’s it. If you find yourself alternating between clients, e.g. a laptop and a smartphone, this leaves you with a fragmented chat history and potentially missed messages.

Of course, now that I am looking into the matter again, I’ve found a ZNC module that addresses this exact issue. It (or maybe the original since this is a fork) seems to have been around when I was having this issue and I can only make vague guesses as to why I hadn’t found it back then. In any case, it is probably worth a try if you’re experiencing similar issues with ZNC.

Switching to WeeChat

My solution to the problem back then (and the one that I still use) was to run a WeeChat instance inside a tmux session on my server. I can SSH into the server and attach to the session from all my devices, maintaining a full chat history and a consistent interface.

Now, that last part about the interface… that turned out to be more of a nuissance when it comes to mobile devices. While useable, it certainly felt rather clunky to scroll and navigate around different channels using the virtual keyboard on my CyanogenMod/LineageOS phones. I discovered that WeeChat has a Relay plugin which allows multiple clients to connect and control it over the network.

On the Android side I installed Weechat-Android. Conveniently, it has SSH tunneling support built-in, meaning I can avoid exposing weechat publicly. It seems that they’ve also added IRC proxy support so now you can connect to it using any IRC client - just like a bouncer!

Future plans

I do have a couple of ideas for improving the setup. First, I run weechat in an Ubuntu LXD container on my server, which is really not necessary for something so simple. I plan on replacing it, as well as my other containers, with Alpine.

Second, I would like to make better use of Weechat-Android’s file sharing functionality. I did make a simple file uploader in Go at some point, but for some reason I never set it up to run as a background service, and never liked the code, either. I will probably make an even simpler version as an excercise for learning Rust.