Tuwunel 1.7.1
June 5, 2026
New Features & Enhancements
-
A new federation data-fetching service improves reliability in rooms whose history is spread across many servers by locating missing events through concurrent queries. It ranks candidate servers by room-membership popularity and recent reachability, and reuses requests already in flight instead of issuing duplicates. Resolved state for outlier events, fetch and backoff decisions, and per-server reachability ("Peer Status") are now cached persistently, and auth-chain, state, prev-event, and backfill fetches all run through it. Servers that used to re-request the same uncacheable lookups should see far less repeated federation traffic.
-
OIDC device authorization grant (RFC 8628) lets users sign in on input-constrained devices. The MSC4191 account-management action set is now complete with a deep-linked cross-signing reset, and MSC3861 OAuth 2.0/OIDC is advertised on
/versions. The token endpoints and refresh-token lifecycle were reworked, dynamic client registration is opt-in and validates submitted client metadata, and device-scope binding requires PKCE. The OIDC authorization-server chapter of the documentation was expanded to match. -
Several additional MSCs land this cycle: MSC3980 (
event_fieldstrimming on/sync), MSC3860 (media download redirects), MSC4311 (origin_server_tson the stripped create event), MSC1219 (key backup storage conformance), MSC2659 (appservice ping error codes), MSC3550 (403 M_FORBIDDENallowed on profile lookup), and a stablem.forget_forced_upon_leavecapability (MSC4267). MSC4380 invite blocking now also covers invites delivered through/syncandcreateRoom. -
Support-contact discovery gains a PGP field and policy links (MSC4439, MSC4266), graciously contributed by @x86pup. The
/.well-known/matrix/supportendpoint can now advertise apgp_keyper contact (with raw key material rejected) and link support policies, and multiple support contacts can be configured with validation. -
@dasha-uwu added an
admin media previewcommand for debugging URL previews, retired blurhashing, dropped the legacy media-preview redirect, and removed the deprecated server-keys endpoint. -
Sliding sync (v5) now retracts departed and left rooms from the list and adds re-invited rooms back, so clients track membership churn without a full resync.
-
A device may now hold multiple access tokens, for easier rotation and concurrent sessions.
-
/contextcan optionally resolve events it has not yet received over federation, and outbound HTTP compression gained per-direction opt-out switches. -
An admin command to purge every room containing a given user was added, raised by @winyadepla in (#472).
-
Documentation for
ip_source_trusted_subnetsnow warns about accidentally including a proxy in the trusted set, courtesy of @BVollmerhaus in (#468). -
Diagnostic admin command suites were added for the federation fetcher and Peer Status, and the runtime can dump tokio and getrusage metrics to JSON at exit.
Bug Fixes
-
A regression introduced with
ip_sourcein 1.6.1 blocked locally-connected appservices and other loopback clients (#465). Loopback peers and trusted-peer subnets now bypass the configuredip_source, including over the Unix-socket listener, and theaxum-client-ipdependency was replaced with inlined helpers. Sincere apologies to everyone whose bridges went quiet. -
Remote room directory and summary lookups are more resilient over federation: the room-summary fallback now tries every
viaserver (5c99983), and a failed remotepublicRoomsrequest now returns a502(9a87977). -
Thank you @x86pup for reporting in (#466) that a bad
unix_socket_pathproduced an opaque startup failure; listener initialization errors now name the offending path. -
!admin query oauth associatereplied with an empty message and did nothing, reported by @Vazgen005 in (#467). It now emits a confirmation and accepts aforceflag. -
@dasha-uwu fixed a compression configuration option that could accidentally disable client-side decompression.
-
Several federation correctness fixes: the federation lock is now held across the invite residency check to close a join/unban race (add512b); a
send_joinresponse that omits state fails over to other servers (9c158d3); each transaction's PDUs are sorted topologically before handling (91218e1); and references outside the auth graph are treated as non-edges during resolution (6643919). -
Knock membership is now persisted and a remote re-knock re-drives to reconcile state; per-PDU backfill errors are isolated so one bad event no longer aborts the batch; and thread redaction walks through the redacted target.
-
Media fetches and URL previews now honor CIDR denylists for the addresses they resolve to (af1266a, 554557c). Buffered outbound responses are size-bounded, and federation key lookups are bounded and backed off.
-
Configuration handling improved: an unreadable
client_secret_filenow reports the path and IO error (844f123), matched keys can be excluded from the "unknown to tuwunel" warning (6bbfd0a), and packaged builds no longer drop theirmalloc_conftuning (de0eb1d).