Skip to content

Tuwunel

v1.8.2 Breaking

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

✓ 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

auth breaking_upgrade

Summary

AI summary

Broad release touches New Features & Enhancements, Bug Fixes, MSC4143, and MSC4203.

Changes in this release

Feature Low

Adds URL preview media proxying for og:video and og:audio.

Adds URL preview media proxying for og:video and og:audio.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds RPM COPR build pipeline, SELinux policy module, and apt repository for distribution packaging.

Adds RPM COPR build pipeline, SELinux policy module, and apt repository for distribution packaging.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds online backup restore, verification, and delete-backups admin command.

Adds online backup restore, verification, and delete-backups admin command.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Serves MatrixRTC transport discovery without an access token for Element Call.

Serves MatrixRTC transport discovery without an access token for Element Call.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds container HEALTHCHECK with liveness‑probe mode for orchestrators.

Adds container HEALTHCHECK with liveness‑probe mode for orchestrators.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds `dns_servers` config option to make `/etc/resolv.conf` dependency optional.

Adds `dns_servers` config option to make `/etc/resolv.conf` dependency optional.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Extends Synapse‑compatible admin API with server‑notice, redaction, login‑as, federation destination management, and media endpoints.

Extends Synapse‑compatible admin API with server‑notice, redaction, login‑as, federation destination management, and media endpoints.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds appservice transaction extensions for device‑list changes, one‑time‑key counts, and to‑device events (MSC3202, MSC4203).

Adds appservice transaction extensions for device‑list changes, one‑time‑key counts, and to‑device events (MSC3202, MSC4203).

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Implements forward‑extremity capping, pruning engine, and admin room commands for extremities.

Implements forward‑extremity capping, pruning engine, and admin room commands for extremities.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Adds local state derivation for incoming federation events in observation mode.

Adds local state derivation for incoming federation events in observation mode.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Low

Supports Matrix protocol versions v1.18 and v1.19.

Supports Matrix protocol versions v1.18 and v1.19.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Feature Low

Raises `max_fetch_prev_events` default to 1024.

Raises `max_fetch_prev_events` default to 1024.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix High

Restores native OIDC login by fixing redirect‑completion path and HTTP status codes.

Restores native OIDC login by fixing redirect‑completion path and HTTP status codes.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Fixes federation delivery backoff after peer recovery, using full failure history and clearing stale rows on upgrade.

Fixes federation delivery backoff after peer recovery, using full failure history and clearing stale rows on upgrade.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Prevents initialization over incomplete database manifests, avoiding data loss.

Prevents initialization over incomplete database manifests, avoiding data loss.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Corrects one-time-key counts to match Synapse, preserving explicit zero counts.

Corrects one-time-key counts to match Synapse, preserving explicit zero counts.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Repairs non‑Linux builds: resource usage reporting, graceful shutdown on Ctrl+C, and platform‑gated command compilation.

Repairs non‑Linux builds: resource usage reporting, graceful shutdown on Ctrl+C, and platform‑gated command compilation.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Treats non-JSON responses from proxies/CDNs as transient errors instead of evicting routes.

Treats non-JSON responses from proxies/CDNs as transient errors instead of evicting routes.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Preserves forward‑extremity set on soft‑failed inbound events and refuses detached non‑create events on empty frontiers.

Preserves forward‑extremity set on soft‑failed inbound events and refuses detached non‑create events on empty frontiers.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Returns 404 `M_NOT_FOUND` for unknown users in federation profile queries.

Returns 404 `M_NOT_FOUND` for unknown users in federation profile queries.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Ensures room ephemeral section is always present in `/sync` responses.

Ensures room ephemeral section is always present in `/sync` responses.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Treats empty `device_id` as unspecified and generates a device ID.

Treats empty `device_id` as unspecified and generates a device ID.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Fixes systemd unit from sticking in deactivating state after admin restart.

Fixes systemd unit from sticking in deactivating state after admin restart.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Causes backup requests that cannot create a backup to error instead of silently succeeding; propagates engine errors.

Causes backup requests that cannot create a backup to error instead of silently succeeding; propagates engine errors.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Refactor Low

Rebuilds preview store using CBOR, replacing byte‑separated format that could shear fields.

Rebuilds preview store using CBOR, replacing byte‑separated format that could shear fields.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Full changelog

Tuwunel 1.8.2

July 17, 2026

