Changelog
All notable changes to this project will be documented in this file.
0.18.0 - 2026-06-02
Added
Add
RoomInfo::fully_read_event_idto expose the user’sm.fully_readevent ID. (#6569)Expose
Client::tile_serveron the FFI, returning aTileServerInforecord when the homeserver advertises a map tile server through its matrix client well-known (MSC3488). The record carries a singlemap_style_urlfield pointing at a MapLibrestyle.json. (#6610)Expose
SqliteStoreBuilder::keyto allow clients to specify a key as a 32-bytes array that will be used as is, skipping the key derivation process and speeding up opening DB connections. Note this should only be used for truly random values with high entropy, for user-provided passphrases theSqliteStoreBuilder::passphrasefunction should still be used. Some examples for the bindings are:Kotlin:
val buffer = ByteArray(size = 32) SecureRandom().nextBytes(buffer) return buffer // this now contains the keySwift:
var bytes = [UInt8](repeating: 0, count: 32) SecRandomCopyBytes(kSecRandomDefault, bytes.count, &bytes) return Data(bytes: bytes) // this now contains the key ``` ([#6805](https://github.com/matrix-org/matrix-rust-sdk/pulls/6805))
Changed
- [breaking]
SpaceRoomList::roomsandSpaceRoomList::subscribe_to_room_updatesare now asynchronous. (#6561) - [breaking]
Client::set_pushernow takes anappend: boolparameter, forwarded to the homeserver. Passtrueto keep an existing pusher with the sameapp_idandpushkeyregistered for other users (e.g. multi-profile clients on a single device); passfalseto preserve the previous default behaviour. (#6600)
[0.17.0] - 2026-05-08
Bug fixes
- Add
Client::set_avatar_urlto manually set the avatar URL of the user to a provided MXC one. - Allow setting a custom Sliding Sync connection ID and timeline limit on
RoomListService. (#6289) - Fix devices on Android 11 crashing because the SDK could not be initialized
using
libloadingto get a reference to the JVM. Replacedlibloadingwithjvm-getter, which works like a compatibility layer. (#6370) - Added
android_platform.rsfor fixing therustlsintegration on Android, which was broken. (#6306) - [breaking]
OtherStateproperly supports redacted events that still have fields in the content. The following fields are no longer optional:federateinOtherState::RoomCreate.history_visibilityinOtherState::RoomHistoryVisibility.thresholdsinOtherState::RoomPowerLevels.
omit_checksumsoption is now enabled for the Kotlin bindings in all FFI-exporting crates. We enabled them because with JNA direct mapping enabled they result in invalid checks in ARM 32bit devices, preventing the SDK from working altogether (see this issue). (#6069, #6112, #6115, #6116).Client::create_roomnow usesRoomPowerLevelsContentOverrideunder the hood instead ofRoomPowerLevelsEventContentto be able to explicitly set values which would previously be ignored if they matched the default power level values specified by the spec: these may not be the same in the homeserver and result in rooms with incorrect power levels being created. (#6034)- Fix the
is_last_admincheck inLeaveSpaceRoomsince it was not accounting for the membership state. #6032 - [breaking]
LatestEventValue::Local { is_sending: bool }is replaced by [state: LatestEventValueLocalState] to represent 3 states:IsSending,HasBeenSentandCannotBeSent. (#5968)
Features
RoomNotificationInfo,NotificationItemandSpaceRoomnow haveis_dmfields. (#6537)- Expose
RoomMember::is_service_memberfield. (#6536) - Expose
beaconandbeacon_infofields inRoomPowerLevelsValuesandRoomPowerLevelChanges, allowing clients to read and update the power levels required to send beacon (live location) message events and beacon info state events respectively. (#6540) - Expose
ClientBuilder::dm_room_definitionto customize the DM room definition used by theClient, addedRoomInfo::is_dmfield based on it. (#6490) - Expose
HumanQrGrantLoginError::Unknownreason in error message. (#6514) - Add a list of
declined_by: Vec<String>to theTimelineItemContent::RtcNotification, this will contain the list of users that have declined the call. (#6494) - Add
RoomInfo::active_service_members_countandNotificationRoomInfo::active_service_members_count, returning the amount of service members that are part of the room. (#6483) - Add
Client::get_dm_roomsfunction to get a list with the DMs for the provided user id. (#6487) - Expose
ffi::NotificationRoomInfo::service_membersso clients can use the list of service members to calculate if a room is a DM from the notification info. (#6474) - Enable
experimental-push-secretsfeature by default. (#6473) - Add new high-level search helpers
RoomSearchIteratorandGlobalSearchIteratorto perform searches for messages in a room or across all rooms. (6394) - Added the
Client.request_openid_token()method. (#6458) - Added the
Client::import_secrets_bundlemethod. (#6212) - [breaking] Remove support for
native-tlsand remove all feature flags for selecting TLS backend, asrustlsis the now the only supported TLS backend. (#6409) - Expose
event_type_rawandlatest_json()onEventTimelineItem, allowing clients to access the raw event type string and full event JSON for custom event handling without pattern-matching through nested enums. (#6387) (#6424) - Expose sync v2 API through FFI via
Client.sync_v2()andClient.sync_once_v2(), enabling mobile clients to sync without requiring Sliding Sync support on the homeserver.Client.sync_v2()accepts aSyncListenerV2callback that receives aSyncResponseV2after each successful sync. (#6359) - Added
HomeserverCapabilitiesandClient::homeserver_capabilities()to get the capabilities of the homeserver. (#6371) - Expose
Room.send_state_event_raw()for sending arbitrary state events through the FFI layer. (#6350) - Introduce a
ThreadListServicewhich offers reactive interfaces for rendering and managing the list of threads from a particular room. (6311) - [breaking] Move
LiveLocationout ofTimelineItemContentand intoMsgLikeKindso it has access toMsgLikeContentreactions. (#6286) - Add
HumanQrLoginError::UnsupportedQrCodeTypefor when a QR is parseable but cannot be used to complete a login. (#6141 - Add
HumanQrGrantLoginError::UnsupportedQrCodeTypefor when a QR is parseable but cannot be used to grant a login. (#6141 - Add the
QrCodeData::base_urlandQrCodeData::intentmethods. (#6283) - Add
Encryption::recover_and_fix_backupto automatically fix key storage backup if the private backup decryption key is missing, invalid or inconsistent with the public key. (#6252) - Add support for
MSC3489
live location sharing through a newTimelineItemContent::LiveLocationvariant. (#6232) - Add
HumanQrGrantLoginError::ConnectionInsecurefor errors establishing the secure channel (#6141 - Add
HumanQrGrantLoginError::Expiredfor when a timeout is encountered during the grant (#6141 - Add
HumanQrGrantLoginError::Cancelledfor when the grant is cancelled (#6141 - Add
HumanQrGrantLoginError::OtherDeviceAlreadySignedInfor when the other device is already signed in (#6141 - Add
HumanQrGrantLoginError::DeviceNotFoundfor when the requested device was not returned by the homeserver (#6141 - Add
RoomInfo::is_low_priorityfor getting the room’sm.lowprioritytag state (#6183) - Add
Client::subscribe_to_duplicate_key_upload_errorsfor listening to duplicate key upload errors from/keys/upload. (#6135) - Add
NotificationItem::raw_eventto get the raw event content of the event that triggered the notification, which can be useful for debugging and to support clients that want to implement custom handling for certain notifications. (#6122) - [breaking] Extend
TimelineFocus::Eventto allow marking the target event as the root of a thread. #6050 - [breaking] Remove
TimelineFilter::EventTypeFilterwhich has been replaced by the more genericTimelineFilter::EventFilter. Users ofTimelineEventTypeFilter::includeandTimelineEventTypeFilter::excludecan switch toTimelineEventFilter::include_event_typesandTimelineEventFilter::exclude_event_types. (#6070) - Add
TimelineFilter::EventFilterfor filtering events based on their type or content. For content filtering, only membership and profile change filters are available as of now. (#6048) - Introduce
SpaceFilters as a mechanism for narrowing down what’s displayed in the room list (#6025) - Expose room power level thresholds in
OtherState::RoomPowerLevels(ban, kick, invite, redact, state & events defaults, per-event overrides, notifications), so clients can compute the required power level for actions and compare with previous values. (#5931) - Add
RoomCreationParameters::is_spaceparameter to be able to create spaces. (#6010) - [breaking]
LazyTimelineItemProvider::get_shieldsno longer returns an anOption: theShieldStatetype contains aNonevariant, so theOptionwas redundant. Themessagefield has also been removed: since there was no way to localise the returned string, applications should not be using it. (#5959) - Add
Room::list_threadsto list all the threads in a room. (#5953) - Add
SpaceService::get_space_roomto get a space given its id from the space graph if available. #5944 - Add
QrCodeData::to_bytes()to allow generation of a QR code. (#5939) - [breaking]: The new Latest Event API replaces the old API.
Room::new_latest_eventoverwrites theRoom::latest_eventmethod. See the documentation ofmatrix_sdk::latest_eventto learn about the new API. #5624 - Created
RoomPowerLevels::eventsfunction which returns aHashMap<TimelineEventType, i64>with all the power levels per event type. (#5937) - Expose
EventTimelineItem::forwarderandforwarder_profile, which, if present, provide the ID and profile of the user who forwarded the keys used to decrypt the event as part of an MSC4268 key bundle. (#6000) - Add
NonFavoritefilter to the Room List API. (#5991 - Add
call_intent(eitherRtcCallIntent::AudioorRtcCallIntent::Video) field toRtcNotificationevent content. (#6207) - Add
RoomInfo::active_room_call_consensus_intentmethod to get the call intent for the current call, based on what members are advertising. (#6274)
Refactor
- [breaking] All OIDC related types and functions have been renamed from
Oidc/oidctoOAuth/oauthto align with the finalised naming in the spec. (#6500) - [breaking]
LiveLocationShareshas been renamed toLiveLocationsObserverandRoom::live_location_sharestoRoom::live_locations_observer. (#6446) - [breaking]
Room::observe_live_location_shareshas been replaced byRoom::live_locations_observer. Call [LiveLocationsObserver::subscribe] on it to receive an initial snapshot and a stream of incremental updates.The stream is seeded from the event cache on creation and includes the own user’s shares (previously excluded).LiveLocationShare.is_livehas been removed; insteadts(start timestamp) andtimeout(duration in milliseconds) are now exposed so clients can compute liveness themselves viacurrent_time < ts + timeout. Non-live shares are automatically removed from the list. A newLiveLocationShareListenercallback interface must be implemented and passed to the method. (#6385) - [breaking] The
RoomAliasesvariants ofStateEventContent,StateEventTypeandOtherStatewas removed. This state event type was removed from the Matrix specification a while ago, and support for it has been removed in Ruma. (#6414) Client::newno longer unnecessarily instantiates anOAuthcomponent ifCrossProcessLockConfig::SingleProcessis used. (#6293)- [breaking]
Room::report_content()no longer takes ascoreargument, because it was removed from the Matrix specification. (#6256) - [breaking] The
current_versionfield ofErrorKind::WrongRoomKeysVersionis no longer optional. (#6241) - [breaking] The following variants of
AccountManagementActionwere renamed to match their new names after being merge in the Matrix specification:SessionsListis renamed toDevicesListSessionViewis renamed toDeviceViewSessionEndis renamed toDeviceDelete(#6217)
- [breaking]
HumanQrGrantLoginError::UnableToCreateDevicehas been removed (#6141 - [breaking] Removed
ClientBuilder::enable_oidc_refresh_lockin favour of usingClientBuilder::cross_process_lock_configto configure that lock when aMultiProcessconfiguration is supplied. (#6204) RoomPaginationStatusis renamed toPaginationStatus. (#6174)- [breaking] Replaced
ClientBuilder::cross_process_store_locks_holder_namewithClientBuilder::cross_process_lock_config, which accepts aCrossProcessLockConfigvalue to specify whether the resultingClientwill be used in a single process or multiple processes. (#6160) - [breaking] Refactored
is_last_admintois_last_ownerthe check will now account also for v12 rooms, where creators and users with PL 150 matter. (#6036) - [breaking] The existing
TimelineEventTypewas renamed toTimelineEventContent, because it contained the actual contents of the event. Then, we created a newTimelineEventTypeenum that actually contains just the event type. (#5937) - [breaking] The function
TimelineEvent::event_typeis nowTimelineEvent::content. (#5937) - [breaking] The
SpaceServicewill no longer auto-subscribe to required client events when invoking thesubscribe_to_joined_spacesbut instead do it through its, now async, constructor. (#5972) - [breaking] The
SpaceService’sjoined_spacesmethod has been renamedtop_level_joined_spacesandsubscribe_to_joined_spacestospace_service.subscribe_to_top_level_joined_spaces(#5972)
[0.16.1] - 2026-05-08
No notable changes in this release.
[0.16.0] - 2025-12-04
Breaking changes
TimelineConfiguration::track_read_receipts’s type is now an enum to allow tracking to be enabled for all events (like before) or only for message-like events (which prevents read receipts from being placed on state events). (#5900)Client::reset_server_info()has been split intoreset_supported_versions()andreset_well_known(). (#5910)Add
HumanQrLoginError::NotFoundfor non-existing / expired rendezvous sessions (#5898)Add
HumanQrGrantLoginError::NotFoundfor non-existing / expired rendezvous sessions (#5898)The
LatestEventValue::Localtype gains 2 new fields:senderandprofile. (#5885)The
Encryption::user_identity()method has received a new argument. Thefallback_to_serverargument controls if we should attempt to fetch the user identity from the homeserver if it wasn’t found in the local storage. (#5870)Expose the power level required to modify
m.space.childonroom::power_levels::RoomPowerLevelsValues.Rename
Client::login_with_qr_codetoClient::new_login_with_qr_code_handler. (#5836)Add the
sqlitefeature, along with theindexeddbfeature, to enable either the SQLite or IndexedDB store. Thesession_paths,session_passphrase,session_pool_max_size,session_cache_sizeandsession_journal_size_limitmethods onClientBuilderhave been removed. New methods are added:ClientBuilder::in_memory_storeif one wants non-persistent stores,ClientBuilder::sqlite_storeto configure and to use SQLite stores (if thesqlitefeature is enabled), andClientBuilder::indexeddb_storeto configure and to use IndexedDB stores (if theindexeddbfeature is enabled). (#5811)The code:
client_builder .session_paths("data_path", "cache_path") .passphrase("foobar")now becomes:
client_builder .sqlite_store( SqliteSessionStoreBuilder::new("data_path", "cache_path") .passphrase("foobar") )UniFFI was upgraded to
v0.30.0(#5808).The
waveformparameter inTimeline::send_voice_messageformat changed to a list off32between 0 and 1. (#5732)The
normalized_power_levelfield has been removed from theRoomMemberstruct. (#5635)Remove the deprecated
CallNotifyevent (org.matrix.msc4075.call.notify) in favor of the newRtcNotificationevent (org.matrix.msc4075.rtc.notification). (#5668)Add
QrLoginProgress::SyncingSecretsto indicate that secrets are being synced between the two devices. (#5760)Add
Room::subscribe_to_send_queue_updatesto observe room send queue updates. (#5761)Client::login_with_qr_codenow returns a handler that allows performing the flow with either the current device scanning or generating the QR code. Additionally, new errorsHumanQrLoginError::CheckCodeAlreadySentandHumanQrLoginError::CheckCodeCannotBeSentwere added. (#5786)ComposerDraftnow includes attachments alongside the text message. (#5794)Add
Client::subscribe_to_send_queue_updatesto observe global send queue updates. (#5784)
Features
- Add
Client::get_store_sizes()so to query the size of the existing stores, if available. (#5911) - Expose
is_spaceinNotificationRoomInfo, allowing clients to determine if the room that triggered the notification is a space. - Add push actions to
NotificationItemand replaceSyncNotificationwithNotificationItem. (#5835) - Add
Client::new_grant_login_with_qr_code_handlerfor granting login to a new device by way of a QR code. (#5836) - Add
Client::register_notification_handlerfor observing notifications generated from sync responses. (#5831) - Add
Room::mark_as_fully_read_uncheckedso clients can mark a room as read without needing aTimelineinstance. Note this method is not recommended as it can potentially cause incorrect read receipts, but it can needed in certain cases. - Add
Timeline::latest_event_idto be able to fetch the event id of the latest event of the timeline. - Add
Room::load_or_fetch_eventso we can get aTimelineEventgiven its event id (#5678). - Add
TimelineEvent::thread_root_event_idto expose the thread root event id for this type too (#5678). - Add
NotificationSettings::get_raw_push_rulesso clients can fetch the raw JSON content of the push rules of the current user and include it in bug reports (#5706). - Add new API to decline calls
(MSC4310):
Room::decline_callandRoom::subscribe_to_call_decline_events(#5614) - Expose
m.federateinOtherState::RoomCreateandhistory_visibilityinOtherState::RoomHistoryVisibility, allowing clients to know whether a room federates and how its history is shared in the appropriate timeline events. - Expose
join_ruleinOtherState::RoomJoinRules, allowing clients to know the join rules of a room from the appropriate timeline events.
Changes
Timeline::latest_event_idnow uses itsui::Timeline::latest_event_idcounterpart, instead of getting the latest event from the timeline and then its id.(#5864)- Build Android ARM64 bindings using better default RUSTFLAGS (the same used for iOS ARM64). This should improve performance. (#5854)
[0.14.0] - 2025-09-04
Features
- Add
LowPriorityandNonLowPriorityvariants toRoomListEntriesDynamicFilterKindfor filtering rooms based on their low priority status. These filters allow clients to show only low priority rooms or exclude low priority rooms from the room list. (#5508) - Add
room_versionandprivileged_creators_roletoRoomInfo(#5449). - The [
unstable-hydra] feature has been enabled, which enables room v12 changes in the SDK. (#5450). - Add experimental support for
MSC4306, with
the
Room::fetch_thread_subscription()andRoom::set_thread_subscription()methods. (#5442) - [breaking] [
GalleryUploadParameters::reply] and [UploadParameters::reply] have been both replaced with a new optionalin_reply_tofield, that’s a string which will be parsed into anOwnedEventIdwhen sending the event. The thread relationship will be automatically filled in, based on the timeline focus. (5427) - [breaking] [
Timeline::send_reply()] now automatically fills in the thread relationship, based on the timeline focus. As a result, it only takes anOwnedEventIdparameter, instead of theReplytype. The proper way to start a thread is now thus to create a threaded-focused timeline, and then useTimeline::send(). (5427) - Add
HomeserverLoginDetails::supports_sso_loginfor legacy SSO support information. This is primarily for Element X to give a dedicated error message in case it connects a homeserver with only this method available. (#5222)
Breaking changes
- The timeline will now always use the send queue to upload medias, so the
UploadParameters::use_send_queuebool has been removed. Make sure to listen to the send queue’s error updates, and to handle send queue restarts. (#5525) - Support for the legacy media upload progress has been disabled. Media upload
progress is available through the send queue, and can be enabled thanks to
Client::enable_send_queue_upload_progress(). (#5525) TimelineDiffis now exported as a trueuniffi::Enuminstead of the weirduniffi::Objecthybrid. This matches bothRoomDirectorySearchEntryUpdateandRoomListEntriesUpdateand can be used in the same way. (#5474)- The
creatorfield ofRoomInfohas been renamed tocreatorsand can now contain a list of user IDs, to reflect that a room can now have several creators, as introduced in room version 12. (#5436) - The
PowerLeveltype was introduced to represent power levels instead ofi64to differentiate the infinite power level of creators, as introduced in room version 12. It is used insuggested_role_for_power_level,suggested_power_level_for_roleandRoomMember. (#5436) Client::get_urlnow returns aVec<u8>instead of aString. It also throws an error when the response isn’t status code 200 OK, instead of providing the error in the response body. (#5438)RoomPreview::info()doesn’t return a result anymore. All unknown join rules are handled in theJoinRule::Customvariant. (#5337)- The
reasonargument ofRoom::report_roomis now required, do to a clarification in the spec. (#5337) PublicRoomJoinRulehas more variants, supporting all the known values from the spec. (#5337)- The fields of
MediaPreviewConfigare both optional, allowing to use the type for room account data as well as global account data. (#5337) - The
event_idfield ofPredecessorRoomwas removed, due to its removal in the Matrix specification with MSC4291. (#5419) Client::url_for_oidcnow allows requesting additional scopes for the OAuth2 authorization code grant. (#5395)Client::url_for_oidcnow allows passing an optional existing device id from a previous login call. (#5394)ClientBuilder::build_with_qr_codehas been removed. Instead, the Client should be built by passingQrCodeData::server_nametoClientBuilder::server_name_or_homeserver_url, after which QR login can be performed by callingClient::login_with_qr_code. (#5388)- The MSRV has been bumped to Rust 1.88. (#5431)
Room::send_call_notificationandRoom::send_call_notification_if_neededhave been removed, since the event type they send is outdated, andClientis not actually supposed to be able to join MatrixRTC sessions (yet). In practice, users of these methods probably already rely on another MatrixRTC implementation to participate in sessions, and such an implementation should be capable of sending notifications itself.- The
GalleryItemInfovariants now take anUploadSourcerather than aStringpath to enable uploading from bytes directly. (#5529) - Media and gallery uploads now use
UploadSourceto specify the thumbnail. (#5530)
[0.13.0] - 2025-07-10
Features
- Add
NotificationRoomInfo::topicto theNotificationRoomInfostruct, which contains the topic of the room. This is useful for displaying the room topic in notifications. (#5300) - Add
EmbeddedEventDetails::timestampandEmbeddedEventDetails::event_or_transaction_idwhich are already available in regular timeline items. (#5331) RoomListService::subscribe_to_roomsbecomesasyncand automatically callsmatrix_sdk::latest_events::LatestEvents::listen_to_room(#5369)
Refactor
Adjust features in the
matrix-sdk-fficrate to expose more platform-specific knobs. Previously thematrix-sdk-ffiwas configured primarily by target configs, choosing between the tls flavor (rustls-tlsornative-tls) and features likesentrybased purely on the target. As we work to add an additional Wasm target to this crate, the cross product of target specific features has become somewhat chaotic, and we have shifted to externalize these choices as feature flags.To maintain existing compatibility on the major platforms, these features should be used: Android:
"bundled-sqlite,unstable-msc4274,rustls-tls,sentry"iOS:"bundled-sqlite,unstable-msc4274,native-tls,sentry"Javascript/Wasm:"unstable-msc4274,native-tls"In the future additional choices (such as session storage,
sqliteandindexeddb) will likely be added as well.
Breaking changes:
Client::reset_server_capabilitieshas been renamed toClient::reset_server_info. (#5167)RoomPreview::join_rule,NotificationItem::join_rule,RoomInfo::is_public, andRoom::is_public()return values are now optional. They will be set toNoneif the join rule state event is missing for a given room.NotificationRoomInfo::is_publichas been removed; callers can inspect the value ofNotificationItem::join_ruleto determine if the room is public (i.e. if the join rule isPublic). (#5278)
[0.12.0] - 2025-06-10
Breaking changes:
Client::send_call_notification_if_needednow returnsResult<bool>instead ofResult<()>so we can check if the event was sent.Client::upload_avatarandTimeline::send_attachmentnow may fail if a file too large for the homeserver media config is uploaded.UploadParametersreplaces fieldfilename: Stringwithsource: UploadSource.UploadSourceis an enum which may take a filename or a filename and bytes, which allows a foreign language to read file contents natively and then pass those contents to the foreign function when uploading a file through theTimeline. (#4948)RoomInforeplaces its fieldis_tombstoned: boolwithtombstone: Option<RoomTombstoneInfo>, containing the data needed to implement the room migration UI, a message and the replacement room id. (#5027)
Additions:
Client::subscribe_to_room_infoallows clients to subscribe to room info updates in rooms which may not be known yet. This is useful when displaying a room preview for an unknown room, so when we receive any membership change for it, we can automatically update the UI.Client::get_max_media_upload_sizeto get the max size of a request sent to the homeserver so we can tweak our media uploads by compressing/transcoding the media.- Add
ClientBuilder::enable_share_history_on_inviteto enable experimental support for sharing encrypted room history on invite, per MSC4268. (#5141) - Support for adding a Sentry layer to the FFI bindings has been added. Only
tracingstatements with the fieldsentry=truewill be forwarded to Sentry, in addition to default Sentry filters. - Add room topic string to
StateEventContent - Add
UploadSourcefor representing upload data - this is analogous tomatrix_sdk_ui::timeline::AttachmentSource - Add
Client::observe_account_data_eventandClient::observe_room_account_data_eventto subscribe to global and room account data changes. (#4994) - Add
Timeline::send_galleryto send MSC4274-style galleries. (#5163) - Add
reply_paramstoGalleryUploadParametersto allow sending galleries as (threaded) replies. (#5173)
Breaking changes:
contactshas been removed fromOidcConfiguration(it was unused since the switch to OAuth).
[0.11.0] - 2025-04-11
Breaking changes:
TracingConfigurationnow includes a new fieldtrace_log_packs, which gives a convenient way to set the TRACE log level for multiple targets related to a given feature. (#4824)setup_tracinghas been renamedinit_platform; in addition to theTracingConfigurationparameter it also now takes a boolean indicating whether to spawn a minimal tokio runtime for the application; in general for main app processes this can be set tofalse, and memory-constrained programs can set it totrue.Matrix client API errors coming from API responses will now be mapped to
ClientError::MatrixApi, containing both the original message and the associated error code and kind.EventSendStatenow has two additional variants:CrossSigningNotSetupandSendingFromUnverifiedDevice. These indicate that your own device is not properly cross-signed, which is a requirement when using the identity-based strategy, and can only be returned when using the identity-based strategy.In addition, the
VerifiedUserHasUnsignedDeviceandVerifiedUserChangedIdentityvariants can be returned when using the identity-based strategy, in addition to when using the device-based strategy witherror_on_verified_user_problemis set.EventSendStatenow has two additional variants:VerifiedUserHasUnsignedDeviceandVerifiedUserChangedIdentity. These reflect problems with verified users in the room and as such can only be returned when the room key recipient strategy haserror_on_verified_user_problemset.The
AuthenticationServicehas been removed:- Instead of calling
configure_homeserver, build your own client with theserverNameOrHomeserverUrlbuilder method to keep the same behaviour.- The parts of
AuthenticationErrorrelated to discovery will be represented in theClientBuildErrorreturned when callingbuild().
- The parts of
- The remaining methods can be found on the built
Client.- There is a new
abortOidcLoginmethod that should be called if the webview is dismissed without a callback ( or fails to present). - The rest of
AuthenticationErroris now found in the OidcError type.
- There is a new
- Instead of calling
OidcAuthenticationDatais now calledOidcAuthorizationData.The
get_element_call_required_permissionsfunction now requires the device_id.Some
OidcPromptcases have been removed (None,SelectAccount).Room::is_encryptedis replaced byRoom::latest_encryption_statewhich returns a value of the newEncryptionStateenum; anotherRoom::encryption_statenon-async and infallible method is added to get theEncryptionStatewithout running a network request. (#4777). One can safely replace:room.is_encrypted().await?by
room.latest_encryption_state().await?.is_encrypted()ClientBuilder::passphraseis renamedsession_passphrase(#4870)Merge
Timeline::send_thread_replyintoTimeline::send_reply. This changes the parameters ofsend_replywhich now requires passing the event ID (and thread reply behaviour) inside aReplyParametersstruct. (#4880)The
dynamic_registrations_filefield ofOidcConfigurationwas removed. Clients are supposed to re-register with the homeserver for every login.RoomPreview::own_membership_detailsis nowRoomPreview::member_with_sender_info, takes any user id and returns anOption<RoomMemberWithSenderInfo>.
Additions:
- Add
Encryption::get_user_identitywhich returnsUserIdentity - Add
ClientBuilder::room_key_recipient_strategy - Add
Room::send_raw - Add
NotificationSettings::set_custom_push_rule - Expose
withdraw_verificationtoUserIdentity - Expose
report_roomtoRoom - Add
RoomInfo::encryption_state(#4788) - Add
Timeline::send_thread_replyfor clients that need to start threads themselves. (4819) - Add
ClientBuilder::session_pool_max_size,::session_cache_sizeand::session_journal_size_limitto control the stores configuration, especially their memory consumption (#4870) - Add
ClientBuilder::system_is_memory_constrainedto indicate that the system has less memory available than the current standard (#4894) - Add
Room::member_with_sender_infoto get both a room member’s info and for the user who sent them.room.memberevent theRoomMemberis based on.