NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
A Python 3 asyncio Matrix framework.
Last release 3 months ago
05 Jul 2026
Release timing varies
gaps range from 8 days to 8 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
8 years old
331 releases · first in 2018
*(client)* Added synchronous middlewares for sync event handling.
*(event)* Added support for creator power in room v12+.
set_displayname and set_avatar_url to avoid setting
empty strings if the value is already unset (thanks to @frebib in #171).One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
*(bridge)* Fixed compatibility with breaking change in aiohttp 3.12.6.
Nothing published for this version
*(types)* Removed support for generating reply fallbacks to implement [MSC2781]. Stripping fallbacks is still supported.
*(bridge)* Added /register call if /versions fails with M_FORBIDDEN.
/register call if /versions fails with M_FORBIDDEN.Note: The bridge module is deprecated as all bridges are being rewritten in Go. See for more info.
Note: The bridge module is deprecated as all bridges are being rewritten
in Go. See https://mau.fi/blog/2024-h1-mautrix-updates/ for more info.
MediaMessageEventContent.*(client)* Changed media download methods to log requests and to raise exceptions on non-successful status codes.
*(client)* Deprecated MSC2716 methods and added new Beeper-specific batch send methods, as upstream MSC2716 support has been abandoned.
PRAGMA synchronous = NORMAL; to default pragmas.guest_can_join field name in room directory response
(thanks to @ashfame in #163).*(crypto)* Changed OlmMachine.share_keys to make the OTK count parameter optional. When omitted, the count is fetched from the server.
OlmMachine.share_keys to make the OTK count parameter
optional. When omitted, the count is fetched from the server.log and hs_token parameters to AppServiceServerMixin
to allow using it as a standalone class without extending.user_id and device_id query
parameters manually without using AppServiceAPI.*(util.program)* Removed --base-config flag in bridges, as there are no valid use cases (package data should always work) and it's easy to cause issue
--base-config flag in bridges, as there are no
valid use cases (package data should always work) and it's easy to cause
issues by pointing the flag at the wrong file.com.devture.shared_secret_auth login type
for automatic double puppeting.as_tokens.Breaking change *(.state_store)* Removed legacy SQLAlchemy state store implementations.
SQLiteDatabase to not
remove prefix slashes from database paths.
sqlite:path.db instead of sqlite:///path.db
for relative paths, and sqlite:/path.db instead of sqlite:////path.db
for absolute paths.manual_stop not working if it's called during startup.unstable_create_msc was renamed to create_mxc, and the max_stall_ms
parameters for downloading were renamed to timeout_ms.Nothing published for this version
*(appservice)* Fixed Python 3.8 compatibility.
*(client)* Fixed dispatching room ephemeral events (i.e. typing notifications) in syncer.
*(bridge)* Implemented appservice pinging using MSC2659.
*(crypto)* Fixed bug with redacting megolm sessions when device is deleted.
*(bridge)* Fixed backwards-compatibility with new key deletion config options.
*(crypto)* Fixed bug in previous release which caused errors if the max_age of a megolm session was not known.
max_age
of a megolm session was not known.max_age and max_messages more
reliably).*(crypto, bridge)* Added options to automatically ratchet/delete megolm sessions to minimize access to old messages.
*(crypto)* Fixed bug in crypto store migration when using outbound sessions with max age higher than usual.
*(crypto)* Updated crypto store schema to match mautrix-go.
set_thread_parent adding reply fallbacks to the message body.*(bridge, crypto)* Fixed key sharing trust checker not resolving cross-signing signatures when minimum trust level is set to cross-signed.
*(crypto)* Added cache checks to prevent invalidating group session when the server sends a duplicate member event in /sync.
min_wait_seconds behavior and added max_wait_seconds
and multiply_wait_seconds to proxy_with_retry.*(util.proxy)* Added utility for dynamic proxies (from mautrix-instagram/facebook).
upload_size in MediaRepoConfig as the
field is optional in the spec.*(types)* Changed set_thread_parent to inherit the existing thread parent if a MessageEvent is passed, as starting threads from a message in a thread
set_thread_parent to inherit the existing thread parent
if a MessageEvent is passed, as starting threads from a message in a thread
is not allowed.*(bridge)* Bumped default timeouts for decrypting incoming messages.
*(util.async_body)* Added utility for reading aiohttp response into a bytearray (so that the output is mutable, e.g. for decrypting or encrypting medi
Marked Python 3.11 as supported. Python 3.8 support will likely be dropped in the coming months.
HTTPAPI has had the optimization for a while, but uploading to
URL calls aiohttp manually.Breaking change *(appservice)* Removed typing status from state store.
is_typing parameter from
IntentAPI.set_typing to make the signature match ClientAPI.set_typing.
timeout=0 is equivalent to the old is_typing=False.*(util.async_db)* Changed aiosqlite connector to force-enable foreign keys, WAL mode and busy_timeout.
init_commands db arg, e.g. - PRAGMA foreign_keys = OFF.StateEvent.deserialize to handle Conduit's
broken unsigned fields.set_power_level to allow raw dicts the same
way as set_encryption_info does (thanks to @bramenn in #127).*(crypto.store.asyncpg)* Fixed bug causing put_group_session to fail when trying to log unique key errors.
put_group_session to fail when
trying to log unique key errors.create_room to update the state store with
initial state and invites (applies to anything extending StoreUpdatingAPI,
such as the high-level Client and appservice IntentAPI classes).Nothing published for this version
*(util.formatter)* Added conversion method for tag and defaulted to converting back to ---.
<hr> tag and defaulted to
converting back to ---.*(appservice)* Added try blocks around [MSC3202] handler functions to log errors instead of failing the entire transaction. This matches the behavior
*(client.api)* Added option to pass custom data to /createRoom to enable using custom fields and testing MSCs without changing the library.
/createRoom to enable
using custom fields and testing MSCs without changing the library.set_edit to clear reply metadata as edits can't change
the reply status.*(util.async_db)* Fixed mistake in default no-op database error handler causing the wrong exception to be raised.
put_group_session to catch unique key
errors and log instead of raising.*(crypto)* Fixed handling key requests when using appservice-mode (MSC2409) encryption.
"unsigned": null
in events.*(crypto)* Fixed error sharing megolm session if a single recipient device has ran out of one-time keys.
Breaking change *(util.async_db)* Added checks to prevent calling .start() on a database multiple times.
.start() on a database multiple times.homeserver -> asmux flag with more generic software
field.json::, it'll be parsed as JSON instead of using
as a raw string.knock_restricted join rule to JoinRule enum.*(crypto)* Fixed parsing /keys/claim responses with no failures field.
/keys/claim responses with no failures field.*(util.async_db)* Added init_commands to run commands on each SQLite connection (e.g. to enable PRAGMAs). No-op on Postgres.
init_commands to run commands on each SQLite
connection (e.g. to enable PRAGMAs). No-op on Postgres.*(bridge)* Added hidden option to use appservice login for double puppeting.
M_UNKNOWN_ENDPOINT error code from MSC3743*(types)* Added m.read.private to receipt types.
m.read.private to receipt types.ensure_registered and invite_user raising
IntentErrors (now they raise the original Matrix error instead).*(bridge)* Started rejecting reusing access tokens when enabling double puppeting. Reuse is detected by presence of encryption keys on the device.
/context API.m.direct content (it didn't work and it
wasn't really necessary).set_encryption_info to allow raw dicts.
This fixes the bug where sending a m.room.encryption event with a raw dict
as the content would throw an error from the state store.*(types)* Updated BeeperMessageStatusEventContent fields.
BeeperMessageStatusEventContent fields.*(api)* Updated request logging to log full URL instead of only path.
beeper_new_messages flag for batch_send method.*(crypto)* Fixed Python 3.8/9 compatibility broken in v0.17.0.
Breaking change *(bridge)* Added options to check cross-signing status for bridge users. This requires changes to the base config.
sender_key parameter from
CryptoStore's has_group_session and put_group_session, and also
OlmMachine's wait_for_session._inbound_sessions dict to be (room_id, session_id), removing the identity
key in the middle. This only affects custom stores based on the memory store.DEBUG level.
sensitive parameter to the request method to prevent
logging content in sensitive requests. The login method was updated to
mark the content as sensitive if a password or token is provided.set-pl,
set-avatar and set-displayname.*(appservice)* Fixed the extra_content parameter in membership methods causing duplicate join events through the ensure_joined mechanism.
extra_content parameter in membership methods
causing duplicate join events through the ensure_joined mechanism.*(bridge)* Started requiring Matrix v1.1 support from homeservers.
*(client)* Added support for knocking on rooms (thanks to [@maltee1] in [#105]).
Your coding agent can read these notes before it upgrades. Set up the MCP server →