Skip to content

Tuwunel

v1.7.0 Breaking

This release includes 2 breaking changes for platform teams planning a safe upgrade.

Published 13d Communication & Email
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

chat conduit conduwuit matrix matrix-chat matrix-server
+4 more
rocksdb rust server uwu

Affected surfaces

crypto_tls auth breaking_upgrade

ReleasePort's take

Light signal
editorial:auto 13d

v1.7.0 patches critical regressions: storage panics on non-S3 uploads (v1.6.2), async-media-upload deadlocks. Introduces breaking change: MSC4225 erases legacy OTK keys on first read-write; operators must plan migration.

Why it matters: Fixes storage panics and auth deadlocks from v1.6.2; upgrade recommended. Legacy OTK schema migration auto-triggers on first read-write. Cache rebalance (auth_chain 4-15x) requires capacity planning. Migrate OpenTelemetry to OTLP.

Summary

AI summary

Broad release touches New Features & Enhancements, Bug Fixes, https://matrix-construct.github.io/tuwunel/development/compliance/msc.html, and e5f625d89.

Changes in this release

Breaking Medium

Cache capacity modifier above default may require decreasing to avoid 25-50% memory cost.

Cache capacity modifier above default may require decreasing to avoid 25-50% memory cost.

Source: llm_adapter@2026-05-21

Confidence: high

Breaking Medium

MSC4225 drops legacy onetimekeyid_onetimekeys column; existing OTKs erased on first read-write.

MSC4225 drops legacy onetimekeyid_onetimekeys column; existing OTKs erased on first read-write.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Medium

Adds threaded read receipts and notifications across storage, federation, sync v3, and push gateway.

Adds threaded read receipts and notifications across storage, federation, sync v3, and push gateway.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Adds MSC4222 state_after on /sync v3 via opt-in use_state_after=true query parameter.

Adds MSC4222 state_after on /sync v3 via opt-in use_state_after=true query parameter.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

MSC4115 unsigned.membership on served events from encrypted rooms now included.

MSC4115 unsigned.membership on served events from encrypted rooms now included.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Synapse-compatible shared-secret register endpoint at /_synapse/admin/v1/register added.

Synapse-compatible shared-secret register endpoint at /_synapse/admin/v1/register added.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Refresh-token expiry with optional hard logout via refresh_token_ttl, idle_only, hard_logout keys.

Refresh-token expiry with optional hard logout via refresh_token_ttl, idle_only, hard_logout keys.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Configurable extra OIDC authorization parameters enable silent-relogin gap closure with Logto, Element X.

Configurable extra OIDC authorization parameters enable silent-relogin gap closure with Logto, Element X.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

MSC4452 preview_url capability is advertised on /capabilities endpoint.

MSC4452 preview_url capability is advertised on /capabilities endpoint.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

MSC4466 propagate_to profile query parameter implemented; room fan-out now runs concurrently.

MSC4466 propagate_to profile query parameter implemented; room fan-out now runs concurrently.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

MSC3283 m.set_displayname and m.set_avatar_url capabilities are advertised.

MSC3283 m.set_displayname and m.set_avatar_url capabilities are advertised.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

MSC3814 fallback keys on dehydrated-device PUT are now stored.

MSC3814 fallback keys on dehydrated-device PUT are now stored.

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Admin db memory-usage command now tabular with used / cap / util% and per-pool block-cache rows.

Admin db memory-usage command now tabular with used / cap / util% and per-pool block-cache rows.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Medium

Configuration items annotated in generated tuwunel-example.toml to indicate runtime-reloadable vs restart-required.

Configuration items annotated in generated tuwunel-example.toml to indicate runtime-reloadable vs restart-required.

Source: llm_adapter@2026-05-21

Confidence: low

Dependency Medium

OpenTelemetry OTLP exporter replaces deprecated opentelemetry-jaeger crate; tokio-console re-enabled.

OpenTelemetry OTLP exporter replaces deprecated opentelemetry-jaeger crate; tokio-console re-enabled.

Source: llm_adapter@2026-05-21

Confidence: high

Performance Medium

Receipts and presence EDU emission bounded below federation budget to prevent overload.

Receipts and presence EDU emission bounded below federation budget to prevent overload.

Source: llm_adapter@2026-05-21

Confidence: high

Performance Medium

Optimization in /state and map-value storage; /state now propagates per-PDU read errors.

Optimization in /state and map-value storage; /state now propagates per-PDU read errors.

Source: llm_adapter@2026-05-21

Confidence: high

Performance Medium

