Decentralised, end-to-end encrypted messaging — built with Rust and XMTP.
xmes is an open-source messenger built on the XMTP protocol — a decentralised, blockchain-based messaging standard. Identities are Ethereum keypairs: no central server controls your account or your messages.
The project compiles a single Rust codebase to WebAssembly, targeting web (PWA), desktop, and mobile via Dioxus.
xmes/
├── xmes-xmtp-wasm/ # XMTP integration layer — WASM only, no UI
└── xmes-mobile-pwa/ # Dioxus Mobile PWA frontend — WebAssembly
The XMTP integration layer, compiled exclusively to WebAssembly. Wraps the libxmtp WASM bindings and exposes a clean Rust API. Responsibilities:
- Ethereum keypair generation and identity management
- Private key serialisation (hex) for local persistence
- Conversation listing and group creation via XMTP
- Worker infrastructure — spawns a Dedicated Worker so the XMTP SQLite database can use the OPFS Sync Access Handle VFS (browser main thread restriction workaround)
- Environment switching (Local / Dev / Production)
The Progressive Web App frontend fpr mobile devices built with Dioxus 0.7, compiled to WebAssembly. A pure UI crate: no JS interop, no wasm-bindgen direct dependency — only Dioxus and xmes-xmtp-wasm.
The landing page of Xmes.
- Rust
- Dioxus CLI:
cargo install dioxus-cli wasm32-unknown-unknowntarget:rustup target add wasm32-unknown-unknown
# Start the dev server (PWA) with hot reload
dx serve --addr 0.0.0.0 --port 9000
# Build for web
dx build
# Lint (automatically targets WASM via .cargo/config.toml)
cargo clippy
# Format
cargo fmtMIT — see LICENSE for details.