Chat: from irssi + messenger gateway to weechat, the thin-client philosophy
The 2009 irssi article ended with an edit: “An up-to-date configuration is available here on github” (it was an article stub, the real value lived in the repo, time proved it). Time to tell what the article did not tell: the setup that made irssi indispensable and why two years later I moved everything to weechat without changing the philosophy.
irssi + BitlBee: the bridge to the messengers
The era’s setup: a local BitlBee server that presents instant-messaging networks (MSN, AIM, ICQ, Jabber) as an ordinary IRC channel and irssi connecting to it like any server. Result: one client, one buffer, one log config, for IRC and for the MSN contacts who only know IRC by name.
The artifacts surviving from that era: a multi-network irssi config (367 lines, git 2013, recycled-irc/otaku-irc/worldnet SSL:7000/fansub-irc/OFTC SSL:9999, a green.theme) and five personal Perl scripts signed d5-ro (contact 0din@vhalholl.info): autojoin.pl (rejoin after kick, raw IRC protocol via send_raw("JOIN ...")), slap.pl (136 lines, the classic /me slaps <nick> with a random object, with the Windows ME user guide and Lorie’s CD in the list), dd.pl (the D&D variant with random damage points), loop.pl and screenlaunch.pl (launch a command in Screen from IRC: the multiplexer and the client holding hands).
It was the right architecture and it has remained one: the client is thin, the gateway carries the protocol complexity. What the era article did not say: the config lived in the dotfiles, the detaching happened in Screen (with byobu on the fashionable machines) and the fateful question was starting to form: what if the client could be driven without a terminal?
weechat: the migration and why it held
weechat (0.3.x back then) took over for three practical reasons and one architectural one:
- The scripting API (python/perl/lua): era plugins were a few dozen lines each and the
~/.weechat/config gets versioned like the rest of the dotfiles; - The relay: weechat’s relay protocol exposes the buffer to external clients (web, mobile); it is BitlBee reversed: instead of pulling messengers toward IRC, it pushes IRC toward other clients;
- The single buffer: same reasoning as irssi, everything in one buffer, networks told apart by color and hotlist;
- And the architectural one: weechat is a client with a clean network-layer API, exactly the place to plug in one more gateway.
The irssi -> weechat migration took one afternoon (import the logs, copy the aliases, replay the colors) and changed nothing about the setup: BitlBee stayed, weechat connects to it the way irssi did. That is the lesson: you change clients the way you change editors, you keep the gateway the way you keep your home.
[edit: 2026] The world caught up with the gateway
MSN died in 2014, AIM in 2017 and the proprietary messengers closed their protocols one by one. BitlBee stayed standing by migrating to Jabber and the modern era’s gateway is called Matrix: the bridge protocol that speaks to everyone and hosts the history. Today’s weechat connects to it through the weechat-matrix script and the 2009 irssi+BitlBee setup looks like the first iteration of an idea that never moved: a thin client, a gateway that carries the protocols, an archive of logs. We changed the gateway’s protocol three times in seventeen years and the client twice.