Tuwunel 1.8.1
July 9, 2026
New Features & Enhancements
-
Synapse-compatible admin API. The Synapse admin surface is served: user, room, media, device and access-token endpoints, the version and event-fetch endpoints, and room deletion, purge, and background-task tracking, backed by an in-memory task tracker and documented on a coverage status page. Opened by @iwalkalone69 in (#38). The user endpoints include listing a user's joined rooms, opened by @ngophuocloi-miracle-aavn in (#494).
-
Threads list (MSC3856). The
/threadsendpoint now orders threads by latest activity, honors aninclude=participatedfilter, serves per-requester views that respect ignored users, guards its inputs upfront, and carries the newest edit on each thread'slatest_event. -
Stable threading (MSC3440). Threading is advertised in
/versions, therelated_by_sendersandrelated_by_rel_typesevent filters are implemented, and nested thread relations are rejected at the send endpoint. -
Sender erasure (MSC4025). An erasure marker lands with admin surfacing, erased senders' events are served as pruned copies, and federation serving of those events is gated accordingly.
-
Native OIDC account registration and login, so Tuwunel can act as its own identity provider. Requested by @temp1403-oss (#479).
-
Configurable default power-level override for newly created rooms, courtesy of @basnijholt in (#496).
-
User suspension is now enforced at the API boundary, contributed by @dasha-uwu.
-
OAuth falls back to Apple
id_tokenclaims when the userinfo endpoint fails, shipped by @basnijholt in (#495). -
The
admin query rawcommands gain aputcommand and hex key decoding, from @dasha-uwu. -
A
SECURITY.mdwith a detached PGP signature, along with issue and pull-request templates and contact links, graciously added by @x86pup. -
Event bundling advances across three proposals: aggregations bundled on search context events (MSC3666),
m.referencechildren bundled as an event-id chunk (MSC3267), and the latestm.replaceedit bundled as a full event (MSC3925). -
Private read receipts now carry a timestamp.
-
Rust is bumped to 1.95.0.
Bug Fixes
-
Sliding sync silently dropped
m.spacerooms, so spaces were absent from the room list where Synapse showed them; the list filters a client omits are now cleared before applying (MSC4186, fixes #503). Reported by @sdenike. -
Rooms made space-visible did not appear in the space overview for new users. The room hierarchy cache is now evicted on any state change (fixes #498). Reported by @Lazalatin.
-
Registration with OIDC and LDAP configured together was broken: LDAP users are now provisioned even when provider registration is disabled (fixes #499). Reported by @balintbarna.
-
Tuwunel builds on FreeBSD again, with rust-rocksdb vendoring RocksDB there (fixes #492). Reported by @syobocat.
-
The MatrixRTC/Livekit setup docs were missing the Docker address-advertisement configuration, now explained (fixes #493). Reported by @Wanja-L.
-
Conduit database import gains several repairs: the
roomuserid_joinedrepair runs in a single pass, the conduwuit-era membership repairs are skipped for Conduit imports, and systemd's start timeout is extended so long startup migrations are not killed (#41). Thanks to @x86pup. -
The remote-server version endpoint returns our own version for a self-query instead of failing, with appreciation to @x86pup.
-
Unauthenticated TURN access was possible with
turn_allow_guestsenabled; guest access is now gated and appservice users are excluded from the guest TURN credentials check, credit to @dasha-uwu. -
Federation delivery is steadier: a stale resolver route is evicted on a non-JSON response (9bac544), the sender flushes when an unhealthy peer shows inbound activity (2d9c684), a first-failure retry grace precedes the backoff curve (e7f5769), and the sender wakes to retry a failed destination (93a772e).
-
EDU delivery is more reliable: selected device-list and receipt EDUs persist until acknowledged (ffdfc1b), EDU selections queue past the transaction budget (7091f84), and fresh EDUs are selected on the post-response path (3569317).
-
/messagesis forbidden on a room the requester cannot see (a791d7e). -
An unsupported method on a known path returns 405 instead of 404 (cd0513a).
-
The request extractor separates an empty body from a malformed one (80727f8).
-
is_directis omitted from member events unless it is true (adb78b9). -
The registration email binds regardless of UIA stage order (9b58cae).
-
The error log on undecodable presence data is restored (d81f340).
-
FIFO cache column TTLs are bounded to each column's validity window, with intra-L0 compaction enabled for those columns (9b3011a, e9004c9).
-
Release builds could fail to compile the room-summary layout after a 1.8.0 change; boxing the membership format at the invite edge cuts the recursion (regression d2c473f).