Ilmari Lauhakangas

IRC technology news from the second half of 2020

Categories: IRC

In this article we look at the happenings in the IRC ecosystem during the second half of 2020. The great number of active software projects demonstrates a broad interest in specifying and implementing modern IRC standards.

The article was written in January 2021 and was supposed to be published somewhere else, but due to delays I decided to create this blog site to finally get it out.

It seems that the pandemic of 2020 with its influence on remote work and communication also had an impact on the interest in IRC. During the research phase of this article, it became clear that many were dusting off their old IRC projects and making them run on the latest software stacks. Numerous new projects had also entered development. For every active project included in this article, several others were left out due to being clearly personal, too young or still experimental.

Solanum symbol

From the perspective of the free and open source software community, the biggest news was freenode and OFTC staff collaborating on an IRCd called Solanum. Solanum is a fork of Charybdis, which has now been archived. For years, freenode has been using IRCd-Seven, which is based on Charybdis. OFTC has been using a modified version of Hybrid IRCd (still actively developed).

Note: freenode was later abandoned by most of its free and open source software communities in favour of Libera Chat due to an unfortunate ownership conflict. The collaboration on Solanum continues between Libera Chat and OFTC staff.

Protocol specifications

IRCv3 logo

A draft spec for channel renaming was published (Sadie Powell, James Wheare and reviewers).

A draft spec for CHATHISTORY was published (MuffinMedic, Darren Whitlen, Shivaram Lingamneni and reviewers).

The draft multiline specification received clarifications on handling blank lines and line feeds (James Wheare and reviewers).

CHGHOST capability spec was rewritten for clarity (James Wheare and reviewers).

Documentation

IRC Definition Files, Modern IRC Client Protocol and the collection for best practices all received some improvements and additions.

Mobile clients

IRC for Android screenshot

IRC for Android screenshot

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

The iOS app got some macOS platform compatibility fixes (unreleased).

CoreIRC – Android client

CoreIRC started offering a Lite version of its app. New features include experimental support for bouncers and /znc commands, improved nickname completion, sending commands to the server automatically after connecting and automatic reconnection support.

IRC for Android

The app was updated to include extended mIRC type color support.

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

In their new releases, IRCCloud’s Android app got support for notification bubbles and the iOS app got UI and stability improvements. IRCCloud’s IRCv3 Working Group representative James Wheare was very active in specification writing and reviewing.

Palaver - advanced client for iPhone and iPad

Two releases included adding support for additional character sets such as GBK and ZNC-related improvements.

Revolution IRC – Android client with Material design

The app was updated for security and platform compatibility.

Web clients

The Lounge screenshot

The Lounge screenshot

Many of these include support for persistent history, so there is some overlap with the bouncer category.

Convos

There was a continous stream of releases, totalling over 20. Things added include SASL authentication support, bot functionality, disk usage display, user management, IRCv3 capability negotiation support, backing up user input to browser’s localStorage and Jitsi integration

dispatch

Support for I2P anonymous network was added

ep_irc – a client inside your Etherpad page

JohnMcLear revived this alternate chat plugin for Etherpad.

gamja – a bare-bones web client

Simon Ser started developing the client in April 2020 and actively refined it throughout the summer. Gamja requires an IRC WebSocket server.

Glowing Bear - WeeChat web frontend

Version 0.9.0 added tab completion. Unreleased changes include support for new authentication methods.

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

Commits for the next release include improved multi-line message support.

The Lounge

Release v4.2.0 added a mentions panel, custom highlight exceptions and a new section for configuring SASL on the connect screen. Commits towards the next version include accessibility improvements.

Desktop clients

Ərk screenshot

Ərk screenshot on Linux

AdiIRC – freeware client for Windows

Release 3.9 among other things added an option to set custom icons for the default toolbar buttons. The next version will add serverlist options to set IRCv3 echo-message/server-time/SASL error/STS support per server.

Adium – multi-protocol client for macOS

Some macOS platform compatibility fixes were made (unreleased).

Circe - a client for IRC in Emacs

Unreleased improvements include faster nickname colouring and Emacs compatibility fixes.

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

The headless version of the client, grumpyd, which can be run like a bouncer, gained support for PostgreSQL databases.

HexChat - client for Windows and UNIX-like operating systems

Commits for the next release include improvements to font rendering and word splitting.

IceChat – client for Windows

Version 9.50 was released in July 2020 and it includes a year’s worth of improvements. Windows XP support was dropped and the nick list functionality was made more versatile.

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

Additions include support for changing usernames.

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

