Skip to content

Modes & ISUPPORT

Channel modes

Advertised as CHANMODES=beI,k,l,imnst (list, param-when-set-and-unset, param-when-set, flags). Up to 6 mode changes per MODE command (MODES=6).

Member modes (PREFIX=(ov)@+)

ModePrefixMeaning
o@channel operator — topic under +t, modes, KICK, INVITE under +i, channel METADATA
v+voice — may speak under +m

Flag modes

ModeDefaultMeaning
ioffinvite-only; join requires INVITE or matching +I
moffmoderated; only +o/+v may speak
nonno external messages (must be a member to send)
soffsecret; hidden from LIST for non-members
tontopic changes restricted to channel operators

New channels start +nt.

Parameter modes

ModeParameterMeaning
kkeyjoin requires JOIN #chan <key>
llimitjoin refused once the member count reaches the limit

List modes

Each list holds at most 100 entries (MAXLIST=b:100,e:100,I:100); querying without a parameter returns the list (367/368, 348/349, 346/347).

ModeListEffect
bbansmatching users cannot join
eban exceptionsoverrides +b
Iinvite exceptionsmay join through +i without an INVITE

Mask forms accepted in all three lists:

  • nick!user@host glob (*, ?) — bare hosts normalize to *!*@host, bare nicks to nick!*@*;
  • ~a:<glob>account extban: matches the sender's logged-in account name instead of the hostmask. Guide.

User modes

ModeSet byMeaning
iuserinvisible (hidden from WHO/NAMES scans by non-common-channel users)
wuserreceives WALLOPS
Buserbot (IRCv3 bot-mode): shown in WHOIS (RPL_WHOISBOT, 335) and WHO flags, and tags the bot's messages with a bare @bot — advertised as BOT=B
oserverIRC operator — granted only by OPER; a user may remove it (-o) but never set it

ISUPPORT (005) tokens

What ferrixd advertises at registration, and what each token promises:

TokenValueMeaning
NETWORKfrom confignetwork name
CASEMAPPINGascii | rfc1459how nicks/channels case-fold
CHANTYPES#only # channels exist
CHANMODESbeI,k,l,imnstmode classes as above
PREFIX(ov)@+member modes and their prefixes
MODES6max mode changes per MODE
EXCEPTSeban exceptions supported
INVEXIinvite exceptions supported
EXTBAN~,aextended bans: the ~a:<account> account extban, honoured in +b/+e/+I
MAXLISTb:100,e:100,I:100list-mode caps
NICKLEN30max nick length
CHANNELLEN50max channel-name length
TOPICLEN390advertised topic length
KICKLEN300advertised kick-reason length
AWAYLEN200advertised away-reason length
CHANLIMIT#:<max_channels>per-client channel cap (config)
MAXCHANNELS<max_channels>legacy spelling of the same
TARGMAXPRIVMSG:1,NOTICE:1one target per message command
MONITOR100MONITOR list capacity
WATCH100legacy WATCH presence-list capacity (accepted as a MONITOR alias)
SILENCE32server-side ignore-list capacity
WHOXWHO field selection (354) supported
CHATHISTORY100max messages per CHATHISTORY request
MSGREFTYPEStimestamp,msgidselector types CHATHISTORY accepts
SAFELISTLIST won't get you flooded off
ELISTCMNTULIST filters: creation age, masks, negated masks, topic age, user counts
KNOCKKNOCK on invite-only channels supported
STATUSMSG@+PRIVMSG @#chan / +#chan reach only prefixed members
UTF8ONLYthe server expects UTF-8
BOTBuser mode letter that marks a bot (IRCv3 bot-mode)
draft/ICONfrom confignetwork icon URL, when server.icon is set (IRCv3 draft/network-icon)

Advertised vs. enforced

TOPICLEN, KICKLEN, and AWAYLEN are advisory values for clients; the hard limit that is always enforced is the 512-byte message body budget on the wire. Nick and channel lengths are enforced exactly as advertised.

Dual-licensed under MIT or Apache-2.0.