Ilmari Lauhakangas

IRC technology news from the second half of 2021

Categories: IRC

As we continue to irc our way through the apocalypse, let’s look at the happenings in the ecosystem during the second half of 2021.

Baby’s first Limnoria plugin and other notable world events

I have been using a custom bot to welcome newcomers to the various LibreOffice contributor channels. I wanted to make it more maintainable, so I reimplemented it as a Limnoria plugin. Thanks to Val for the support, it was fun to write it!

Sourcehut folks launched an IRC bouncer service for the paying users of their software forge. One point of the endeavour is to drive improvements in the whole IRC ecosystem.

IRC Driven, a site indexing IRC networks was relaunched. The site was originally created in 2006 and it provides statistics for a curated selection of IRC networks.

Protocol specifications

IRCv3 logo

The IRCv3 Working Group published a spec round-up in November 2021, including new drafts for WebSocket, Client batches, Account registration and Extended monitor. You can now follow the WG on Fediverse.

Documentation

IRC Definition Files got clarifications to chanmodes.

Modern IRC Client Protocol received numerous additions and improvements from many contributors after Val from Limnoria was made editor. Val reports that the docs now cover nearly all meaningful parts from the RFCs.

Mobile clients

Colloquy - an advanced IRC, SILC & ICB client for macOS and iOS

Capability negotiation was optimised and some smaller fixes were made.

Communi for Sailfish - The first and foremost IRC client for Sailfish OS

Many code cleanups were made and build instructions were added.

CoreIRC – Android client

Compatibility with Ergo ircd was improved, eight colour schemes were added, sixteen character set options were added to the server configuration screen and message log storage functionality was added.

IRCCloud - Connect to any IRC server out there, and even Slack workspaces

The iOS app got smarter regarding background tasks and progress was made on the experimental support for macOS Catalyst. The Android app got support for Android 12 and improvements to stability.

Palaver - advanced client for iPhone and iPad

A release was made with bug fixes and minor usability improvements.

Web clients

gamja screenshot

gamja screenshot

Many of these include support for persistent history, so there is some overlap with the bouncer category.

Convos - Mojolicious in the backend and Svelte in the frontend

Additions include handling of irc:// links, support for raw messages, /away command, progress bar for uploads, file management in frontend, IRC colours and text formatting and many UI improvements.

gamja – a bare-bones web client

Lots of activity and two beta releases for 1.0.0. Additions include commands /whowas, /list and /away, improved /query, support for MONITOR, chghost, websocket, extended-join, account-notify, WHOX, SASL EXTERNAL, draft/extended-monitor, draft/account-registration with a UI to register and verify accounts, support for irc:// links, auto-joining channels upon reconnect and allowing bouncers to customise their shown name by setting NETWORK in ISUPPORT.

irc-hybrid-client – Single user hybrid client using JavaScript frontend and Node.js/Express backend

Public development started in April 2021. There is support for Redis as session store and an authorization middleware.

KiwiIRC – uses static files and supports theming and plugins (JavaScript)

Version 1.6.0 was released in November. Message input box was made user-friendlier, channel list behaviour on desktop and mobile widths was improved among many other UI improvements.

The Lounge - modern web client utilising Node.js

Version 4.3.0 was released in November. New stuff during the half-year period include accessibility improvements, /umode and /kickban commands, optimised handling of modes based on ISUPPORT and better touch control support

Desktop clients

GrumpyChat screenshot

GrumpyChat screenshot

AdiIRC – freeware client for Windows

Version 4.1 was released with additions such as a new editor for scripts and customisations, support for UTF8ONLY token and many plugin API and scripting improvements.

GrumpyChat - modern, yet oldschool client with distributed core, written in C++

Support was added for logging and identities.

ERC - an Emacs IRC client

Versions 5.4 and 5.4.1 were released with additions such as asynchronous reconnection, improved nick highlighting, TLS improvements, convenience commands /opme, /deopme and /wii (whois with idle time) and an erc-bug command for reporting ERC bugs.

HexChat - client for Windows and UNIX-like operating systems

Version 2.16.0 was released in October with a call for maintainers. Fixes went into mode support, URI parsing and the build system. An addon for handling notices and server notices was added and oper and whois addons were updated with expanded network and ircd support.

IceChat – client for Windows

Version 9.51 was released in July adding a Strict Transport Security policy, a channel list export button and several fixes.

Iridium – a native Linux client built in Vala and GTK for elementary OS

Many releases were made adding support for SASL authentication, system colour theme detection, integration with OS notifications and a redesigned headerbar.

Irken – a small, modular client written in Tcl/Tk

Fixes were made to tag parsing and text colour handling.

Konversation – KDE’s IRC client for Windows, Linux and BSDs

Wayland support was improved and many code cleanups were made.

mIRC – 95 ‘til infinity (Windows-only)

Version 7.67 was released in October with UI improvements and many fixes.

Polari - GNOME’s client

More GTK4 work was merged amid lots of UI improvements and code cleanups.

Srain – modern client built with GTK

Support was added for ISUPPORT parsing, UTF8ONLY, RPL_UMODEIS and an emoji button was added.

Textual – client for macOS

Version 7.2.1 was release with Apple Silicon support.

Thunderbird – email client with chat support

Version 91.0 and multiple point releases were made. Changes include replacing image-based emoticons with Unicode and several fixes to the chat module.

Terminal clients

catgirl - TLS-only client

Improvements were made to TLS, OpenBSD and FreeBSD support and message tag handling.

glirc - Haskell library and console client

Support was added for SASL SCRAM (salted auth), ECDH-X25591-CHALLENGE and certificate IP address SANs.

Neırssi - a client mostly compatible with Irssi

While Irssi development has been slow, Ailin Nemui has a fork that is quite active. Improvements and fixes went into text rendering, TLS, performance of autojoin, the docs, /SERVER ADD and autocompletion among lots of maintenance work.

senpai - TUI client made for bouncers

Lots of work went in the client during this period. Additions include automatically joining channels on start, more fine-grained unread/highlight state, a vertical member list on channels, improved CHATHISTORY support, showing of mode changes, support for specifying an external password command to avoid storing passwords in plaintext, /(un)ban, /kick, /invite and /query commands, implementation of away-notify, support for soju.im/bouncer-networks and showing the current channel topic at the top of the timeline.

Swirc - lightweight ICB and IRC client

Additions include forcing UTF-8 on Windows, /(un)ignore commands and a TLS server.

rirc - a minimalistic irc client written in C

Many fixes and code cleanups were made, IRCv3 cap key=val parsing was implemented, support was added for SASL PLAIN and EXTERNAL authentication and startup options were added for user mode as well as TLS and SASL.

tiny – client written in Rust

/quit command was added, key bindings were made configurable and handling of text formatting (colours etc.) was improved.

WeeChat - the extensible chat client

Three releases were made with plenty of new goodies: plugin to support ”user is typing”, all IRC capabilities enabled by default (if supported), support was added for IRCv3.2 SASL auth, message-tags and setname as well as FAIL/WARN/NOTE messages.

Bouncers

They stay online, so you don’t have to!

KiwiBNC – for one person or 10,000 people (Node.js)

bnc help command output was improved and an internals extension was added to help debugging and development.

pounce - multi-client, TLS-only IRC bouncer. Uses server-time extension to communicate with clients

TLS was improved, docs were expanded and OpenBSD and FreeBSD support got some love.

Quassel IRC - cross-platform, distributed IRC client with a central core

Version 0.14.0 was released on 1 Jan 2022, while it was nearly three years since the previous one, so let’s celebrate it in this 2021 article. Changes in the half-year period include fixing a security issue with LDAP usernames and fixing macOS build failures.

soju – multi-user bouncer

A very active period for soju leading up to Sourcehut’s hosted bouncer service. Support was added for PostgreSQL databases, instrumentation via Prometheus, a new ”server status” BouncerServ command, many new configuration options and protocol features MONITOR, WHOX, ELIST, account-notify, CHATHISTORY LATEST, draft/event-playback and draft/extended-monitor.

ZNC - an advanced bouncer

More deny options were added and SASL message handling was made more robust.

Daemons

Ergo - combining the features of an ircd, a services framework, and a bouncer

Additions include user-initiated password resets via email, implementation for draft/extended-monitor, support for SCRAM-SHA-256 SASL auth (even though not endorsed), upgraded draft/register capability, service management files for OpenSolaris/Illumos and an s6 init script.

InspIRCd - stable, high-performance and modular

An inspircd.org/account-id tag was added for exposing immutable account identifiers to users, connectban got delaying options and TLS received several improvements. Version 4 saw several alpha releases with additions such as /CHECK for finding users by an ident or real name mask, a regex_pcre2 module and FRHOST S2S command to change the real hostname of a remote user.

Ircd-hybrid - a lightweight, high-performance daemon

User name handling was made more robust and many bug fixes were made.

ngIRCd – lightweight IRC server

A quick start guide was added.

Solanum - an IRCd for unified networks

A tutorial for connecting servers and services was added, registration messages were made configurable, SNO_BANNED server notice mask was added and mask support was improved.

UnrealIRCd - the most widely deployed IRCd

Version 6.0.0 was released with a redone logging system, named extended bans, implementations for MONITOR, draft/extended-monitor, invite-notify and setname, GeoIP support and configurable WHOIS output.

Bots

This and the next section has been curated with programming language diversity in mind.

Bot::IRC (Perl)

A ”disconnect” parameter trigger option was added.

Botto (Node.js)

The codebase was updated to use es6 classes, a markov command to generate text via a gpt-2 based synthesiser was added and the commands received many improvements.

Calculon – library for writing bots and a collection of plugins (OCaml)

A custom command was added.

Cardinal – bot built with Twisted library with a focus on ease of development (Python)

Various smaller improvements to the plugins were made.

cbot - bot with features implemented as dynamically loaded plugins (C)

An air quality (aqi) plugin and a logging system were added

CloudBot – a simple, fast and expandable bot (Python)

Various fixes and improvements to the plugins were made.

Eggdrop - the oldest bot still in active development (C/Tcl)

Version 1.9.2 RC1 was released with full CAP 302 support, implementations for monitor, cap-notify and SASL 3.2 as well as new Tcl commands (monitor, isircbot, server list) and a new Twitch bind.

greboid’s irc-bot (Go)

Support was added for bot mode and draft/relaymsg.

irccd - allows both C++ and JavaScript plugins (C++)

This bot uses Duktape as the JavaScript engine. Many fixes were made and BSD support and POSIX conformance was improved

JRobo - advanced bot with tons of features (Java)

A very active half year period for this bot with additions such as a greet command, weather command changed to use OpenWeatherMap amid lots of improvements to the commands and cleanups of the codebase.

kameloso (D)

Work went mostly into Twitch-related functionality.

Limnoria - robust, full-featured, and user/programmer-friendly bot (Python)

Hostmask parsing was improved, SQLAlchemy was removed from the dependencies and many fixes and doc improvements were made.

Maiden - an extensible and highly modular bot framework (Common Lisp)

The weather API was changed to use OpenWeatherMap.

PBot – a pragmatic bot (Perl)

It was a veritable ”Summer of IRC” for this bot with extensive improvements to the docs and code. Additions include a Wiktionary applet (applets are external command line programs/scripts), a Wolfram|Alpha plugin, RunCommand plugin to run system commands (recommended to be used through locked-down factoids), a usershow command to show user metadata, GetUrl plugin to retrieve text contents of a URL and a qrpn module for evaluating expressions written in Reverse Polish notation with units.

Pybot – an extensible, modular, configurable, and multi-threaded bot (Python)

A ”quick dirty add command” module was added to teach the bot simple actions.

Scala-IRC-bot - PircBotX based bot (Scala)

The codebase was migrated to Scala 3 and a spam-list functionality was added to the link listener.

Skybot - multithreaded and multinetwork bot (Python)

The Twitter plugin was improved and more languages were added to the eval plugin.

Sopel - lightweight, easy-to-use utility bot (Python)

UTF-8 locale is now detected on Windows, docs were expanded and many improvements were made to the platform plugins (reddit, wikipedia).

Valeyard - link IRC with SQL databases (PHP)

A module was added to look up the ISP of a user.

Yetibot - extreme chatops bot for Slack and IRC (Clojure)

Some fixes were made and tests were added.

Libraries, frameworks and utilities

Blur - event-driven IRC-framework (Ruby)

Nick change handling was improved.

Communi - framework written with Qt (C++)

Qt 6 support was added, CAP 302 support was improved and capability validation can now be skipped.

Deno-irc - client protocol module for Deno (JavaScript)

TLS connections are now supported.

Dialect - IRC parsing library (D)

Support was added for Solanum IRCd servers.

go-ircevent - event based client library

Support was added for SASL EXTERNAL and SOCKS proxy (allows connecting over Tor).

irc – a full-featured library (Python)

NOTICE commands are now supported.

irccat - send events to channels from scripts and other applications (Go)

Handling of HTTP encodings was improved and setting real name was fixed. It also benefited from the improvements to go-ircevent library.

IRC::Client - Extendable Internet Relay Chat client (Raku)

The codebase was modernised, documentation was updated and support was added for TOPIC.

ircclient (C#)

Some fixes were made and documentation was updated.

IRC.NET - asynchronous bare-bones IRC bot framework (C#)

Support was added for capability negotiation, message tags and WHOX.

irc-framework – for bots and full clients (Node.js)

Websocket protocol is now supported with a fallback and SASL is handled better.

IRCKit - an asynchronous pure Swift library using the Apple NIO framework

Support was added for draft/reply.

ircrobots Asynchronous bare-bones IRC bot framework (Python)

SASL handling was made more robust.

ircstates - sans-I/O IRC session state parsing library (Python)

Functionality was added to record when a user was first seen and when they joined.

PircBotX – library with IRCv3 CAP negotiation support (Java)

Support for quiet lists was added.

Pydle – IRCv3-compliant library (Python)

RplWhoisHostSupport was enabled and irccat support was fixed.

UnrealIRCd support was improved.

superseriousstats - a fast and efficient program to create statistics out of various types of IRC chat logs (PHP)

Various fixes and improvements were made.

Bridges

Heisenbridge - a bouncer-style Matrix IRC bridge

Public development of this bridge started in April 2021 and the first stable release was made in August. The aim is to provide a solution that is not disruptive to IRC users. Despite its young age, it has a wealth of features, good spec support and is performant with thousands of users. In addition to the bouncer mode, it offers a relaybot mode where a single authorized Matrix user manages the bot.

localslackirc - gateway for Slack, running on localhost for one user

URL handling was improved and an /annoy command was added to annoy people, showing oneself as typing when they are.

matterbridge - bridges between a growing number of protocols

UserName and RealName options and binding to IP were added for IRC.

teleirc – bridge to Telegram

Additions include handling of IRC emotes, topics and nick changes.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Version 2.0.10 was released in August and changes after that include improvements to InspIRCd support.

Atheme - for large networks with high scalability requirements

Additions include configurable length for generated passwords, a fix for confirming an account that had its email changed while unconfirmed and more robust validation of nicknames and handling of SASL.