IRC Client Library 7.1.0 released!

Version 7.1.0 of the Kitteh IRC Client Library has been released!


  • ChannelTopicEvent now has getters for the old and new topic.
    • The previous getTopic() method has been deprecated, as has the old constructor which won't properly support the new methods.
  • Added support for ISUPPORT parameter MAXLIST.
    • Includes multiple getters for making life easier.

IRC Client Library 7.0.0 released!

Version 7.0.0 of the Kitteh IRC Client Library has been released!

Wait didn't 5.0.0 just come out three months ago?

It sure did! Some more breaking changes were necessary to make coding easier for Twitch users.

Support for 5.1.x and 6.0.x

Both of these will receive fixes through June solstice. The breaking changes in these releases haven't been that big.

New things

  • Message Tags!
    • Commands now can be sent with message tags.
    • Added new commands for sending messages (PRIVMSG, NOTICE, TAGMSG) to take advantage of tags support.
    • Message tags can now be acquired via event.getTag() or getTags() for most events.
  • Custom channel/user modes can be added to ServerInfo, for servers that don't list all their modes.
  • ISUPPORT gets some love:
    • New ISupportParameterEvent for each ISUPPORT parameter acquired.
    • Added new ISUPPORT interfaces:
    • From the modern IRC docs this only means two remain
      • MAXLIST and TARGMAX.
      • Click the above to go to the relevant issues for input on how to best support them.
    • Every ISUPPORT parameter continues to be supported, just without convenience interfaces/methods.

Breaking changes

  • Sanity's notNull verifier now takes the possibly-null object name as the second parameter instead of the message to send.
  • Renamed getOriginalMessage() and getOriginalMessages() to getSource() to be more clear about what they are.
  • Batch and Connection events are moved to their own package.
  • Events are now by default containing a single source message, since most events are really triggered by such.
    • This allows for making message tags more accessible for most events.
    • The handful of events that come from multiple messages are now treated separately for storing source messages.

IRC Client Library 6.0.1 and 5.1.2 released!

Versions 6.0.1 and 5.1.2 of the Kitteh IRC Client Library have been released!

Bugs fixed:

  • Capability requests from the events will no longer request:
    • Capabilities already enabled.
    • The same capability multiple times.
  • Fixed issue with handling multi-line CAP LS messages.

IRC Client Library 6.0.0 released!

Version 6.0.0 of the Kitteh IRC Client Library has been released!

This is another MAJOR release coming fairly soon after the last one!

Oh no, I have to deal with breaking changes again!

Near-simultaneous to this release is version 5.1.1 which contains the only bug fix present in the 6.0.0 release. I plan to support 5.1.x with bug fixes for another few months, to allow time to update things. The breaking changes in this release are largely package or name changes, so the update process shouldn't be too bad regardless.

Let's talk changes!

New things

  • Added @MeCommandOnly filter for the CTCP events, which now also have a parent interface CtcpEvent.
  • CTCP handling is now friendlier, supporting even more broken input.
  • Added convenience methods to ModeStatusList (now an interface!) to get mode statuses by char input.
    • For example, you could get a channel mode change event's bans with event.getStatusList().getByMode('b');
    • Also added containsMode(char) method.
  • ModeStatus#isSetting() has become #getAction(), with an Action enum, to make things a bit clearer.
    • This changes mode-related commands.
  • IRCv3 message-tags capability support.
    • This capability indicates to the server that you can handle message tags including client-only tags, as well as TAGMSG.
    • account-tag, batch, and server-time also independently indicate supporting message tags, but only enable their own tags. This capability indicates accepting arbitrary tags (which KICL always supports anyway!).
    • Capability is now automatically requested if the server supports it.
    • Added method MessageTag#isClientOnly() to return true if a client-only tag (starts with +).
    • Added *TagMessageEvent classes for receiving a TAGMSG, which is a message containing only tags.
    • Maximum line length is now over nine thousand, to compensate for increased allowed lengths in this capability.
    • KICL now only keeps the last message tag of each name, per spec.
  • Networking customizability and DNS improvements.
    • You can now (why?) replace the Netty-based solution with your own, in the Client builder.
    • With access now to the NetworkHandler you can swap out the DNS resolver.
    • By default, the Netty system now uses a single JavaResolver for all connections, which should be sufficient for most setups.
    • I plan to write an improved resolver in the future, and welcome pull requests for such.

Breaking changes

  • Mode-related commands now use ModeStatus.Action instead of "need to read the javadocs" booleans.
  • AwayCommand methods renamed to away and notAway for clarity.
  • PrivateEvent no longer extends MessageEvent.
  • As part of making them accessible, NettyManager is now NettyNetworkHandler and its inner connection class is now outside and called NettyConnection.
  • ProxyType is now its own class in the network feature package.
  • AcceptingTrustManagerFactory, previously deprecated, is now removed.
  • ModeStatusList and ModeStatus are now interfaces (with default implementations).
  • Renamed ModeStatusList methods:
    • getStatuses -> getAll
    • getStatusString -> getAsString
  • DefaultModeInfo now properly lives in its own class.
  • Various packages migrated, mostly implementations.
    • Resolver, the interface, moved to the network feature package.


  • Updated to latest (4.1.33) Netty.

IRC Client Library 5.1.1 released!

Version 5.1.1 of the Kitteh IRC Client Library has been released!


  • Fixes bug where the client would throw exception instead of process being invited to a channel.
    • Also fixes other situations where not being in a channel is ok, but would throw an exception.