Ilmari Lauhakangas

IRC technology news from the first half of 2024

Categories: IRC

There is a head-spinning amount of IRC news to share again.

The big ticket item for this season is the release of InspIRCd v4.0.0 server software after five years of development. They have a nice overview of the biggest changes.

Protocol specifications

IRCv3 logo

A work-in-progress REDACT command was added, to be used for moderation and retracting accidentally sent messages among other things.

Documentation

Modern IRC Client Protocol docs received updates and clarifications related to KICK, TOPIC and CHANTYPES.

Mobile clients

CoreIRC – Android client

The app can now access battery optimisation settings in order to prevent random disconnects and is now compatible with Android 13 and 14.

goguma - for mobile Linux, iOS and Android

Version 0.7.0 was released in June with support for file uploads using the soju.im/FILEHOST specification, Apple Push Notification Service (APNS) on iOS, text and photo sharing on iOS, /part command, STATUSMSG and more robust auto-reconnect functionality. The app now uses Material 3 theme.

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

The iOS app got fixes for some visual glitches.

Lith - multiplatform WeeChat Relay client

Improvements were made to the display of HotList (activity notifications in buffers) and support was added for message background colour.

Web clients

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

gamja – a bare-bones web client

Support was added for soju.im/filehost, the number of highlights is shown in window title, realname is now shown as a tooltip, geo URIs are included in linkification, messages are no longer marked as read when window is not in focus and support was added for AUTHENTICATE chunking.

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

Hidden panels may automatically open in response to channel events and a rate limiter was added for invalid password attempts.

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

Away status handling was made more robust.

The Lounge - modern web client utilising Node.js

The linkifier was improved and expanded, a shortcut was added for navigating between channels with unread messages and the code base was refactored and cleaned up in many places.

Desktop clients

urChat screenshot

urChat screenshot

ERC - an Emacs IRC client

Improvements and additions include more flexible sending and displaying of prompt input and a querypoll fallback for the IRCv3 Monitor extension.

Halloy – cross-platform client written in Rust

Halloy enjoyed a very active development season with additions such as options for showing a topic banner for channels, colorising nicks in the nick list, controlling application scale factor, loading a separate PEM PKCS#8 encoded key for SASL authentication, improved UX for autocompletion, ability to toggle Op and Voice from user context menu in channels, file transfer support, support for IRCv3 multi-prefix, message-tags, WHOX, and UTF8ONLY, support for socks5 and http proxy configurations and the ability to open irc:// and ircs:// URL schemes. The configuration file format switched from YAML to TOML.

HexChat - client for Windows and UNIX-like operating systems

Unfortunately HexChat development came to a halt with the release of version 2.16.2. There are several forks, but no one has announced they would be picking up the torch with regards to maintenance. That said, Soni’s fork now includes contribution guidelines, so perhaps this addition can be taken as an invitation to collaborate. The software is in need of extensive updates to become compatible with newer versions of GTK+ UI toolkit.

KVIrc – client built with Qt

Qt toolkit version 6 is now used on all platforms, a vertical line margin option was added for making ASCII art look nice, displaying contextual help was made to work again and support for running the application as portable was improved.

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

The application code was ported to Qt 6 and KDE Frameworks 6.

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

Additions and improvements in versions 7.76 and 7.77 include support for larger GUI icons for high resolution monitors, server login support for SCRAM-SHA-224/384/512 authentication and support for translated text in all dialogs.

Pidgin - a multi-network/protocol chat application

The IRCv3 protocol plugin started leveraging a new library called Ibis.

Relay IRC - client built with Electron & React (JavaScript)

This is a reincarnation of Lax, which I featured in a couple of earlier posts. Quite some improvements were made to the UI, performance and logging.

Textual – client for macOS

After a few years of hiatus, two new versions were released with 7.2.3 as the latest. The sysinfo command was improved and many fixes were made.

urChat - a Java based client

Originally started in 2014, development resumed last year. During this season, proxy support was added alongside lots of UI work.

Relay IRC screenshot

Relay IRC screenshot

Terminal clients

girc - client written in Common Lisp

It is now possible to toggle the display of the channel topic, an autojoin argument was added and the buffer is now represented as a tree which can also be displayed as tabs.

glirc - Haskell library and console client

An /in command was added for running commands in contexts other than the currently focused window.

Irssi - your text mode chatting application since 1999

Support was added for SCRAM-SHA-256 and SCRAM-SHA-512 challenge-response SASL authentication.

senpai - TUI client made for bouncers

