GameSaver is a desktop app that protects save files for standalone Windows games (CD installs, DRM-free downloads, portable installs, and other non-launcher setups).
It tracks your games, watches save locations, creates versioned snapshots, and lets you restore or verify backups from a simple Electron UI.
- Designed for non-Steam / non-launcher workflows.
- Multiple save locations per game (folders and single files).
- Automatic backups from file watcher events and periodic scans.
- Session-aware protection: detects game start/stop and triggers backup on exit.
- One-click restore with a required pre-restore safety snapshot.
- Snapshot integrity verification with SHA-256 checksums.
- Portable-friendly data root support (USB workflows).
- Tray integration and compact widget mode.
- Add/remove games manually with executable + install path.
- Auto-suggest save locations from common Windows paths:
%USERPROFILE%\Documents\My Games\{GameName}%APPDATA%\{GameName}%LOCALAPPDATA%\{GameName}%PROGRAMDATA%\{GameName}{InstallDir}\Save,{InstallDir}\Saves,{InstallDir}\Profiles
- Manage save locations per game:
- add, remove, enable/disable, missing-path visibility
- Snapshot operations:
- backup now
- restore
- verify
- delete
- scan/import snapshots from disk into library state
- Global settings:
- backup frequency (minutes)
- retention count per game
- storage root
- data folder (with migration + restart prompt)
- Recovery mode when startup data paths are unavailable.
- Electron (main + preload + renderer)
- React 18 + TypeScript
- Vite 7
- Tailwind CSS 4 + Radix UI primitives
- Vitest + ESLint
electron-builder(NSIS on Windows)
- Windows 10/11
- Node.js
22.17.0(see.nvmrc) - npm
npm ci
npm run devnpm run dev runs:
- Vite renderer on
http://localhost:5175 - TypeScript watch build for main/preload/shared
- Electron app launch once renderer + main build are ready
npm run typecheck
npm run lint
npm testnpm run build # compile renderer + electron code into dist/
npm run pack # unpacked app via electron-builder --dir
npm run dist # NSIS installer + publish configConfigured build target:
- Windows NSIS installer (
build.win.target = nsis)
- Add a game with name, executable path, and install path.
- GameSaver auto-detects candidate save locations and stores manual/auto locations.
- Backup engine creates timestamped snapshot folders and per-file checksums.
- Watchers + periodic scan + session monitor trigger automatic backups.
- Retention policy keeps only the latest
Nsnapshots per game. - Restore requires a successful
pre-restoresafety snapshot first.
GameSaver uses two key paths:
- Data Folder: app state (
settings.json,library.json, etc.) - Storage Root: backup payloads (defaults to
<Data Folder>\Backups)
Typical layout:
<Data Folder>\
AppState\
settings.json
library.json
<Storage Root>\
<GameFolder>\
metadata.json
Snapshots\
2026-02-09_20-14-18-120\
snapshot.manifest.json
<LocationFolderA>\...
<LocationFolderB>\...
Notes:
- In packaged mode, GameSaver prefers a portable local data root at
<InstallDir>\GameSaverDatawhen writable. - A bootstrap file is kept under Electron app-data to remember the selected data root.
contextIsolation: truenodeIntegration: false(renderer)sandbox: true- strict navigation/window restrictions
- CSP enforced for renderer content
- IPC payload validation in main process before handling actions
GitHub Actions workflow (.github/workflows/release.yml) on pushes to main:
- Resolves version from
package.json - Creates/pushes tag
v<version> - Builds and publishes via
electron-builder --publish always
publish is configured for NeaMitika/GameSaver.
src/
main/ # Electron main process + services
preload/ # secure renderer API bridge
renderer/ # React UI
shared/ # shared types/contracts
tests/ # Vitest coverage for core services
scripts/ # dev runtime helpers
- Development path:
data/games-db.json(project root). - Packaged app: bundled as
resources/data/games-db.jsonviaelectron-builderextraResources. - The add-game flow can use this catalog to detect save paths from Windows entries and runtime validation.
- Windows-focused implementation.
- Snapshots are full copies (no dedup/delta yet).
compressionEnabledexists in settings/state but compression is not active yet.- No explicit license file is present yet.