v0.16.0
stalwartlabs/stalwartv0.16.0Apr 20, 2026by github-actions[bot]
AI Summary
Major version with JMAP API rewrite, Web UI/CLI rewrite, and extensive security and DNS management features.
Key Highlights
- Complete rewrite of Web UI and CLI using JMAP management API.
- Enhanced security: Password strength enforcement, expiration, app passwords, API keys, and auto-ban.
- Full DNS Management support (MX, TXT, CAA, SRV, TLSA) with multiple providers (Route53, Google, etc.).
- Automatic DKIM key generation and ACME certificate management with TLSA updates.
Breaking Changes
- Replaced REST API with JMAP API
- Removed support for Authenticated Received Chain (ARC) sealing
- Removed `smtp`, `imap`, and `memory` directory backends
- Use `aws-lc` for cryptographic operations instead of `ring`
New Features
- Web UI rewrite
- CLI rewrite
- Password strength enforcement
- Auto DNS management
- Auto DKIM management
- ACME TLSA updates
- OIDC JWT validation
- LDAP improvements
Full Release Notes
## [0.16.0] - 2026-04-20 This version includes **multiple breaking changes**. If you are upgrading from v0.15.x and below, please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions. ## Added - [Web UI](https://github.com/stalwartlabs/webui) rewritten from the ground up using the JMAP management API, featuring a refreshed design and addressing 76 enhancement requests and bug fixes. - [CLI](https://github.com/stalwartlabs/cli) rewritten from the ground up to use the JMAP management API. - Security enhancements: - Password strength enforcement using the `zxcvbn` algorithm - Password expiration, rotation policies and IP address restrictions for user accounts - App Passwords with limited access (#1609), labels (#2255), IP address restrictions and expiration dates - API keys with limited access, labels, IP address restrictions and expiration dates - Auto-ban comments and details about the triggering event (#1321) - Auto-ban expiration after a configurable time period (#964) - DNS Management: - Automatic DNS management of `MX`, `TXT`, `CNAME`, `SRV`, `CAA` and `TLSA` records (#463 #1017 #1419 #2438 #1370 #1406 #1371) - Automatic update of `TLSA` records when ACME certificates change (#1664) - RFC2136 `SIG(0)` support (#856) - Route53 provider support (contributed by @jimmystewpot) - Google Cloud DNS provider support (contributed by @jimmystewpot) - Bunny provider support (contributed by @angeloanan) - Porkbun provider support (contributed by @jeffesquivels) - DNSimple provider support (contributed by @NelsonVides) - Spaceship provider support (contributed by @matserix) - DKIM: - Automatic DKIM key generation, rotation and DNS management (#368 #961) - Store DKIM keys in the database (#1264) - Ignore insecure signatures when verifying DKIM (#1068 #467) - ACME/TLS: - `DNS-PERSIST-01` ACME challenge support (#2837) - Renew certificates on demand, view certificate details (#675 #1162 #2566) - `CAA` record support (#468) with `accounturi` parameter (#1933) - `TLSA` records publishing restricted to `3 1 1` and `2 1 1` (#2193) - OIDC and OAuth: - JWT token validation without requesting userinfo from the OIDC provider. - Audience (`aud`) claim (#2603) and scope validation support. - Groups support (#1448) - RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients - LDAP: - Separate filter for groups (#1841) - Improve support for OpenLDAP schemas (#760) - Improve and simplify LDAP settings (#2194 #2174) - Directory: - Masked email addresses for enhanced privacy (*Enterprise*) - Domain aliases (#583) - E-mail alias descriptions and option to disable aliases (#506) - Account archiving and un-deletion (#2767) (*Enterprise*) - Per-domain directory backends (*Enterprise*) - Account configuration and discovery: - Automatic Configuration of Email, Calendar, and Contact Server Settings ([draft-mailmaint-uaautoconf-04](https://datatracker.ietf.org/doc/html/draft-eggert-mailmaint-uaautoconf-04)) (#2201) - MS Autodiscover V2 support (#679) - Sieve: Allow deactivating scripts without deleting them (#1251). - Tracing: Enable events only mode (#2276) - Clustering: - Automatic cluster node ID generation and management. - Unified cluster management (#960) - Outbound MTA role (#1692) ## Changed - Replaced REST API with JMAP API (#2262 #959 #1480) - Removed support for Authenticated Received Chain (ARC) sealing ([learn more](https://mailarchive.ietf.org/arch/msg/dmarc/KvX3-H1SL0Gh3IDl7FuR2hoR87M/)). - Directory: Removed `smtp`, `imap` and `memory` directory backends. - Use `aws-lc` for cryptographic operations instead of `ring`. - Use `rustls-platform-verifier` for TLS certificate verification instead of `webpki` (#247). ## Fixed - Directory: - Cannot remove built-in "admin" role from user once it was assigned (#1467) - Delete associated records (#963) - Updated Role permissions not applied (#2038) - Recreated account cannot log in until server is restarted (#1469) - Subaddressing does not work for groups (#475) - New LDAP aliases are rejected (#1318). - Validate account and group names (#2209) - MTA: - RCPT TO stage settings improvements (#2217 #394) - Relay to IP addresses (#838) - Duplicate delivery inverted check - SASL challenge responses include invalid `Go ahead` text - JMAP: - Fix `inMailboxOtherThan` query logic. - Fix `hasAttachment` search field (#2778) - IMAP: - Increment argument max length to `8000` bytes - ACL: Add `RIGHTS` capability (#2762) - ACL: Fix `ACL SET` permission override. - WebDAV: - Return `304` `NOT_MODIFIED` on `If-None-Match` - Use RFC 2616 instead of RFC 1123 for date formatting - Fix ACL container/item mismatch in reports. - CalDAV: Allow organized properties to be present in `PUT` requests if they are equal to the existing ones. - CalDAV: Enforce cumulative iCalendar instances cap in CalDAV free-busy REPORT handler - Configuration: Prefix parsing issues (#2495) - OIDC: JWKS Exposes Symmetric Signing Key - SQLite: Fix thread pool exhaustion. - PostgreSQL: Use clean recycling method on connection pool - Meilisearch: Make `id` sorteable. - ACME: Fix wrong origin for subdomain updates (#2360) - Spam filter: Skip invalid messages during training. - Calendar: Include minutes in localized invite templates (#2828) - HTTP: Fix `204` CORS preflight responses <hr /> ### Check binary attestation [here](https://github.com/stalwartlabs/stalwart/attestations/25009869)