wircd is a fork of the Undernet IRC daemon ircu2.10.
It provides a full IRC server with P10 server-link support, classic client and
operator command handling, multiple scalable event engines, optional TLS
backends, and runtime-configurable behavior through feature settings.
- Overview
- Compatibility
- Quick start
- First-time bring-up (practical)
- Implemented functionality
- Command coverage
- Operations and maintenance
- Platform-specific notes
- Documentation and references
- Repository structure
- Historical notes
- License
- Protocol family: P10 (server-to-server)
- Upstream lineage: ircu2.10.12
- Repository patch level:
19+wircd(1.0) - Configuration format: block-based
ircd.confsyntax (seedoc/example.conf) - Build system: autotools-style (
configure+make)
Historical upstream notes for ircu2.10.12 highlight three major improvements
that remain relevant in this code line:
- Rewritten network event subsystem with asynchronous poller support.
- Runtime-tunable features (
F:lines /Feature) viaGET/SET. - P10 account propagation behavior to improve service continuity across netsplits.
- This codebase includes feature work derived from nefarious and snircd.
- User account handling is intended to remain compatible with snircd account semantics used by services integrations.
- Server-to-server compatibility is limited to P10-speaking peers.
- Some protocol/runtime features are only fully available between
ircu2.10.12-compatible implementations. - Compatibility statements in this repository are behavioral targets and should be validated in your own deployment topology (services, link peers, policy).
./configure
make
make install- Use
doc/example.confas your baseline template. - Create/adjust runtime
ircd.conf(server name, numerics, classes, client/server blocks, operators, feature toggles). - If migrating from old
2.10.11style config, useconvert-conf.
- Start the daemon with your configured paths/environment.
- Verify listener and startup behavior using logs and basic IRC checks:
/LUSERS,/MAP,/STATS,/VERSION.
Recommended sequence for a safe first deployment:
- Derive a minimal configuration from
doc/example.conf. - Enable only listeners, base classes, and one operator account.
- Start the daemon and check logs for parser/bind errors.
- Connect with an IRC client and validate
/LUSERS,/VERSION,/STATS. - Add server-link blocks and optional features only after baseline validation.
- Validate feature changes incrementally via
GET/SET.
Capabilities are implemented in ircd/ and declared in include/.
- Connection accept/listen lifecycle
- Packet parsing and send/receive queueing
- Server registration and relay logic
- DNS resolver subsystem
- Memory and utility layers (
ircd_alloc, snprintf/string helpers) - Hash/list management for runtime objects (clients/channels/state)
Platform-oriented polling backends:
selectpollepollkqueue/dev/poll
Build-dependent TLS providers:
- OpenSSL
- GnuTLS
- libtls
- no-TLS stub
Runtime TLS functionality:
- TLS listener ports via listener/port configuration
- TLS-enabled server links (
CONF_CONNECT_TLS) - Optional peer certificate fingerprint checks for server links
- Configurable CA/cipher defaults through features (
TLS_CACERTFILE,TLS_CACERTDIR,TLS_CIPHERS,TLS_ALLOW_SELFSIGNED,TLS_BURST_FINGERPRINT)
Credential/hash helpers:
- Multiple oper password mechanisms
- MD5 helpers
- Password generation utility (
umkpasswd)
Client capability negotiation and tag parsing are implemented.
Currently advertised/implemented IRCv3 capabilities (feature-gated):
account-notifyaway-notifychghostecho-messageextended-joininvite-notifymessage-tagssasl
Related command support includes CAP, AUTHENTICATE (SASL flow), and
TAGMSG for message-tags capable clients.
- Host hiding/cloaking support
- IP validation and checking
- Silence lists
- G-line and jupe handling
- Runtime feature toggles (
doc/readme.features)
- The repository ships migration tooling for older configs (
convert-conf). - Upstream
RELEASE.NOTESdocuments semantic/config changes across versions.
- Preferred toolchain: GNU
make+gcc(seeINSTALL) - Inspect build options with
./configure --help - Event engine and TLS availability depend on platform and build configuration
- Use high-scale pollers (
epoll,kqueue,/dev/poll) where available. - Tune file descriptor and kernel/network limits for expected load.
- Keep DNS resolvers low-latency/nearby for high connect rates.
- Prefer lean, dedicated hosts for large populations.
Clock drift between IRC servers can cause severe protocol and operational
issues. Run time synchronization (ntpd or equivalent modern NTP service) on
all servers.
Legacy ircu2.10.12 behavior defaults to hiding selected information from
non-operator users (historically HIS defaults). Override via ircd.conf
feature controls if your policy differs.
- Build/config issues:
INSTALL - Feature behavior:
doc/readme.features - Server/network behavior:
doc/features.txt,doc/readme.*
- Linux
2.6+supportsepoll, which scales much better than classic poll loops. - Ensure user/global descriptor limits are high enough for expected concurrency.
- Use
kqueuewhere available for improved event-loop performance. - Typical boot-time tuning examples from legacy notes:
sysctl -w kern.maxfiles=16384
sysctl -w kern.maxfilesperproc=16384
sysctl -w net.inet.tcp.rfc1323=1
sysctl -w net.inet.tcp.delayed_ack=0
sysctl -w net.inet.tcp.restrict_rst=1
sysctl -w kern.ipc.maxsockbuf=2097152
sysctl -w kern.ipc.somaxconn=2048- Additional historical guidance referenced
maxusers,NMBCLUSTERSand ICMP tuning for very high-scale systems.
- Use
/dev/pollon supported releases for better scalability thanpoll(). - Legacy
/etc/systemexamples for descriptor limits:
set rlim_fd_max = 16384
set rlim_fd_cur = 8192
- On older Solaris 7 environments,
/dev/pollrequired vendor patching per historical documentation.
doc/example.conf— canonical configuration templatedoc/readme.features— runtime feature toggles (Feature/F-line behavior)doc/readme.iauth— external authorization protocoldoc/snomask.html— server notice mask behavior
- Start from a minimal leaf-style config.
- Validate listener, client class and operator access.
- Add server-link blocks and hub/leaf policy carefully.
- Enable optional features incrementally and monitor effects.
- Build/install process:
INSTALL - Release changes:
RELEASE.NOTES - Feature matrix and numerics:
doc/features.txt - Runtime feature switches:
doc/readme.features - Base configuration template:
doc/example.conf
ircd/— daemon core, command handlers, protocol, engines, TLS backendsinclude/— headers, feature declarations, protocol definitionsdoc/— configuration examples and operator/admin documentationtests/— test-related assetstools/— helper utilities/scriptspatches/— optional patch material and references
Operational sections in this document are adapted from upstream
ircu2.10.12 materials (including platform tuning guidance authored in 2002).
Treat numeric values and OS-specific commands as historical baselines and
validate against modern OS documentation before production use.
See LICENSE in the repository root.