IRC technology news from the second half of 2023
🎵 So here it is, Merry IRCmas / Lots of coding getting done! 🎵
Yes indeed, I went and read a bunch of changelogs and commits again to bring you some interesting bits from the world of IRC.
Work-in-progress extensions pre-away and no-implicit-names were added.
Modern IRC Client Protocol docs received updates and clarifications related to client nickname syntax and
goguma - for mobile Linux and Android
Version 0.6.0 was released in December with support for the
draft/pre-away extension (to not toggle the away flag when synchronizing chat history in the background), geo URIs and sharing current geolocation and the commands
IRCCloud - Connect to any IRC server out there, and even Slack workspaces
Both the Android and iOS apps got support for geo URIs.
Lith - multiplatform WeeChat Relay client
Lith is an ambitious project aiming to provide a WeeChat UI for all major desktop and mobile operating systems with the help of the Qt framework. Development started in 2016 and now there is support for iOS and iPadOS, Linux and experimentally for Android, Windows and macOS. It even works as a WebAssembly app, running locally in the browser without needing a web server.
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
The main menu now has collapsible sections, where you can hide servers and user settings. Conversation and server settings were moved into the participant list. These are illustrated in a blog post.
gamja – a bare-bones web client
MONITOR online/offline notifications are now shown in user buffers.
Glowing Bear - WeeChat web frontend
Support was added for colours in buffer short name.
Additions include light and dark themes, new server list, new server definition editor panel, new status bar, new dropdown navigation menu and keyboard hotkeys. The code was reorganised into web components.
Bracket matching for URLs and channel names in messages was improved,
WHOX flags are now used to indicate user type and many UI improvements were made, including a big overhaul to the nickname list.
The Lounge - modern web client utilising Node.js
A storage cleaner with different message retaining policies was added.
AdiIRC – freeware client for Windows
Version 4.4 was released with colour options for Monitor Panel tabs, dark mode support for all controls without a colour option and options to enable/disable IRCv3 server-time and Paste & Submit item in the Editbox menu.
Circe - a client for IRC in Emacs
Passwords are now validated for expected type.
ERC - an Emacs IRC client
Improvements and additions include a configurable indicator for remembering position in buffers, a new module for dynamically wrapping messages to window width, a new module for nickname highlighting, a smarter, more responsive prompt, revised buffer-display handling, smarter reconnect handling for users on the move and in-buffer status messages.
Halloy – cross-platform client written in Rust
This new client grew support for many more IRCv3 features and basic functionality such as nickname completions and buffer history navigation.
HexChat - client for Windows and UNIX-like operating systems
Support was added for Salted Challenge Response Authentication Mechanism (SCRAM).
KVIrc – client built with Qt
Support was added for
UTF8ONLY extension, user and channel modes now work with Solanum ircd, notifications now work under KDE and logs can be exported in batch. The application is also now compatible with Qt6 and KDE Frameworks 6. You can enjoy all of these and more in version 5.2.0, which was released today after 5 years of development!
Konversation – KDE’s IRC client for Windows, Linux and BSDs
Problems with capability negotiation and handling channel names and topics were fixed.
mIRC – 95 ‘til infinity (Windows-only)
Additions and improvements in versions 7.74 and 7.75 include a server option to connect/minimize on startup, an option to clear history when mIRC is closed, support for IRCv3
typing client tag and typing notifications and loading of custom fonts on startup from “fonts” folder.
Pidgin - a multi-network/protocol chat application
The new IRCv3 plugin gained improvements including more robust SASL authentication, a status window,
server-time capability and basic
Polari - GNOME’s client
The UI was adapted to latest GNOME design patterns and visual design was improved.
Srain – modern client built with GTK
An option was added to automatically scroll to new messages when they are received.
accirc - accidental irc is an ncurses-based irc client
Work on this client started in 2014. It now received a hide_user_mode_changes option to suppress user mode spam and better compatibility with servers using unusual message formats.
girc - client written in Common Lisp
An optional side window for displaying the buffer list was added and a server can now be passed from the command line.
glirc - Haskell library and console client
/list command was added for viewing the list of public channels on the server, a
/who view was added, desktop notifications are now supported, the
/grep (filter using regular expression) and
/url (view and open long URLs) commands can now be used in more views.
Irssi - your text mode chatting application since 1999
Window history now supports bash-like editing and options were added to connect without TLS (
-notls) and to not verify the TLS certificate of the server (
senpai - TUI client made for bouncers
Desktop notifications upon nickname highlight are now supported, a config option “transient” can be used for ephemeral, no disk runs, nickname can now be configured as a command line argument, autocomplete now works with emojis,
/BACK commands were added, geo: link parsing was added and auto-completion suggestions now appear in a popup.
Swirc - lightweight ICB and IRC client
Additions include expanded support for tab completion in commands, support for many numeric replies, handling of znc messages, support for
BATCH event (with types
znc.in/playback), better detection of server Wallops and new commands
tiny – client written in Rust
Support was added for italic and strikethrough text attributes and configurable key bindings for running commands.
WeeChat - the extensible chat client
Alongside a myriad of other improvements and additions, configuration file handling was made more helpful in case of version mismatch, a new command
/sys was added to show resource limits/usage and suspend WeeChat process, the
/names command was enriched and the output of
/list is now directed to a buffer for convenient further filtering.
They stay online, so you don’t have to!
pounce - multi-client, TLS-only IRC bouncer. Uses server-time extension to communicate with clients
Compatibility with UnrealIRCd and Textual was improved and support was added for
soju – multi-user bouncer
Version 0.7.0 was released in November with support for the
draft/pre-away extension allowing short-lived and background clients to not toggle the auto-away status,
draft/no-implicit-names allowing clients with low bandwidth to connect faster and
STATUSMSG. The database migration script was also made faster.
ZNC - an advanced bouncer
The account name for identified users will now be added to “Joins” lines in logs generated by the log module and password hashes were updated from SHA-256 to Argon2id.
Ergo - combining the features of an ircd, a services framework, and a bouncer
A channel autojoin feature and support for
draft/no-implicit-names were added and are found in v2.12.0 released in October.
gossip - server written in Go
Support was added for
InspIRCd - stable, high-performance and modular
Additions include an example post-deploy hook script for use with CertBot, Dehydrated, or other ACME SSL (TLS) renewal tools, support for rechecking if a user is in a DNS blacklist and for shunning blacklisted users, applying SVSHOLDs (nicknames reserved by services) to already existing users, options for hiding small channels from
/LIST past the securelist wait time, hiding the messages of silenced users of blocking, including the setter’s full mask in list modes and disabling
/LIST completely for unregistered users.
miniircd - a small and limited server with no configuration required
Version 2.3 was released with capability negotiation support.
ngIRCd – lightweight IRC server
An autojoin option was added to force all users to join certain channels on connect.
Solanum - an IRCd for unified networks
ACCOUNTEXTBAN ISUPPORT token was added to support the draft spec and the
NOTICE for invites was made optional.
UnrealIRCd - the most widely deployed IRCd
Version 6.1.2 released in October and 6.1.3 in December focus on countermeasures against large scale spam/drones. UnrealIRCd now maintains API services Central Blocklist, Central Spamfilter and Central Spamreport in order to provide a more sophisticated way to battle spam compared to traditional DNS blacklists. Also, support for
draft/no-implicit-names was added.
This and the next section has been curated with programming language diversity in mind.
cbot - bot with features implemented as dynamically loaded plugins (C)
The trivia plugin gained new features.
Codybot – a Linux bot with C compilation and shell access (C)
An !astro command was added to retrieve Sun and Moon rise and set times, plus moon phase and illumination.
Eggdrop - the oldest bot still in active development (C/Tcl)
An autoscripts feature was added to greatly simplify managing and working with scripts and there is now a got-chanlist event bind type.
kameloso - IRC and Twitch bot (D)
Stopwatches now persist across connections and across executions of the program, the Pipeline plugin was rewritten to do non-blocking reads, throttling/scheduling of outgoing messages was made more precise and an IRCBot.collectChannels() function was added for returning unique channel names, gathered from all currently instantiated plugins.
Limnoria - robust, full-featured, and user/programmer-friendly bot (Python)
Support was added for RSS feed attributes in template string, syntax error messages were made more helpful, a command was added to manually initiate SASL, channel counts and modes are now reported in status, the Seen plugin now shows when the target is currently in the channel and the Geography plugin now has support for OpenStreetMap node ids.
Nibblrjr - bot framework for creating custom behaviour dynamically (Node.js)
The fliptext command for flipping text upside down was improved, more unit conversions were added and a spoke command was added to find out when a user last said something.
PBot – a pragmatic bot (Perl)
ActionTrigger plugin now handles
QUIT triggers per-channel and ChanOp command groups multiple unbans/unmutes together into one command.
Sopel - lightweight, easy-to-use utility bot (Python)
Many Sopel plugins were extracted into their own repositories and released as standalone plugins. The built-in dice command received many improvements.
Libraries, frameworks and utilities
birchwood - a sane IRC framework (D)
More foundational work went into this new framework.
A flood protection feature was added and SASL registration was introduced alongside separate account and server passwords.
hii – a file-based client inspired by ii
Version 1.1.4 was released with improved displaying of messages thanks to
echo-message capability and sorting of nicknames in descending order by last activity, improving tab completion.
irc – a full-featured library (Python)
Support was added for SASL PLAIN authentication and parsing of message tags was fixed.
irc-framework – for bots and full clients (Node.js)
Handlers are now allowed to get access to the username from RPL_WHOISACTUALLY, improving compatibility with the upcoming major release of InspIRCd.
Compatibility with InspIRCd was fixed.
Kitteh IRC Client Library (Java)
Support was added for bot mode and
lirc - a lightweight client library (C)
This new library was made public in January 2023 and is being fleshed out.
superseriousstats - a fast and efficient program to create statistics out of various types of IRC chat logs (PHP)
Empty slaps and actions now count towards the stats.
vinezombie - a modular client library (Rust)
This newish library received more fundamental development and an initial v0.1.0 was released.
Discord Relay Chat - an IRC client using Discord as the frontend
Installation and setup instructions were added, user scripting was implemented and embedding/crawling on URLs is now optional.
Heisenbridge - a bouncer-style Matrix IRC bridge
Media path for reverse proxies was made configurable, TLS cipher lists can now be specified per server and support was added for
away-notify and non-numeric sasl events.
irgramd - connect from an IRC client to Telegram as a regular user
Forked from an earlier project in 2020, this gateway was never featured here before. During the second half of 2023, it received docs for installation and configuration, a delete command for deleting messages and support for showing polls and for message pinning.
localslackirc - gateway for Slack, running on localhost for one user
Once leaving a thread, you now won’t get autojoined with every new message, leaving a channel but not a thread leaves the threads working, you can now automatically rejoin channels/threads when mentioned directly, there are now commands to send files and messages from the shell and an
/autoreact command was added to automatically put reactions to messages alongside the commands
Matrix2051 - IRC server backed by Matrix
Support was added for
Reliable Discord-client IRC Daemon (rdircd) - personal discord-client to irc-server translation daemon
Example files were created for Docker and systemd, choice of nicknames was made more flexible and an ability was added to find/query usernames alongside many other improvements.
Taking care of user accounts and channels among other things.
Anope – highly modular set of services
Version 2.0.14 was released in August and 2.1.0 in November with additions such as support for sqlining channels on UnrealIRCd, nickserv:minpasslen for configuring the minimum password length, support for access list entry descriptions, linking over a UNIX socket, server-initiated logins and logouts on UnrealIRCd, server-initiated logouts on InspIRCd and ANONYMOUS SASL mechanism. Users are now allowed to opt-out of being added to channel access lists, the codebase was modernised to C++17 standard and the build system now uses up-to-date CMake.
Atheme - for large networks with high scalability requirements
Chanserv module loading was made more robust and its error messages were improved.