A Discord-style Matrix client. Tauri v2 shell, React (web) UI, and a Rust core.
Today it runs entirely on an in-memory MockBackend. Replies, edits, own-message
redaction, and reactions are functional mock behavior only. They are not
homeserver operations or real Matrix interoperability.
client/
core/ vauxl-core: contract types and MockBackend (no Tauri, no Matrix)
src-tauri/ the Tauri shell: command and event wrappers, tauri-specta bindings export
src/ the React UI (web). src/bindings.ts is GENERATED from Rust, do not edit it by hand
docs/ DATA_INTERFACE.md explains the contract and the security boundary
The UI depends only on core (through the generated bindings), not on Tauri or
Matrix, so the shell and the protocol stay swappable. See docs/DATA_INTERFACE.md.
- Rust (stable) and
cargo - Bun
- Linux desktop libraries for the Tauri webview. On Fedora:
sudo dnf install webkit2gtk4.1-devel libsoup3-devel
bun install
bun run tauri dev # launches the window; runs Vite + the Rust app, needs a displayIn debug builds, src/bindings.ts is regenerated automatically on launch. To
regenerate it without launching the GUI:
cargo test -p vauxl-app export_bindingscargo build # compiles the workspace (core + app)
cargo test # runs core + binding-export tests
bun run build # typechecks and builds the frontend into dist/
bun run tauri build # produces a packaged desktop bundleImplement the current command set used by the UI with matrix-rust-sdk, then
update AppState and the constructor in src-tauri/src/lib.rs. Add a shared
backend trait only when a second backend exists. Crypto stays in vodozemac
through the SDK.