v0.16.16

diffusionstudio/corev0.16.16Aug 2, 2026by github-actions[bot]

AI Summary

This release introduces JMAP Email Delivery Push Notifications and enhances MTA capabilities. It includes various bug fixes for logging, calendar notifications, and Windows networking.

Key Highlights

  • JMAP Email Delivery Push Notifications (RFC draft)
  • Sieve script access to orcpt during DATA stage
  • S3 accessKey configuration from environment variable or file
  • Fixed calendar iMIP line endings causing SMTP rejections
  • Fixed Redis lock handling on worker death

New Features

  • JMAP Email Delivery Push Notifications
  • MTA: Allow System Sieve scripts to access orcpt during the DATA stage

Full Release Notes

## [0.16.16] - 2026-08-02

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
- JMAP Email Delivery Push Notifications ([draft-ietf-jmap-emailpush-03](https://datatracker.ietf.org/doc/draft-ietf-jmap-emailpush/))
- MTA: Allow System Sieve scripts to access `orcpt` during the `DATA` stage.

## Changed
- S3: `accessKey` can now be read from an environment variable or file.

## Fixed
- Meilisearch: Verify index existence using `GET` instead of creating a new task which times out on busy servers.
- Branding: Stalwart logo flashes before the per-tenant logo is loaded on the login page.
- Calendar: iMIP and alarm notification messages embed the default logo using bare `LF` line endings, producing a single 4247 octet line that strict SMTP relays reject with `line too long`.
- DMARC: Failure reports state `Identity-Alignment: none` when a mechanism authenticated successfully but against an identity that is not aligned with the `From` domain.
- Redis: Task and queue locks are never released after a worker dies, because failed lock attempts refresh the lock expiry.
- Recovery mode: Download WebUI if missing.
- Logging: The systemd journal tracer omits the parent span's fields.
- MTA: 
  - `BDAT` chunks sent without a valid `MAIL FROM` are answered with `552 5.3.4 Message too big for system` instead of `503 5.5.1`.
  - A `maxMessageSize` of `0` rejects every message with `552 5.3.4 Message too big for system` instead of disabling the size limit.
- Windows: Listeners bound to the unspecified IPv6 address (`[::]`), including all defaults, refuse IPv4 connections such as `127.0.0.1`, since `IPV6_V6ONLY` is enabled by default on Windows.


<hr />

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