This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+4 more
Affected surfaces
Summary
AI summaryBroad release touches New Features & Enhancements, Bug Fixes, MSC4143, and MSC4203.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| 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:videoandog:audioalongside images, so the third party sees Tuwunel rather than the requesting client. Nothing is stored permanently: preview media becomes a lazymxc://reference fetched from source on demand. Aurl_preview_user_agentoption, with a separateurl_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
selinuxsubpackage (#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-backupsadmin 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_serversconfig option makes the/etc/resolv.confdependency 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
roomcommands 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_idsonly 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_eventsdefault 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_curve25519and 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_FOUNDfor an unknown user instead of an empty 200 (76ea07fc9). -
The room ephemeral section is always present in
/syncresponses now, thanks to @x86pup (79bb4af09). -
An empty
device_idis 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_pathdescription 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
About Tuwunel
High-performance and feature-rich chat server for Matrix, and the successor to conduwuit (fork of Conduit).
Beta — feedback welcome: [email protected]