Stalwart
| Description / name | Input element |
|---|---|
| Container Registry | |
| Container Configuration Root Path | |
| Timezone | |
| Stalwart Host Port | |
| Stalwart /config Path |
Stalwart Mail Server is an open-source mail server solution with JMAP, IMAP4, POP3, and SMTP support and a wide range of modern features. It is written in Rust and designed to be secure, fast, robust and scalable.
| Port | 25 |
| Registry | ghcr.io/daemonless/stalwart |
| Daemonless | daemonless/stalwart |
| Source | stalw.art/ |
| Website | stalw.art |
Version Tags
| Tag | Description | Best For |
|---|---|---|
latest / pkg |
FreeBSD Quarterly. Uses stable, tested packages. | Most users. Matches Linux Docker behavior. |
pkg-latest |
FreeBSD Latest. Rolling package updates. | Newest FreeBSD packages. |
Root Privileges Required
Podman on FreeBSD currently requires root. All commands must be run as root (or via doas/sudo).
Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.
Deployment
Access at: http://localhost:25
Interactive Configuration
Parameters
Environment Variables
| Variable | Default | Description |
|---|---|---|
TZ |
UTC |
Timezone for the container |
ADMIN_SECRET |
changeme |
Password for the fallback 'admin' web-admin account |
Volumes
| Path | Description |
|---|---|
/config |
Config (config.toml) + rocksdb data store |
Ports
| Port | Protocol | Description |
|---|---|---|
25 |
TCP | SMTP |
465 |
TCP | SMTP submission (implicit TLS) |
587 |
TCP | SMTP submission (STARTTLS) |
143 |
TCP | IMAP4 |
993 |
TCP | IMAP4 (implicit TLS) |
110 |
TCP | POP3 |
995 |
TCP | POP3 (implicit TLS) |
4190 |
TCP | ManageSieve |
443 |
TCP | HTTPS / JMAP / web admin |
8080 |
TCP | HTTP / JMAP / web admin |
Using PostgreSQL or SQLite instead of RocksDB
By default config.toml stores everything (data, full-text search, blobs,
and lookups) in RocksDB under /config/data. To swap in an external
PostgreSQL database instead, replace the [store."rocksdb"] section and
point [storage] at the new store:
For SQLite (a single-file database, good for small single-node setups):
Edit /config/config.toml after the first run seeds it, then restart the
container. Blob storage can also be split onto a separate store (e.g. keep
blob = "rocksdb" while data/fts/lookup move to PostgreSQL) — see
stalw.art/docs/storage for the full
per-store breakdown.
Implementation Details
- Architectures: amd64
- User:
stalwart(UID/GID set via PUID/PGID). Defaults to1000:1000. - Base: Built on
ghcr.io/daemonless/base(FreeBSD 15.1).
Need help? Join our Discord community.