Crate matrix_sdk

source ·
Expand description

A high-level, batteries-included Matrix client library written in Rust.

This crate seeks to be a general-purpose library for writing software using the Matrix Client-Server API to communicate with a Matrix homeserver. If you’re writing a typical Matrix client or bot, this is likely the crate you need.

However, the crate is designed in a modular way and depends on several other lower-level crates. If you’re attempting something more custom, you might be interested in these:

  • matrix_sdk_base: A no-network-IO client state machine which can be used to embed a Matrix client into an existing network stack or to build a new Matrix client library on top.
  • matrix_sdk_crypto: A no-network-IO encryption state machine which can be used to add Matrix E2EE support into an existing client or library.

§Getting started

The central component you’ll be interacting with is the Client. A basic use case will include instantiating the client, logging in as a user, registering some event handlers and then syncing.

This is demonstrated in the example below.

use matrix_sdk::{
    Client, config::SyncSettings,
    ruma::{user_id, events::room::message::SyncRoomMessageEvent},
};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let alice = user_id!("@alice:example.org");
    let client = Client::builder().server_name(alice.server_name()).build().await?;

    // First we need to log in.
    client.matrix_auth().login_username(alice, "password").send().await?;

    client.add_event_handler(|ev: SyncRoomMessageEvent| async move {
        println!("Received a message {:?}", ev);
    });

    // Syncing is important to synchronize the client state with the server.
    // This method will never return unless there is an error.
    client.sync(SyncSettings::default()).await?;

    Ok(())
}

More examples can be found in the examples directory.

§Crate Feature Flags

The following crate feature flags are available:

FeatureDefaultDescription
anyhowNoBetter logging for event handlers that return anyhow::Result
e2e-encryptionYesEnd-to-end encryption (E2EE) support
eyreNoBetter logging for event handlers that return eyre::Result
image-procNoImage processing for generating thumbnails
image-rayonNoEnables faster image processing
jsNoEnables JavaScript API usage for things like the current system time on WASM (does nothing on other targets)
markdownNoSupport for sending Markdown-formatted messages
qrcodeYesQR code verification support
sqliteYesPersistent storage of state and E2EE data (optionally, if feature e2e-encryption is enabled), via SQLite available on system
bundled-sqliteNoPersistent storage of state and E2EE data (optionally, if feature e2e-encryption is enabled), via SQLite compiled and bundled with the binary
indexeddbNoPersistent storage of state and E2EE data (optionally, if feature e2e-encryption is enabled) for browsers, via IndexedDB
socksNoSOCKS support in the default HTTP client, reqwest
sso-loginNoSupport for SSO login with a local HTTP server

§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):

tracing_subscriber::fmt::init();

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.

Re-exports§

  • pub use media::Media;
  • pub use room::Room;
  • pub use bytes;
  • pub use matrix_sdk_base::crypto;
    e2e-encryption
  • pub use reqwest;

Modules§

Macros§

Structs§

Enums§

  • An enum over all the possible authentication APIs.
  • A user session using one of the available authentication APIs.
  • Errors that can happen in ClientBuilder::build.
  • The name of the room, either from the metadata or calculated according to matrix specification
  • Internal representation of errors.
  • An HTTP error, representing either a connection error or an error while converting the raw HTTP response into a Matrix response.
  • An error encountered when trying to parse an invalid ID string.
  • ImageErrorimage-proc
    All possible errors that can happen during image processing.
  • Enum controlling if a loop running callbacks should continue or abort.
  • Errors that can occur when manipulating push notification settings.
  • Errors that can happen when refreshing an access token.
  • Enum keeping track in which state the room is, e.g. if our own user is joined, invited, or has left the room.
  • An error response from a Matrix API call, using a client API specific representation if the endpoint is from that.
  • Represents changes that can occur to a Clients Session.
  • Session tokens, for any kind of authentication.
  • State store specific error type.

Constants§

Traits§

  • Super trait that is used for our store traits, this trait will differ if it’s used on WASM. WASM targets will not require Send and Sync to have implemented, while other targets will.
  • SendOutsideWasmNon-WebAssembly
    Alias for Send on non-wasm, empty trait (implemented by everything) on wasm.
  • An abstract state store trait that can be used to implement different stores for the SDK.
  • Convenience functionality for state stores.
  • SyncOutsideWasmNon-WebAssembly
    Alias for Sync on non-wasm, empty trait (implemented by everything) on wasm.

Functions§

  • Creates a server name from a user supplied string. The string is first sanitized by removing whitespace, the http(s) scheme and any trailing slashes before being parsed.

Type Aliases§

Attribute Macros§