Skip to content

Getting Started

Spool is a Tauri 2 desktop app: a Rust backend (tauri/src-tauri/) paired with a SvelteKit 5 frontend (tauri/src/). Windows and Linux are both primary targets (notably the gaming-handheld distros — Bazzite, CachyOS, SteamOS).

  • Rust (stable toolchain)
  • Bun for the frontend
  • Tauri’s platform prerequisites — see the Tauri prerequisites guide
  • Linux only: the WebView + tray system libraries — libwebkit2gtk-4.1-dev, libappindicator3-dev, and librsvg2-dev (add patchelf and xdg-utils if you build an AppImage — the bundler copies /usr/bin/xdg-open into it). umu-launcher (umu-run) on the host is optional — only needed to test the Proton runner, and is the one Linux dependency that is not bundled.

Spool shells out to ludusavi and rclone, which ship as Tauri sidecars — end users never install them separately. For development you fetch them once into tauri/src-tauri/binaries/:

Terminal window
cd tauri
bun run download-sidecars

You need these before anything that compiles the backend — tauri dev, tauri build, and the local checks — because Tauri verifies the sidecar binaries exist at build time.

All commands run from tauri/ unless noted.

Terminal window
cd tauri
# Install frontend dependencies (first time, or after package.json changes)
bun install
# Fetch the bundled sidecars (first time — see "Bundled sidecars" above)
bun run download-sidecars
# Run the app in development (hot-reload frontend + auto-rebuild backend)
bun tauri dev
tauri/src-tauri/target/release/spool.exe
cd tauri
bun tauri build
# Output:
# tauri/src-tauri/target/release/bundle/nsis/Spool_<version>_x64-setup.exe

On Linux the release build produces an AppImage — Spool_*_amd64.AppImage on x86_64, Spool_*_aarch64.AppImage on ARM64. Tauri cannot cross-compile ARM AppImages, so an aarch64 build has to run on an ARM machine.

CI fails on any clippy warning, so run these before pushing.

Terminal window
# Backend (from tauri/src-tauri)
cargo check
cargo clippy --all-targets -- -D warnings
cargo test
# Frontend (from tauri/)
bun run check # svelte-check
bun run lint # ESLint
bun run test # Vitest unit tests

End-to-end tests drive a real Tauri window via tauri-driver + WebdriverIO:

Terminal window
cd tauri
bun run test:e2e # builds the app then runs the WebDriver suite
# Headless Linux: xvfb-run -a bun run e2e
Path What it is
tauri/src-tauri/src/ Rust backend (persistence, subprocess orchestration, OS integration)
tauri/src/ SvelteKit frontend (routes + lib/)
server/ Self-hostable Hono sync server
decky/ Companion Decky Loader plugin
docs-site/ This documentation site

See Architecture → Overview for the full module map.