Ilmari Lauhakangas

IRC technology news from the first half of 2022

Categories: IRC

Some cool stuff went down in the world of Internet Relay Chat during the past six months and we should take a look at it.

Irssi is back!

In the last news article, I mentioned that the development of the Irssi terminal client had slowed down and that there was an active fork. Since then, the changes from Nei’s fork were integrated upstream. The increased coordination lead to the release of Irssi version 1.4.1 in June. Many new IRCv3 features became available.

IRC Driven, a service that provides indexing for IRC networks is now out of beta. A recent feature is displaying channel logs on the website in real time.

Protocol specifications

IRCv3 logo

The WHOX extension was documented, Bot Mode was ratified and drafts were published for channel-context client tag and Read marker.

Documentation

RPL_WHOISSERVICE got documented in IRC Definition Files.

Modern IRC Client Protocol docs received numerous additions and improvements.

Mobile clients

goguma screenshot

goguma screenshot

Communi for Sailfish - The first and foremost IRC client for Sailfish OS

Improvements were made to Sailfish OS platform compatibility.

CoreIRC – Android client

Support was added for coloured nicknames in the chat and for hiding timestamps and away messages.

goguma - for mobile Linux and Android

Simon Ser launched a new mobile client which interestingly has support for mobile Linux and not just for Android. It intentionally skips representing server buffers, does not group conversations by network and sorts them by recent activity. It is aimed primarily for servers supporting recent IRCv3 extensions. It has special features for bouncer support and allows using push notifications with the soju bouncer, which reduces power consumption.

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

macOS Catalyst support for the iOS app was improved. The Android app got improvements to stability and more detailed WHOIS information. Both apps got support for pinning channels and conversations.

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

Support was added for proxy authentication using a HTTP header and Paste plugin was resurrected.

gamja – a bare-bones web client

Support was added for read markers that synchronise the read/unread status of messages between clients shared by the same user connected to a server or a bouncer. Other updates include support for bot mode and channel-context and the addition of a settings dialog.

Glowing Bear - WeeChat web frontend

Support was added for building the application with Tauri toolkit in order to produce smaller binaries that use less memory. A plugin was added to play clips from Twitch.

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

Support was added for using a socks5 proxy for server connections.

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

Support was added for message-tags.

The Lounge - modern web client utilising Node.js

A feature was added for muting channels, networks, and private messages. A context menu was added for inline channel names and the settings layout was redesigned.

Desktop clients

AdiIRC – freeware client for Windows

Version 4.2 was released with better HiDPI support, UI improvements and an option to ignore consecutive timestamps.

Circe - a client for IRC in Emacs

Version 2.12 was released in April with three year’s worth of improvements.

ERC - an Emacs IRC client

Fixes and internal improvements include more robust handling of multiline input, ISUPPORT tokens and buffer naming.

HexChat - client for Windows and UNIX-like operating systems

Various fixes went in, including better handling of passwords.

IceChat – client for Windows

Versions 9.52 and 9.53 were released with some fixes.

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

Various under-the-hood fixes went in.

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

Window handling across different operating systems was made more robust and some notification issues were fixed.

mIRC – 95 ‘til infinity (Windows-only)

Version 7.68 was released in April with support for strikethrough text, new server login authentication methods and an option to keep channels open on parting.

Polari - GNOME’s client

Feedback for /commands was moved to a popover UI element and code was ported to comply with libadwaita used by GNOME 42.

Srain – modern client built with GTK

Support was added for IRCv3 standard-replies, SASL EXTERNAL, invite-notify and server-time.

Thunderbird – email client with chat support

Version 102.0 was released. Invitations to chat rooms will now prompt the user if they would like to join.

Terminal clients

catgirl - TLS-only client

Line editing was reimplemented as a reusable library.

glirc - Haskell library and console client

Hotkeys can now be assigned for specific windows on a server.

kirc - a tiny client written in POSIX C99

An option was added for parsing multiple post-connection commands.

senpai - TUI client made for bouncers

Support was added for the soju extensions read and search, using socks5 proxies, channel-context and clicking on channel members to open a query with them. URL parsing performance was improved.

Swirc - lightweight ICB and IRC client

Additions include support for RPL_WHOISBOT, scrolling using the mouse and a /cap command for listing IRCv3 capabilities.

rirc - a minimalistic irc client written in C

Some code cleanups and fixes were made.

tiny – client written in Rust

Code cleanups and stability improvements were made.

WeeChat - the extensible chat client

Version 3.5 was released in March with /autojoin command and displaying of message tags, zstd compression in relay weechat protocol and trigger variables for message tags. Changes towards a future version include /item command for creating custom bar items and letter case conversion methods in evaluation of expressions.

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

Support was added for quitting pounce from clients and for editing configuration over IRC.

soju – multi-user bouncer

A new extension, read, was developed in soju and eventually published as an IRCv3 draft. Other new extensions are search for searching through server-side message history without downloading full logs, account-required for disallowing connection to a server without authentication and no-implicit-names for allowing clients to reduce some traffic that usually goes on when connecting to a server. Other additions include support for RPL_VISIBLEHOST, chghost, upstream echo-message capability and push notifications that the goguma mobile client benefits from as well as improved WHOIS forwarding.

ZNC - an advanced bouncer

Some code cleanups and fixes were made.

Daemons

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

Additions include enhancements to moderation tools, support for read-marker, ACCEPT command for users to control who is allowed to message them and NS SAVERIFY for operators to manually complete an account verification.

gossip - server written in Go

