echoIRCd

Running & config

echo services reads a single config.toml. Only [uplink] and [server] are required; every other section is optional and off when omitted. A few keys reload on OperServ REHASH (noted); the rest need a service restart.

echo config.toml
KeyDescription
host / portUplink ircd address and S2S port
passwordS2S link password
tlsUse TLS for the link; true pins the SPKI below
spki_fingerprintBase64 SHA-256 of the uplink's SubjectPublicKeyInfo (when tls=true)

[server] — this node's identity (required)#

KeyDescription
name / sidServices server name and 3-char SID (unique)
descriptionServer description
protocolInspIRCd link protocol (1206 = insp4, 1205 = insp3)
scram_iterationsPBKDF2 cost for new SCRAM verifiers (≥ 1000)
guest_nickNick prefix after LOGOUT
service_hostHost the pseudo-clients wear (empty = server name)
service_modesUser modes the service clients set (e.g. iHkoB)
service_oper_typeWHOIS "is a …" string
services_channelChannel every pseudo-client joins
standard_repliesUse IRCv3 FAIL/WARN/NOTE instead of notices

[modules] — which services to start#

services is a list of module names to bring up; omit the section for the full standard suite: nickserv, chanserv, botserv, hostserv, memoserv, operserv, statserv, groupserv, infoserv, reportserv, helpserv, chanfix, diceserv, gameserv, debugserv.

[[oper]] — services operators (repeatable)#

KeyDescription
accountAccount granted operator access
typeTier shortcut: operator < administrator < root
privsFine-grained privilege list (auspex, oper, suspend, admin, root)

Policy & lifecycle#

SectionKeys
[register]confusable_check, vouch (REHASH-reloadable)
[extban]enabled — which InspIRCd matching-extbans AKICK may use
[auth]external — hand identity to an outside authority
[expire]accounts_days, channels_days, warn_days (0 = never)
[session]default_limit — per-IP connection limit
[language]default, dir, available (ships en, fr, de, es, es-ar, pt, pt-br)
[log]channel, notify_exclude

Email & web integration#

SectionKeys
[email]from, command (mailer piped on stdin), brand, accent, logo, confirm_url
[health]bind/health + Prometheus /metrics (loopback, unauthenticated)
[panel]bind, brand — self-contained web admin site (put behind a TLS proxy)
[grpc]bind, token, [grpc.tls] — account/channel directory + Accounts API for a website
[jsonrpc]bind, token, origins, [jsonrpc.tls] — HTTP JSON-RPC for the staff panel / stats
[keycard]url, api_key — passwordless web login tokens
[dictserv]server — DICT server for DictServ (opt-in)

Federation#

[gossip] + [[peer]] provide node-to-node replication: gossip.bind, gossip.secret, [gossip.tls] (mTLS), [gossip.signing] (Ed25519 per-origin signing + trusted-signer map), and one [[peer]] per federated node.

See Security & anti-abuse for the [security.*] engine.