atagen

matrix-rust-sdk

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

Blame: ARCHITECTURE.md

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
# Architecture
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
The SDK is split into multiple layers:
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
```text
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
    WASM (external crate matrix-rust-sdk-crypto-wasm)
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
      /
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
     /     uniffi
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
    /     /
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
   /     bindings (matrix-sdk-ffi)
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
 crypto   |
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
bindings  |
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
   |      |
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
   |     UI (matrix-sdk-ui)
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
   |      \
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
   |       \
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
   |   main (matrix-sdk)
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
   | /     /
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
crypto    /
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
     \   /
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
      store (matrix-sdk-base, + all the store impls)
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
        |
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
      common (matrix-sdk-common)
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
```
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
Where the store implementations are `matrix-sdk-sqlite` and
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
`matrix-sdk-indexeddb` as well as `MemoryStore` which is defined in
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
`matrix-sdk-base`.
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
## `crates/matrix-sdk`
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
This is the main crate, and one that is expected to be used by most consumers.
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
Notable data types include:
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
- the `Client`, which can run room-independent requests: logging in/out,
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
  creating rooms, running sync, etc.
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
- the `Room`, which represents a room and its state (notably via the observable
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
  `RoomInfo`), and allows running queries that are room-specific, notably
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
  sending events.
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
## `crates/matrix-sdk-base`
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
A _sans I/O_ crate to represent the base data types persisted in the SDK. No
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
network or storage I/O happens in this crate, although it defines traits
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
(`StateStore` and `EventCacheStore`) representing storage backends, as well as
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
dummy in-memory implementations of these traits.
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
## `crates/matrix-sdk-common`
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
Common helpers used by most of the other crates; almost a leaf in the dependency
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
tree of our own crates (the only crate it's using is test helpers).
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
## `crates/matrix-sdk-crypto`
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
A _sans I/O_ implementation of a state machine that handles end-to-end
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
encryption for Matrix clients. It defines a `CryptoStore` trait representing
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
storage backends that will perform the actual storage I/O later, as well as a
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
dummy in-memory implementation of this trait.
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
## `crates/matrix-sdk-indexeddb`
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
Implementations of `EventCacheStore`, `StateStore` and `CryptoStore` for a
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
indexeddb backend (for use in Web browsers, via WebAssembly).
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
## `crates/matrix-sdk-qrcode`
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
Implementation of QR codes for interactive verifications, used in the crypto
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
crate.
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
## `crates/matrix-sdk-sqlite`
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
Implementations of `EventCacheStore`, `StateStore` and `CryptoStore` for a
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
SQLite backend.
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
## `crates/matrix-sdk-store-encryption`
7ff8adafe9e4atagen2026-10-22 12:30 UTC76
7ff8adafe9e4atagen2026-10-22 12:30 UTC77
Low-level primitives for encrypting/decrypting/hashing values. Store
7ff8adafe9e4atagen2026-10-22 12:30 UTC78
implementations that implement encryption at rest can use those primitives.
7ff8adafe9e4atagen2026-10-22 12:30 UTC79
7ff8adafe9e4atagen2026-10-22 12:30 UTC80
## `crates/matrix-sdk-ui`
7ff8adafe9e4atagen2026-10-22 12:30 UTC81
7ff8adafe9e4atagen2026-10-22 12:30 UTC82
Very high-level primitives implementing the best practices and cutting-edge
7ff8adafe9e4atagen2026-10-22 12:30 UTC83
Matrix tech:
7ff8adafe9e4atagen2026-10-22 12:30 UTC84
7ff8adafe9e4atagen2026-10-22 12:30 UTC85
- `EncryptionSyncService`: a specialized service running simplified sliding sync
7ff8adafe9e4atagen2026-10-22 12:30 UTC86
  (MSC4186) for everything related to crypto and E2EE for the current `Client`.
7ff8adafe9e4atagen2026-10-22 12:30 UTC87
- `RoomListService`: a specialized service running simplified sliding sync
7ff8adafe9e4atagen2026-10-22 12:30 UTC88
  (MSC4186) for retrieving the list of current rooms, and exposing its entries.
7ff8adafe9e4atagen2026-10-22 12:30 UTC89
- `SyncService`: a wrapper for the two previous services, coordinating their
7ff8adafe9e4atagen2026-10-22 12:30 UTC90
  running and shutting down.
7ff8adafe9e4atagen2026-10-22 12:30 UTC91
- `Timeline`: a high-level view for a `Room`'s timeline of events, grouping
7ff8adafe9e4atagen2026-10-22 12:30 UTC92
  related events (aggregations) into single timeline items.
7ff8adafe9e4atagen2026-10-22 12:30 UTC93
7ff8adafe9e4atagen2026-10-22 12:30 UTC94
## `bindings/matrix-sdk-crypto-ffi/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC95
7ff8adafe9e4atagen2026-10-22 12:30 UTC96
FFI bindings for the crypto crate, used in a Web browser context via
7ff8adafe9e4atagen2026-10-22 12:30 UTC97
WebAssembly. These use `wasm-bindgen` to generate the bindings. These bindings
7ff8adafe9e4atagen2026-10-22 12:30 UTC98
are used in Element Web and the legacy Element apps, as of 2024-11-07.
7ff8adafe9e4atagen2026-10-22 12:30 UTC99
7ff8adafe9e4atagen2026-10-22 12:30 UTC100
## `bindings/matrix-sdk-ffi/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC101
7ff8adafe9e4atagen2026-10-22 12:30 UTC102
FFI bindings for important concepts in `matrix-sdk-ui` and `matrix-sdk`,
7ff8adafe9e4atagen2026-10-22 12:30 UTC103
generated with [UniFFI](https://github.com/mozilla/uniffi-rs) and to be used
7ff8adafe9e4atagen2026-10-22 12:30 UTC104
from other languages like Swift/Go/Kotlin. These bindings are used in the
7ff8adafe9e4atagen2026-10-22 12:30 UTC105
ElementX apps, as of 2024-11-07.
7ff8adafe9e4atagen2026-10-22 12:30 UTC106
7ff8adafe9e4atagen2026-10-22 12:30 UTC107
## `bindings/matrix-sdk-ffi-macros/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC108
7ff8adafe9e4atagen2026-10-22 12:30 UTC109
Macros used in `bindings/matrix-sdk-ffi`.
7ff8adafe9e4atagen2026-10-22 12:30 UTC110
7ff8adafe9e4atagen2026-10-22 12:30 UTC111
## `testing/matrix-sdk-test/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC112
7ff8adafe9e4atagen2026-10-22 12:30 UTC113
Common test helpers, used by all the other crates.
7ff8adafe9e4atagen2026-10-22 12:30 UTC114
7ff8adafe9e4atagen2026-10-22 12:30 UTC115
## `testing/matrix-sdk-test-macros/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC116
7ff8adafe9e4atagen2026-10-22 12:30 UTC117
Implementation of the `#[async_test]` test macro.
7ff8adafe9e4atagen2026-10-22 12:30 UTC118
7ff8adafe9e4atagen2026-10-22 12:30 UTC119
## `testing/matrix-sdk-integration-testing/`
7ff8adafe9e4atagen2026-10-22 12:30 UTC120
7ff8adafe9e4atagen2026-10-22 12:30 UTC121
Fully-fledged integration tests that require spawning a Synapse instance to run.
7ff8adafe9e4atagen2026-10-22 12:30 UTC122
A docker-compose setup is provided to ease running the tests, and it is
7ff8adafe9e4atagen2026-10-22 12:30 UTC123
compatible for running with Podman too.
7ff8adafe9e4atagen2026-10-22 12:30 UTC124
7ff8adafe9e4atagen2026-10-22 12:30 UTC125
## Inspiration
7ff8adafe9e4atagen2026-10-22 12:30 UTC126
7ff8adafe9e4atagen2026-10-22 12:30 UTC127
This document has been inspired by the reading of this
7ff8adafe9e4atagen2026-10-22 12:30 UTC128
[blog post](https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html).