This new server has been in active development since 2020 and seems to have decent spec coverage by now. Docs could use some expanding, but it’s early days anyway.

InspIRCd - stable, high-performance and modular

Additions include support for the IRCv3 bot tag, an option to require presence in a common channel in order to be invited to other channels, extbanformat method for normalising extbans, support for automatically expiring the override user mode, improved WHO, a new account system and a rewritten logging system with JSON as a new format option.

Ircd-hybrid - a lightweight, high-performance daemon

KNOCK can now be used on private channels and an extban was added to prevent the use of KNOCK. The optional founder q and admin a channel prefix modes were implemented as well as server-side channel mode locking MLOCK.

Solanum - an IRCd for unified networks

Various fixes and cleanups were made.

UnrealIRCd - the most widely deployed IRCd

Additions include support for logging server notices to a channel, improvements to the command line tool and its Windows support, support for IRC over UNIX sockets, expanded functionality of security groups and mask items, support for automatically oping a user upon connect based on conditions including certificate fingerprint authentication, improvements to JSON logging, support for channel-context and for linking servers via UNIX domain sockets.

Bots

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

Botto (Node.js)

Additions include an optional cooldown period to observers and commands, ability to handle channel invites, rejoin functionality and many improvements to commands.

Calculon – library for writing bots and a collection of plugins (OCaml)

The main storage was switched to SQLite and it is now possible to make the bot join multiple channels.

cbot - bot with features implemented as dynamically loaded plugins (C)

Bot aliases can now be used and a birthday plugin was added.

Codybot – a Linux bot with C compilation and shell access (C)

Additions include commands for the date and cal programs.

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

Named timers and account tracking were added.

irccd - allows both C and JavaScript plugins (C)

Version 4.0.0 was released in February with the codebase rewritten from C++ to C.

JRobo - advanced bot with tons of features (Java)

Many code cleanups and smaller fixes were made.

kameloso (D)

A big plumbing renovation was completed. Windows setup was made easier. The Help plugin was made more flexible and a generic Timer plugin was added. The Twitch plugin received many improvements, including experimental support for polls.

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

The replace function of the Format plugin was made more convenient and support was added for channel-context. Improvements were made to the new Geography plugin that provides facts such as timezones.

Nibblrjr - bot framework for creating custom behaviour dynamically (Node.js)

Additions include automatic config reloading, a remote IO console viewer and debugger, expanded API for events and SQLite, webhooks and many new APIs.

PBot – a pragmatic bot (Perl)

Many improvements were made to the Virtual Machine applet that allows safe execution of arbitrary commands and code.

Skybot - multithreaded and multinetwork bot (Python)

The Wolfram Alpha plugin got support for conversation API.

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

Many improvements to plugins were made and the whole IRC backend was converted to use asyncio module.

Libraries, frameworks and utilities

chathistorysync - a synchronization tool for IRC chat history

Simon Ser created this handy utility for syncing a local chat log directory with a remote IRC server. The server needs to support the draft/chathistory IRCv3 extension. It supports incremental fetching of logs.

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

Additions include message tag parsing, ability to subscribe to multiple events and plugins for isupport, mode, names, nicklist, chantypes, mode aliases, away, ping timeout and oper state.

Dialect - IRC parsing library (D)

IRC string parsing was improved regarding special cases.

girc - a flexible library (Go)

Various code cleanups and fixes were made.

goirc - Event-based stateful client framework (Go)

Support was added for capability negotiation.

hii – a file-based client inspired by ii

Client certificate handling was made more robust and the installation now makes use of Go modules.

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

Channel name handling in events was made more robust and support for numerics was expanded.

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

Parsing of name!user@host IRC messages was rewritten, numeric definitions were expanded and a synchronous GetLabeledResponse API was added.

IRCKit - an asynchronous pure Swift library using the Apple NIO framework

Support was added for mode change events.

ircrobots Asynchronous bare-bones IRC bot framework (Python)

TLS support was improved.

ircstates - sans-I/O IRC session state parsing library (Python)

Casemapping performance was improved.

NetIRC - simple Portable client library targeting .NETStandard 2.0 and .NET Framework 4.6.1 (C#)

Handling of nicknames and PRIVMSG was made more robust.

PircBotX – library with IRCv3 CAP negotiation support (Java)

IRCv3 tags are now added to all events.

Pydle – IRCv3-compliant library (Python)

Many internal renovations were made.

superseriousstats - a fast and efficient program to create statistics out of various types of IRC chat logs (PHP)

Additions include an XXL stats page option for very large channels and a dark theme.

Bridges

Heisenbridge - a bouncer-style Matrix IRC bridge

IRC noise can now be forwarded to network room, support was added for relaymsg, znc.in/self-message and twitch.tv/membership. Users now have a STATUS command for checking what is connected.

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

The parser for Slack messages was rewritten, threads are now mapped to IRC channels and yelling can be ignored.

Matrix2051 - IRC server backed by Matrix

Started in 2021, this is Val’s take on enabling IRC clients to join Matrix servers.

matterbridge - bridges between a growing number of protocols

Support was added for client certificates.

teleirc – bridge to Telegram

IRC users now see Telegram replies and Imgur can now be used with an account and an album.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Version 2.0.11 was released in April with fixes to ldap and email encoding as well as fixes specific to UnrealIRCd and ircd-hybrid.

Atheme - for large networks with high scalability requirements

Hooks can now force account expiration, last seen times for logged-in nicks are no longer saved to reduce space used by the database and help was added for nickserv/loginnolimit.