Ilmari Lauhakangas

IRC technology news from the second half of 2024

Categories: IRC

There’s a smörgåsbord of IRC happenings in this post, including multiple new desktop clients as well as clients for Sega Megadrive/Genesis and those old Macs that look like birdhouses.

A presentation about IRC modernisation will be given at FOSDEM conference on 1 Feb 2025. A video recording will be made available after the conference.

There’s a new commercial service for bouncer access hosted in France called IRC Today. It is run by delthas, creator of the senpai client and contributor to projects such as soju.

The Undernet network, established in 1993, now supports IRCv3 capabilities thanks to updates to its ircu2 daemon. The future is finally starting to become evenly distributed.

Protocol specifications

IRCv3 logo

The working group wrote a spec round-up in November. A new version of a metadata specification was published as draft in September.

Documentation

Modern IRC Client Protocol docs received updates and clarifications related to RPL_ENDOFWHOIS, RPL_WHOISCHANNELS, ISUPPORT tokens and ERR_WASNOSUCHNICK.

Mobile clients

goguma - for mobile Linux, iOS and Android

Support was added for server certificate pinning and /oper command.

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

The web app can now embed Bluesky, Mastodon and Reddit links, there’s an option to match your theme to your system’s dark mode setting, support was added to IRCv3 message redaction and bots can be marked as relays to improve the display of relayed messages.

Lith - multiplatform WeeChat Relay client

Image URLs now get a thumbnail, buffers can be grouped by server name and the UI was made prettier.

WeechatRN - WeeChat relay client for mobile using WebSockets

Notifications were made smoother, keyboard animations were improved and the app look and feel was made more uniform and native-like.

WeechatRN screenshot

WeechatRN screenshot

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

Mode changes are now human-readable, files can be uploaded by dragging and dropping, multiple files can be uploaded at a time and reconnection behaviour is now snappier.

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

The accessibility (keyboard navigability) of the interface was improved.

The Lounge - modern web client utilising Node.js

The accessibility of the interface was improved (nice trend!), support for actual_username field was added to whois and compatibility with InspIRCd was improved.

Desktop clients

nhex screenshot

nhex screenshot

Circe - a client for IRC in Emacs

Text with the same colour code for foreground and background is interpreted as a spoiler that can be revealed either by marking or upon mouse hover.

This is a new client started in 2024. It is written in Zig and can currently be installed either from Arch Linux User Repository or using the Zig build system per instructions given in the readme.

ERC - an Emacs IRC client

Dealing with ban lists via modules was made more convenient and truncation is now fine-tunable.

Halloy – cross-platform client written in Rust

Text formatting is now possible via the /format command, support was added for CTCP queries CLIENTINFO, PING, SOURCE, and VERSION, notification sounds can be customised, IRCv3 capabilities chghost, account-notify, extended-monitor, msgid, chathistory and extended-join are now supported, themes can be customised better, including in a dedicated theme editor, many new configuration options were added, panes can be undocked into separate windows, there are now buffers to view highlights across all servers and examine logs and casemapping is supported via ISUPPORT.

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

The ability to use client certificates was added.

KVIrc – client built with Qt

The application theme now respects the system’s dark mode on Windows.

mIRC – 95 ‘til infinity (Windows-only)

The progress of DCC transfers is shown in Windows taskbar and SVG files can now be loaded.

nhex – a next-generation client inspired by HexChat

Another new client started in 2024. It uses the Tauri framework, so it also adapts to mobile views. One of its goals is to provide the frontend as a web application.

Pidgin - a multi-network/protocol chat application

Support was added for typing notifications alongside many basic commands as the IRCv3 protocol is being implemented from scratch. The first experimental version of the next major Pidgin release was tagged on New Year’s eve and there’s a really interesting announcement post explaining the tricky technical challenges in modernising this piece of software.

RudeChat - Python client designed to be fast, portable, and fun

This client was started in 2023 (or maybe earlier) and is now becoming more featureful. It handles IRCv3 capabilities like away-notify, account-notify and extended-join. Builds are available for Linux and Windows.

Srain – modern client built with GTK

Chat list order can be configured and server-time data is converted to local time zone.

Wallops - a modern client for classic Mac OS

Started in 2022, this one is for lovers of vintage computing. It does not seem to support IRCv3 features yet, but versions 2.0 and 2.1 were released with lots of fundamental work. There is a video with a brief demonstration of the client in action.

Wallops screenshot

Wallops screenshot

Terminal clients

Ircing on Sega Megadrive/Genesis via SMDT

Ircing on Sega Megadrive/Genesis via SMDT

girc - client written in Common Lisp

Support was added for IRCv3 message tags.

glirc - Haskell library and console client

Support was added for IRCv3 message tags and server-side /help and the handling of INVITE and MONITOR was improved.

kirc - a tiny client written in POSIX C99

The DCC implementation was made more robust.

senpai - TUI client made for bouncers

Zero-width joiner emojis can now be edited alongside other emoji improvements, link image previews were implemented, the UX of autocompletion was improved, the window title now shows the count of unread highlights, files can now be uploaded either by dragging and dropping or with a command, formatting and links are now rendered in topics, channel names and nicks can be clicked and pinning and muting of buffers is possible per metadata-2 spec and a compatible bouncer.

SMDT - Sega Megadrive/Genesis terminal emulator, telnet and IRC client

Like Wallops, this is another art project type of love letter to vintage hardware. Started in late 2023, the IRC client in this software bundle keeps receiving improvements and now supports up to six concurrent channels and shows channel updates in a status bar.

Swirc - lightweight ICB and IRC client

