A Discord-style Matrix client. Tauri v2 shell, React (web) UI, and a Rust core.
Today it runs entirely on an in-memory MockBackend, so the whole interface can
be built and felt before any Matrix code exists. Swapping in a matrix-rust-sdk
backend later changes only one constructor.
client/
core/ vauxl-core: the contract types, the ChatBackend trait, MockBackend (no Tauri, no Matrix)
src-tauri/ the Tauri shell: command/event wrappers over ChatBackend, 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 bundle- Add a
MatrixBackendtocore(a new module) that implementsChatBackendusingmatrix-rust-sdk. Crypto stays invodozemacvia the SDK; you write no crypto yourself. - In
src-tauri/src/lib.rs, change the constructor inrunfromMockBackend::new()to yourMatrixBackend. Nothing in the UI changes.
This repo was scaffolded from an Electrobun template. These files are now unused
and can be removed: electrobun.config.ts, src/bun/, src/mainview/,
llms.txt, and the old build/ directory. They are excluded from the build but
remain on disk so nothing is lost without your say-so.