A lightweight desktop app for backing up and syncing game save files across Steam Deck, Windows PC, and Linux. Built with Tauri 2 for a small, fast, native experience.
- Automatic Steam detection — Scans your Steam library and locates save files for 52,000+ games using the Ludusavi manifest
- Non-Steam game detection — Auto-detects games from Heroic (Epic/GOG/Amazon), Lutris, Bottles, EA App, Ubisoft Connect, Rockstar Launcher, and more
- Add custom games — Manually add any game with a title and save folder path
- One-click backup & restore — Versioned zip backups with SHA-256 integrity verification
- Restore with confirmation — Safety backup of current saves before restoring, with a confirmation dialog showing backup details
- Bulk operations — Back Up All and Restore All with per-game progress bars
- File watcher — Detects save file changes in real time and triggers auto-backup (on-change, hourly, or daily)
- Syncthing sync — Peer-to-peer save sync between devices via Syncthing (no accounts, no cloud)
- Syncthing auto-install — DeckSave downloads and manages Syncthing for you — no separate setup needed
- Gamepad controls — Native Gamepad API support for Steam Deck (D-pad, A/B buttons, analog stick, shoulder buttons)
- Auto-registers in Steam — Adds itself as a non-Steam game so it appears in Gaming Mode, with grid artwork
- First-run wizard — Guided setup: gamepad check, Steam registration, Syncthing install
- Dashboard health summary — At-a-glance view of backup status: games found, recently backed up, and games needing attention
- Launcher badges — Color-coded labels on each game card showing where it was detected (Steam, Heroic, EA, Ubisoft, etc.)
- Steam Deck optimized — Gamepad-first UI with 48px+ touch targets and 1280×800 layout
- System tray — Minimizes to tray on Windows; runs quietly in the background
- Desktop notifications — OS-native notifications when auto-backups complete
- Lightweight — No Electron, no bundled runtime. Uses the system webview via Tauri
| Button | Action |
|---|---|
| D-pad / Left Stick | Navigate between items |
| A | Confirm / activate |
| B | Back / close modal |
| L1 | Previous tab |
| R1 | Next tab |
| L2 | Previous sub-tab |
| R2 | Next sub-tab |
Button hints appear automatically at the bottom of the screen when a gamepad is detected, and hide when you switch to mouse or keyboard.
Desktop Mode note: In Steam Deck Desktop Mode, Steam Input intercepts the controller before evdev can read it. To use a gamepad in Desktop Mode, either launch DeckSave from Gaming Mode (where Steam Input sends standard key events) or disable Steam Input for the controller in Steam's settings. This is a Steam platform limitation, not a DeckSave bug.
┌─────────────────────────────────────────┐
│ React + TypeScript + Tailwind (UI) │
├─────────────────────────────────────────┤
│ Tauri 2.0 (IPC bridge) │
├─────────────────────────────────────────┤
│ Rust backend │
│ ├── steamlocate (Steam library scan) │
│ ├── Ludusavi manifest (save path DB) │
│ ├── Launcher detection (non-Steam) │
│ ├── Backup engine (zip + SHA-256) │
│ ├── File watcher (notify crate) │
│ ├── Syncthing REST API + auto-install │
│ ├── Steam shortcut registration │
│ └── SQLite (history, settings) │
└─────────────────────────────────────────┘
- Scan — Detects installed Steam games and resolves their save file locations using Ludusavi's community-maintained manifest, then auto-detects games from non-Steam launchers
- Backup — Creates timestamped, compressed, checksummed zip archives with configurable retention
- Watch — Monitors save directories for changes and auto-backs up based on your schedule
- Sync — Shares backups between devices via Syncthing's peer-to-peer protocol
DeckSave automatically detects games from these launchers:
| Launcher | Platform | Detection Method |
|---|---|---|
| Steam | Linux, Windows | steamlocate + Ludusavi manifest |
| Heroic (Epic/GOG/Amazon) | Linux | installed.json config files |
| Lutris | Linux | SQLite database (pga.db) |
| Bottles | Linux | bottle.yml + library.yml |
| EA App / Origin | Linux, Windows | Proton prefix scan, filesystem |
| Ubisoft Connect | Linux, Windows | Proton prefix scan, registry parsing |
| Rockstar Launcher | Linux, Windows | Proton prefix scan, registry parsing |
| Epic Games Store | Windows | LauncherInstalled.dat JSON |
| GOG Galaxy | Windows | Galaxy SQLite database |
Games from all detected launchers appear in the same Dashboard grid, with color-coded badges indicating the source. You can also manually add any game via the Add Game button.
- Install DeckSave using one of the methods below
- Launch the app — the first-run wizard will guide you through:
- Gamepad detection (if on Steam Deck)
- Registering DeckSave as a non-Steam game (so it appears in Gaming Mode)
- Installing Syncthing for cross-device sync (optional)
- Click Scan — DeckSave detects your Steam library and any non-Steam launchers automatically
- Click Back Up All — creates versioned backups of all detected save files
- Enable file watching in Settings to auto-backup when saves change
Download the .msi or .exe installer from Releases.
One-liner install (bundles all dependencies, works on SteamOS):
curl -sL https://raw.githubusercontent.com/baldknobber/deck-save/master/scripts/deck-install-flatpak.sh | bashThen run: flatpak run com.baldknobber.decksave
On first launch, the setup wizard will offer to register DeckSave in Steam (so it appears in Gaming Mode) and install Syncthing.
curl -sL https://raw.githubusercontent.com/baldknobber/deck-save/master/scripts/deck-install.sh | bashNote: The AppImage requires
webkit2gtk-4.1installed on your system. SteamOS does not ship this — use the Flatpak instead.
- Rust (stable)
- Node.js (18+)
- Tauri CLI:
cargo install tauri-cli - Linux only:
libwebkit2gtk-4.1-dev,libappindicator3-dev,librsvg2-dev,patchelf
npm install
cargo tauri buildnpm install
cargo tauri dev| Layer | Technology |
|---|---|
| Framework | Tauri 2 |
| Frontend | React 18 + TypeScript + Tailwind CSS |
| Build | Vite |
| Backend | Rust |
| Database | SQLite via rusqlite |
| Steam detection | steamlocate |
| Save path database | Ludusavi manifest |
| File watching | notify |
| Sync | Syncthing REST API |
| Steam shortcuts | steam_shortcuts_util |
| Compression | zip (deflate) |
| Integrity | sha2 (SHA-256) |
- Flatpak packaging — Bundled for Steam Deck / SteamOS
- Gamepad controls — Native Gamepad API (D-pad, A/B, L1/R1 tab switching)
- Steam shortcut registration — Auto-add to Steam for Gaming Mode
- Syncthing auto-install — Download and manage Syncthing automatically
- First-run wizard — Guided setup on first launch
- Non-Steam game support — Auto-detection for Heroic, Lutris, Bottles, EA, Ubisoft, Rockstar, Epic, GOG + manual add
- Restore confirmation — Safety backup before restore, confirmation dialog with backup details
- Bulk operations — Back Up All / Restore All with progress bars
- Dashboard health summary — At-a-glance backup status with launcher badges
- Auto-updater — In-app update checks via Tauri's updater plugin
- Cloud backup option — Optional upload to a cloud provider as a secondary backup target
- Per-game sync rules — Choose which games sync and which stay local
- UI themes — Light mode, OLED-optimized dark theme
- Backup browser — View and diff individual files inside backup zips
- Import/export settings — Transfer DeckSave config between machines
- Ludusavi by Matthew T. Kennerly — DeckSave uses the Ludusavi manifest, a community-maintained database of game save locations covering 52,000+ games.
- Syncthing — Open-source continuous file synchronization. DeckSave uses Syncthing's REST API for peer-to-peer save sync.
- Tauri — The framework that makes it possible to build a small, fast, native desktop app with a web frontend.
- steamlocate by William Venner — Rust crate for locating Steam installations and libraries.
- steam_shortcuts_util by PhilipK — Rust crate for reading and writing Steam's shortcuts.vdf format (also used by BoilR).
- PCGamingWiki — The Ludusavi manifest is largely sourced from PCGamingWiki's save game location data.
MIT