Ilmari Lauhakangas

IRC technology news from the first half of 2025

Categories: IRC

The pace of IRC hacking remained intense during the past development season, with desktop clients standing out in particular. One noteworthy new project is eIRC by Jesse Greathouse. It is proposed as an alternative to resource-hungry enterprise messaging systems.

Protocol specifications

IRCv3 logo

A work-in-progress spec was added for extended-isupport, which allows servers to send information to the client before connection registration.

Documentation

Modern IRC Client Protocol docs received updates and clarifications related to RPL_CREATIONTIME and RPL_LINKS.

Mobile clients

goguma - for mobile Linux, iOS and Android

Support was added for message reactions and deleting messages, a date indicator was added to help keep track of things while scrolling, notification handling was made more robust and initial support was added for ISUPPORT command and the work-in-progress metadata spec, making use of it to synchronise muted and pinned buffers when using the soju bouncer.

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

The Android and iOS apps received improvements to the parsing of CLIENTTAGDENY from ISUPPORT to enable Reply / Edit on more servers, a button was added for requesting a password reset from the login screen and support was added for displaying deleted messages. The Android version additionally got improvements in word wrapping and whitespace rendering.

Weechat-Android - WeeChat relay client for Android

An option was added to not move hot buffers to the top of the buffer list.

WeechatRN - WeeChat relay client for mobile using WebSockets

Keyboard handling was improved.

Reacting to a message in Goguma

Reacting to a message in Goguma

Web clients

ObsidianIRC screenshot

ObsidianIRC screenshot

gamja – a bare-bones web client

Support was added for deleted (redacted) messages and accessibility was improved.

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

Cloudflare Turnstile is now supported as an alternative to CAPTCHAs, the startup screen was made more customisable, plugins can now add buttons to the message info component and the UI was made more mobile-friendly.

ObsidianIRC – next generation client (TypeScript)

This client is very new and is built using React, TypeScript and TailwindCSS. Despite the newness, it already supports features like SASL authentication, typing notifications and replies.

Web-IRC – a feature-rich WebSocket client (JavaScript)

The initial release of this WebSocket-reliant client was in 2022 and now after a pause of a couple of years, development resumed again with additions such as SASL authentication support.

Desktop clients

MERK screenshot

MERK screenshot

Many fundamental features were added to this new client. IRCv3 implementations include typing notifications.

ERC - an Emacs IRC client

The spelling module now makes better use of Flyspell’s API and library access for ban lists was made reliable.

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

After a 3-year hiatus, work started on adding Qt6 support.

Halloy – cross-platform client written in Rust

URL links now get image and card previews, autocomplete can be customised, a full screen mode was added, notification behaviour can be tweaked, support was added for setname and Standard Replies, case mapping is now supported via ISUPPORT, Tor can be used as a proxy, using emojis was made more convenient, highlighting can be configured based on regular expressions and words, discovering and sharing themes was made easier, a modal prompt can optionally be displayed before opening a URL, easy ways to mark a buffer or an entire server as read were added and a /hop command for parting the current channel and joining a new one was added alongside lots of configuration options to control the look and feel.

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

Handling of character encodings was made more robust and an issue with sending multi-line messages was fixed.

KVIrc – client built with Qt

SASL EXTERNAL now supports sending an authorisation ID to help with ZNC bouncer connections and the KDE tray icon works once more for window activation.

MERK – cross-platform, multiple-document interface client

This is a new client from the creator of Ərk. Work started already in 2021, but only resumed during H1 2025. The client uses multiple-document interface style and has over 180 different settings to tweak. The project is currently looking for help in graphic design and figuring out an easy Linux packaging process.

mIRC – 95 ‘til infinity (Windows-only)

Dark mode is now supported on Windows, WebP images can be loaded and an option was added to shade alternate lines.

Pidgin - a multi-network/protocol chat application

Two experimental releases of Pidgin 3.0 were made (2.91.0, 2.91.1) with fundamental work going into features like message notifications and preference dialogs. On the protocol side, additions include IRC formatting and support for away-notify.

Polari - GNOME’s client

Work went into UI modernisation.

RudeChat - Python client designed to be fast, portable, and fun

The UI was ported from Tkinter to PyQt for better performance and macOS builds are now available.

Terminal clients

Irssi - your text mode chatting application since 1999

SASL authentication negotiation was made more robust.

senpai - TUI client made for bouncers

Support was added for RGB colors in Windows Terminal and pinning and muting user buffers per the METADATA spec.

SMDT - Sega Megadrive/Genesis terminal emulator, telnet and IRC client

Fixes were made to word wrapping and multi-line messages now look nicer.

Swirc - lightweight ICB and IRC client

Tab completion was expanded to more commands and the interplay with ZNC was improved.

tiny – client written in Rust

Some key handling improvements were made and support was added for mouse wheel events, mapping to message scrolling by default.

WeeChat - the extensible chat client

A /pipe command was added for redirecting command output alongside many other additions and fixes.

Bouncers

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

Screenshot of eIRC’s web client

Screenshot of eIRC’s web client

eIRC – an enterprise chat system based on IRC

As the tagline says, this new thing is really a system of applications, so could be included in most of the categories here. While it includes a JavaScript frontend, it works with any application supporting WebSockets. It ships an IRC protocol proxy written in modern C++ and a WebSocket server built inside Nginx workers. InspIRCd is used for the IRC server itself. A Laravel (PHP) application and a database handle persistent user management, chatroom metadata and authentication with OAuth2. An optional Redis-backed history bridge can be used.