Several releases were made with features and improvements including support for nick icon themes from store.kde.org, capability negotiation spec v3.2 and znc.in/self-message capability

KVIrc – client built with Qt

Some minor fixes went in.

Lax - client built with Electron & React (JavaScript)

Maintenance work and a crash fix (unreleased)

mIRC – 95 ‘til infinity (Windows-only)

Three releases were made. A “Do Not Disturb” option was added to disable notifications along with many fixes.

Polari - GNOME’s client

Improvements were made to the thumbnailer and URL preview.

Smuxi – multi-protocol and cross-platform

Smuxi received some macOS build process improvements.

Srain – modern client built with GTK

Release 1.1.2 had improvements for Windows usage and build process. Most of the work after that was centered around a move to Meson build system.

Textual – client for macOS

Release 7.1.7 contained macOS platform compatibility fixes.

Thunderbird – email client with chat support

Version 78.0 added echo-message capability

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

Version 0.822 was released with official Linux support and many improvements to the in-built plugin editor alongside over a hundred fixes and tweaks.

Terminal clients

tiny screenshot

tiny screenshot

catgirl - TLS-only client

Part of the same IRC suite as pounce the bouncer. Had three releases, latest being 1.3. Line wrapping and new shortcuts were added and improvements were made to tab-completion.

glirc - Haskell library and console client

Eric Mertens released two new versions of glirc and the irc-core library. Improvements were made to SASL authentication and STARTTLS support was added. Unreleased improvements include new text formatting features and better rendering for stats and the output of many other commands.

Irssi - your text mode chatting application since 1999

Unreleased commits include many bug fixes and improvements to Perl scripting.

kirc - a tiny client written in POSIX C99

Initial release happened in August 2020 and over twenty releases followed.

Swirc - lightweight ICB and IRC client

Release 3.2.5 added commands related to network services and ZNC.

rirc - a minimalistic irc client written in C

Version 0.1.3 was released with support for TLS and IRCv3 CAP support.

tiny – client written in Rust

Two releases were made. Enhancements include more robust joining to channels requiring identification with NickServ, new /help command and lexicographical sorting of nicks.

WeeChat - the extensible chat client

Releases 2.9 and 3.0 contained many useful additions to WeeChat’s relay and scripting functionality. UTF-8 support with IRC was improved.

Bouncers

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

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

There is still no official release or a stability guarantee, but this new bouncer is getting more solid. Additions include custom message stores, support for the BOUNCER spec, a status endpoint, user mode tracking, STATUSMSG support, network blacklist

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

Pounce was created in late 2019. It is part of a whole IRC suite.

It saw three releases, 2.1 being the latest. Changes include better client compatibility, docs, support for OpenBSD.

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

Quassel is a bit unique in how it implements things, but is now aligning with the IRCv3 protocol. Several IRCv3 capabilities were added to Quassel core in late 2020.

Soju – multi-user bouncer

Simon Ser started developing the bouncer in February 2020 and managed to quickly attract an active contributor community. Soju supports multiple clients for a single user and connecting to multiple upstream servers via a single connection to the bouncer. Soju comes with a ZNC importer tool. Simon also started contributing to the discussions around IRCv3 specification proposals.

ZNC - an advanced bouncer

The 1.8.2 release contained a few bug fixes. The next release will have improvements to the channel view of the webadmin.

Daemons

eris - modern IRC Server / Daemon written in Go that has a heavy focus on security and privacy

Support was added for I2P and Tor.

InspIRCd - stable, high-performance and modular

Three releases with additions such as options for forcing bots to use NOTICEs instead of PRIVMSGs, and disengaging channel mode j (joinflood) when a server first starts up or splits from the network.

Ircd-hybrid - a lightweight, high-performance daemon

Six releases were made with changes such as replacing the WATCH implementation with IRCv3.2 MONITOR, implementing client capability negotiation and cap-notify as well as implementing user mode B for bots.

miniircd - a small and limited server with no configuration required

Version 2.0 was released with minimum Python requirement bumped to 3.6+.

ngIRCd – lightweight IRC server

Started in 2001, this IRCd is still going strong. Commits went in to improve the build process and to fix a channel listing issue.

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

Oragono saw three new releases with highlight additions such as tracking seen/missed messages across multiple devices, authentication of users via external scripts, import support for an Anope or Atheme database. Unreleased changes include an implementation for account renaming (NS RENAME) and improved support for reverse proxies.

Note: Oragono recently changed its name to Ergo.

txircd - Modular IRCd built using Twisted Python library

Some fixes were committed towards the next release.

UnrealIRCd - the most widely deployed IRCd

