v0.16.26

stalwartlabs/stalwartv0.16.26Oct 11, 2026by github-actions[bot]

Upgrading?

AI Summary

This release introduces `sd_notify` support and addresses critical bugs in DNSSEC, RocksDB, Milter, OIDC, and JMAP functionalities. It also includes specific fixes for mailbox handling and account authentication logic.

Key Highlights

  • Added `sd_notify` support for better integration with process managers like systemd.
  • Fixed DNSSEC validation by switching to a patched `hickory-resolver` fork.
  • Optimized RocksDB blob garbage collection to rewrite stored blobs during compaction.
  • Resolved JMAP issues regarding mailbox naming, email submission callbacks, and vacation response activation.
  • Fixed OIDC account building to use email claims when username claims are missing.

New Features

  • sd_notify support
  • JMAP improvements: allows moving mailboxes and rejects case-only renames
  • JMAP EmailSubmission callback fixes
  • JMAP VacationResponse activation logic fix

Full Release Notes

## [0.16.26] - 2026-10-11

If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). 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
- `sd_notify` support.
- JMAP: `Mailbox/set` allows moving a mailbox under a parent that already has a child with the same name, and rejects renames that only change the case of a mailbox name with `alreadyExists`.

## Changed

## Fixed
- DNSSEC: Use `hickory-resolver` patched fork at https://github.com/stalwartlabs/hickory-dns.
- RocksDB: Blob garbage collection rewrites every stored blob on each compaction of the blobs column family, about once per 128MB of new mail.
- Milter: End-of-headers is not sent to milters that negotiate `SMFIP_NOHDRS` without `SMFIP_NOEOH`, so the transaction stalls until it times out.
- OIDC: When the access token lacks the `claimUsername` claim but has an `email` claim, the account is built from `email` without consulting the userinfo endpoint.
- JMAP: 
  - `onSuccessUpdateEmail` and `onSuccessDestroyEmail` entries in `EmailSubmission/set` that name an existing submission by id update or destroy the Email with the same id instead of the submission's own Email.
  - A `VacationResponse/set` that only sets `isEnabled` on an account without a vacation response activates an empty Sieve script.


<hr />

### Check binary attestation [here](https://github.com/stalwartlabs/stalwart/attestations/54830691)

Related Repositories