IRCv3 is shaping to be amazingly good!
here's the things it offers, today, right now, on a chat server we just set up in one evening:
here's the things it does not offer:
caveat: since IRCv3 is a true extension of IRCv2, the features listed above work if they're supported by both the server and the client. in my onboarding experience so far, people do not find it difficult to find a suitable client, but your mileage may vary. on the flipside, legacy clients will work just fine.
unexpectly, i realized that IRCv3 can completely replace Matrix rooms for my own group chat purposes, and i'm probably not going to set up any Matrix homeservers again; it's just not worth it and frankly I should instead put that effort into coming up with a file upload IRCv3 extension or something
@whitequark can you still use an irc client that doesnt support ircv3 in a server/channel with ircv3 users?
@artemis yep! it just falls back to the 'classic experience'
you can do things like type /chathistory manually and get old messages retransmitted to you, like it's a bouncer
@whitequark im very set in my ways with irc and will probably never quit my irssi-in-tmux-on-a-server ways lol
@artemis i quit that for matrix after it became personally unusable for me but yeah that works just fine still
@mcc You are in queue position 5 of 10 to download CATDANCE.GIF
in summary, i feel incredibly validated in being a long-time IRC holdout :D
Which network is going to be the first to shift to this, do you speculate?
@futuresprog Libera is rolling out IRCv3 soon, which is going to be big https://libera.chat/news/new-and-upcoming-features-3
@groxx yeah it just works the way you'd expect haha
@fruitcakesareyum @groxx keeping chat history with intermittent connectivity or machines not always powered up
@whitequark Intriguing. Any recommendations for compatible servers and clients?
If session persistence is a thing now, that feels like a real step forward for IRC (having to use a bouncer or a client running on a server somewhere is a high bar for a lot of people, especially more casual users).
@whitequark Hm. Would the server lose the backlog and the rest of the state if it's restarted, or is it supposed to store it all now?
Feels like this should have been news from around 2000.
@whitequark Iāve found myself thinking of going back to IRC, and this gives me more reasons than I has hoped for!
Ps. I think everybody is finally using Utf-8.. please? š
@gimulnautti yes, UTF8ONLY is a feature now
@whitequark
File uploads could probably be kludged exclusively on the client side with something like
```
START FILE UPLOAD
METADATA <metadata>
BODY <base64 file contents>
END FILE UPLOAD
```
although it would be problematic in that it would show up as spam for anyone without the client extension, and would be less efficient than a binary solution. It could work the same with image, audio, video, and stickers, since those are all just specially tagged files. Could even work for streaming (hence live audio/video calls) if the files are chunked right, maybe adding CONTINUE BELOW and CONTINUED FROM ABOVE indicators.
Of course, that would be stupid, since a 2MB file would take more characters than make up the entire LotR trilogy (~2.3M) under this encoding scheme, all of which would be shown in their raw form to any user with an incompatible client (unless IRC lets users handle this somehow). Maybe there's a reason people leave some things to the server.
I realize I have just given an oversimplified description of how XMPP handles (or maybe handled, depending on implemented XEPs) file uploads.
(please don't interpret this as me trying to fedisplain how you should implement a file upload protocol. don't implement it this way, please.)
@anonax I have XMPP file transfer trauma. for reals.
I still remember what bz2|base64 starts with because it was more reliable to do that to send small files.
(it's Qlp...)
Yeah. IRCv3 is good, unless you dont care about one of basic features of all modern instant messaging: presence.
@nawanp matrix has no presence, discord technically has it but ime it has no correlation whatsoever to whether i'll get a response so... yeah? i don't care about presence
@nyx "year of IRC on phones" is probably the true correspondent though hah
@nyx goguma is very barebones but like. It does let you chat just fine
I totally agree with the uploads, I should either start or join a draft spec for this
@nyx @whitequark is there actually a good mobile IRC client now? last i checked the landscape was quite bad. there was like one mobile client i kind of liked that supports modern features but it only supports connecting to one server at a time (which makes it completely unusable)
ATM iām just using IRC over Biboumi (XMPP-IRC bridge) and Conversations (XMPP client).
@fiore yes but it is a specialized fussy skill not a lot of people have
@nyx yeah i can't argue with that
btw file uploads are being actively worked on so i'm quite hopeful about 2026 being the year irc comes back
@whitequark Is there a particular section on ChanServ? It's where most balancing goes for networks.
@whitequark Splits and joins, flooding chanserv with re-opping/voicing and stuff.
@7adi there should be improvements here but as i havent seen how they work in the wild yet i can't comment
@whitequark I described IRC to a friend recently as the cockroach of chat protocols.
It's old, it's barely evolved in 30+ years (millennia in computer-years), it's ugly... but it's also impossible to kill and will probably outlive everything else on the planet.
When the asteroid strike or nuclear war or whatever extinction event finally wipes humanity off the planet, the roaches and extremophile bacteria will be IRCing each other via whatever remnants of the internet are still functional.
Actually, it has. The difference is that, unlike XMPP and other centralized IMs, presence in Matrix is part of room state synchronization. But because of this, presence is heavy and far from scalable (see https://github.com/element-hq/synapse/issues/9478).
Oh, and I forgot to mention that IRC also lacks a roster (a.k.a buddy/friend/contact list). But depending on your needs, I think this can be both good and bad.
@nawanp if it's not enabled on matrix.org due to scalability issues it might as well not be a real feature, which is how I treat it
@val not gonna lie, I haven't expected to be excited for any chat system a few days ago when I first set ergochat up, but I am definitely excited about IRCv3. very much "the right thing, in the right place, at the right time"
some improvements are needed for it to be really widely usable but it's already at a point where beating 2005 statistics seems like it could happen
@whitequark so I always thought one of the biggest issues with IRC was the fragile spanning tree structure of the network. Is that still there in v3?
@robot I haven't personally seen any stubbornness, my impression was it's mostly just age of ircds and development constraints (but I mostly care about Libera)
@whitequark The hard part is still that this experience breaks down as soon as you need to join an existing community which does not run on a modern server
@whitequark @fruitcakesareyum the bane of mobile devices in particular.
basically you completely lose chat history while offline, because there is no chat history in IRC*, servers are practically just a fancy ephemeral signal-repeater*. so a bouncer would stay always-connected for you, keeping that history, and would replay* it when you reconnected.
last time I used irc moderately, I did it via irccloud, which acts as a bouncer for you. ircv3 might mean I no longer need that, but otherwise I liked it a lot (a couple years ago), definitely recommend.
*: drastically over-simplifying to the point that it's no longer accurate, but I believe it fits the user experience / need well enough
@fruitcakesareyum @groxx it's not quite public (you can set it up so newly joined people can only read history since they joined)
@val this is not an issue for the "i need a not discord please" use case at least
@davidgerard v3 says nothing about s2s comms, but Libera folks are also working (separately) on improving that
personally I just run a single IRCd instance because I do not need more distsys nonsense in my life and a single midsized VPS can handle thousands of connections already
@davidgerard anecdotally, I haven't found that netsplits are a problem on modern IRC; they are no longer a gaping security hole, so it is just a minor annoyance that v3 essentially hides from view by having history retrieval and message grouping (for bulk joins/quits)
@whitequark That sounds really cool!
If someone wanted to experiment with self-hosting a small, non-federating IRCv3 server on Linux, what would you recommend?
@alxndr here's a complete NixOS configuration for that: https://forge.whitequark.org/whitequark/fluffy.engineering/src/branch/main/server
@whitequark @futuresprog they've had "IRCv3 support" since inception AFAIK (I believe even freenode had it)
what they're rolling out is support for some extensions to IRCv3, in particular the `message-tags` specification which will support things like `+draft/reply` by adding a new capability to add a bunch of metadata to a message (which involves bumping the line length up 8191 bytes, allowing for just under 4K of tag data)
IRCv3's capability negotiation is such a powerful way to let the ecosystem continue to grow in a way that allows more granular specifications
@whitequark @futuresprog it doesn't really help matters the IRCv3 working group has just kinda given up on versioning the whole thing and now there's "the modern IRC protocol" at the core and the cloud of extensions
so there's no versioned document you can point at and say IRCv3.x as there was with IRCv3.1 and IRCv3.2, and I'm not sure the smaller granular extension specifications have any versioning either. it all manages to hold together nonetheless, I guess because they don't make breaking changes (because all in the extensions, the core got it very right pretty early, especially if an implementation has the combination of capabilities AND tags)
@SnoopJ @whitequark @futuresprog yeah the whole point of v3 is the capability negotiation mechanism, with everything else being optional and up to the client to choose, so you can't really version it
@classabbyamp @SnoopJ @futuresprog it's like USB type-C!
@pounce yepyep I figured this out and added an edit!
@pounce I am incredibly impressed yeah!
@whitequark unfortunately you still need a bouncer for mobile clients. goguma+soju are great but no other pair supports their extensions
@oreolek I use goguma with ergochat and no bouncer
@whitequark for someone like me that wants to try out an IRCv3 stack after years out of the IRC ecosystem, is there a particular server you'd recommend?
@jbcrawford server software or server?
@whitequark A serious question: I see that the major strength compared to Matrix is simplicity. How does IRCv3 compare to XMPP? I often find people mumbling about XMPP, but I don't really know why.
@vojta001 I used to be an XMPP diehard years ago and I'm quite happy with IRCv3 today, but I haven't used 'modern' XMPP much
IRCv3 has no E2EE obviously
@whitequark Some of the features are actually pretty awesome for IRC (and standard in most other protocols already).
But even āthe IRC from back thenā was capable of a lot of great stuff. Unfortunately pretty much ALL clients focused on simple text chat only and there were literally (literally, not figuratively) no āmodern clientsā using all of the features to create an experience that is similar to what we have today in most non-IRC chat clients.
@whitequark
Can it be set up to only keep the last x messages so there's some level of anonymity/ephemerality without compromising the experience?
@fruitcakesareyum @groxx
@ddlyh @fruitcakesareyum @groxx I haven't looked but worst case you could make a cronjob to clear the database if you want a very specific setup
@whitequark
I thought IRCv3 was going to include reliance on a cryptocurrency blockchain? Did that horrible proposal get defeated?
@whitequark software. I'm looking at the comparison table on IRCv3.net and it seems like Ergo is the most feature complete, but I value any opinions on what to try out.
@whitequark @ddlyh @fruitcakesareyum tbh I suspect this is something servers will add support for pretty quickly, if the first v3 supporting versions don't have it - not wanting a full history seems fairly common in the IRC world, relatively speaking
@groxx @ddlyh @fruitcakesareyum basically every channel i'm in is publicly logged and indexed forever, so I can't relate personally
@whitequark @ddlyh @fruitcakesareyum very much same, and for any large or public channel I think that needs to be assumed regardless.
but not all servers fit that profile, so ĀÆ\_(ć)_/ĀÆ
@groxx @ddlyh @fruitcakesareyum yes, I'm just saying that I'm not the one you should consult here haha
This diverges significantly from IRC protocol, and if they start allowing non-text payloads (malware vector) they should change the protocol name to be clear and not sully the good name of IRC.
@whitequark @oreolek for ergochat servers, thereās basically no reason to run a bouncer. if youāre on multiple servers where some of them donāt have chathistory (or like a ton of servers in general), then it does make sense to run soju (which does support multiple users if needed, and there are hosted services for it, e.g. chat.sr.ht ).
@ignaloidas @whitequark there is a lot of sense to run soju because ergo has no webpush
https://codeberg.org/emersion/goguma/src/branch/master/doc/notifications.md
https://github.com/ergochat/ergo/issues/1527
@oreolek @ignaloidas but it has chathistory, should be fine, no?
@whitequark @oreolek webpush is for notifications when you get mentioned without the IRC app maintaining a connection to the server - kinda useful for phones, but I donāt find it that much of a deal
@ignaloidas @oreolek right, I guess I use IRC very asynchronously
@whitequark this, very much this.
I have told people in a few different avenues that I regret recommending Matrix and that we should go back to IRC, and everybody keeps being snarky about it, even after telling that IRCv3 has actually the parts that are useful. Then the snark goes to saying that IRCv3 is vaporware. Which I debunk, then the moving goalpoast goes to the lack of stickers and/or reactions, then finally to IRC servers being hard to run (rich, coming from people who never set up any chat server, while I have), and so on. It gets tiresome. The last one I heard: ābut then I need an IRC client and I cannot just use a browser tabā š¤·āāļø
@aperezdc oh man these people sound tiresome
i was a heavy ircv3 skeptic (despite consistently relying on irc for the past... 15 years? libera's adoption was slow) but all it took was one evening to play with it to understand that it really is very different now
@whitequark ah, sorry about the ranty post, I realize that maybe you didn't want to read that... But yeah, IRCv3 is neat, and it is actually a real thing people can use today.
@whitequark Funnily enough, user+password auth was one of my criteria when picking an IRC(v2)d a few years ago. I didn't feel like setting up services and felt that "user+pass lets you in and gives you a 'vanity domain'" was Good Enough between trusted participants.
(The server is publicly reachable for Reasons but auth is required.)
@snowfox also, i think would be quite silly to have chat software in 2026 that is dangerous to expose to the internet!
@whitequark Do you host your own server? What communities do you hangout in? My experience so far has been most communities are on Libera and OFTC which don't support most of the v3 features (libera will support message tags soon though š„³). Soju as a bouncer has been nice though to deal with lack of v3 features on those networks.
@hazematman i host a private server yeah
@whitequark this is really exciting! out of interest, assuming it might be some time before libera/oftc get v3 support, is there some kind of "bouncer" i could run to use an ircv3 client with these servers to basically just get a more reliable version of what i have today with ZNC, per-client history replay, and the push plugin?
@whitequark oh sweet! i'm so gonna switch to that. thanks :)
@codimp i use ergochat, goguma, and halloy; there's nothing special in the configuration, it follows the projects' docs
Thatās a more clever way to upgrade a federated system without a huge cutover
@whitequark
Wow that really sounds great and promising, thanks a lot for sharing this very nice and quite exhaustive summary!
Here I've actually never stopped using IRC (plus its relative simplicity makes it really easy to implement useful status bots).
Note that if we won't really need bouncers anymore, we could still use these for a smooth transition until more networks adopt IRCv3. ZNC for instance implements more and more server and client IRCv3 features
@whitequark oh, very cool. I wonder if now would be a good time to revive my IRCaudio extension I was working on for Mumble-esque audio channels
@whitequark @ddlyh @fruitcakesareyum yep, sorry, definitely didn't mean to imply you weren't aware, just vocalizing my thoughts :)
@whitequark
I didn't even realize there was a v3. I have a rabbit hole to go down...
Neat! I'm already there. I guess I'd better update my irssi to take full advantage of the features.
@futuresprog @whitequark yeah i need to find myself an ircv3 capable client I'm still using Pidgin which I started for AIM, MSN, Yahoo, and IRC.
Of those, IRC is the only one still around.
@azonenberg @futuresprog @whitequark I'm still using finch in screen on a linode...
@artemis @whitequark as already explained by the OP: categorically yes. however some things won't show up right; the server isn't supposed to send non-v3 or partial v3 clients things they don't support #lang_en
@whitequark does it or will it support end to end encryption by any chance?
@shaadra I am not aware of an up to date, well designed, secure E2EE overlay over IRC; someone may eventually port MLS on top of it but I think it probably makes more sense to discuss things needing E2EE over Signal or whatever
šš¦ššš¤
@whitequark I agree that this sounds like the perfect tool for (public) forums and communities
since you mention replacing matrix ā can it do encryption?
@fun I very specifically do not want to ever run a bouncer. if I have to run a bouncer I might as well run a Matrix bridge instead! (because this means others do not have to run bouncers)
@whitequark Maybe itās worth noting that several of the features you mention (including chat history, which for me was the number 1 thing missing from old IRC) are still officially ādraftā extensions.
@2something from a standard developer's point of view this is very important, but from a user's point of view not so much (considering the draft versions are unconditionally, and in some cases widely, implemented in clients and servers)
@fun that's going to continue to be maintained indefinitely (the one caveat being that if m-a-i is no longer developed and gets some critical vulnerability, I reserve the right to shut it down on a short notice)
@fun the bridge is on a critical path between a discord<>irc connection for glasgow/amaranth so it kind of has to stay in place
@fun what is RELAYMSG?
any bridge that replaces m-a-i has to provide the same user experience (being able to tab-highlight and ideally DM users across the bridge either direction)
@fun ok, I don't see any point in running it then
@artemis @whitequark yes, that's what i do with irssi. my client has virtually no ircv3 support (none of the fun features), but i can still join ircv3 servers (ergo) and chat with ircv3 clients (halloy, etc.).
even if your client doesn't support ircv3, you can still /quote history #channelname and receive chat history! (i prefer to have an irc client that runs 24h/7, but in case of a power cut, that's an option)
@whitequark any mobile client suggestions? Ive only tried goguma and weechat-mobile. At the end i just use senpai in termux
@whitequark im curious if e2ee encryption can be achieved using ssh (eg. https://github.com/shazow/ssh-chat)
@whitequark I really like that client with compact mode, but there is sadly no fontsize setting yet.
@fox_dev_random yeah it's barebones...
@teajaygrey @whitequark i think sshchat could implement custom names but i guess using the username was just easier. guessing this is just a proof of concept
silc?
@azonenberg @whitequark @classabbyamp @SnoopJ @futuresprog So you're saying that getting heated over IRC conversations is a _feature_.
@MrDOS @azonenberg @classabbyamp @SnoopJ @futuresprog always has been!
@whitequark Now I just need to wait for the networks I use to roll it out or finally find a bouncer that will work properly with SASL and not have me end up logged in with a different nick after a bit of network instability...
@whitequark Did that as well for me the other day, but initially it refused to connect with SASL at all, had to connect with a different nick, /msg NickServ REGAIN [...] and then activate SASL, then it reconnected without issue.
Haven't looked into it further, I don't know IRC well enough to have a real clue what I'm doing to be honest.
@kaki right, I don't use bouncers so I'm not of much help either
@fiore @whitequark @nyx but what about āyou donāt need a bouncerā ! the first words in this thread!
@fiore @nyx @whitequark i should probs look into soju later though. my last experience with ZNC was pretty bad iirc, i assume soju is at least 1 grillion times better
@whitequark @aperezdc I was a bit mixed on IRCv3 too, the discussion at the freenode live keynote in 2019 was⦠a bit scattered and i dont think people understood what people ment by emotes.
but as soon as i had started interacting with it in a limited way with Twitches usage, and then using it more this year after setting up soju, it looks super promising
(i think emotes could be added like twitch does using message tags, but with the emote ID replaced by a URL for the emote, this makes support optional and still puts something useful in chat for clients that dont support it)
@whitequark @oreolek basically same, itās nice if you want a more real-time experience, but not that useful for the more asynchronous style
@ignaloidas @whitequark it's not about realtime replies, i have 300+ people in IRC chats (relays) and don't want my phone to drain battery loading new history all the time but still do want my nick mention alerts
@oreolek @whitequark it will load history only when you open it tho? (if youāre connecting to a chathistory enabled server/bouncer, of which ergo is)
@fiore @nyx @whitequark it only bounces itself, and lets you view chat history via the draft/chathistory extension. if client doesnāt support that you can log in with a @device appended to your sasl username and itāll keep track of history you miss while offline and replay just that next time you connect. soju apparently also has this which makes it giga epic and it already completely mogs ZNC
@oreolek @whitequark eh, I see that as a fairly minor thing, but yeah, could understand it for that
@whitequark Do you know of any good guide to get all (or most) of this setup?
I am still running a bouncer and have my NickServ setup, but I don't want to fall behind on the latest benefits of IRC. š
@fleischie28 if you use Nix, https://forge.whitequark.org/whitequark/fluffy.engineering/src/branch/main/server
if you don't use Nix, no idea
@whitequark although perhaps no federation as such (i.e. walled garden, barring the negative connotation), i.e. you need to create local user on the IRCv3 network one wishes to join, so less akin to Matrix ( which XMPP can substitute), but more like substitute for discord.
@abbe irc hasn't had federation "like matrix" since eris got booted out of the original irc network