Ilmari Lauhakangas

IRC technology news from the first half of 2021

Categories: IRC

This article is dedicated to the Finnish rap group Lyömättömät, who use IRC to interact with the audience of their national radio show.

Let’s look at the happenings in the IRC ecosystem during the first half of 2021.

Palaver ❤️ Ergo

A cool collaboration story during this period is Palaver iOS app working with Ergo daemon (formerly known as Oragono) in order to build a new standard on push notifications for IRC (Ergo issues 1527 and 1626 discuss the topic). Ergo now offers a network intended for production use. The network provides always-on, chat history and multiclient functionality out of the box, without the need to set up your own bouncer. It also supports relaying messages to channels on other networks, implementing the still unpublished RELAYMSG spec.

Protocol specifications

IRCv3 logo

UTF8ONLY ISUPPORT token defines a way for servers to advertise that they only allow UTF-8 on their network.

CHATHISTORY TARGETS allows listing direct message conversations.

Bot Mode lets clients mark themselves as bots and lets other clients see them as bots.

Documentation

IRC Definition Files got documentation for ERR_LINKCHANNEL and BOT ISUPPORT token as well as a bunch of fixes.

Mobile clients

KiwiIRC Mobile screenshot

KiwiIRC Mobile screenshot

AppIRC - iOS/Android client for The Lounge instances

Support was added for The Lounge 4.x.

Colloquy - an advanced IRC, SILC & ICB client for macOS and iOS

Support was added for 3.2 SASL authentication and various fixes were made to capability negotiation.

CoreIRC – Android client

On-demand chat logs for network channels and private chats were added. The UI got a facelift for dropdowns and text inputs.

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

In their new releases, IRCCloud’s Android and iOS apps received stability improvements and minor fixes. The experimental cross-platform desktop application got a new release with Apple Silicon support.

KiwiIRC mobile - iOS and Android version of the popular web client, built using NativeScript-Vue

The client was made public, but is not yet available in app stores.

Revolution IRC – Android client with Material design

A release was made with a crash fix.

Web clients

gamja screenshot

gamja screenshot

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

Convos had a very active period with 50 releases. Things added include support for WEBIRC spec, interface translation support, better user experience for +i (invite only) channels, support for connection profiles and chat input field sent messages/commands history.

gamja – a bare-bones web client

A new UI was added for network management, mobile support was improved and user mode displaying in channels was added. Support was added for many of the usual IRC commands, STATUSMSG, incoming INVITE messages and CHATHISTORY TARGETS (to avoid missing direct messages coming from other users), labeled-response, draft/event-playback and notification tags (multiple messages from the same user will only produce a single notification).

Networks such as Libera Chat, tilde.chat and Ergo started offering gamja instances.

Glowing Bear - WeeChat web frontend

Some build fixes and other small cleanups were made.

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

Support was added for setname, chghost and RPL_WHOISCERTFP in /whois. Image embedding with embedly was extracted into its own component so it can be replaced by plugins. Autocomplete was made more robust. The Jitsi conference plugin was rewritten to make use of recent KiwiIRC API improvements.

Prawnsalad handed over the leadership role of the KiwiIRC products to itsonlybinary.

The Lounge - modern web client utilising Node.js

A message search feature was added, inline audio file support was improved and ops context menu was made available also for half ops, admins and owners. Support was added for connecting through corporate firewalls using a SOCKS proxy.

Desktop clients

Iridium screenshot

Iridium screenshot

AdiIRC – freeware client for Windows

Version 4.0 was released with additions such as an option to run commands when drag/dropping files into a window, options to tweak tab completion behaviour and improvements to nick colouring.

Adium – multi-protocol client for macOS

Big updates were made to the build process.

Circe - a client for IRC in Emacs

Support was added for authenticating with SASL EXTERNAL and TLS client certificates.

GrumpyChat - Modern, yet oldschool client with distributed core, written in C++

WHO syncing was made smarter so as not to flood IRCds with requests for channel users.

HexChat - client for Windows and UNIX-like operating systems

Support was added for SETNAME, UTF8ONLY, invite-notify and account-tag specs.

Iridium – a native Linux client built in Vala and GTK for elementary OS

The first official releases, 1.0.0 and 1.1.0, were made for this new client. Initial support for browsing channels was added.

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

Support was added for chghost and cap-notify capabilities.

KVIrc – client built with Qt

Tentative support for Linux Wayland sessions was added.

Lax - client built with Electron & React (JavaScript)

Support for RECEIVE_NICK was added and a new release was made.

Loqui - client for GTK environments

The application was ported to GTK3.

mIRC – 95 ‘til infinity (Windows-only)

Two releases were made. Windows 10 Aero theme support was added alongside many small fixes.

Polari - GNOME’s client

GTK4 compatibility fixes were made and scroll position was made sticky when loading extra logs.

Smuxi – multi-protocol and cross-platform

