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 if you build an AppImage). 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 backendtauri 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).

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
PathWhat 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.