Savepoint is a local-first Windows utility for protecting game saves with clear, inspectable backups.
- Detects installed Steam games from Steam's library manifests.
- Shows selected game artwork when available.
- Finds common save locations, including Steam userdata and standard Windows folders.
- Creates atomic timestamped snapshots with SHA-256 hashes and a JSON manifest.
- Validates every path, hash, length, duplicate, and destination collision before restoring the first file.
- Keeps data on your computer. No account, telemetry, or cloud service is required.
- Start Savepoint.
- Select Detect Steam games and choose a game.
- Select Find save folders. If no single safe candidate is found, choose the folder manually.
- Choose a backup library on a different drive when possible.
- Create snapshots and restore them from the history panel.
Savepoint never silently overwrites files.
Version 1.2 records size and SHA-256 from the snapshot copy itself, refuses linked files and folders during capture, and checks restore roots and ancestors for reparse points before writing.
Version 1.3 rejects snapshot libraries that resolve inside a game's save folder before creating output, preventing a backup from recursively including its own working directory. Profile names are restricted to a single safe folder name.
dotnet run --project tests/SaveEngineTests.csproj
dotnet run --project tests/SteamDiscoveryTests.csproj
dotnet run --project tests/SaveLocationTests.csproj
dotnet build Savepoint.csproj -c ReleaseGitHub Actions runs these checks on Windows. Release packages are published in GitHub Releases.
Savepoint can read local Steam library manifests to find installed games. It is an independent project and is not affiliated with, endorsed by, or sponsored by Valve Corporation or Steam.
Savepoint is released under the MIT License. See LICENSE.
Savepoint replaces OpenGameSave. New builds use Savepoint.exe and Savepoint.csproj. Existing releases remain available under their original names.
Existing settings and data locations retain the OpenGameSave folder name for compatibility. Keep these folders when upgrading; no automatic move or data format change is required.
Windows setup packages install Savepoint for your current account, bundle the .NET runtime, create a Start menu shortcut and register an uninstaller. A desktop shortcut is optional. No administrator password or manual file copying is required. Existing settings and saved data stay in their current locations. The portable ZIP remains available.
Download Savepoint-v1.5.0-setup.exe from Releases and run it.
For unattended deployment:
Start-Process .\Savepoint-v1.5.0-setup.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-' -Wait -PassThruBuild from source with the open-source Inno Setup compiler installed:
pwsh -File scripts/Build-Setup.ps1 -VerifyThe verification option installs into a temporary test folder, checks reinstall and launch, then uninstalls. It runs on the hosted Windows runner during CI. It does not remove existing user settings or backups.
Version 1.5 adds headless JSON reports to help inspect a game's save history before restoring. Both commands verify snapshot paths, file sizes and SHA-256 values before writing a report.
Start-Process .\Savepoint.exe -ArgumentList '--compare "D:\Saves\Game\OLDER" "D:\Saves\Game\NEWER" --report "D:\Reports\changes.json"' -WindowStyle Hidden -Wait -PassThru
Start-Process .\Savepoint.exe -ArgumentList '--preview-restore "D:\Saves\Game\NEWER" "D:\Restore" --report "D:\Reports\restore.json"' -WindowStyle Hidden -Wait -PassThruComparison reports classify Added, Removed, Modified and Unchanged files and show the net byte change. Restore previews classify NewFile, Identical, Conflict and Blocked targets. Neither command changes saves or restore destinations. Reports contain local filenames and paths, so keep them private when necessary. The report folder must already exist and the output filename must be new. Exit code 0 means success; code 2 means invalid input, failed integrity checks or an output failure. Refresh previews if files change before restoring.
Capture and restore reject linked ancestors. Directory collisions and files blocking destination folders are checked before copying begins. The root filename manifest.json is reserved for snapshot metadata and cannot be captured; nested files with that name are supported. No snapshot format migration is required.