dc_oxide
Not logged in

Single-binary chatmail server for Delta Chat, written in Rust and driven by one flat TOML config file (dc_oxide.toml) — no sections, no optional daemons. One process = MX + SMTP submission + IMAP + outbound relay.

What it does

Config layout (dc_oxide.toml)

Flat top-level keys mirroring src/config.rs (unknown keys are rejected at startup):

mail_domain = "chat.example.org"   # required
storage_dir = "/var/lib/dc_oxide"  # required — maildirs + certs + queue live here

bind_addr        = "127.0.0.1"     # one string or a list; '["0.0.0.0", "::"]' for
                                   # dual-stack DNS-fronted deployments (TLS-only)
smtp_port        = 25              # MX inbound (plaintext + STARTTLS, local accounts only)
submission_port  = 465             # SMTP+AUTH client submission (implicit TLS)
imap_port        = 993             # IMAP (implicit TLS)
acra_port        = 0               # onboarding HTTPS endpoint (0 = disabled)

max_message_size = 31457280        # 30 MiB, chatmail reference default
max_recipients   = 50

# Optional PEM cert/key; omit both for auto-generated self-signed (dev only).
# tls_cert_path = "/etc/dc_oxide/fullchain.pem"
# tls_key_path  = "/etc/dc_oxide/privkey.pem"

# Outbound relay.
relay_host = ""
# relay_port = 587               # defaults to 25 when relay_host is set
relay_user = ""
relay_pass = ""

See dc_oxide.toml.example for a fully commented copy.

Running

cargo build --release
cp dc_oxide.toml.example dc_oxide.toml   # edit mail_domain + storage_dir
RUST_LOG=info ./target/release/dc_oxide --config dc_oxide.toml

Flags: --config/-c (default dc_oxide.toml), --log/-l (default info, overridable via RUST_LOG). The storage dir is created if missing; TLS is initialized before any listener binds.

Subcommands: dc_oxide invite --uses N mints an ACRA onboarding token and prints its DCACCOUNT:https://... URL (the server keeps running separately; the URL is only served while acra_port is nonzero).

Deploying

Per-OS deployment kits (config template, rc/service scripts, README) live in install/ — OpenBSD, Linux, FreeBSD, and NetBSD. See install/README.md for the portability gate.

Version control

dc_oxide uses Fossil (not git). The repository file is dc_oxide.fossil; open it with fossil open dc_oxide.fossil or browse with fossil ui. The Fossil wiki holds the architecture docs (Architecture, ConfigReference, MaildirLayout, RoadmapAndTickets); every feature/bug gets a Fossil ticket and commits reference the ticket id. Conventions for working in the repo are in AGENTS.md.

Milestones

Done:

Pending (Fossil tickets):