Skip to content

xmppd Documentation

xmppd is a carrier-grade XMPP server written in Zig, inspired by Postfix's multi-process architecture. It targets FreeBSD first with kqueue-based async I/O, DANE-first federation, and thread-per-core scaling.

Quick Start#

# Install on FreeBSD
pkg install xmppd

# Edit the configuration
cp /usr/local/etc/xmppd/xmppd.conf.sample /usr/local/etc/xmppd/xmppd.conf
vi /usr/local/etc/xmppd/xmppd.conf

# Start the server
service xmppd enable
service xmppd start

Binaries#

xmppd ships as six binaries, each with a specific role:

Binary Purpose
xmppd Master supervisor — spawns and monitors all child processes
xmppd-core C2S connection handler — XMPP protocol, routing, MUC, MAM
xmppd-auth Local authentication — SCRAM-SHA-256, PLAIN, user management
xmppd-auth-oidc OIDC authentication — OAUTHBEARER, JWT validation, IdP delegation
xmppd-s2s S2S federation — DANE, SASL EXTERNAL, dialback
xmppctl Admin CLI — user management, lockout, invitations

Design Principles#

  • Postfix-inspired — one config file, one package, one service. Privilege-separated child processes.
  • Thread-per-core — each CPU core runs its own kqueue event loop. No shared-nothing message passing between workers for local operations.
  • DANE-first — DNS-based authentication is the primary S2S trust path. PKIX/CA is the fallback.
  • Zero runtime dependencies — static Zig binaries. Only OpenSSL and your chosen storage backend at runtime.
  • Auditable — the entire server is ~30,000 lines of Zig. No transitive dependency surprises.

Requirements#

  • FreeBSD 14.0+ (kqueue required)
  • OpenSSL (system or ports)
  • Zig 0.15.2 (build only — not needed at runtime)

Source Code#

xmppd is free and open source under the BSD-2-Clause license.