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