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
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.
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
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.
comlink - an experimental client
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.
Terminal clients
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, vhost
s (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.