soju – multi-user bouncer

Support was added for draft/message-redaction, improvements were made to the documentation (guides, man pages and command line help) and messages are now stored in a database by default.

ZNC - an advanced bouncer

Support for SASL v3.1 and v3.2, message-tags and invite-notify was implemented, unix sockets can now be used for listeners, connections and modules and performance was improved.

Daemons

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

Support was added for draft/webpush spec, allowing to make use of web push notifications, the draft/metadata-2 spec was implemented, an HTTP API was added, the configuration now allows to publish arbitrary ISUPPORT tokens, aliases for server commands can be defined and HTTP DoS attack mitigation was added.

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

The codebase received a cleanup after a 3-year hiatus and support was added for full Let’s Encrypt (ACME) TLS certificates via DNS-01 challenge supporting Cloudflare and GCore.

InspIRCd - stable, high-performance and modular

Support was added for help channels that grant privileges to helpers upon joining, the performance of message formatting was improved, an OpenRC init script was added and flag support was added to rline (regular expressions to block user connections).

Ircd-hybrid - a lightweight, high-performance daemon

channel::max_kick_length and general::max_away_length configuration directives were added to allow to specify the maximum length of KICK and AWAY messages that the server will accept from a client, DNS lookups can now be disabled with the general::disable_dns directive and general::ident_timeout now controls the wait time for Ident replies.

ProvisionIRCd - a modern daemon written in Python

The codebase received heavy restructuring and refactoring and support was added for draft/no-implicit-names.

Sable – an experimental chat server

Work continued on chat history.

Solanum - an IRCd for unified networks

Applying oper privileges was made more robust and the documentation was improved.

UnrealIRCd - the most widely deployed IRCd

The spamfilter was made more flexible, the antimixedutf8 spam fighting module was made more robust and a SPAMINFO command was added to give diagnostic information about a line of spam text.

Bots

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

Botto (Node.js)

Quote and stats commands were added, a Bluesky link parser was added and admin commands were added for suppressing commands and observers per channel and for checking which channels the bot is banned from.

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

Youtube shorts link parsing was added.

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

SCRAM authentication method for SASL was added, a notice is now displayed about expired TLS certificates at startup and owner login, a CHANSET bind was added to allow users to trigger Tcl procs when a channel setting is modified, a Python script tutorial was added and Python support was polished.

irccd - allows both C and JavaScript plugins (C)

An asynchronous Irccd.Http API was added and the auto-reconnect feature is now automatically enabled.

kameloso - IRC and Twitch bot (D)

The persistence service was improved and made configurable and Counter messages can now be sent as emotes.

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

The URL whitelist plugin is now channel-specific and many plugins received cleanups related to Python version checks.

PircBotX – library with IRCv3 CAP negotiation support (Java)

DNS resolution now works through proxies as well.

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

An option was added to only join channels after NickServ confirms a successful login.

Skybot - multithreaded and multinetwork bot (Python)

A Mastodon link parser was added.

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

The safety plugin that alerts about malicious URLs was made more robust and the tld and unicode plugins were extracted into separate packages.

Libraries, frameworks and utilities

Convoyeur - IRCv3 FILEHOST extension adapter to external file upload services (Rust)

The initial 0.1.0 release of this new utility was made in June. Convoyeur sits behind the bouncer or server that implements FILEHOST and proxies upload requests to other places.

Dialect - IRC parsing library (D)

A simple example bot client was added and RPL_WHOISACTUALLY parsing now works with IPv6 addresses.

go-ircevo - an enhanced framework for interacting with servers (Go)

New methods were added for nickname management.

Ibis - a GObject based library (C)

Support was added for handling modes and batches, IRC Formatting is now parsed into a format that UIs can use and client side pings were implemented.

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

It is now possible to send non-standard commands.

NeedleTailIRC - a Swift SDK for implementing IRC protocol functionality with modern concurrency features

Launched in 2024, this Swift package is now production-ready and can be used to build clients, servers and bots.

zircon - a simple library written in Zig

The initial release was made in March and by now the library supports basic commands, but not IRCv3 features. It is aimed for creating clients or bots.

Bridges

Dis4IRC - a modern Discord <-> IRC bridge

Discord Message Forwards now work.

discord-ircv3 – bridge with support for IRCv3 features

Reacts are now transmitted from IRC to Discord.

Heisenbridge - a bouncer-style Matrix IRC bridge

Support was added for media captions.

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

Nicknames are now marked as offline, if they are away on Slack.

Matrix2051 - IRC server backed by Matrix

Parsing of IRC message tags was made more robust, compatibility with Irssi regarding capability messages was improved and a matrix.org login issue was fixed.

Reliable Discord-client IRC Daemon (rdircd) - personal discord-client to irc-server translation daemon

Compatibility with irssi and ZNC was improved, history can now be automatically fetched and replayed from Discord servers and a recv-replacements configuration was added for blocking or modify received messages.

Services

Taking care of user accounts and channels among other things.

Anope – highly modular set of services

Many additions were made, including, but not limited to a redesigned RPC interface, support for JSON-RPC, example JavaScript and Ruby libraries for accessing the RPC interface, support for multiple targets in chanserv/modes, OPERONLY, UNUSED and VANITY filters for botserv/botlist, expanded Atheme import capabilities, support for “services cloak” system in InspIRCd, support for hashed operator passwords and support for code authentication via IRC.

Atheme - for large networks with high scalability requirements

The InspIRCd protocol module was improved.