Two releases were made with fixes and minor enhancements were released. The next version extends the reputation command to make it easier to look for potential troublemakers.

Bots

BitBot – Event-driven modular bot (Python)

BitBot v1.20.0 was released in August with several features and fixes, including a ban enforcement module and much better line truncation

Bot::IRC (Perl)

Two releases were made with improved IPv6 and UTF-8 support

Botto (Node.js)

Additions include a reminder module and URL parsing for 4chan, Amazon and Twitter.

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

Release 3.0.0 added plugins for 8ball, seen, sed correction, ticker for stock information. The plugin support was made to be fully asynchronous and the codebase was migrated to Python 3.

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

Additions include sqlite database and functions to track users.

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

Additions towards the next release include support for channel keys.

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

Over a dozen releases were made with additions such as an admin list and improved CTCP support.

JRobo - Advanced bot with tons of features (Java)

Support was added for OpenWeatherMap API.

kameloso (D)

Two releases were made with new plugins for stopwatch and counter functionality.

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

Five releases were made with fixes and documentation updates.

MrNodeBot (Node.js)

Various fixes and cleanups went in.

PBot – a pragmatic bot (Perl)

Many improvements were made to the embedded scripting language Plang and its documentation.

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

Version 1.1 was released with cleanups and bug fixes. Unreleased changes include the addition of optional –nick –server –channels flags for convenience.

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

Three releases were made with fixes and compatibility improvements. Unreleased commits include the addition of a .chanlist command to show what channels Sopel is in.

Wild IRC-bot – an advanced and scriptable bot (PHP)

Code cleanups were made and tests were improved.

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

Three releases were made with improvements such as dynamic loading of plugins.

Yossarian-bot - an entertaining bot that’s easy to extend (Ruby)

Two new releases include the addition of a server ID to correctly match data files with a particular server.

Libraries, frameworks and utilities

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

Some fixes and cleanups were made.

Communi - framework written with Qt (C++)

After a four year break between releases, version 3.6.0 was published with lots of compatibility improvements and codebase modernisation.

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

Deno is a new JS runtime created by the creator of Node.js, Ryan Dahl and now there is an IRC library for it!

Grinch - lightly maintained fork of Cinch bot framework (Ruby)

After Cinch was declared unmaintained in 2019, Grinch continues to keep it functional. Small fixes were pushed.

HellaBot - a hella awesome bot framework written in go

Improvements were made to SASL authentication handling, IRCv3 user mode compatibility and documentation.

hii – a file-based client inspired by ii

Handling of NOTICE and PRIVMSG commands was changed to be distinct.

ident-proxy - forwards requests to multiple backend daemons (Go)

Created by Simon Ser to help with running multiple IRC servers on the same machine

irc – a full-featured library (Python)

Several bug fixes and improvements to the docs and compatibility were made.

irc3 – pluggable client library based on Python’s asyncio (Python)

Compatibility fixes and cleanups were made.

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

Release 4.9.0 made it so from_server property is included in action/ctcp/privmsg/tagmsg events.

ircrobots Asynchronous bare-bones IRC bot framework (Python)

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

irctokens RFC1459 and IRCv3 protocol tokeniser library (Python)

Jess published these projects in spring 2020 and all of them were actively refined throughout the year.

Kitteh IRC Client Library (Java)

Release 7.3.0 fixed a reconnection issue.

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

Various fixes and tweaks were made.

PircBotX – library with IRCv3 CAP negotiation support (Java)

Received a couple of fixes.

Pydle – IRCv3-compliant library (Python)

Fixes were made to IRCv3 tags parsing among other areas.

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

PyLink developer James Lu is looking for new maintainers for his ambitious project. More information on the situation can be read in his blog post.

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

Some fixes and tweaks were made.

Bridges

BitlBee – gateway to other chat networks

The Facebook plugin saw a new release with a couple of crucial fixes and the main application got build process improvements.

discord-irc

October’s 2.9.0 release brought big compatibility improvements with the Discord API

irc-slack

Alongside bug fixes and refactoring, multi-factor authentication support and a user cache were added.

matterbridge - bridges between a growing number of protocols

This ambitious bridge project had seven releases. Support was added for Nextcloud Talk and Mumble and stateless IRC bridging via draft/relaymsg.

teleirc – bridge to Telegram

Two releases included fixes and the addition of the ability to filter out messages with a configurable prefix.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Two releases were made with fixes and improvements to ircd-hybrid and InspIRCd modules

Atheme - for large networks with high scalability requirements

Commits for the next release include adding a silent rejection feature and no subsequent vhost requests feature.