Modules
echoIRCd is built module-per-file: each feature lives in its own source module, and most are toggled
through the configuration. This is the full set that ships in the tree.
Anti-abuse & access control#
| Module | Provides |
connclass | Connection classes — match by IP/host/TLS/port, then apply reject / clone-caps / password / modes / queue / flood / ping policy |
connflood | Refuse connections from an IP opening too many too fast |
connectban | Z-line an IP range that opens too many connections |
conn_waitpong | Hold registration until the client PONGs an exact server cookie |
flood | Per-user message-rate limit (fakelag); opers exempt |
dnsbl | DNS blocklist checks on connect |
reputation | Per-address reputation scoring over time; y: extban |
securitygroups | Named AND-ed user sets; g: extban |
antirandom | Score drone-like random nick/ident/realname |
antimixedutf8 | Block mixed-Unicode-script look-alike spam |
filter | Oper-configured spam/word glob filters |
blockamsg | Block mass /amsg and /ame |
solvemsg | Un-vouched user answers an arithmetic question before PMs deliver |
recaptcha / cloudflare_challenge | Registration human-verification gates |
autodrop | Silently drop HTTP-scanner connections |
restrictmsg / restrictcommands / restrictchans / denychans / channames | Message/command/channel restrictions |
dccallow | Gate DCC by filename unless the recipient allowed the sender |
hashident | Replace ident with a stable per-IP HMAC token |
Bans & extbans#
| Module | Provides |
accountban | a: extban (match by account) |
realnameban | r: extban (match by realname) |
serverban | s: extban (match by server) |
channelban | j: extban (match by another channel) |
extbanbanlist | b: extban (match another channel's ban list) |
banredirect | +b <mask>$<#channel> bounces a banned user elsewhere |
geoip | GeoIP + G: country extban, GEOIP, WHOIS geo |
asn | ASN lookup feeding classes, groups, extbans, WHOIS |
Channels & modes#
| Module | Provides |
customprefix | Reconfigure or add channel prefix tiers |
namedmodes | PROP — set/query modes by long name |
permchannels | Persist +P permanent channels across restarts |
autoop | +w auto-grant a prefix on join |
rmode | Bulk-remove list-mode entries |
hidemode / hidelist | Hide mode changes / list entries below a rank |
IRCv3 & client features#
| Module | Provides |
chathistory | draft/chathistory + draft/message-redaction |
event_playback | draft/event-playback |
multiline | Server side of draft/multiline |
metadata | draft/metadata-2 |
markread | draft/read-marker |
webpush | draft/webpush (RFC 8291/8292) |
account_registration | draft/account-registration bridged to an HTTP backend |
extended_isupport | draft/extended-isupport |
relaymsg | draft/relaymsg |
filehost | Advertise a file-host + signed upload links |
extjwt | EXTJWT server-signed identity tokens |
irccloudtags | Validate IRCCloud client-only tags |
Operators & staff#
| Module | Provides |
opertypes | Oper classes + types (capability bundles) |
operlevels | Numeric oper level (KILL protection tiers) |
operprefix | The ! oper channel prefix |
ojoin | Join a channel as network staff |
password_hash | Hashed oper passwords + MKPASSWD |
globops | GLOBOPS broadcast |
maphide / hidewhois / hideservices (opers) | Hide topology / WHOIS lines / services |
tline | Gauge a would-be ban's blast radius |
customtitle | TITLE — claim a WHOIS title/vhost |
Cloaking, DNS & identity#
| Module | Provides |
cloak | Keyed host masking (+x) |
ident | Optional RFC 1413 ident lookups |
jwt | HS256 JWS/JWT signer shared by captcha / challenge / extjwt |
Observability & integration#
| Module | Provides |
metrics | Prometheus/OpenMetrics endpoint |
rpc | JSON-RPC 2.0 control interface (see Metrics & RPC) |
syslog / log_json / jsonlog | Mirror the log stream to syslog / a JSONL file / per-oper JSON tags |
chanlog | Mirror oper snotices into a channel |
whoisport | Show an oper the port a user connected to |
showfile / randquote / network_icon / profilelink | Serve a file as a command, greet quotes, network icon, WHOIS profile link |
securelist | Hold /LIST for fresh connections |