Six servers,
one single program
Service-Overtchat installs in full — services, moderation, admin panel and website — in front of six different IRC servers. Each one speaks its own server-to-server language; the program speaks them all. What changes from one server to the next is not what gets installed, it is what the server then allows.
The six servers, and what has actually been tested
An IRC server does more than relay messages: it also talks to its peers, in a language of its own. That language — the server-to-server protocol — decides what a service like this one can ask for. The six families below are not variants of a single dialect: P10 is a different protocol, with its own identifiers and its own verbs.
| Server | Version tested | Protocol | State |
|---|---|---|---|
| Overtchat-Hybrid Written for this network, in C11 | 1.x | och | in production The public network’s server since July 28, 2026. It speaks the vocabulary of UnrealIRCd 6, from which it derives. |
| UnrealIRCd unrealircd.org | 6.x | unreal | link tested The most complete dialect: the one IriX was first written for, and nothing is missing. |
| ircd-Hybrid ircd-hybrid.org | 8.2.47 | hybrid | link tested Link brought up and verified, services opped on the service channel on the very first try. |
| InspIRCd inspircd.org | 4.11.0 | inspircd | link tested Link brought up by the bot itself on July 31, 2026: probe answered, burst of an already populated channel read, five opped pseudo-clients seen by a witness client. Its WHOIS does not cross servers — presence is checked another way there. |
| Bahamut DALnet | 2.2.4 | bahamut | link tested Link brought up by the bot itself on August 1, 2026. The only server on the list without internal identifiers: its clients are designated by their nickname, which therefore changes when they rename themselves. No protocol documentation exists — everything comes from its source code. |
| ircu (Undernet) undernet.org | u2.10.12.19 | p10 | link tested A different protocol, not one more dialect: prefixes without colons, one-letter verbs, base64 identifiers. It works, with the limits listed below. |
“Link tested” means something precise: a link was brought up against this server, its five pseudo-clients were introduced on it, and an ordinary client could see that they were there — all while checking that the opposite really failed when the defect was put back. It is not “it should work”.
What each server allows the services to do
This grid is the same table the IriX services publish in the database for the admin panel: the panel greys out whatever is marked with a cross, and gives the reason instead of showing a button that does nothing.
| What the service wants to do | Overtchat-Hybrid | UnrealIRCd | ircd-Hybrid | InspIRCd | Bahamut | ircu (Undernet) |
|---|---|---|---|---|---|---|
| Change another client’s modes | compatible | compatible | compatible | compatible | compatible | not compatible |
| ircu (Undernet) — No SVSMODE: ms_mode rejects a MODE aimed at any client other than its source, and alerts the operators. | ||||||
| Force a nickname change (SVSNICK) | compatible | compatible | compatible | compatible | compatible | not compatible |
| ircu (Undernet) — No equivalent of SVSNICK: the only recourse is to warn, then disconnect. | ||||||
| Force someone into a channel | compatible, with a caveat | compatible | compatible | compatible | not compatible | not compatible |
| Overtchat-Hybrid — Goes through the ordinary JOIN: +R, +O, +b and +i apply to the client being brought in. Bahamut — No SVSJOIN: include/msg.h has no trace of it. ircu (Undernet) — No equivalent of SVSJOIN — irix-operjoin.tcl is entirely inoperative. | ||||||
| Force someone out of a channel | compatible | compatible | compatible | compatible | not compatible | not compatible |
| Bahamut — No SVSPART. ircu (Undernet) — No equivalent of SVSPART. | ||||||
| Mark an account as identified | compatible | compatible | compatible | compatible | not compatible | compatible, with a caveat |
| Bahamut — The “servicestamp” is set when the client is introduced and can no longer be changed. ircu (Undernet) — AC sets an account, but no operation removes it. | ||||||
| Mask the host (vhost) | compatible | compatible | compatible | compatible | compatible | not compatible |
| ircu (Undernet) — Masked host derived from the account, with +x: no arbitrary vhost. | ||||||
| Change the ident | compatible | compatible | not compatible | compatible | not compatible | not compatible |
| ircd-Hybrid — No equivalent of CHGIDENT: no module, not a single occurrence in the 8.2.47 source code. Bahamut — No equivalent of CHGIDENT. ircu (Undernet) — No equivalent of CHGIDENT. | ||||||
| Disconnect someone from the network | compatible | compatible | compatible | compatible | compatible | compatible |
| Ban from the whole network | compatible, with a caveat | compatible | compatible, with a caveat | compatible | compatible, with a caveat | compatible, with a caveat |
| Overtchat-Hybrid — Only four types: G, K, Z and Q. ircd-Hybrid — Four separate commands — KLINE, DLINE, XLINE, RESV — where TKL covers as much on its own. Bahamut — AKILL, SQLINE and SGLINE, each with its own form — no single command. ircu (Undernet) — G-line only: no separate Q-line or Z-line. | ||||||
| Notify the operators (GLOBOPS) | compatible | compatible | compatible | compatible | compatible | compatible, with a caveat |
| ircu (Undernet) — WA/WU only, without the targeting of GLOBOPS. | ||||||
| Restrict a channel to operators (+O) | compatible | compatible | compatible | not compatible | not compatible | not compatible |
| InspIRCd — The +O comes from the operchans module: built with the server, but not loaded by the example configuration. Bahamut — No channel mode restricted to operators. ircu (Undernet) — No channel mode restricted to operators. | ||||||
| Extended channel ranks (+q, +a, +h) | compatible | compatible | compatible | compatible, with a caveat | compatible, with a caveat | not compatible |
| InspIRCd — Only +o and +v are core; +q, +a and +h come from the customprefix module, built but not loaded by default. Bahamut — Only +o and +v; no +q, +a or +h. ircu (Undernet) — No +q, +a or +h. | ||||||
This grid is read from the bot’s database, which republishes it at every startup: it describes the installation serving this page.
What gets added to the network
| Service | Overtchat-Hybrid | UnrealIRCd | ircd-Hybrid | InspIRCd | Bahamut | ircu (Undernet) |
|---|---|---|---|---|---|---|
| The services — the five pseudo-clients Accounts, channels, bans, moderation, AI, web panel | compatible | compatible | compatible | compatible | compatible | compatible |
| The heart of the project. IriX Services (Tcl) links to any of the servers in this grid; what varies is the features in the previous grid, not its presence. OverCore (Node.js), which serves them on this network, only speaks the Overtchat-Hybrid and UnrealIRCd 6 dialect. | ||||||
| Anope NickServ, ChanServ, OperServ… (optional) | compatible | compatible | compatible | compatible | not compatible | not compatible |
| Anope 2.1 ships seven protocol modules — hybrid, inspircd, ngircd, plexus, ratbox, solanum, unrealircd — and neither P10 nor Bahamut: the latter only has a module in the 2.0 branch. The panel refuses the configuration instead of attempting it. | ||||||
| Webchat The channel in the browser, over WebSocket | compatible | compatible | compatible | compatible | compatible | compatible |
| It talks to the server like an ordinary client: the server-to-server dialect does not concern it. | ||||||
| Admin panel Channels, members, moderation, links, status | compatible | compatible | compatible | compatible | compatible | compatible |
| It reads the capability table and GREYS OUT whatever the server on the other end cannot do, with the reason — rather than offering a button that does nothing. | ||||||
What security gains, and where it hits a wall
The hardening column describes what the project adds on top of the server’s default settings. That is where the difference lies between “the server can do it” and “it is actually in place”.
| Protection | Overtchat-Hybrid | UnrealIRCd | ircd-Hybrid | InspIRCd | Bahamut | ircu (Undernet) | Hardening added |
|---|---|---|---|---|---|---|---|
| Encrypted connections (TLS) ircu 2.10.12 has no TLS layer: a P10 network is encrypted by a relay placed in front of it, or not at all. | compatible | compatible | compatible | compatible | compatible | not compatible | Dedicated port 6697, with a self-signed certificate set up by the installer; a Let’s Encrypt certificate can replace it by hand, with a hook that reloads the server on every renewal. |
| Masking visitors’ hosts On P10, the masked host is derived from the account (+x): there is no arbitrary vhost, hence no mask chosen by the service. | compatible | compatible | compatible | compatible | compatible | compatible, with a caveat | Systematic masking on connection, and the real address visible to operators only. |
| Operator-only channel Without this mode, an operators’ channel is reserved in intent only: the panel announces it, and anyone can walk in. On InspIRCd the mode exists, but in a module — operchans — that the example configuration does not load: “no” therefore describes the default installation, and is fixed by enabling it. Neither Bahamut nor ircu (P10) has a channel mode restricted to operators — there, the restriction rests only on what the services agree to send in. | compatible | compatible | compatible | not compatible | not compatible | not compatible | The +O mode is set again on EVERY link recovery, not once and for all: a channel stripped of its modes after a netsplit gets it back on its own. |
| Network-wide bans P10 only has the G-line: banning a nickname or an address goes through the same mechanism, without distinction. Bahamut has three, each with its own form — AKILL, SQLINE, SGLINE — and no command covering them all. | compatible | compatible | compatible | compatible | compatible, with a caveat | compatible, with a caveat | Masks that are too broad are refused — at least four significant characters — on the services side: the server itself only forbids “*” and “*@*”. |
| Unkickable pseudo-clients ircd-Hybrid 8.2 has NO service mode: the pseudo-clients remain kickable there, and the log says so at every connection rather than keeping quiet about it. InspIRCd, for its part, has one — +k, called servprotect — which protects against KICK and KILL. Bahamut has none either, and it sets a trap: its “S” denotes a TLS connection, not a service. Copying it would have marked the pseudo-clients “encrypted” while leaving them kickable. | compatible | compatible | not compatible | compatible | not compatible | compatible | The mode is translated by ROLE, not by letter: +S on UnrealIRCd, +k on ircu — copying the letter would yield a mode that is accepted and wrong. |
| Protection of registered nicknames On P10, lacking SVSNICK, protection is limited to warning then disconnecting — the module concerned knows it and does not pretend to protect. | compatible | compatible | compatible | compatible | compatible | not compatible | The impostor is renamed automatically, then disconnected if they persist. |
| Proof of identity before moderation Independent of the dialect: it is the client’s +o mode that is checked, and every server has it. | compatible | compatible | compatible | compatible | compatible | compatible | The panel does not moderate: it ASKS. The bot only acts if the requester’s nickname is connected AND an operator on the network at that very moment — being signed in to the panel proves nothing. |
| Visitors’ IPv6 addresses ircu encodes IPv6 addresses in twenty-four characters, which the decoder cannot read yet: on a P10 network, the column stays empty rather than wrong. | compatible | compatible | compatible | compatible | compatible | not compatible | The address is decoded and stored as is, unabbreviated, so it stays comparable from one row to the next. |
Which one to choose
You are building a network from scratch
Pick Overtchat-Hybrid or UnrealIRCd 6. Nothing is missing: host masking, channel reservation, four kinds of bans, extended ranks, TLS. It is the combination that serves the public network, and the one on which the project is most thoroughly tested.
You already have a server running
Keep it. The program installs in front of ircd-Hybrid and ircu without changing anything on your network: the program is the one that learns your protocol, and it will tell you plainly what it will not be able to do on yours.
The case of ircu (P10)
Everything works — link, services, moderation, panel — but 8 features do not exist in this protocol, 3 are only partial, and Anope cannot be installed on it. Nothing is hidden: the panel greys out what has no purpose and gives the reason, and the modules concerned do not pretend to protect what they cannot protect.
And if your server is not on the list
The program only knows six languages, and it refuses to link in a language it could not read — rather than bring up a link that would carry nothing. It is an explicit refusal, at connection time, with its reason.
One thing that depends on no server: the panel never moderates by itself, it asks. The bot only acts after checking that the requester’s nickname is connected and an operator on the network at that very moment. Being signed in to the panel proves nothing to the network.