Releases: element-hq/synapse
Releases · element-hq/synapse
v1.155.0
Synapse 1.155.0 (2026-06-16)
End of Life of Debian 12 Bookworm
The next version of Synapse will not include Debian packages for Debian 12 Bookworm
as it reached end of life on the 10th of June 2026.
Internal Changes
- When building releases, don't cancel Debian package builds when one of them fails. (#19842)
Synapse 1.155.0rc1 (2026-06-09)
Bugfixes
- Limit the to-device EDU size to a reasonable value to mitigate long queues of to-device messages preventing outgoing federation because of the size of the transaction. (#19617)
- Work around bug that sometimes breaks joining restricted rooms that require a remote join. Contributed by @tulir @ Beeper. (#19730)
- Update Sliding Sync to return a new response immediately if a room subscription has changed and produced a new response. (#19734, #19792)
- Fix the
/capabilitiesendpoint returning a 500 error on non-media workers when MSC4452: Preview URL capabilities API is enabled. (#19839)
Improved Documentation
- Document how to see Rust build failure output when using
poetry install. (#19818) - Document that the SQLite version included in Ubuntu LTS, aside from ESM-only versions, is included in our support policy. (#19823)
Internal Changes
- Port the Python Event classes to Rust. (#19701, #19816, #19817, #19819)
- Added tests to ensure that email notification links are sanitized. Contributed by Noah Markert. (#19741)
- Add
GcpJsonFormatterlogging formatter for use with Google Cloud Logging and GKE deployments. (#19775) - Add more logging to the to-device message replication stream. (#19801, #19821)
- Port
Requesterclass to Rust. (#19828)
v1.155.0rc1
Synapse 1.155.0rc1 (2026-06-09)
Bugfixes
- Limit the to-device EDU size to a reasonable value to mitigate long queues of to-device messages preventing outgoing federation because of the size of the transaction. (#19617)
- Work around bug that sometimes breaks joining restricted rooms that require a remote join. Contributed by @tulir @ Beeper. (#19730)
- Update Sliding Sync to return a new response immediately if a room subscription has changed and produced a new response. (#19734, #19792)
- Fix the
/capabilitiesendpoint returning a 500 error on non-media workers when MSC4452: Preview URL capabilities API is enabled. (#19839)
Improved Documentation
- Document how to see Rust build failure output when using
poetry install. (#19818) - Document that the SQLite version included in Ubuntu LTS, aside from ESM-only versions, is included in our support policy. (#19823)
Internal Changes
- Port the Python Event classes to Rust. (#19701, #19816, #19817, #19819)
- Added tests to ensure that email notification links are sanitized. Contributed by Noah Markert. (#19741)
- Add
GcpJsonFormatterlogging formatter for use with Google Cloud Logging and GKE deployments. (#19775) - Add more logging to the to-device message replication stream. (#19801, #19821)
- Port
Requesterclass to Rust. (#19828)
v1.154.0
Synapse 1.154.0 (2026-06-04)
No significant changes since 1.154.0rc1.
Synapse 1.154.0rc1 (2026-05-27)
Features
- Add support for MSC4452: Preview URL capabilities API which exposes a
io.element.msc4452.preview_urlcapability.
Ifexperimental_features.msc4452_enabledistrue, the/_matrix/(client/v1/media|media/v3)/preview_urlendpoint
now responds with a 403 status code when the capability is disabled. (#19715)
Bugfixes
- Fix a bug in MSC4186: Simplified Sliding Sync that could prevent user avatars from showing if the room had an empty name. (#19468, #19791)
- Fix access token cache not being invalidated for sessions using refresh tokens. Contributed by @FrenchGithubUser @ Famedly. (#19483)
- Fix bug where Synapse would return 400 (
M_BAD_JSON) when sending a message with amentionsfield and Synapse modulecheck_event_allowedcallback registered (frozen event). Contributed by @gaetan-sbt. (#19634) - Fix long-standing but niche bug with
/syncwhere it could attempt to fetch data with flawed invalid future tokens. (#19644) - Fix
/syncfailing when MSC4354 Sticky Events are enabled and the sync request filters out Ephemeral Data Units (EDUs). (#19787) - Fix packaging for Fedora and EPEL caused by unnecessary bumping
attrsminimum version requirement inpyproject.tomlfile. Contributed by Oleg Girko. (#19789) - Fix merging signatures when a policy server is running under the same server name as Synapse. The bug was re-introduced in v1.153.0rc1 after being fixed earlier in v1.151.0rc1. Contributed by @tulir @ Beeper. (#19797)
Improved Documentation
- Added details about how Synapse syncs the picture claim when
update_profile_informationsetting is true. (#19508)
Internal Changes
- Port
Event.contentfield to Rust. (#19725) - Prefer close backfill points (absolute distance). (#19748)
- Replace unique
quarantined_mediawaiting patterns with standardwait_for_stream_token(...). (#19764) - Improve Synapse logging around when someone encounters
We can't get valid state history.so you can correlate everything byevent_id. (#19765) - Tidy up Rust
RoomVersionstructs. (#19766) - Update
WorkerLocktests to better stress theWORKER_LOCK_MAX_RETRY_INTERVAL. (#19772) - Refactor MSC4242: State DAG checks behind a single
TypeIshelper to avoid scatteredisinstancecasts. (#19774) - Use
StrCollectionforprev_state_events. (#19777) - Fix up the construction of events in tests, ahead of the Rust event port. (#19781)
v1.154.0rc1
Synapse 1.154.0rc1 (2026-05-27)
Features
- Add support for MSC4452: Preview URL capabilities API which exposes a
io.element.msc4452.preview_urlcapability.
Ifexperimental_features.msc4452_enabledistrue, the/_matrix/(client/v1/media|media/v3)/preview_urlendpoint
now responds with a 403 status code when the capability is disabled. (#19715)
Bugfixes
- Fix a bug in MSC4186: Simplified Sliding Sync that could prevent user avatars from showing if the room had an empty name. (#19468, #19791)
- Fix access token cache not being invalidated for sessions using refresh tokens. Contributed by @FrenchGithubUser @ Famedly. (#19483)
- Fix bug where Synapse would return 400 (
M_BAD_JSON) when sending a message with amentionsfield and Synapse modulecheck_event_allowedcallback registered (frozen event). Contributed by @gaetan-sbt. (#19634) - Fix long-standing but niche bug with
/syncwhere it could attempt to fetch data with flawed invalid future tokens. (#19644) - Fix
/syncfailing when MSC4354 Sticky Events are enabled and the sync request filters out Ephemeral Data Units (EDUs). (#19787) - Fix packaging for Fedora and EPEL caused by unnecessary bumping
attrsminimum version requirement inpyproject.tomlfile. Contributed by Oleg Girko. (#19789) - Fix merging signatures when a policy server is running under the same server name as Synapse. The bug was re-introduced in v1.153.0rc1 after being fixed earlier in v1.151.0rc1. Contributed by @tulir @ Beeper. (#19797)
Improved Documentation
- Added details about how Synapse syncs the picture claim when
update_profile_informationsetting is true. (#19508)
Internal Changes
- Port
Event.contentfield to Rust. (#19725) - Prefer close backfill points (absolute distance). (#19748)
- Replace unique
quarantined_mediawaiting patterns with standardwait_for_stream_token(...). (#19764) - Improve Synapse logging around when someone encounters
We can't get valid state history.so you can correlate everything byevent_id. (#19765) - Tidy up Rust
RoomVersionstructs. (#19766) - Update
WorkerLocktests to better stress theWORKER_LOCK_MAX_RETRY_INTERVAL. (#19772) - Refactor MSC4242: State DAG checks behind a single
TypeIshelper to avoid scatteredisinstancecasts. (#19774) - Use
StrCollectionforprev_state_events. (#19777) - Fix up the construction of events in tests, ahead of the Rust event port. (#19781)
v1.153.0
Synapse 1.153.0 (2026-05-19)
No significant changes since 1.153.0rc3.
Synapse 1.153.0rc3 (2026-05-15)
Bugfixes
- Revert 'Have MSC4186: Simplified Sliding Sync return a new response immediately if a room subscription has changed and produced a new response. (#19714)' (introduced in 1.153.0rc1) due to performance problems. (#19784)
Synapse 1.153.0rc2 (2026-05-13)
Bugfixes
- Correctly handle arbitrary precision integers in
unsignedfield of events. The bug was introduced in 1.153.0rc1. (#19769)
Synapse 1.153.0rc1 (2026-05-08)
Features
- Make ACLs apply to EDUs per MSC4163. (#18475)
- Stabilize MSC3266: Room summary API, removing the experimental config flag
msc3266_enabled. Contributed by @dasha-uwu. (#19720) - Partial MSC4311 implementation:
m.room.createis now a required part of strippedinvite_state/knock_state. Contributed by @FrenchGithubUser @famedly. (#19722) - Expose
tombstonedandreplacement_roomin room details on admin API endpointGET /_synapse/admin/v1/rooms/<room_id>. Contributed by Noah Markert. (#19737)
Bugfixes
- Allow self-requested user erasure (upon account deactivation) to succeed even if Synapse has disabled profile changes. Contributed by Famedly. (#19398)
- Fix Synapse not backfilling new history when attempting to use a pagination token near a backward extremity. (#19611)
- Have MSC4186: Simplified Sliding Sync return a new response immediately if a room subscription has changed and produced a new response. (#19714)
- Fix a bug where when upgrading a room to room version 12, the power level event in the old room got temporarily mutated to remove the user upgrading the room's power. (#19727)
- Fix packaging for Fedora and EPEL caused by unnecessary bumping
authlibminimum version requirement inpyproject.tomlfile. Contributed by Oleg Girko. (#19742)
Improved Documentation
- Add warning about known problems when configuring
use_frozen_dicts. (#19711)
Internal Changes
- Port
Event.signaturesfield to Rust. (#19706) - Port
Event.unsignedfield to Rust. (#19708) - Add a Rust canonical JSON serializer. (#19739, #19763)
- Configure Dependabot to only update Python dependencies in the lockfile, unless widening upper bounds. (#19743)
- Reduce
WORKER_LOCK_MAX_RETRY_INTERVALto 5 seconds to reduce idle time after lock is released. (#19755) - Force keyword-only arguments for
Durationso time units have to be specified. (#19756)
v1.153.0rc3
Synapse 1.153.0rc3 (2026-05-15)
Bugfixes
- Revert 'Have MSC4186: Simplified Sliding Sync return a new response immediately if a room subscription has changed and produced a new response. (#19714)' (introduced in 1.153.0rc1) due to performance problems. (#19784)
v1.153.0rc2
Synapse 1.153.0rc2 (2026-05-13)
Bugfixes
- Correctly handle arbitrary precision integers in
unsignedfield of events. The bug was introduced in 1.153.0rc1. (#19769)
v1.153.0rc1
Synapse 1.153.0rc1 (2026-05-08)
Features
- Make ACLs apply to EDUs per MSC4163. (#18475)
- Stabilize MSC3266: Room summary API, removing the experimental config flag
msc3266_enabled. Contributed by @dasha-uwu. (#19720) - Partial MSC4311 implementation:
m.room.createis now a required part of strippedinvite_state/knock_state. Contributed by @FrenchGithubUser @famedly. (#19722) - Expose
tombstonedandreplacement_roomin room details on admin API endpointGET /_synapse/admin/v1/rooms/<room_id>. Contributed by Noah Markert. (#19737)
Bugfixes
- Allow self-requested user erasure (upon account deactivation) to succeed even if Synapse has disabled profile changes. Contributed by Famedly. (#19398)
- Fix Synapse not backfilling new history when attempting to use a pagination token near a backward extremity. (#19611)
- Have MSC4186: Simplified Sliding Sync return a new response immediately if a room subscription has changed and produced a new response. (#19714)
- Fix a bug where when upgrading a room to room version 12, the power level event in the old room got temporarily mutated to remove the user upgrading the room's power. (#19727)
- Fix packaging for Fedora and EPEL caused by unnecessary bumping
authlibminimum version requirement inpyproject.tomlfile. Contributed by Oleg Girko. (#19742)
Improved Documentation
- Add warning about known problems when configuring
use_frozen_dicts. (#19711)
Internal Changes
- Port
Event.signaturesfield to Rust. (#19706) - Port
Event.unsignedfield to Rust. (#19708) - Add a Rust canonical JSON serializer. (#19739, #19763)
- Configure Dependabot to only update Python dependencies in the lockfile, unless widening upper bounds. (#19743)
- Reduce
WORKER_LOCK_MAX_RETRY_INTERVALto 5 seconds to reduce idle time after lock is released. (#19755) - Force keyword-only arguments for
Durationso time units have to be specified. (#19756)
v1.152.1
Synapse 1.152.1 (2026-05-07)
Security Fixes
- Prevent CPU starvation (Denial of Service) under worker lock contention, additionally capping the
WorkerLocktime out interval to a maximum of 60 seconds. Contributed by Famedly. (#19394, ELEMENTSEC-2026-1706, GHSA-8q93-326v-3m7g, CVE-2026-45078) - Prevent pagination ending when a page is full of rejected events. (ELEMENTSEC-2025-1636, GHSA-6qf2-7x63-mm6v, CVE-2026-45076)
v1.152.0
Synapse 1.152.0 (2026-04-28)
No significant changes since 1.152.0rc1.
Configuration changes needed for deployments using workers
For deployments using workers, please note that this version introduces a new quarantined_media_changes stream writer, which may require configuration changes.
Please see the the relevant section in the upgrade notes for details.
Without configuring this new stream writer, only the main process will be able to handle the /media/quarantine admin API endpoints for quarantining media.
Synapse 1.152.0rc1 (2026-04-22)
Features
- Add a "Listing quarantined media changes" Admin API for retrieving a paginated record of when media became (un)quarantined. (#19558, #19677, #19694)
- Advertise MSC4445 sync timeline order in
unstable_features. (#19642) - Report the Rust compiler version used in the Prometheus metrics. Contributed by Noah Markert. (#19643)
- Passthrough 'article' and 'profile' OpenGraph metadata on URL preview requests. (#19659)
- Add a way to re-sign local events with a new signing key. (#19668)
- Support MSC4450: Identity Provider selection for User-Interactive Authentication with Legacy Single Sign-On. (#19693)
- Add experimental support for MSC4242: State DAGs. Excludes federation support. (#19424)
- Adds Admin API endpoints to
list, fetch and delete user reports. (#19657) - Reduce database disk space usage by pruning old rows from
device_lists_changes_in_room. (#19473, #19709)
Bugfixes
- Reject
device_keys: nullin the request toPOST /_matrix/client/v3/keys/upload, as per the spec. This was temporarily allowed as a workaround for misbehaving clients. (#19637) - Fix database migrations failing on platforms where SQLite is configured with
SQLITE_DBCONFIG_DEFENSIVEby default, such as macOS. (#19690) - Fix a bug introduced in v1.145 where a non-admin could bypass admin checks for downloading remote quarantined media. This relied on the media already being previously present on the homeserver. (#19639)
Improved Documentation
- Include a workaround for running the unit tests with SQLite under recent versions of MacOS. (#19615)
- Fix Docker image link typo in worker docs. (#19645)
- Update the developer stream docs for creating a new stream to point out
_setup_sequence(...)inportdb. (#19675) - Update the developer stream docs for creating a new stream to highlight places that require documentation updates. (#19696)
Internal Changes
- Update CI to use re-usable Complement GitHub CI workflow. (#19533)
- Fix docstring for
limitargument in_maybe_backfill_inner(...). (#19630) - Document context for why increase timeout for policy server requests. (#19633)
- Run lint script to format Complement tests introduced in #19509. (#19636)
- Small simplifications to the events class. (#19680, #19712)
- Introduce
spam_checker_spammyinternal event metadata. (#19453) - Add a
FilteredEventclass that saves us copying events. (#19640) - Convert
EventInternalMetadatato useArc<RwLock<_>>. (#19669)