New Features & Enhancements

  • URL preview media proxying relays link-preview media through the server, now covering og:video and og:audio alongside images, so the third party sees Tuwunel rather than the requesting client. Nothing is stored permanently: preview media becomes a lazy mxc:// reference fetched from source on demand. A url_preview_user_agent option, with a separate url_preview_media_user_agent, lets previews work for sites that block the default agent. Shipped by @az4521 in (#508), closing their own request for video previews (#394). The preview store is rebuilt on CBOR at the same time, replacing a byte-separated format that could shear fields.

  • Distribution packaging expands to RPM with a COPR build pipeline (fixes #251) and a SELinux policy module shipped as a selinux subpackage (#412), plus an apt repository published from CI and Debian packaging that adopts an existing conduwuit or Conduit database in place. Courtesy of @x86pup.

  • Online backups can now be restored and verified, joined by a delete-backups admin command, graciously contributed by @x86pup.

  • MatrixRTC transport discovery (MSC4143) is served without an access token, so Element Call can find a server's transports; contributed by @basnijholt in (#512).

  • A container HEALTHCHECK, backed by a new liveness-probe mode, lets orchestrators track readiness, with appreciation to @x86pup.

  • A dns_servers config option makes the /etc/resolv.conf dependency optional, tip of the hat to @x86pup.

  • The Synapse-compatible admin API grows again (#38): server-notice endpoints, user redaction and login-as, federation destination management, and media info, purge, and statistics.

  • Appservice transaction extensions deliver richer data to appservices: device-list changes and one-time-key counts with unused fallback key types (MSC3202), and to-device events (MSC4203). Opened by @dark-collective in (#502) and (#501).

  • Forward-extremity capping and pruning guards against extremity blowup with a scored prune engine that always leaves a survivor and protects the local server's own leaves, a cap applied on the federation receive path, and admin room commands to list and prune a room's extremities.

  • Local state derivation for incoming federation events lands in observation mode (#419). The server derives an event's state from local ancestry and calls /state_ids only for physically absent events, running alongside the existing fetch and comparing while the fetched result stays authoritative.

  • Long admin command output is split across chained reply or thread events, and oversized output is attached as an uploaded file, raised by @grinapo in (#471).

  • Pushers rejected by the push gateway are now removed, backed by push-gateway conformance tests and UnifiedPush documentation, raised by @NinekoTheCat in (#20).

  • Support for Matrix v1.18 and v1.19 is declared in /versions.

  • The max_fetch_prev_events default is raised to 1024.

Bug Fixes

  • Federation delivery no longer runs hot against a peer that has come back. The per-server backoff gate consulted only the current time bucket, so it re-authorized attempts at every timeout boundary and never honored the computed earliest retry, and a stale set of reachability rows could keep muting a recovered server. The verdict now derives from a server's full failure history, a returning peer clears the whole streak, and the old rows are cleared once on upgrade (da0c3f600, ec049f61c). Sincere apologies to anyone whose outbound federation lagged to a server that had recovered.

  • A proxy or CDN answering a federation request with non-JSON is treated as transient rather than evicting the route outright, and route override eviction is fixed for well-known and SRV-delegated topologies where it was a no-op (b33415d50).

  • Tuwunel refuses to initialize over the remnants of a database that lacks a readable manifest, instead of treating them as obsolete files and deleting them on open (fixes #510). Reported and diagnosed by @ItsLiyua, whose detail on the two parallel database directories localized the cause.

  • Native OIDC login completes again: the redirect-completion path returned 405 and produced a redirect Chrome refused (fixes #504, #505). Reported by @isniz and @achetronic.

  • One-time-key counts match Synapse's shape, and an explicit zero count is preserved, so a client whose key pool is drained still sees signed_curve25519 and replenishes instead of starving (007033cd5, 164b8da61). Contributed by @basnijholt in (#511).

  • A soft-failed inbound event could compute an empty forward-extremity set and, once persisted, remove every leaf and wedge local sends until a remote event arrived; the previous band is now preserved, and a detached non-create local event on an empty frontier is refused rather than silently forking the room (e0f10343e, 1f1dea699).

  • The inbound federation profile query returns 404 M_NOT_FOUND for an unknown user instead of an empty 200 (76ea07fc9).

  • The room ephemeral section is always present in /sync responses now, thanks to @x86pup (79bb4af09).

  • An empty device_id is treated as unspecified and a device id is generated (cfe73cbb2).

  • A systemd unit no longer sticks in the deactivating state after an in-place admin restart, fixed by @x86pup (68e034d84).

  • Non-Linux builds get several repairs, courtesy of @obodnikov: resource-usage reporting compiles on non-unix and no longer panics in macOS thread usage (#509), Ctrl+C actually shuts the server down on non-unix targets (#507), and platform-gated admin commands compile on every target (#506).

  • Backup requests that cannot create a backup error instead of reporting success, and backup engine errors propagate rather than being swallowed (f6de800b5, 9b54209d0). Credit to @x86pup.

  • @x86pup corrected documented config defaults that disagreed with the code (bb9dfb25c), and the notification_push_path description is set right (e16a3aea5).

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

Related tools

Earlier breaking changes

  • v1.7.0 MSC4225 drops legacy onetimekeyid_onetimekeys column; existing OTKs erased on first read-write.
  • v1.7.0 Cache capacity modifier above default may require decreasing to avoid 25-50% memory cost.

Beta — feedback welcome: [email protected]