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
Removed Python 3.9+ features that were accidentally used in v0.10.6.
Split _http_handle_transaction in AppServiceServerMixin to allow easier reuse.
_http_handle_transaction in AppServiceServerMixin to allow easier reuse.One column per quarter.
Fixed MemoryStateStore's get_members() implementation (thanks to [@hifi] in [#54]).
Improved support for sending member events manually (when using the extra_content field in join, invite, etc).
extra_content field in join, invite, etc).
fill_member_event method that's called by manual member
event sending that adds the displayname and avatar URL. Alternatively,
fill_member_event_callback can be set to fill the member event manually.Breaking change: The bridge status notification system now uses a BridgeStateEvent enum instead of the ok boolean.
BridgeStateEvent enum instead of the ok boolean.PyCF_ALLOW_TOP_LEVEL_AWAIT for manhole in Python 3.8+.Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed async Database class mutating the db_args dict passed to it.
Database class mutating the db_args dict passed to it.None/null values with factory defaults being deserialized into the
attr.Factory object instead of the expected value.Breaking change: Made the is_direct property required in the bridge Portal class. The property was first added in v0.8.4 and is used for handling m.ro…
is_direct property required in the bridge
Portal class. The property was first added in v0.8.4 and is used for
handling m.room.encryption events (enabling encryption).BridgeState class from mautrix.bridge to mautrix.util.bridge_state.Authorization header
(i.e. fixed MSC2832 support).Added remote_id field to push_bridge_state method.
remote_id field to push_bridge_state method.Added tests for factory and hidden serializable attrs.
factory and hidden serializable attrs.login-matrix, logout-matrix, ping-matrix and clear-cache-matrix
commands in the bridge module. To enable the commands, bridges must implement
the User.get_puppet() method to return the Puppet instance corresponding
to the user's remote ID.Replaced GenericSerializable with a bound TypeVar.
GenericSerializable with a bound TypeVar.
SerializableAttrs no longer have to use
the class Foo(SerializableAttrs['Foo']) syntax to get type hints, just
class Foo(SerializableAttrs) is enough.['Foo'] syntax will be kept until v0.10.field() as a wrapper for attr.ib() that makes it easier to add
custom metadata for serializable attrs things.data-mautrix-exclude-plaintext and works for basic
formatting (e.g. <strong>) in addition to <a>.Added SynapseAdminPath to build /_synapse/admin paths.
SynapseAdminPath to build /_synapse/admin paths.Updated bridge status pushing utility to support remote_id and remote_name fields to specify which account on the remote network is bridged.
remote_id and remote_name
fields to specify which account on the remote network is bridged.Switched to stable space prefixes.
Changed update_direct_chats bridge method to only send updated m.direct data if the content was modified.
update_direct_chats bridge method to only send updated m.direct
data if the content was modified.Added methods for modifying push rules and room tags.
asyncio.create_task everywhere (replacing the older
loop.create_task and asyncio.ensure_future).Added option to retry all HTTP requests when encountering a HTTP network error or gateway error response (502/503/504)
default_retry_count field in
HTTPAPI (or Client), or the default_http_retry_count field in
AppService to enable.HTTPAPI.request()s retry_count parameter.mautrix.util.network_retry module was removed as it became redundant.Made HTTP request user agents more configurable.
m.room.member events.This should fix SQLAlchemy 1.4+, but SQLAlchemy databases will likely be deprecated entirely in the future.
net.maunium.asmux -> com.beeper.asmux).Made the Bridge class automatically fetch media repo config at startup. Bridges are recommended to check bridge.media_config.upload_size before even d
bridge.media_config.upload_size before
even downloading remote media.Fixed the high-level Client class to not try to update state if there' no state_store set.
Client class to not try to update state if there' no
state_store set.Added option to override the asyncpg pool used in the async Database wrapper.
Database wrapper.Stopped checking error message when checking if user is not registered on whoami. Now it only requires the M_FORBIDDEN errcode instead of a specific h
M_FORBIDDEN errcode instead of a specific
human-readable error message.unsigned object in membership events
(thanks to @jevolk in #39).Added handling for M_NOT_FOUND errors when getting pinned messages.
M_NOT_FOUND errors when getting pinned messages.Client class to automatically update state store with
events from sync.Added automatic login retry if double puppeting token is invalid on startup or gets invalidated while syncing.
Changed attr deserialization errors to log full data instead of only known fields when deserialization fails.
Allowed postgresql:// scheme in end-to-bridge encryption database URL (in addition to postgres://).
postgresql:// scheme in end-to-bridge encryption database URL
(in addition to postgres://).Changed end-to-bridge encryption to fail if homeserver doesn't advertise appservice login. This breaks Synapse 1.21, but there have been plenty of rel
M_NOT_FOUND errors when updating m.direct account data
through double puppeting in bridges.mautrix.types module.Changed attr deserializer to deserialize optional missing fields into None instead of attr.NOTHING by default.
None
instead of attr.NOTHING by default.Added logging when sync errors are resolved.
.well-known fetching ignore the response content type header.Made SerializableEnum work with int values.
Added logging when sync errors are resolved.
.well-known fetching ignore the response content type header.Fixed typo in HTML reply fallback generation when target message is plaintext.
CommandEvent.mark_read async instead of returning an awaitable,
because sometimes it didn't return an awaitable.Added utility function for retrying network calls (from mautrix.util.network_retry import call_with_net_retry).
from mautrix.util.network_retry import call_with_net_retry).Portal._send_message to use aforementioned utility function.Changed Portal._send_message to retry after 5 seconds (up to 5 attempts total by default) if server returns 502/504 error or the connection fails.
Portal._send_message to retry after 5 seconds (up to 5 attempts
total by default) if server returns 502/504 error or the connection fails.Added support for cross-server double puppeting (thanks to [@ShadowJonathan] in [#26]).
opt_prometheus utility to add support for metrics without a hard
dependency on the prometheus_client library.formatted() helper method to get the formatted_body of a text message.CommandEvents now know which portal they were ran in. They also have a
main_intent property that gets the portal's main intent or the bridge bot.CommandEvent.reply() will now use the portal's main intent if the bridge
bot is not in the room.needs_auth and needs_admin permissions are now included here
instead of separately in each bridge.discard-megolm-session command.set-pl and clean-rooms commands from mautrix-telegram.TEXT instead of VARCHAR(255) in all databases (#28).net.maunium.reply relation type instead of m.reference.get_joined_members.EventTypes sometimes having None instead of
EventType.Class.UNKNOWN as the type class.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
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
Wrapped union types in NewType to allow setattr. This fixes Python 3.6 and 3.9 compatibility.
NewType to allow setattr.
This fixes Python 3.6 and 3.9 compatibility.Extended session wait time when handling encrypted messages in bridges: it'll now wait for 5 seconds, then send an error, then wait for 10 more second
Nothing published for this version
Lock olm sessions between encrypting and sending to make sure messages go out in the correct order.
Fixed deserializing the info object in media msgtypes into dataclasses.
info object in media msgtypes into dataclasses.Added parameter to change how long EncryptionManager.decrypt() should wait for the megolm session to arrive.
EncryptionManager.decrypt() should wait
for the megolm session to arrive.get_displayname and get_avatar_url to ignore M_NOT_FOUND errors.set_reply to allow EventIDs.Made the UUID type de/serializable by default.
UUID type de/serializable by default.Your coding agent can read these notes before it upgrades. Set up the MCP server →