Tuwunel 1.3.0
August 4, 2025
An unexpected performance improvement drastically reduced CPU usage. As a result, integration tests began to flake, uncovering latent concurrency bugs which were addressed. These fixes primarily impact the legacy and sliding-sync systems, and further fixes improve performance and compliance, though mostly in the legacy system as sliding-sync lacks adequate test coverage.
This release fixes many bugs and improves performance but at the cost of planned features further rescheduled to either v1.4
or v1.5
.
New Features
-
Refresh tokens (MSC2918) have been implemented. Supporting clients can now timeout their access tokens with a soft-logout after a configured
access_token_ttl
. This feature was commissioned and made public by an enterprise sponsor. -
Typing indicators have been added to sliding-sync thanks to @tmayoff. This feature (and the whole of sliding-sync) is still experimental and the indicator may not always appear or disappear as intended, nevertheless the effort will be enhanced by foundational fixes improving sliding-sync requested soon by the project's sponsor.
Enhancements
- @dasha_uwu maintains their streak as a serial contributor by patching the
!admin query raw
command with a base64 option allowing for low-level debugging of database records. - @obioma has improved the documentation explaining how to use multiple configuration files with precedence.
- Upon recommendation of @grinapo a basic request ID has been added to the tracing logs to uniquely distinguish each request while it's interleaved among others.
- Requested by @fruzitent this and future releases are tagged by version as multi-arch docker images to be properly archived in the registry rather than simply overwriting
:latest
. - Event processing performance has been improved by fetching and processing
prev_events
andauth_events
concurrently. - An experimental command
!admin debug resync-database
has been added for developers curious about #35
Bug Fixes
- Thanks to @tmayoff room avatars are properly calculated and no longer the same for all spaces (#102).
- Courtesy of @coolGi69 our bump to Rust 1.88 was properly updated for Nix. Apologies to the Nix community for getting this wrong the first time.
- Invite rejections have been fixed, this was due to a misinterpretation of the spec in legacy sync.
- Knock rooms might have been buggy from database records expecting a summation of the users in a room instead received the sequence number of the server, both are called "count."
- Room knocks failed to wakeup the sync systems; some cases of
account_data
changes also failed to wakeup the sync systems. These have been addressed. - The main sequence number fundamental to the entire server's operation (the "count" or counter) has been refactored after having exceeded design limitations.
- Sequence issues have been addressed in both legacy and sliding sync.
- Protocol compliance issues in legacy sync have been addressed. Additional compliance tests for device list updates now pass. The
state
andtimeline
on incremental sync provide expected results in more (if not all) cases. - Errors requiring
M_BAD_ALIAS
instead ofM_UNKNOWN
when sendingm.room.canonical_alias
are now conforming.
Deprecations
- Unauthenticated media fallbacks are no longer requested by default. This can still be enabled with
request_legacy_media
if desired. - Legacy Sliding-Sync has been removed in favor of Simplified Sliding-Sync. Clients which exclusively using Sliding-Sync have already migrated around the start of this year, so this removal should have no impact now.