Skip to content

baldknobber/deck-save

Repository files navigation

DeckSave

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.

Rust React Tauri License

Features

  • 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

Gamepad Controls

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.

How It Works

┌─────────────────────────────────────────┐
│  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)         │
└─────────────────────────────────────────┘
  1. 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
  2. Backup — Creates timestamped, compressed, checksummed zip archives with configurable retention
  3. Watch — Monitors save directories for changes and auto-backs up based on your schedule
  4. Sync — Shares backups between devices via Syncthing's peer-to-peer protocol

Non-Steam Launcher Support

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.

First-Time Setup

  1. Install DeckSave using one of the methods below
  2. 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)
  3. Click Scan — DeckSave detects your Steam library and any non-Steam launchers automatically
  4. Click Back Up All — creates versioned backups of all detected save files
  5. Enable file watching in Settings to auto-backup when saves change

Installation

Windows

Download the .msi or .exe installer from Releases.

Steam Deck / Linux (Flatpak — recommended)

One-liner install (bundles all dependencies, works on SteamOS):

curl -sL https://raw.githubusercontent.com/baldknobber/deck-save/master/scripts/deck-install-flatpak.sh | bash

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

Linux (AppImage — requires webkit2gtk-4.1)

curl -sL https://raw.githubusercontent.com/baldknobber/deck-save/master/scripts/deck-install.sh | bash

Note: The AppImage requires webkit2gtk-4.1 installed on your system. SteamOS does not ship this — use the Flatpak instead.

Building from Source

Prerequisites

  • Rust (stable)
  • Node.js (18+)
  • Tauri CLI: cargo install tauri-cli
  • Linux only: libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev, patchelf

Build

npm install
cargo tauri build

Development

npm install
cargo tauri dev

Tech Stack

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)

Roadmap

  • 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

Credits & Acknowledgments

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

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors