Ilmari Lauhakangas

IRC technology news from the first half of 2023

Categories: IRC

After reading through some hundreds of release notes and commit logs again, the conclusion is clear: IRC keeps on trucking. It is especially nice to see new desktop applications being created. I’m not sure what to make of it, but there are now three projects written in the D language among the libraries and frameworks.

As always, I pick the projects based on what makes sense to me. If you would like to see your project in this list, make sure you have a good readme file and write informative subject lines for your commit messages or better yet, put together release notes.

Protocol specifications

IRCv3 logo

A capability was added for sending arbitrary standard replies and a MSGREFTYPES ISUPPORT token was added to the chathistory spec.

Documentation

Modern IRC Client Protocol docs received updates and clarifications related to replies, MODE and nicknames.

Mobile clients

goguma - for mobile Linux and Android

There is now support for replies via the reply client tag, a gallery view for images and the app scrolls to the unread indicator when a conversation is opened. Initial iOS support was added.

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

Both the Android and iOS apps received improvements to the file upload dialog and text snippets.

Revolution IRC – Android client with Material design

After a two-year hiatus, a release was made with maintenace updates and bug fixes.

Web clients

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

System emojis are now used instead of a third party service

gamja – a bare-bones web client

A keyboard-driven fast tab switcher was added.

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

Additions include ability to use custom notification sounds, log file rotation and ability to manage web server configuration using UNIX environment variables. The server setup was made easier.

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

An option was introduced for not adding hidden messages to the list, support for emojis was reworked, country is now displayed in whois info, channel topic is now shown in buffer header, chathistory implementation was updated and the ability was added for inviting users to a channel via the UI.

The Lounge - modern web client utilising Node.js

The application was rewritten in TypeScript / Vue 3 framework.

Desktop clients

Halloy screenshot

Halloy screenshot

AdiIRC – freeware client for Windows

Version 4.3 was released with new commands, identifiers and events for making scripted webirc frontends, ability to dock any custom window (including picture windows) as Monitor Panels, a new sound API, a visual indicator on tabs with matching text when searching the Options dialog and URL recognition for gemini://, ws:// and wss://.

ERC - an Emacs IRC client

Improvements and additions include better compatibility with soju bouncer, better user experience when connecting interactively, smarter reconnect handling via erc-server-reconnect-function option and more control over the layout of messages via the fill module.

Halloy – cross-platform client written in Rust

Public development started last year and now even IRCv3.2 capability support is being implemented.

HexChat - client for Windows and UNIX-like operating systems

An option was added to exclude nickname in window title and URL handling was made more robust.

KVIrc – client built with Qt

KDE4 support was dropped in favour of KDE5.

mIRC – 95 β€˜til infinity (Windows-only)

Additions and improvements in version 7.73 include support for IRCv3 standard-replies capability, smarter “keep channels open” feature, more complete SASL authentication support and improved Find dialog in Scripts Editor.

Pidgin - a multi-network/protocol chat application

The old IRC protocol plugin was removed in favour of the IRCv3 plugin. Additions include support for SASL authentication, message-tags and msgid.

Polari - GNOME’s client

Developers continued the UI code rework making use of libadwaita.

Smuxi – multi-protocol and cross-platform

Lots of maintenance work went in, for example dropping the Glade# UI dependency in favour of GtkBuilder.

SweetIRC – client for macOS written with Swift and SwiftUI

It’s pretty fresh with public development starting last October, but there are not many macOS clients around, so maybe spread the word and lend a hand?

Terminal clients

girc - client written in Common Lisp

Additions include ctcp, ctcp action, query, channel and me commands as well as a way to specify a server host and nick on startup.

glirc - Haskell library and console client

Support was added for socks5 authentication.

Irssi - your text mode chatting application since 1999

Listmodes and their timestamps are now properly formatted and Irssi can receive monospace formatting characters.

rirc - a minimalistic irc client written in C

Home and end keys are now supported in buffer scrollback, inline formatting characters are now supported and support was added for names, who, whois and whowas commands alongside many other additions and fixes.

senpai - TUI client made for bouncers

Additions include a setup assistant, improved handling of chathistory and an option to hide join/part messages.

Swirc - lightweight ICB and IRC client

Additions include a stats command, expanded support for tab completion in commands, support for external SASL authentication, a SOCKS proxy client, spelling support with Hunspell and improved unicode support in the printtext and readline modules.

tiny – client written in Rust

Text formatting rendering was implemented and an ability to configure /ignore and /notify defaults for tabs was added.

WeeChat - the extensible chat client

Development was very active with some highlights being addition of new IRC capabilities draft/multiline, batch and echo-message, new commands /action, /rules and /knock, 256 colors by default and multiline support.

Bouncers

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

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

Irssi’s invalid JOIN is now handled during registration.

soju – multi-user bouncer

Support was added for admins to run a command as another user, Unix admin sockets to run any BouncerServ command from the shell, external authentication (PAM and OAuth 2.0 for now) and storing message history in a database rather than plain-text files. An example systemd service file was added.

Daemons

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

Additions and improvements include standard-replies capability, better handling of websockets, support for draft/pre-away and draft/message-redaction, support for implicit TLS for mail submission agents and an init script for bsd-rc.

gossip - server written in Go

Support was added for invite-notify and registering channels.

InspIRCd - stable, high-performance and modular

Additions include support for standard-replies, warning about expiring or expired client certificates and support for cloaking users by their ident/username.

miniircd - a small and limited server with no configuration required

Version 2.2 was released with various bug fixes.

ngIRCd – lightweight IRC server

Ircops can now use WHO on any channel and handling of channel modes was made more robust.

Solanum - an IRCd for unified networks

Various fixes and improvements were made.

UnrealIRCd - the most widely deployed IRCd

JSON-RPC support was expanded, adding to the usability of the Administration Webpanel. Channel modes, chathistory and whowas were improved and an experimental spam filter was added

Bots

Shadow web admin screenshot

Shadow web admin screenshot

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

Botto (Node.js)

Search commands for YouTube videos and channel logs were added and many commands were improved.

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

APIs were added for reactions and callbacks.

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

Support was added for chghost IRCv3 capability, which allows servers to send a notification when clients change their username or host.

Honeybot - a bot with simple plugin development experience (Python)

New plugin additions include IMDb search and basketball medal lookup.

kameloso - IRC and Twitch bot (D)

IRC colours 16 and above are now mapped to terminal ANSI colouring.

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

Various fixes and code cleanups were made.

Nibblrjr - bot framework for creating custom behaviour dynamically (Node.js)

A paste API was added for hosting content as HTML or text (HTML is sandboxed).

PBot – a pragmatic bot (Perl)

Support was added for IRCv3 message tags and chghost.

Shadow - a modular and event driven bot (Perl)

This old bot grew a web administration panel.

Skybot - multithreaded and multinetwork bot (Python)

Plugins were added for ChatGPT and SoundCloud track metadata.

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

STATUSMSG is now handled and an IRCv3 capabilities submodule was added.

Libraries, frameworks and utilities

birchwood - a sane IRC framework (D)

This framework entered public development last October and recently the creator wrote a blog post about it.

Dialect - IRC parsing library (D)

IRC event parsing now retains more information.

hii – a file-based client inspired by ii

Support was added for SASL authentication using the EXTERNAL mechanism.

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

SASL failure handling was added.

irc-go - libraries to help with IRC development (Go)

Additions include an optional callback for customizing how IRC connections are created (with proxy support), a splitter function to turn messages containing formatting codes into machine-readable representations and a colour parser to do the same for colour code strings.

ircrobots - asynchronous bare-bones IRC bot framework (Python)

Support was added for specifying a tls client keypair.

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

URL handling was made more robust.

The irc crate - thread-safe and async-friendly client library (Rust)

Colour code handling was made more robust and modes with no prefix are now allowed.

vinezombie - a modular client library (Rust)

The code for this young project was rewritten and the goal is now to be a lower-level library.

VIRC - a simple IRC library (D)

Support was added for draft/multiline and partial support was added for message-tags, typing and replies.

Bridges

BitlBee – gateway to other chat networks

There was a fix to Jabber protocol support and lots of under the hood maintenance work.

discord-ircv3 – bridge with support for IRCv3 features

Support was added for message replies and message redaction.

Discord Relay Chat - an IRC client using Discord as the frontend

There is now no limit to the number of channels and command history tracking and querying was added alongside many quality of life improvements.

Heisenbridge - a bouncer-style Matrix IRC bridge

Websocket support was added.

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

Handling of JOINs was made more robust.

Matrix2051 - IRC server backed by Matrix

draft/message-redaction was implemented.

Reliable Discord-client IRC Daemon (rdircd) - personal discord-client to irc-server translation daemon

Channel name deduplication was made more robust and regexp-filtering for received messages was added.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Version 2.0.13 was released in June with bug fixes.

Atheme - for large networks with high scalability requirements

Login failure notices were made opt-in and modules were added for password-based login throttling and channel join rate monitoring.