Version 1.1 was released with many years' worth of additions such as an updated emoji catalog, revamped preferences dialog and CertFP authentication support.

Srain – modern client built with GTK

The move to Meson build system was completed, support was added for hiding the server buffer and sending sending special commands via /quote.

Textual – client for macOS

Version 7.2.0 was released with dark mode support.

Ərk - cross-platform client written in Python 3, Qt 5, and Twisted

Support was added for user mode display in channels. The systray menu was enriched with new functionality. The plugin system was replaced with a new one.

Terminal clients

senpai screenshot

senpai screenshot

catgirl - TLS-only client

A very active period for this young client. Improvements were made to scrolling and keyboard navigation and FreeBSD & OpenBSD compatibility.

glirc - Haskell library and console client

Initial support was added for multiline editing, a never-highlights setting was added to stop common words from being treated as nicknames and nickname completion was improved. DCC support was removed.

Irssi - your text mode chatting application since 1999

Version 1.2.3 was released with many fixes and improvements to stability. After the release, support was added for STARTTLS, aliases for ns, ms, os, cs shorthand commands and /IGNORE … NOHILIGHT to ignore some highlights.

kirc - a tiny client written in POSIX C99

Support was added for multibyte and UTF-8 characters. A command history buffer was added.

senpai - TUI client made for bouncers

First published in 2020, this client written in Go currently works best with soju bouncer. It supports shiny new IRC extensions such as CHATHISTORY and +typing.

Swirc - lightweight ICB and IRC client

Additions include a nicklist, new modes and options for TLS/SSL connections as well as numerous fixes and stability improvements.

rirc - a minimalistic irc client written in C

In addition to a bunch of fixes, code quality was improved.

tiny – client written in Rust

A bug fix release was made.

WeeChat - the extensible chat client

Support was added for new SASL authentication mechanisms SCRAM-SHA-1, SCRAM-SHA-256 and SCRAM-SHA-512. System certificates are now loaded automatically without having to define a path.

Bouncers

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

KiwiBNC – for one person or 10,000 people (Node.js)

A client id was added for identifing the connecting client in order to more accurately deliver unread messages.

pounce - multi-client, TLS-only IRC bouncer. Uses server-time extension to communicate with clients

Support was added for echo-message capability and Palaver (iOS app) push notifications alongside a generic interface for notifications.

Quassel IRC - cross-platform, distributed IRC client with a central core

Build fixes for macOS went in and the iconsets were updated.

Soju – multi-user bouncer

Additions include a fallback in-memory message store, a Unix socket listener, casemapping, per-user and per-network logging, CHATHISTORY BETWEEN & TARGETS, bouncer-networks extension, setname, account-tag and utf8-only. Handling of ISUPPORT tokens was improved.

Simon Ser’s request to the IETF for an IRC protocol ID in the TLS Application-Layer Protocol Negotiation (ALPN) registry was granted and support was added to soju. The ID can be used in cases where IRC over TLS is used with a non-standard port.

ZNC - an advanced bouncer

Message parsing performance was improved.

Daemons

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

Additions include a unified interface for bans and account suspensions, implementations for CHATHISTORY TARGETS, IRC-over-websockets (unpublished spec), bot mode and forward mode (channel mode that forwards unwanted users to a different channel, unpublished spec). Operators can now extend the maximum length of the IRC line using the server.max-line-len configuration key.

InspIRCd - stable, high-performance and modular

Support was added for per-DNSBL timeouts and a user mode which allows disabling receiving channel history.

Ircd-hybrid - a lightweight, high-performance daemon

Many bug fixes and stability improvements were made. Compatibility with OpenSSL 3.0 was improved.

miniircd - a small and limited server with no configuration required

Package was added to PyPI and –ssl-cert-file and –ssl-key-file options were added.

Solanum - an IRCd for unified networks

Additions include an +R channel mode module requiring a services account to chat, better OpenSSL support and nick change tracking for /accept list.

txircd - Modular IRCd built using Twisted Python library

A filtering mechanism was added for blocking specific text patterns across the network.

UnrealIRCd - the most widely deployed IRCd

The “Client connecting” notice and logging was enriched, an option was added for a network-wide restriction on the number of connections per IP address and the anti-flood feature was made more flexible. Support was added for database encryption, persistent channel history alongside the CHATHISTORY spec, the +draft/reply and draft/bot tags.

Bots

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

Bot::IRC (Perl)

Emotes (/me) are now sent as a CTCP ACTION.

Bot::Maverick - Mojo::IRC Bot framework (Perl)

The translate plugin was updated to work with the latst Microsoft API. A plugin was added for displaying link titles.

Botto (Node.js)

A parser for Twitch was added alongside various module improvements.

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

A command was added to search emojis from emojipedia.org, support was added for SASL authentication and logging was improved.

Cardinal – bot built with Twisted library with a focus on ease of development (Python)

Plugins for Wolfram Alpha, OMDb/IMDb, TVmaze and cryptocurrency prices were added as well as Twitter and imgur URL handling.

