Skip to content

Building

Tobias Vorwachs edited this page Oct 24, 2026 · 1 revision

Building from source

Prerequisites

  • Rust, stable toolchain 1.90 or newer (via rustup), with the rustfmt and clippy components.
  • Node.js 24 (the version CI uses) and npm.
  • No protoc is needed: the protobuf compiler is vendored (protoc-bin-vendored).

Linux, Debian/Ubuntu (24.04 in CI)

sudo apt-get install -y --no-install-recommends \
  libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev \
  libxdo-dev libasound2-dev cmake patchelf xdg-utils build-essential pkg-config libssl-dev

Linux, Arch/CachyOS

sudo pacman -S --needed base-devel webkit2gtk-4.1 libayatana-appindicator librsvg \
  xdotool alsa-lib cmake openssl pkgconf patchelf xdg-utils

Windows

Visual Studio Build Tools with the "Desktop development with C++" workload (MSVC), and the WebView2 runtime (preinstalled on Windows 11).

macOS

Xcode command line tools: xcode-select --install.

Get the code and run

git clone https://github.com/ToBee94/mumcord.git mumcord && cd mumcord
npm ci
npm run tauri dev

npm run tauri dev starts the Vite dev server (port 1420) and the Tauri app with the Rust engine.

Build release packages

npm run tauri build

Bundles land in target/release/bundle/:

OS Output
Linux appimage/*.AppImage
Windows nsis/*-setup.exe
macOS dmg/*.dmg and macos/*.app

Each OS builds only its own formats. To build a single format pass -- --bundles appimage (or nsis, dmg), for example npm run tauri build -- --bundles appimage. The packages are unsigned.

A quick build without bundling, as used in CI: npm run tauri build -- --debug --no-bundle.

npm run build type-checks and builds the frontend only (tsc -b && vite build).

TypeScript bindings (tauri-specta)

The UI calls the engine through generated TypeScript bindings in ui/src/bindings/commands.ts. Never edit that file by hand. It is regenerated by debug runs of the app and by cargo test -p mumcord. Set the environment variable MUMCORD_SKIP_BINDINGS_EXPORT=1 to stop a run from rewriting the tracked file (the E2E setup does this). After you change a Tauri command, run the app in debug mode or the tests and commit the regenerated file. See docs/engine-api.md for the contract.

Third-party notices

After dependency changes, regenerate the notices with scripts/generate-notices.sh. It needs cargo-about (cargo install cargo-about --locked --features cli) and an installed node_modules. It writes THIRD_PARTY_NOTICES and ui/public/third-party-notices.txt.

Clone this wiki locally