Handling of nickname issues was made more robust, netsplits and netjoins are now handled even in cases where servers don’t support the IRCv3 BATCH events, commands /wholeft, /announce, /ctcp and /ftp were added, support was added for account-tag, chghost, extended-join and cap-notify, SASL authentication mechanisms SCRAM-SHA-1 and SCRAM-SHA-512 were added and windows can be switched by entering their reference number like /1, /2, /3.

tiny – client written in Rust

IRC colour code handling was improved.

WeeChat - the extensible chat client

The option addreplace is now included in all commands that have an add option, the API of the relay was expanded and support was added for displaying the autonomous system number of a user in WHOIS info on servers that implement the newly-invented RPL_WHOISASN.

Bouncers

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

soju – multi-user bouncer

It is now possible to limit the number of networks per user, admins can impersonate users with SASL, videos and PDFs can be previewed after uploading, an HTTP authentication backend was added, support was added for the work-in-progress SAFERATE spec that lets clients know they will not be disconnected due to rate-limiting of messages, irc://, ws:// and http:// URIs can be used for listening for convenience when running behind a reverse proxy, a channel create service command was added and support was added for channel pinned/muted status per the metadata-2 spec.

ZNC - an advanced bouncer

chghost capability was implemented.

Daemons

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

The draft spec extended-isupport for receiving information before registering a connection was implemented.

InspIRCd - stable, high-performance and modular

The whowas database can now be updated on nick change as well as quit with <whowas:nickupdate>, colour names in Message of the Day (MOTD) files can be made human readable using \c[fg-color,bg-color], the channel list of services pseudoclients can be shown to server operators thanks to the hideservices option of the hidechans module and support was added for named DNSBL replies and showing the ban reason.

Ircd-hybrid - a lightweight, high-performance daemon

The module API was rewritten for improved flexibility, the info and user mode subsystems now support dynamic registration and unregistration of info entries and user modes, users can optionally view a simplified network topology where all servers appear as if they are directly connected to the local server, the MOTD file path can be configured, INFO command output now includes namespaces and also shows entries from the admin config block.

Sable – an experimental chat server

Libera Chat developers have been working on this for a few years, but I haven’t hurried to cover it as it is not deployed in production yet. Server nodes use a Gossip-like protocol to communicate, which means no more netsplits. Persistent user presence is built in. During this development season a history service was added and an INFO command was implemented.

UnrealIRCd - the most widely deployed IRCd

The GeoIP module now contains information about Autonomous System Numbers, which gets displayed in contexts such as WHOIS and can be used in functionality such as extended server bans. Channel creation can now be restricted in the set::restrict-commands block, channel bans can be inherited from another channel, vhosts (virtual hosts, fake hostnames) can be set to users automatically upon login and the SSL/TLS defaults were improved.

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)

The new Python scripting functionality can be enjoyed in a stable v1.10.0 release and a lot of the work during this development season was about polishing the implementation.

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

Support was added for account-extban and the RSS plugin now supports randomisation of feed items.

MINION - easy to use bot (PHP)

This old bot saw lots of updates this season. The displaying and logging of messages can be configured granularly, the bot can now guard and set channel topics, custom raw commands can be set to run upon startup, SSL connection support was added, user ignoring can be configured and flood protection was added.

PBot – a pragmatic bot (Perl)

An AntiHello plugin was added to warn about stand-alone greetings in large channels, the AntiAway plugin that kicks people employing an auto-away mechanism was made more robust and many game plugins received improvements.

sitbot - premium bot (Go)

Reading and rendering of formatting and colours was improved.

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

Escaping backslashes now works in the find plugin.

Libraries, frameworks and utilities

Cinch - bot framework (Ruby)

An actively maintained fork of a bot framework. Version 2.4.0 was released with support for spoofing nicknames using the draft/relaymsg capability.

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

An exponential backoff option was added to the reconnect plugin and the code was adapted to Deno v2.

girc - a flexible library (Go)

Many more numeric IRC reply constants were added.

go-ircevo - an enhanced framework for interacting with servers (Go)

This is an evolved and extended version of the go-ircevent library. Nick change error handling was improved, support was added for DCC and proxy integration and connection status monitoring was added.

Ibis - a GObject based library (C)

Parsing of CTCP messages and ISUPPORT was added and standard-replies was implemented alongside many foundational features for this young library.

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

Support was added for CLIENTTAGDENY, whowas now returns all responses from the server and documentation was added for account configuration.

irc-toolkit – a client library (Python)

Accessors were added for message tags, msgids, labels and batches. account-tag, server-time and message-tags are now enabled by default and a command was added to send a notice message to a target.

Bridges

Dis4IRC - a modern Discord <-> IRC bridge

Avatar lookup for IRC users was improved.

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

Chunking of long messages was implemented.

Heisenbridge - a bouncer-style Matrix IRC bridge

Support was added for authenticated media by way of a proxy.

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

Replies to deleted messages are now handled, a re-upload command was added to upload files or media as a reply to a message, volatile events like delete, edit, react are now shown in the history, handling of reactions was made more robust, a reaction command was added to send emoticon->emoji as a Telegram reaction and IRC channel topics will now be copied from Telegram channel/chat descriptions.

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

Websockets usage was updated after Slack API changes.

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

Pinned messages now show an appropriate prefix, support was added for message-tags, Discord typing notifications are passed through to IRC, IRCv3 capability handling was improved, custom guild emojis can be sent from IRC and IRC away status is now bridged to Discord.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Account identifiers are shown in nickserv/info output, a preservedisplay option for controlling display nick expiration was added to the nickserv module, SQL column support was expanded, a nickserv/drop/display oper privilege was added, the mysql module now has support for database migrations and UNIX sockets, a server-side alias can now be configured for each service and its use controlled with the servicealias option, NEXTBANS are supported on UnrealIRCd and users may receive channel URLs upon joining.

Atheme - for large networks with high scalability requirements

The InspIRCd protocol module was updated.