A BOUNCER command was added for easier interaction with the soju bouncer, a handy in-client help feature was added, custom notifications can now be configured to be sent directly, bypassing the terminal and support was added for an Operating System Command (OSC) to set an app ID (currently only supported by foot terminal emulator).

Swirc - lightweight ICB and IRC client

Additions include expanded tab completion for commands, support for translations and new commands /voice and /devoice.

WeeChat - the extensible chat client

Support was added for colors in messages and big changes were made to the relay machinery, including the addition of an HTTP REST API relay type.

Bouncers

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

soju – multi-user bouncer

File uploads are now supported and getting an invite to a previously saved channel now leads to automatically joining it.

ZNC - an advanced bouncer

Version 1.9.0 was released with capability negotiation support.

Daemons

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

v2.14.0 released in June includes support for the OAUTHBEARER SASL mechanism, allowing interoperation with Gamja and an OAuth2 provider as well as the IRCV3BEARER SASL mechanism, allowing to accept OAuth2 or JWT bearer tokens.

gossip - server written in Go

Trusted proxies can now be configured, WHOIS implementation was made more complete and STATUSMSG was implemented.

InspIRCd - stable, high-performance and modular

Additions include a fingerprint cloak method, support for multiple hash algorithms for client fingerprints, passwords for opers being optional in case a TLS fingerprint or services account is preferred for security, support for non-web WebSocket connections and tools for converting UnrealIRCd databases to InspIRCd.

ngIRCd – lightweight IRC server

Version 27 was released after three years of development. SSL/TLS certificates on outgoing server-server links are now validated by default, a Dockerfile was added, support was added for the sd_notify protocol of systemd, an example filter file for Fail2Ban was added and IPv6 support is now autodetected by default.

UnrealIRCd - the most widely deployed IRCd

Versions 6.1.5 and 6.1.6 were released with support for draft/no-implicit-names, performance improvements and more flexibility in the programmatic rule system. UnrealIRCd also celebrated its 25th birthday.

Bots

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

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

There is now a module allowing to use Python for scripting, with mostly the same API as Tcl. Support was added for userhost-in-names and standard-replies capabilities, the bot is now compatible with Tcl 9 and account tracking was made more robust.

PBot – a pragmatic bot (Perl)

A Wordle game plugin was added and it is now possible to deploy the bot using Docker or Vagrant.

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

Version 8.0.0 was released after two years of development.

Libraries, frameworks and utilities

Blur - event-driven IRC-framework (Ruby)

After a two-year quiet period, work resumed with additions such as a command line interface, logging and URL handling.

Ibis - a GObject based library (C)

Ibis is a new library from Pidgin developers. It has no opinion about how messages are handled and is meant to be used for integration, providing the heavy lifting of things like parsing and serialization.

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

SASL authentication code was made more robust and a GetReplyTarget function was added.

ircjournal - a lightweight, fast, standalone log viewer for the web with real-time log ingestion (Rust)

Development for this tool started in 2021. During this season it gained a Nix flake as a convenient deployment method.

vinezombie - a modular client library (Rust)

Still early days for this library and lots of groundwork being laid in areas such as message handling and authentication.

Weitersager - receive messages via HTTP and show them on IRC (Python)

Even though this utility only received maintenance work during this season, I wanted to give it a shoutout for once.

Bridges

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

User scripts can now be scheduled.

Heisenbridge - a bouncer-style Matrix IRC bridge

Multi-line messages can now get a line prefix to help some client scripts unwrap the messages and reacts can be disabled.

irgramd - connect from an IRC client to Telegram as a regular user

Commands were added to forward messages and to upload files and media.

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

The code was adapted to Slack’s API changes.

Matrix2051 - IRC server backed by Matrix

A Containerfile was added as a deployment option and compatibility with WeeChat was improved.

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

Image-emojis and gifv embeds are now handled and support was added for Operating System Command (OSC) 8, to provide hyperlinks for terminal IRC clients.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Several releases of the 2.1 line were made with additions such as an UNBANME privilege for users to unban themselves, the ability to use more than one fingerprint in an oper block, alternate command suggestions in response to invalid user commands, support for draft/channel-context and draft/reply tags, an Atheme database import feature, support for sending client tags on UnrealIRCd, support for the InspIRCd 1206 (v4) protocol, the ability to encrypt passwords with Argon2 or HMAC-SHA-2 algorithms, queueing for multi-line messages and an example systemd unit file.

Atheme - for large networks with high scalability requirements

Compatibility with UnrealIRCd was improved and channels can now be filtered by registered/unregistered status.