5 releases (3 breaking)

0.4.1 Sep 13, 2021
0.4.0 Sep 10, 2021
0.3.0 Jun 22, 2021
0.2.0 Jan 5, 2021
0.1.0 May 26, 2020

#21 in Development tools

Download history 18/week @ 2021-06-07 13/week @ 2021-06-14 41/week @ 2021-06-21 18/week @ 2021-06-28 65/week @ 2021-07-05 103/week @ 2021-07-12 16766/week @ 2021-07-19 59/week @ 2021-07-26 58/week @ 2021-08-02 96/week @ 2021-08-09 98/week @ 2021-08-16 75/week @ 2021-08-23 124/week @ 2021-08-30 154/week @ 2021-09-06 173/week @ 2021-09-13 150/week @ 2021-09-20

5,891 downloads per month
Used in less than 6 crates



A Matrix client library written in Rust.

The matrix-sdk aims to be a general purpose client library for writing Matrix clients, bots, and other Matrix related things that use the client-server API to communicate with a Matrix homeserver.


Connecting and logging in to a homeserver is pretty starightforward:

use std::convert::TryFrom;
use matrix_sdk::{
    Client, SyncSettings, Result,
    ruma::{UserId, events::{SyncMessageEvent, room::message::MessageEventContent}},

async fn main() -> Result<()> {
    let alice = UserId::try_from("@alice:example.org")?;
    let client = Client::new_from_user_id(alice.clone()).await?;

    // First we need to log in.
    client.login(alice.localpart(), "password", None, None).await?;

            |ev: SyncMessageEvent<MessageEventContent>| async move {
                println!("Received a message {:?}", ev);

    // Syncing is important to synchronize the client state with the server.
    // This method will never return.


More examples can be found in the examples directory.

Crate Feature Flags

The following crate feature flags are available:

  • encryption: Enables end-to-end encryption support in the library.
  • qrcode: Enables qrcode verification support in the library. This will also enable encryption. Enabled by default.
  • sled_cryptostore: Enables a Sled based store for the encryption keys. If this is disabled and encryption support is enabled the keys will by default be stored only in memory and thus lost after the client is destroyed.
  • markdown: Support for sending markdown formatted messages.
  • socks: Enables SOCKS support in reqwest, the default HTTP client.
  • sso_login: Enables SSO login with a local http server.
  • require_auth_for_profile_requests: Whether to send the access token in the authentication header when calling endpoints that retrieve profile data. This matches the synapse configuration require_auth_for_profile_requests. Enabled by default.
  • appservice: Enables low-level appservice functionality. For an high-level API there's the matrix-sdk-appservice crate
  • anyhow: Support for returning anyhow::Result<()> from event handlers.

Enabling logging

Users of the matrix-sdk crate can enable log output by depending on the tracing-subscriber crate and including the following line in their application (e.g. at the start of main):


The log output is controlled via the RUST_LOG environment variable by setting it to one of the error, warn, info, debug or trace levels. The output is printed to stdout.

The RUST_LOG variable also supports a more advanced syntax for filtering log output more precisely, for instance with crate-level granularity. For more information on this, check out the tracing_subscriber documentation.


~337K SLoC