Skip to content

Building from Source

Requirements#

  • Zig 0.15.2Install Zig
  • OpenSSL — development headers (system or ports)
  • FreeBSD 14.0+ — kqueue required (Linux support planned post-MVP)

Clone and Build#

git clone https://github.com/securemessage/xmppd.git
cd xmppd
zig build -Doptimize=ReleaseSafe

Binaries are placed in zig-out/bin/:

zig-out/bin/
├── xmppd
├── xmppd-core
├── xmppd-auth
├── xmppd-auth-oidc
├── xmppd-s2s
└── xmppctl

Build Options#

Flag Values Default Description
-Doptimize Debug, ReleaseSafe, ReleaseFast Debug Optimization level
-Dop-storage lmdb, rocksdb, sqlite lmdb Operational storage backend

Examples#

# Debug build (assertions enabled, stack traces)
zig build

# Production build (optimized, safety checks retained)
zig build -Doptimize=ReleaseSafe

# Maximum performance (safety checks removed)
zig build -Doptimize=ReleaseFast

# SQLite backend instead of LMDB
zig build -Doptimize=ReleaseSafe -Dop-storage=sqlite

Running Tests#

# All unit tests (744 tests)
zig build test

# Integration tests (requires running server)
python3 test/integration/e2e-chat.py
python3 test/integration/e2e-muc.py
python3 test/integration/e2e-mam.py

Project Structure#

lib/              Reusable XMPP protocol library
├── xml/          Streaming XML parser (XMPP subset)
├── xmpp/         Stanza types, JID, protocol state machine
├── sasl/         SASL mechanisms (SCRAM-SHA-256, PLAIN, EXTERNAL)
├── tls/          STARTTLS + DANE/TLSA
├── dns/          SRV, TLSA record resolution
├── http/         HTTPS client (for OIDC)
└── jwt/          JWT parse + RS256/EdDSA verification

src/              Server daemons
├── master/       Master process supervisor
├── core/         C2S connection handler, routing, MUC, MAM
├── auth/         Local authentication daemon
├── s2s/          S2S federation daemon
├── store/        Storage backends and generic stores
├── config/       INI config parser
├── ipc/          Binary IPC protocol
├── ws/           WebSocket support (planned)
└── ctl/          xmppctl admin CLI

config/           Sample configuration files
test/             Integration and compliance tests
doc/              Documentation and website

Installing Locally#

After building, install the binaries and config:

# Install binaries
install -d /usr/local/libexec/xmppd
install -m 755 zig-out/bin/xmppd /usr/local/sbin/xmppd
install -m 755 zig-out/bin/xmppd-core /usr/local/libexec/xmppd/
install -m 755 zig-out/bin/xmppd-auth /usr/local/libexec/xmppd/
install -m 755 zig-out/bin/xmppd-auth-oidc /usr/local/libexec/xmppd/
install -m 755 zig-out/bin/xmppd-s2s /usr/local/libexec/xmppd/
install -m 755 zig-out/bin/xmppctl /usr/local/bin/

# Install RC script
install -m 755 etc/rc.d/xmppd /usr/local/etc/rc.d/

# Install sample config
install -d /usr/local/etc/xmppd
install -m 644 config/xmppd.conf.sample /usr/local/etc/xmppd/

# Create directories
mkdir -p /var/db/xmppd /var/log/xmppd /var/run/xmppd
chown jabber:jabber /var/db/xmppd /var/log/xmppd /var/run/xmppd

Mirrors#

The source code is available on three platforms:

Platform URL
GitHub github.com/securemessage/xmppd
Codeberg codeberg.org/xmppd/xmppd
Pacyworld pacyworld.dev/securemessage/xmppd