Per-cache defaults rebalanced: auth_chain up 15x to 1.5M, several caches up 4x to 400k entries.

Per-cache defaults rebalanced: auth_chain up 15x to 1.5M, several caches up 4x to 400k entries.

Source: llm_adapter@2026-05-21

Confidence: low

Performance Medium

Rebalances per‑cache defaults: auth_chain capacity increased 15× to 1.5 M; several shorteventid/eventid caches increased 4× to 400 k entries.

Rebalances per‑cache defaults: auth_chain capacity increased 15× to 1.5 M; several shorteventid/eventid caches increased 4× to 400 k entries.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Deprecation Medium

Migration upgrades legacy mediaid_user keys to composite layout.

Migration upgrades legacy mediaid_user keys to composite layout.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

MSC2246 asynchronous media uploads self-deadlock on notifier mutex; acquisition order fixed.

MSC2246 asynchronous media uploads self-deadlock on notifier mutex; acquisition order fixed.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Sliding-sync cached list ranges now refresh on every explicit list update, not indefinitely stale.

Sliding-sync cached list ranges now refresh on every explicit list update, not indefinitely stale.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

OAuth Dynamic Client Registration records bounded to fixed size to prevent unbounded growth.

OAuth Dynamic Client Registration records bounded to fixed size to prevent unbounded growth.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Now warns at startup when turn_uris set without TURN credentials to prevent silent empty creds.

Now warns at startup when turn_uris set without TURN credentials to prevent silent empty creds.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

v1.6.2 regression on non-S3 storage panicked main thread on first upload; multipart now S3-only.

v1.6.2 regression on non-S3 storage panicked main thread on first upload; multipart now S3-only.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

UIAA fallback acknowledgement rejected non-SSO flows; registration token+password flow now completes.

UIAA fallback acknowledgement rejected non-SSO flows; registration token+password flow now completes.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

/threads and /backfill apply visibility filter before pagination; non-empty final page returns next_batch.

/threads and /backfill apply visibility filter before pagination; non-empty final page returns next_batch.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

GitHub OIDC default base_path now aligns with their published discovery doc after issuer change.

GitHub OIDC default base_path now aligns with their published discovery doc after issuer change.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

OAuth SSO grant params now win over operator-configured extras on key collision.

OAuth SSO grant params now win over operator-configured extras on key collision.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

Membership now tolerates stale room state on self-leave; edge case handling improved.

Membership now tolerates stale room state on self-leave; edge case handling improved.

Source: llm_adapter@2026-05-21

Confidence: low

Refactor Medium

KV codec's additive-tail invariant for trailing Option, &str, &[u8] fields now documented.

KV codec's additive-tail invariant for trailing Option, &str, &[u8] fields now documented.

Source: llm_adapter@2026-05-21

Confidence: low

Full changelog

Tuwunel 1.7.0

May 21, 2026

