atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: crates/matrix-sdk/README.md

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
A high-level, batteries-included [Matrix](https://matrix.org/) client library
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
written in Rust.
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
This crate seeks to be a general-purpose library for writing software using the
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
Matrix [Client-Server API](https://spec.matrix.org/latest/client-server-api/)
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
to communicate with a Matrix homeserver. If you're writing a typical Matrix
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
client or bot, this is likely the crate you need.
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
However, the crate is designed in a modular way and depends on several other
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
lower-level crates. If you're attempting something more custom, you might be
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
interested in these:
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
- [`matrix_sdk_base`]: A no-network-IO client state machine which can be used
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
  to embed a Matrix client into an existing network stack or to build a new
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
  Matrix client library on top.
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
- [`matrix_sdk_crypto`]: A no-network-IO encryption state machine which can be
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
  used to add Matrix E2EE support into an existing client or library.
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
# Getting started
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
The central component you'll be interacting with is the [`Client`]. A basic use
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
case will include instantiating the client, logging in as a user, registering
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
some event handlers and then syncing.
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
This is demonstrated in the example below.
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
```rust,no_run
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
use matrix_sdk::{
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
    Client, config::SyncSettings,
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
    ruma::{user_id, events::room::message::SyncRoomMessageEvent},
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
};
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
#[tokio::main]
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
async fn main() -> anyhow::Result<()> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
    let alice = user_id!("@alice:example.org");
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
    let client = Client::builder().server_name(alice.server_name()).build().await?;
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
    // First we need to log in.
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
    client.matrix_auth().login_username(alice, "password").send().await?;
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
    client.add_event_handler(|ev: SyncRoomMessageEvent| async move {
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
        println!("Received a message {:?}", ev);
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
    });
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
    // Syncing is important to synchronize the client state with the server.
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
    // This method will never return unless there is an error.
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
    client.sync(SyncSettings::default()).await?;
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
    Ok(())
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
```
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
More examples can be found in the [examples] directory.
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
## Crate feature flags
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
The following crate feature flags are available:
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
| Feature          | Default | Description                                                                                                                                     |
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
| ---------------- | :-----: | ----------------------------------------------------------------------------------------------------------------------------------------------- |
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
| `anyhow`         |   No    | Better logging for event handlers that return `anyhow::Result`                                                                                  |
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
| `e2e-encryption` |   Yes   | End-to-end encryption (E2EE) support                                                                                                            |
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
| `eyre`           |   No    | Better logging for event handlers that return `eyre::Result`                                                                                    |
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
| `js`             |   No    | Enables JavaScript API usage on WASM (does nothing on other targets)                                                                            |
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
| `markdown`       |   No    | Support for sending Markdown-formatted messages                                                                                                 |
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
| `qrcode`         |   Yes   | QR code verification support                                                                                                                    |
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
| `sqlite`         |   Yes   | Persistent storage of state and E2EE data (optionally, if feature `e2e-encryption` is enabled), via SQLite available on system                  |
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
| `bundled-sqlite` |   No    | Persistent storage of state and E2EE data (optionally, if feature `e2e-encryption` is enabled), via SQLite compiled and bundled with the binary |
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
| `indexeddb`      |   No    | Persistent storage of state and E2EE data (optionally, if feature `e2e-encryption` is enabled) for browsers, via IndexedDB                      |
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
| `socks`          |   No    | SOCKS support in the default HTTP client, [`reqwest`]                                                                                           |
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
| `sso-login`      |   No    | Support for SSO login with a local HTTP server                                                                                                  |
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
[`reqwest`]: https://docs.rs/reqwest/0.11.5/reqwest/index.html
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
## Enabling logging
7ff8adafe9e4atagen2026-10-22 12:30 UTC76
7ff8adafe9e4atagen2026-10-22 12:30 UTC77
Users of the matrix-sdk crate can enable log output by depending on the
7ff8adafe9e4atagen2026-10-22 12:30 UTC78
`tracing-subscriber` crate and including the following line in their
7ff8adafe9e4atagen2026-10-22 12:30 UTC79
application (e.g. at the start of `main`):
7ff8adafe9e4atagen2026-10-22 12:30 UTC80
7ff8adafe9e4atagen2026-10-22 12:30 UTC81
```rust
7ff8adafe9e4atagen2026-10-22 12:30 UTC82
tracing_subscriber::fmt::init();
7ff8adafe9e4atagen2026-10-22 12:30 UTC83
```
7ff8adafe9e4atagen2026-10-22 12:30 UTC84
7ff8adafe9e4atagen2026-10-22 12:30 UTC85
The log output is controlled via the `RUST_LOG` environment variable by
7ff8adafe9e4atagen2026-10-22 12:30 UTC86
setting it to one of the `error`, `warn`, `info`, `debug` or `trace` levels.
7ff8adafe9e4atagen2026-10-22 12:30 UTC87
The output is printed to stdout.
7ff8adafe9e4atagen2026-10-22 12:30 UTC88
7ff8adafe9e4atagen2026-10-22 12:30 UTC89
The `RUST_LOG` variable also supports a more advanced syntax for filtering
7ff8adafe9e4atagen2026-10-22 12:30 UTC90
log output more precisely, for instance with crate-level granularity. For
7ff8adafe9e4atagen2026-10-22 12:30 UTC91
more information on this, check out the [tracing_subscriber documentation].
7ff8adafe9e4atagen2026-10-22 12:30 UTC92
7ff8adafe9e4atagen2026-10-22 12:30 UTC93
[examples]: https://github.com/matrix-org/matrix-rust-sdk/tree/main/examples/
7ff8adafe9e4atagen2026-10-22 12:30 UTC94
[tracing_subscriber documentation]: https://tracing.rs/tracing_subscriber/filter/struct.envfilter
7ff8adafe9e4atagen2026-10-22 12:30 UTC95
[`matrix_sdk_crypto`]: https://docs.rs/matrix-sdk-crypto/
7ff8adafe9e4atagen2026-10-22 12:30 UTC96
[`matrix_sdk_base`]: https://docs.rs/matrix-sdk-base/