2026-09-12 23:57:45 -04:00
|
|
|
|
# `matrix-sdk-crypto-wasm`
|
|
|
|
|
|
|
|
|
|
|
|
Welcome to the [WebAssembly] + JavaScript binding for the Rust
|
|
|
|
|
|
[`matrix-sdk-crypto`] library! WebAssembly can run anywhere, but these
|
|
|
|
|
|
bindings are designed to run on a JavaScript host. These bindings are
|
|
|
|
|
|
part of the [`matrix-rust-sdk`] project, which is a library
|
|
|
|
|
|
implementation of a [Matrix] client-server.
|
|
|
|
|
|
|
|
|
|
|
|
`matrix-sdk-crypto` is a no-network-IO implementation of a state
|
|
|
|
|
|
machine, named `OlmMachine`, that handles E2EE ([End-to-End
|
|
|
|
|
|
Encryption](https://en.wikipedia.org/wiki/End-to-end_encryption)) for
|
|
|
|
|
|
[Matrix] clients.
|
|
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
|
|
1. Install in your project:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
npm install --save @matrix-org/matrix-sdk-crypto-wasm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
or:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
2026-09-13 14:14:38 -04:00
|
|
|
|
yarn add @matrix-org/matrix-sdk-crypto-wasm
|
2026-09-12 23:57:45 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. Import the library into your project and initialise it.
|
|
|
|
|
|
|
2026-09-13 14:14:38 -04:00
|
|
|
|
It is recommended that you use a dynamic import, particularly in a Web
|
|
|
|
|
|
environment, because the WASM artifiact is large:
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
async function loadCrypto(userId, deviceId) {
|
2026-09-13 14:14:38 -04:00
|
|
|
|
const matrixSdkCrypto = await import("@matrix-org/matrix-sdk-crypto-wasm");
|
|
|
|
|
|
await matrixSdkCrypto.initAsync();
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
// Optional: enable tracing in the rust-sdk
|
2026-09-13 14:14:38 -04:00
|
|
|
|
new matrixSdkCrypto.Tracing(matrixSdkCrypto.LoggerLevel.Trace).turnOn();
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
// Create a new OlmMachine
|
|
|
|
|
|
//
|
|
|
|
|
|
// The following will use an in-memory store. It is recommended to use
|
|
|
|
|
|
// indexedDB where that is available.
|
2026-09-13 14:14:38 -04:00
|
|
|
|
// See https://matrix-org.github.io/matrix-rust-sdk-crypto-wasm/classes/OlmMachine.html#initialize
|
|
|
|
|
|
const olmMachine = await matrixSdkCrypto.OlmMachine.initialize(
|
|
|
|
|
|
new RustSdkCryptoJs.UserId(userId),
|
|
|
|
|
|
new RustSdkCryptoJs.DeviceId(deviceId),
|
|
|
|
|
|
);
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
return olmMachine;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-09-13 14:14:38 -04:00
|
|
|
|
## Building
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
These WebAssembly bindings are written in [Rust]. To build them, you
|
|
|
|
|
|
need to install the Rust compiler, see [the Install Rust
|
|
|
|
|
|
Page](https://www.rust-lang.org/tools/install). Then, the workflow is
|
2026-09-13 14:14:38 -04:00
|
|
|
|
pretty classical by using [yarn](https://yarnpkg.com/), see [the Downloading and installing
|
2026-09-12 23:57:45 -04:00
|
|
|
|
Node.js and npm
|
2026-09-13 14:14:38 -04:00
|
|
|
|
Page](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) and [installing yarn](https://classic.yarnpkg.com/lang/en/docs/install).
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
2026-09-13 14:14:38 -04:00
|
|
|
|
Once the Rust compiler, Node.js and yarn are installed, you can run the
|
2026-09-12 23:57:45 -04:00
|
|
|
|
following commands:
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-09-13 14:14:38 -04:00
|
|
|
|
$ yarn install
|
|
|
|
|
|
$ yarn build # or 'yarn build:dev' to make an unoptimised build
|
|
|
|
|
|
$ yarn test
|
2026-09-12 23:57:45 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
The compiled output should be generated in the `pkg/` directory.
|
|
|
|
|
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
|
|
|
|
|
|
[The documentation can be found
|
2026-09-13 14:14:38 -04:00
|
|
|
|
online](https://matrix-org.github.io/matrix-rust-sdk-crypto-wasm/).
|
2026-09-12 23:57:45 -04:00
|
|
|
|
|
|
|
|
|
|
To generate the documentation locally, please run the following
|
|
|
|
|
|
command:
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-09-13 14:14:38 -04:00
|
|
|
|
$ yarn doc
|
2026-09-12 23:57:45 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
The documentation is generated in the `./docs` directory.
|
|
|
|
|
|
|
|
|
|
|
|
[WebAssembly]: https://webassembly.org/
|
|
|
|
|
|
[`matrix-sdk-crypto`]: https://github.com/matrix-org/matrix-rust-sdk/tree/main/crates/matrix-sdk-crypto
|
|
|
|
|
|
[`matrix-rust-sdk`]: https://github.com/matrix-org/matrix-rust-sdk
|
|
|
|
|
|
[Matrix]: https://matrix.org/
|
|
|
|
|
|
[Rust]: https://www.rust-lang.org/
|
|
|
|
|
|
[npm]: https://www.npmjs.com/
|