Chaskis - a framework for making bots (C#)

Support was added for specifying server and NickServ passwords through environment variables.

CloudBot – a simple, fast and expandable bot (Python)

A config reload hook was added and code quality was improved.

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

A !rawmsg command was implemented for sending direct data to the server and authentication can now be done with a .passwd file.

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

After three years of development, version 1.9.0 was released followed by 1.9.1. The massive amount of changes include support for CAP capabilities and SASL, a Twitch module, away-status tracking, a new ident module with oidentd support and ISUPPORT.

kameloso (D)

The Twitch functionality received many improvements.

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

The Relay plugin was made more robust and received an implementation for +draft/display-name spec. An option was added to disable password login. Support was added for bot mode, receiving commands from draft/multiline batches and an initial implementation of the early draft @register and @verify commands was made.

Maiden - an extensible and highly modular bot framework (Common Lisp)

Support was added for SSL and showing logs with a command.

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

URL scraping was improved and some new commands were added.

PBot – a pragmatic bot (Perl)

Modules were added for Bash FAQ & pitfalls and a command line interface to online language translators. Many improvements to IRCv3 support was made and SASL authentication was implemented.

Pybot – an extensible, modular, configurable, and multi-threaded bot (Python)

A task scheduler was added.

Scala-IRC-bot - PircBotX based bot (Scala)

Support was added for using an external HTTP proxy for outgoing requests and setting server password and ident in configuration file.

Skybot - multithreaded and multinetwork bot (Python)

Wikipedia plugin was fixed and a tarot card plugin was added.

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

Tracking of channel modes and members was improved, a .raw command was added to send raw IRC messages, support for BOT ISUPPORT token & mode was added and docs were improved.

Valeyard - link IRC with SQL databases (PHP)

This new bot supports reading and writing to Anope SQLdb tables, writing various stats and information from UnrealIRCd to its own SQL tables, reading and writing to WordPress SQLdb user tables, TLS connectivity, message-tag and SASL authentication.

Yetibot - extreme chatops bot for Slack and IRC (Clojure)

An air quality subcommand was added to the weather command.

Libraries, frameworks and utilities

Dart IRC (Dart)

Code quality was improved.

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

Some refactoring and smaller fixes were made.

Dialect - IRC parsing library (D)

Validation of nicks and idents was made more robust.

girc - a flexible library (Go)

Message serialisation was made more robust.

goirc - Event-based stateful client framework (Go)

Nickname handling was improved.

IRC::Client - Extendable Internet Relay Chat client (Raku)

Mode handling was improved.

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

Functions related to CASEMAPPING were added. Support was added for BATCH in events, time in invite events, RPL_UMODEIS, RPL_WHOISASN and MONITOR.

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

The package ircreader was added for optimised reading of \n-terminated lines. Message truncation was made more robust. Support was added for batch and labeled-response.

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

Handling of overly long messages was improved, support was added for echo-message.

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

Support was added for the channel renaming spec (RENAME) and the ISUPPORT parameter for nickname length.

irc-police - stateful, transparent IRCv3 proxy that tells you why and how IRC software is fucked up

taiite made public this handy tool for IRC developers.

Kitteh IRC Client Library (Java)

Support was added for standard replies, setname, labeled-response, typing and the ISUPPORT parameters CLIENTTAGDENY and TARGMAX.

miniirc - a mini IRC framework (Python)

The ability to make miniirc run handlers in thread pools was added.

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

Additions include an ability to create custom message handlers, simpler constructors and CTCP handling. A client, NetIRC.Desktop was created using the library.

OCaml IRC client library

Support for SASL authentication and logging was added.

PyLink - multi-network IRC Services & server-side relayer

Stability, casemapping support and docs were improved.

The irc crate - thread-safe and async-friendly client library (Rust)

Certificate handling was improved and some smaller fixes went in.

WIC - WeeChat IRC Crypto (Go & Python)

First published in 2020, this utility combines a WeeChat Python script driving an external cryptographic helper written in Go.

Bridges

irc-slack

Reliability and performance was improved and full support for private channels was added.

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

Support was added for Unicode emoji and downloading direct message history. An option was added for saving long formatted text as .txt files.

matterbridge - bridges between a growing number of protocols

Support was added for vk alongside many improvements to other protocols.

teleirc – bridge to Telegram

Photos sent via Telegram are now viewable from IRC via an imgur link.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

The InspIRCd modules received several improvements, the database charset was switched to utf8mb4 in relevant tables and the database engine was switched to InnoDB.

Atheme - for large networks with high scalability requirements

Support was added for adjusting default mode lock (MLOCK) and deleting all restored marks on an account. The example config was greatly improved. An operserv/modmanager module was added to replace four old modules. Many improvements to stability and code quality were made. Code quality assurance was improved by automating Coverity scans and making the code more understandable for Clang’s static analyser.

Thanks to Mikaela for reviewing parts of this article!