General requirements
All platforms require the following baseline tools.| Tool | Version | Install |
|---|---|---|
| Rust | 1.94.0 (pinned in rust-toolchain.toml) | rustup.rs |
| GNU Make | ≥ 4.3 | gnu.org/software/make |
| cargo-nextest | latest | cargo install --locked cargo-nextest |
rust-toolchain.toml file at the repository root pins the exact toolchain version. Running any cargo or make command inside the repo will cause rustup to install 1.94.0 automatically if it is not already present.
Pre-commit hooks
Install the pre-commit framework
Follow the instructions at pre-commit.com for your OS.
Platforms
- TypeScript / WASM
- Kotlin / JVM
- Android
- Swift / iOS
- Rust (native)
Prerequisites
Install Node.js
The recommended way is via Volta. Any method that puts a recent
node on your PATH works.Install Bun
Follow the instructions on bun.sh.
Install wasm-bindgen-cli
The CLI version must exactly match the
wasm-bindgen crate version recorded in Cargo.lock.Build
Test
Interop testing
The interop test suite verifies that all binding layers can exchange MLS messages with each other. It is a superset of the per-platform test requirements.Run all per-platform test suites
Complete the TypeScript, Kotlin/JVM, Android, and (on macOS) Swift/iOS test runs first. The interop test relies on the build artifacts produced by those steps.
Install Chrome and chromedriver
Follow the same chromedriver setup described in the TypeScript/WASM tab above.
End-to-end identity (E2EI) testing
E2EI tests verify the full OIDC certificate flow and require a running container runtime (Docker or Podman).Prepare the container runtime
- Linux — Docker
- Linux — Podman
- macOS — Docker
- macOS — Podman
Choose the OIDC identity provider
Set theTEST_IDP environment variable before running tests:
Run all E2EI tests
Run specific E2EI tests
Arguments after the script name are forwarded tocargo nextest:
Manually invoke tests
For finer control, starttest-wire-server manually:
Formatting and linting
All languages are covered by top-level Make targets:| Target | Language | Tool |
|---|---|---|
make rust-fmt / make rust-check | Rust | cargo +nightly fmt, cargo clippy |
make swift-fmt / make swift-check | Swift | swift-format, swiftlint |
make kotlin-fmt / make kotlin-check | Kotlin | ktlint |
make ts-fmt / make ts-check | TypeScript | eslint, tsc |
Per-language tool installation
- Swift
- Kotlin
- Markdown
- TOML