Requirements#
- Zig 0.15.2 — Install 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 |