All servers raising their cache_capacity_modifier above default must consider decreasing it to deploy this release. The default of 1.0 is now generally recommended, and up to 2.0 for systems with four or less cores. Taking no action may cost 25% to 50% more memory (#123).

Nine additional MSCs have landed. Current status is kept up to date in our documentation.

New Features & Enhancements

  • Threaded read receipts and notifications (MSC3771, MSC3773) ship across storage, federation, sync v3, SSS v5, and the push gateway. Existing users may see a one-time jump in unread or badge counts that previously sat at the main-context-only total.

  • MSC4225 one-time-key upload-order issuance is implemented. Operator note: the legacy onetimekeyid_onetimekeys column is dropped on first read-write open and existing OTKs are erased; clients re-upload on their next /sync, with MSC2732 fallback keys (where present) covering the gap. The wipe is one-way; read-only and secondary replicas tolerate the missing column until the primary recreates it.

  • MSC4222 state_after on /sync v3 as an opt-in via ?use_state_after=true. Clients that don't opt in are unaffected.

  • MSC4115 unsigned.membership on served events from encrypted rooms. Informational; clients that ignore the field are unaffected.

  • Synapse-compatible shared-secret register endpoint at /_synapse/admin/v1/register, raised by @iwalkalone69 in (#38). The admin module was also split into a directory of units.

  • Refresh-token expiry with optional hard logout via three new keys: refresh_token_ttl, refresh_token_idle_only, and refresh_token_hard_logout. All default disabled.

  • Configurable extra OIDC authorization parameters, courtesy of @Batmaev in (#450). Closes the silent-relogin gap with Logto and Element X when operators set prompt = "login". Thank you!

  • MSC4452 preview_url capability is advertised on /capabilities.

  • MSC4466 propagate_to profile query parameter is implemented; the room fan-out also runs concurrently.

  • MSC3283 m.set_displayname and m.set_avatar_url capabilities are advertised.

  • MSC3814 fallback keys on dehydrated-device PUT are now stored.

  • OpenTelemetry OTLP exporter replaces the deprecated opentelemetry-jaeger crate, closing (#85); tokio-console is re-enabled.

  • Tip of the hat to @nyakokitsu, who reported in (#460) that turn_uris set without TURN credentials produces empty creds silently. Tuwunel now warns at startup.

  • Thanks to @dasha-uwu for simplifying servers_route_via.

  • Per-cache defaults were rebalanced from observed utilization in (#123): auth_chain up 15x to 1.5M, several shorteventid/eventid caches 4x to 400k. Closes (#123) and (#423) opened by @scanash00; an earlier report by @alythemonk in (#262) on Oracle Linux OOM-via-PGTABLE is also addressed. Operators on <= 2 GiB hosts may want to clamp the cache modifiers in their toml to restore the previous baseline.

  • Admin db memory-usage is now tabular (used / cap / util%) with per-pool block-cache rows.

  • Configuration items are annotated in the generated tuwunel-example.toml to indicate runtime-reloadable vs restart-required.

  • The KV codec's additive-tail invariant for trailing Option<_>, &str, and &[u8] fields is documented.

  • A migration upgrades legacy mediaid_user keys to the composite layout.

  • Thank you @NiklausHofer for the Gentoo Guru ebuild in "Getting Started" (#461).

  • Docs: enable_loopback_candidate troubleshooting motivated by @Lama-Thematique in (#451), ip_source for reverse-proxy users, and an MSC table refresh (MSC3419 verified, MSC1957 n/a, rows for MSC4461 through MSC4474). Closes (#94) opened by @MrRinkana.

  • Thanks to @winyadepla for the traefik MatrixRTC config in (#462) bringing parity with nginx and caddy. Also addresses (#69) opened by @GZEI.

  • CI gained a Complement job-summary script, a Playwright stage, and drift detection so a missed tuwunel-example.toml regeneration fails check and clippy.

Bug Fixes

  • A v1.6.2 regression on non-S3 storage backends panicked the main thread on first upload. Reported by @Sommerwiesel in (#452); multipart is now gated on S3 only. Sincere apologies for the disruption.

  • @BVollmerhaus graciously reported in (#454) that MSC2246 asynchronous media uploads could self-deadlock on the notifier mutex; the acquisition order is fixed. Thank you!

  • Thanks to @digikar99, who reported in (#459) that the UIAA fallback acknowledgement rejected non-SSO flows; the registration token + password flow completes cleanly.

  • Sliding-sync cached list ranges refresh on every explicit list update, shipped by @lhjt in (#455); previously a scrolled-to range was ignored indefinitely. Thank you!

  • /threads and /backfill apply the visibility filter before pagination take, so a final non-empty page still returns next_batch.

  • GitHub OIDC default base_path now aligns with their published discovery doc after they quietly changed the issuer (eb51c70ca, 6552f8668).

  • OAuth Dynamic Client Registration records are bounded to a fixed size. Thanks @CEbbinghaus! (e5f625d89).

  • OAuth SSO grant params win over operator-configured extras on key collision (05dba7ee9).

  • Receipts and presence EDU emission is bounded below the federation budget (b4fcf5871).

  • Membership tolerates stale room state on self-leave (39c72c233).

  • A missed optimization in /state and map-value storage was corrected (b305e6a86); /state now also propagates per-PDU read errors instead of silently skipping corrupt events.

  • Five route doc-headers had incorrect HTTP verbs (a40ca8f0a).

  • The Docker bake file dropped the non-functional cache_to/cache_from directives (8e4bc8c68).

  • Thank you @pedrompcaetano for the typo fix in tuwunel.container (#456).

  • Stale comments and fan-out destructure cleanups (85e85c883, 9c4cd7c33, 2cc249363).

Breaking Changes

  • Drops legacy `onetimekeyid_onetimekeys` column on first read-write open, erasing existing OTKs (one‑way migration).
  • Cache capacity modifier default recommended as `1.0`; servers previously set above must consider decreasing to avoid higher memory usage.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Tuwunel

Get notified when new releases ship.

Sign up free

About Tuwunel

High-performance and feature-rich chat server for Matrix, and the successor to conduwuit (fork of Conduit).

All releases →

Related context

Beta — feedback welcome: [email protected]