v0.16.17

stalwartlabs/stalwartv0.16.17Aug 10, 2026by github-actions[bot]

AI Summary

Adds several IMAP extensions (UIDBATCHES, UIDONLY, MESSAGELIMIT, SAVELIMIT) and WebDAV header support, while replacing the unmaintained jemallocator with tikv-jemallocator.

Key Highlights

  • New IMAP extensions: UIDBATCHES, UIDONLY, MESSAGELIMIT, and SAVELIMIT
  • WebDAV Range and If-Range header support for file downloads
  • Spam filter url_original expression variable
  • Memory allocator replaced with tikv-jemallocator

New Features

  • IMAP UIDBATCHES and UIDONLY extensions
  • IMAP MESSAGELIMIT and SAVELIMIT extensions
  • WebDAV Range and If-Range header support
  • Spam filter url_original expression variable

Full Release Notes

## [0.16.17] - 2026-08-10

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
- IMAP:
  - `UIDBATCHES` extension ([RFC 10022](https://www.rfc-editor.org/rfc/rfc10022.html)).
  - `UIDONLY` extension ([RFC 9586](https://www.rfc-editor.org/rfc/rfc9586.html)).
  - `MESSAGELIMIT` and `SAVELIMIT` extensions ([RFC 9738](https://www.rfc-editor.org/rfc/rfc9738.html)).
- WebDAV: `Range` and `If-Range` header support on file downloads ([RFC 7233](https://www.rfc-editor.org/rfc/rfc7233.html)) (#2377).
- Spam filter: `url_original` expression variable for `Url` rules.

## Changed
- Memory allocator: Replaced the unmaintained `jemallocator` crate with `tikv-jemallocator` (contributed by @checkraisefold).
- ACME registry: Use `description` as label property.

## Fixed
- MTA: 
  - Certificates for domains publishing an enforcing MTA-STS policy are always validated, even in the fallback TLS strategy.
  - DSN delivery date uses wrong timestamp.
  - `FUTURERELEASE HOLDUNTIL` uses Unix timestamps instead of RFC 3339 date-times.
- JMAP:
  - `EmailSubmission/query` filtering on `undoStatus` contradicts `EmailSubmission/get`, reporting held `FUTURERELEASE` submissions as `final` instead of `pending`.
  - `EmailSubmission/get` requests without an `ids` argument iterates the wrong index.
- CardDAV: `Accept: text/vcard` version negotiation is ignored whenever another parameter such as `q` or `charset` follows `version=`.
- Calendar: Server-side scheduling messages place the `text/calendar` part outside the `multipart/alternative` and disposed as an attachment.
- Sharing: Accounts holding the `impersonate` permission never have their ACL grants collected, so shared items are never listed in JMAP sessions, CalDAV/CardDAV discovery or IMAP.
- IMAP:
  - `COPY`/`MOVE` into a shared folder fails with `NO [ALREADYEXISTS]` when the destination account already holds the message, leaving the message in the source mailbox and clients in a retry loop.
  - `BODYSTRUCTURE` and `ENVELOPE` return MIME parameters, `Content-Description`, subjects and display names as raw UTF-8 even to sessions that never enabled `UTF8=ACCEPT`.


<hr />

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