Rust backend
The backend lives in tauri/src-tauri/src/. It’s a single long-lived process
that owns all state and side effects. This page is a map of the modules.
Foundation
Section titled “Foundation”main.rs/lib.rs— entry point, module wiring, Tauri command registration. Thegenerate_handler!list is the source of truth for every IPC command. Also sets up per-concernState<T>, the single-instance plugin, the tray icon + menu, lifecycle hooks, and CLI dispatch.error.rs—AppErrorenum +AppResultalias, serialisable so errors round-trip across the IPC boundary as strings.paths.rs— centralised filesystem path resolution. Every module that touches an app file goes through here.cli.rs— argv parsing for headless subcommands (--run,--backup,--release-lock) vs a normal launch.
Persistence
Section titled “Persistence”config.rs— app-wide settings persisted toconfig.json. The cloud / LAN / Proton-launch fields are grouped intoCloudConfig/LanConfig/LaunchConfigsub-structs,#[serde(flatten)]ed so the JSON stays flat. A container-level#[serde(default)]on each config struct means missing keys fall back to the struct’sDefault, so older files load without migration (apply it at the struct level, not per-field). Unused fields are removed, not retained for legacy compatibility.library.rs—GameEntry+LibraryCRUD with atomic JSON saves tolibrary.json. Emitslibrary:changedon every mutation.
External integrations
Section titled “External integrations”ludusavi.rs— subprocess invocation of the bundled ludusavi CLI. Owns the manifest cache and the search/find/enrich + restore/backup flow.ludusavi_config.rs— Spool owns ludusavi’sconfig.yamlso it controls backup/restore paths, the cloud remote, retention, and per-restore redirects.steamgriddb.rs— HTTP client for SteamGridDB. Downloads portrait covers and extracts a vibrant accent colour.steam.rs— non-Steam shortcut creation (shortcuts.vdf) + grid art.sync.rs— sync-server HTTP client (the Hono server inserver/): account registration, per-game play-state locks, save events, playtime sync.metadata.rs— HTTP client for the public Steam StoreappdetailsAPI. Enriches game entries with description, developer, publisher, genres, and release date (no API key required).lan/— the LAN game-sharing subsystem (discovery.rsUDP-broadcast peer discovery,server.rsin-process axum file server with blake3 manifests,install.rsthe resumable content-addressed receiver).
Platform-specific
Section titled “Platform-specific”These are #[cfg]-gated and degrade gracefully on the other OS.
- Windows-only —
launcher.rs(embeddedlauncher_stub.exegeneration),registry.rs(RUNASADMINprobe),process.rs(the elevated run-as-admin path; the normal spawn path is cross-platform). - Linux-only —
proton.rs(umu-launcher + per-game Wine prefixes),gamemode.rs(SteamOS Game Mode detection),session.rs(Game-Mode session records),decky_install.rs(companion Decky plugin installer),redirects.rs(cross-platform save-path mapping),plugin_server.rs(Unix-socket HTTP server for Decky companion communication),suspend.rs(D-Bus system suspend/resume watcher for play locks).
Cross-platform OS integration
Section titled “Cross-platform OS integration”system_open.rs— native “Open folder” with the AppImage env stripped.diagnostics.rs— the Settings → Compatibility dependency doctor.
Workflow orchestration
Section titled “Workflow orchestration”runner.rs— the marquee feature. A five-phase state machine (restoring → launching → playing → backing-up → done) emittingrun:phaseevents at each transition. A single-launch RAII guard releases the slot even on panic.
Startup backfills
Section titled “Startup backfills”One-shot tasks at boot for legacy library entries, saved once at the end:
accent_backfill.rs— fills missing accent colours from covers on disk.size_backfill.rs— computes install sizes viawalkdir.metadata_backfill.rs— throttled startup task that enriches library entries having a Steam ID but missing description/developer fields.