Ilmari Lauhakangas

IRC technology news from the second half of 2023

Categories: IRC

🎡 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.

Protocol specifications

IRCv3 logo

Work-in-progress extensions pre-away and no-implicit-names were added.

Documentation

Modern IRC Client Protocol docs received updates and clarifications related to client nickname syntax and WHO.

Mobile clients

Lith screenshot

Lith screenshot

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 /join, /kick, /mode and /quote.

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.

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

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.

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

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.

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

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.

Desktop clients

Polari screenshot

Polari screenshot

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 extended-monitor tag, 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 CTCP support.

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.

Terminal clients

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

A /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 (-notls_verify).

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, /LIST, /AWAY and /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 chathistory, netjoin, netsplit and znc.in/playback), better detection of server Wallops and new commands /admin, /dcc, /die, /gline, /info, /ison, /kline, /rehash, /restart, /servstats and /wallops.

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.

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

Compatibility with UnrealIRCd and Textual was improved and support was added for extended-monitor and draft/read-marker.

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.

Daemons

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 extended-monitor.

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.

Bots

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.

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

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.

ircclient (C#)

Compatibility with InspIRCd was fixed.

Kitteh IRC Client Library (Java)

Support was added for bot mode and extended-monitor.

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.

Bridges

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 /dropautoreact, /listautoreact, /listannoy and /dropannoy.

Matrix2051 - IRC server backed by Matrix

Support was added for draft/no-implicit-names.

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.

Services

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.