v0.16.12
diffusionstudio/corev0.16.12Jul 6, 2026by github-actions[bot]
AI Summary
This release adds support for DKIM2 and DMARCbis protocols, while fixing critical bugs in OIDC, PostgreSQL, Registry, and Network listener modules.
Key Highlights
- Added DKIM2 implementation
- Added DMARCbis implementation and reporting
- Fixed DANE to treat DNSSEC bogus as temporary failure
- Fixed OIDC provider to support ECDSA SEC1 format
- Fixed Network listener CPU spin on EMFILE errors
New Features
- DKIM2 implementation
- DMARCbis implementation (Aggregate Reporting and Failure Reporting)
Full Release Notes
## [0.16.12] - 2026-07-06 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 - DKIM2 implementation ([draft-ietf-dkim-dkim2-spec-03](https://datatracker.ietf.org/doc/draft-ietf-dkim-dkim2-spec/)). - DMARCbis implementation: - Domain-based Message Authentication, Reporting, and Conformance (DMARC) ([RFC 9989](https://datatracker.ietf.org/doc/html/rfc9989)) - DMARC Aggregate Reporting ([RFC 9990](https://datatracker.ietf.org/doc/html/rfc9990)) - DMARC Failure Reporting ([RFC 9991](https://datatracker.ietf.org/doc/html/rfc9991)) ## Changed ## Fixed - DANE: Treat DNSSEC `bogus` as a temporary failures to prevent downgrade attacks. - OIDC provider: - `ECDSA` private key support for `SEC1` format. - Allow ports in `redirect_uri` for loopback addresses. - OIDC directory: - Removing a user from all groups does not sync the changes correctly. - Fetch `name` and `group` claims from userinfo endpoint when missing from the JWT token. - PostgreSQL: Include error chain in error messages. - Prometheus: event counters are exported with incorrect metric names. - Registry: Changing the type of an existing account from `user` to `group` panics. - Masked emails: Return `UnknownRecipient` only for disabled or expired masked emails. - IDN: `sanitize_email` rejects valid Punycode domains. - Auto-ban: IP block expiration ignores per-reason ban durations. - Meilisearch: Limit the text search scope using `attributesToSearchOn`. - CalDAV: `calendar-query` REPORT returns invalid HTTP `404` when no events match the query. - Snowflake past id generation fails when the provided duration is longer than 4 years. - Calendar scheduling: Wrong RSVP base URL is used. - Network listener: Accept loop spins all CPU cores with no back-off when the process hits `EMFILE` (too many open files). - Cluster: Broadcast MTA queue refresh events to all nodes. <hr /> ### Check binary attestation [here](https://github.com/stalwartlabs/stalwart/attestations/34033385)