Releases: element-hq/synapse
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)
v1.152.0rc1
Synapse 1.152.0rc1 (2026-04-22)
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.
Features
- Add a "Listing quarantined media changes" Admin API for retrieving a paginated record of when media became (un)quarantined. (#19558, #19677)
- 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 a "Listing quarantined media changes" Admin API for retrieving a paginated record of when media became (un)quarantined. (#19694)
- 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 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)
v1.151.0
Synapse 1.151.0 (2026-04-07)
Bugfixes
- Fix
KNOWN_ROOM_VERSIONS.__contains__raisingTypeErrorfor non-string keys, which could cause/syncto fail for rooms with aNULLroom version in the database. Bug introduced in #19589 as part of v1.151.0rc1. (#19649)
Synapse 1.151.0rc1 (2026-03-31)
Features
- Add stable support for MSC4284 Policy Servers. (#19503)
- Update and stabilize support for MSC2666: Get rooms in common with another user. Contributed by @tulir @ Beeper. (#19511)
- Updated experimental support for MSC4388: Secure out-of-band channel for sign in with QR. (#19573)
- Stabilize
room_versionandencryptionfields in the space/room/hierarchyAPI (part of MSC3266). (#19576) - Introduce a configuration option to allow using HTTP/2 over plaintext when Synapse connects to Matrix Authentication Service. (#19586)
Bugfixes
- Fix MSC4284 Policy Servers implementation to skip signing
org.matrix.msc4284.policyandm.room.policystate events. (#19503) - Correctly apply MSC4284 Policy Server signatures to events when the sender and policy server have the same server name. (#19503)
- Allow Synapse to start up even when discovery fails for an OpenID Connect provider. (#19509)
- Fix quarantine media admin APIs sometimes returning inaccurate counts for remote media. (#19559)
- Fix
Build and push complement imageCI job not havingpoetryavailable for the Complement runner script. (#19578) - Increase timeout for policy server requests to avoid repeated requests for checking media. (#19629)
Deprecations and Removals
- Remove support for MSC3852: Expose user agent information on Device as the MSC was closed. (#19430)
Internal Changes
- Fix small comment typo in config output from the
demo/start.shscript. (#19538) - Add MSC3820 comment context to
RoomVersionattributes. (#19577) - Remove
redacted_becausefrom internal unsigned. (#19581) - Prevent sending registration emails if registration is disabled. (#19585)
- Port
RoomVersionto Rust. (#19589) - Only show failing Complement tests in the formatted output in CI. (#19590)
- Ensure old Complement test files are removed when downloading a Complement checkout via
./scripts-dev/complement.sh. (#19592) - Update
HomeserverTestCase.pump()docstring to demystify behavior (Twisted reactor/clock). (#19602) - Deprecate
HomeserverTestCase.pump()in favor of more directHomeserverTestCase.reactor.advance(...)usage. (#19602) - Lower the Postgres database
statement_timeoutto 10m (previously 1h). (#19604)
v1.151.0rc1
Synapse 1.151.0rc1 (2026-03-31)
Features
- Add stable support for MSC4284 Policy Servers. (#19503)
- Update and stabilize support for MSC2666: Get rooms in common with another user. Contributed by @tulir @ Beeper. (#19511)
- Updated experimental support for MSC4388: Secure out-of-band channel for sign in with QR. (#19573)
- Stabilize
room_versionandencryptionfields in the space/room/hierarchyAPI (part of MSC3266). (#19576) - Introduce a configuration option to allow using HTTP/2 over plaintext when Synapse connects to Matrix Authentication Service. (#19586)
Bugfixes
- Fix MSC4284 Policy Servers implementation to skip signing
org.matrix.msc4284.policyandm.room.policystate events. (#19503) - Correctly apply MSC4284 Policy Server signatures to events when the sender and policy server have the same server name. (#19503)
- Allow Synapse to start up even when discovery fails for an OpenID Connect provider. (#19509)
- Fix quarantine media admin APIs sometimes returning inaccurate counts for remote media. (#19559)
- Fix
Build and push complement imageCI job not havingpoetryavailable for the Complement runner script. (#19578) - Increase timeout for policy server requests to avoid repeated requests for checking media. (#19629)
Deprecations and Removals
- Remove support for MSC3852: Expose user agent information on Device as the MSC was closed. (#19430)
Internal Changes
- Fix small comment typo in config output from the
demo/start.shscript. (#19538) - Add MSC3820 comment context to
RoomVersionattributes. (#19577) - Remove
redacted_becausefrom internal unsigned. (#19581) - Prevent sending registration emails if registration is disabled. (#19585)
- Port
RoomVersionto Rust. (#19589) - Only show failing Complement tests in the formatted output in CI. (#19590)
- Ensure old Complement test files are removed when downloading a Complement checkout via
./scripts-dev/complement.sh. (#19592) - Update
HomeserverTestCase.pump()docstring to demystify behavior (Twisted reactor/clock). (#19602) - Deprecate
HomeserverTestCase.pump()in favor of more directHomeserverTestCase.reactor.advance(...)usage. (#19602) - Lower the Postgres database
statement_timeoutto 10m (previously 1h). (#19604)
v1.150.0
Synapse 1.150.0 (2026-03-24)
No significant changes since 1.150.0rc1.
Upgrade notes
Please read the upgrade notes as this release includes a few changes that may affect your deployment.
Synapse 1.150.0rc1 (2026-03-17)
Features
- Add experimental support for the MSC4370 Federation API
GET /extremitiesendpoint. (#19314) - MSC4140: Cancellable delayed events: When persisting a delayed event to the timeline, include its
delay_idin the event'sunsignedsection in/syncresponses to the event sender. (#19479) - Expose MSC4354 Sticky Events over the legacy (v3) /sync API. (#19487)
- When Matrix Authentication Service (MAS) integration is enabled, allow MAS to set the user locked status in Synapse. (#19554)
Bugfixes
- Fix
Build and push complement imageCI job pointing to non-existent image. (#19523) - Fix a bug introduced in v1.26.0 that caused deactivated, erased users to not be removed from the user directory. (#19542)
Improved Documentation
- In the Admin API documentation, always express path parameters as
/<param>instead of as/$param. (#19307) - Update docs to clarify
outbound_federation_restricted_tocan also be used with the Secure Border Gateway (SBG). (#19517) - Unify Complement developer docs. (#19518)
Internal Changes
- Put membership updates in a background resumable task when changing the avatar or the display name. (#19311)
- Add in-repo Complement test to sanity check Synapse version matches git checkout (testing what we think we are). (#19476)
- Migrate
devdependencies to PEP 735 dependency groups. (#19490) - Remove the optional
systemd-pythondependency and thesystemdextra on thesynapsepackage. (#19491) - Avoid re-computing the event ID when cloning events. (#19527)
- Allow caching of the
/versionsand/auth_metadatapublic endpoints. (#19530) - Add a few labels to the number groupings in the
Processed requestlogs. (#19548)
v1.150.0rc1
Synapse 1.150.0rc1 (2026-03-17)
Features
- Add experimental support for the MSC4370 Federation API
GET /extremitiesendpoint. (#19314) - MSC4140: Cancellable delayed events: When persisting a delayed event to the timeline, include its
delay_idin the event'sunsignedsection in/syncresponses to the event sender. (#19479) - Expose MSC4354 Sticky Events over the legacy (v3) /sync API. (#19487)
- When Matrix Authentication Service (MAS) integration is enabled, allow MAS to set the user locked status in Synapse. (#19554)
Bugfixes
- Fix
Build and push complement imageCI job pointing to non-existent image. (#19523) - Fix a bug introduced in v1.26.0 that caused deactivated, erased users to not be removed from the user directory. (#19542)
Improved Documentation
- In the Admin API documentation, always express path parameters as
/<param>instead of as/$param. (#19307) - Update docs to clarify
outbound_federation_restricted_tocan also be used with the Secure Border Gateway (SBG). (#19517) - Unify Complement developer docs. (#19518)
Internal Changes
- Put membership updates in a background resumable task when changing the avatar or the display name. (#19311)
- Add in-repo Complement test to sanity check Synapse version matches git checkout (testing what we think we are). (#19476)
- Migrate
devdependencies to PEP 735 dependency groups. (#19490) - Remove the optional
systemd-pythondependency and thesystemdextra on thesynapsepackage. (#19491) - Avoid re-computing the event ID when cloning events. (#19527)
- Allow caching of the
/versionsand/auth_metadatapublic endpoints. (#19530) - Add a few labels to the number groupings in the
Processed requestlogs. (#19548)
v1.149.1
v1.149.0
Synapse 1.149.0 (2026-03-10)
No significant changes since 1.149.0rc1.
Synapse 1.149.0rc1 (2026-03-03)
Features
- Add experimental support for MSC4388: Secure out-of-band channel for sign in with QR. (#19127)
- Add stable support for MSC4380 invite blocking. (#19431)
Bugfixes
- Fix the 'Login as a user' Admin API not checking if the user exists before issuing an access token. (#18518)
- Fix
/syncmissing membership event instate_after(experimental MSC4222 implementation) in some scenarios. (#19460)
Internal Changes
- Add log to explain when and why we freeze objects in the garbage collector. (#19440)
- Better instrument
JoinRoomAliasServletwith tracing. (#19461) - Fix Complement CI not running against the code from our PRs. (#19475)
- Log
docker system infoin CI so we have a plain record of how GitHub runners evolve over time. (#19480) - Rename the
test_disconnecttest helper so that pytest doesn't see it as a test. (#19486) - Add a log line when we delete devices. Contributed by @bradtgmurray @ Beeper. (#19496)
- Pre-allocate the buffer based on the expected
Content-Lengthwith the Rust HTTP client. (#19498) - Cancel long-running sync requests if the client has gone away. (#19499)
- Try and reduce reactor tick times when under heavy load. (#19507)
- Simplify Rust HTTP client response streaming and limiting. (#19510)
- Replace deprecated collection import locations with current locations. (#19515)
- Bump most locked Python dependencies to their latest versions. (#19519)
v1.149.0rc1
Synapse 1.149.0rc1 (2026-03-03)
Features
- Add experimental support for MSC4388: Secure out-of-band channel for sign in with QR. (#19127)
- Add stable support for MSC4380 invite blocking. (#19431)
Bugfixes
- Fix the 'Login as a user' Admin API not checking if the user exists before issuing an access token. (#18518)
- Fix
/syncmissing membership event instate_after(experimental MSC4222 implementation) in some scenarios. (#19460)
Internal Changes
- Add log to explain when and why we freeze objects in the garbage collector. (#19440)
- Better instrument
JoinRoomAliasServletwith tracing. (#19461) - Fix Complement CI not running against the code from our PRs. (#19475)
- Log
docker system infoin CI so we have a plain record of how GitHub runners evolve over time. (#19480) - Rename the
test_disconnecttest helper so that pytest doesn't see it as a test. (#19486) - Add a log line when we delete devices. Contributed by @bradtgmurray @ Beeper. (#19496)
- Pre-allocate the buffer based on the expected
Content-Lengthwith the Rust HTTP client. (#19498) - Cancel long-running sync requests if the client has gone away. (#19499)
- Try and reduce reactor tick times when under heavy load. (#19507)
- Simplify Rust HTTP client response streaming and limiting. (#19510)
- Replace deprecated collection import locations with current locations. (#19515)
- Bump most locked Python dependencies to their latest versions. (#19519)
v1.148.0
Synapse 1.148.0 (2026-02-24)
No significant changes since 1.148.0rc1.
Synapse 1.148.0rc1 (2026-02-17)
Features
- Support sending and receiving MSC4354 Sticky Event metadata. (#19365)
Improved Documentation
- Fix reference to the
experimental_featuressection of the configuration manual documentation. (#19435)
Deprecations and Removals
- Remove support for MSC3244: Room version capabilities as the MSC was rejected. (#19429)
Internal Changes
- Add in-repo Complement tests so we can test Synapse specific behavior at an end-to-end level. (#19406)
- Push Synapse docker images to Element OCI Registry. (#19420)
- Allow configuring the Rust HTTP client to use HTTP/2 only. (#19457)
- Correctly refuse to start if the Rust workspace config has changed and the Rust library has not been rebuilt. (#19470)