Skip to content

Backing Up

The Backup page lists detected games with search, sort, live-filter, multi-select, and a per-game Files tree showing exactly what the next backup will capture. Pick what you want and run a backup. The CLI mirrors this:

Terminal window
savevault-cli backup
savevault-cli backup --games "Dark Souls III" --games "Elden Ring"
# Per-run overrides
savevault-cli backup --games "Baldur's Gate 3" --format tarzst --compression 1 --output E:/SaveBackups
# See the plan without writing anything
savevault-cli backup --dry-run
savevault-cli backup-preview "Elden Ring"

Backups honour your exclusions, so logs and shader caches stay out. Every flag is in the CLI reference.

The backup button counts your selection (for example Backup 3 Games). Beside it, Update Game Database fetches the latest game database now (savevault-cli manifest update), and the Refresh button next to the search box (tooltip Rescan games) re-scans your installs (savevault-cli scan). + Add Game opens the form for custom games.

While a manual or Smart Backup runs, a progress bar across the top of the window shows the current game. Its Cancel button, or Cancel Backup in the tray menu, stops the run.

When a game isn’t detected the way you expect, or you’re filing a bug report, one read-only command prints how it was detected, which manifest paths resolved, the backup plan, the exclusions in force, its Live Protection status, and its latest backups:

Terminal window
savevault-cli --verbose diagnose "Elden Ring"

The Smart Backup button on the Dashboard, and the same entry in the system tray menu, runs a scheduled pass right now from inside the app: it scans, backs up only the games whose saves changed, and applies retention, then cloud sync follows if it’s enabled. If nothing changed it says so and writes nothing. The CLI equivalent is savevault-cli schedule-run. Unlike scheduled passes, Smart Backup runs aren’t recorded in the Schedule page’s history.

Archives store game saves and configs separately (under data/saves/… and data/configs/…). On Windows — and inside Proton/Wine prefixes on Linux — SaveVault also captures the relevant registry keys and hives. Choose what to bring back at restore time with --include saves|configs|both; the default is saves only.

Format Notes
zip Default. Opens anywhere; Zip64, so files over 4 GiB are fine.
tar.gz Smaller than zip for most save data.
tar.zst Best ratio and speed (zstd).

Set the default with default_format and the speed/ratio trade-off with backup_compression_speed (1 fastest … 9 smallest, default 6), under Settings → General or:

Terminal window
savevault-cli config set default_format tarzst
savevault-cli config set backup_compression_speed 3

Every backup carries a plain-text README.txt and a savevault-manifest.json. Files live under data/<saves|configs>/<placeholder>/<rest>/…, where the placeholder is appData, documents, home, gameInstall, and so on, and resolves against the current machine at restore time. That’s what makes backups portable across machines and users, and restorable by hand without SaveVault. See the archive format.

Archive file names end in a device tag, <Game>_<timestamp>_<device-tag>.<ext>, for example SUPERHOT VR_2026-09-29_14.02.11_steam-deck-oled-aaaa.zip. The tag is a short slug of this device’s name plus the first four characters of its id, so two devices that back up the same game in the same second never collide in a shared folder. Set the name under Settings → General → Device Name; see multiple devices.

SaveVault keeps a configurable number of backups per game (retention.default_max_backups, default 4, with per-game overrides; in the app it’s Settings → Retention → Max Backups Per Game) and purges the oldest unpinned backup beyond the limit. Retention refuses to purge while the newest surviving archive fails verification, so a corrupt latest backup can never cause good ones to be deleted. When several devices share the backup folder, each device keeps its own count and never deletes another device’s backups.

Pin a backup to protect it from cleanup, and label it to remember why. Both are one click on the Dashboard and Restore pages, or:

Terminal window
savevault-cli backups # list the library
savevault-cli backups pin backup.zip --label "before NG+"
savevault-cli backups label backup.zip "Malenia down"
savevault-cli backups unpin backup.zip
savevault-cli backups delete backup.zip # refuses pinned without --force

Pins and labels are stored inside the archive’s manifest, so they survive a copy to another machine or a round trip through the cloud.

You can also pin and label before the backup exists: each game’s row on the Backup page has a Pin backup: switch and a Backup label field, and the next manual backup of that game is created pinned and labeled. The CLI sets both afterwards, as above.

Live Protection snapshots are a third source of backups, next to manual and scheduled ones. They live in their own folder (Snapshot Directory, default <backup_dir>/snapshots), are capped per game by Rolling Snapshot Limit rather than Max Backups Per Game, and show up with your other backups on the Restore page marked live snapshot. Pinned snapshots are skipped by the rolling cleanup, and your exclusions apply to them too.

The Restore page and savevault-cli backups reconcile SaveVault’s index with the backup folder every time: archives you deleted by hand disappear from the list, and archives that appear in the folder — copied from another PC, pulled down by cloud sync, or made by another tool that follows the format — are adopted automatically. savevault-cli prune does the same without printing the listing.

BLAKE3 checksums are recorded per file and per archive at backup time, and checked on restore. Deep-check any archive, or all of them, whenever you like:

Terminal window
savevault-cli verify backup.zip
savevault-cli verify --all

The GUI’s Verify Integrity action on a backup does the same.

Run automated passes that scan, back up only games whose saves changed, apply retention, optionally sync to the cloud, and check for app updates. Saves that are byte-for-byte identical to the newest backup — for instance one you just restored from another device — aren’t archived again. Configure passes on the Schedule page or from the CLI:

Terminal window
savevault-cli schedule enable # daily at 03:00
savevault-cli schedule enable --mode interval --interval 4h
savevault-cli schedule enable --mode weekly --weekdays mon,wed,fri --time 22:30
savevault-cli schedule enable --mode monthly --month-day 1 --games "Elden Ring"
savevault-cli schedule status
savevault-cli schedule history
savevault-cli schedule-run # one pass right now, in the foreground
savevault-cli schedule disable

schedule enable registers a job with your OS scheduler — Task Scheduler on Windows, a systemd timer on Linux, launchd on macOS — so passes run even when the app is closed. On Windows the scheduler fires the silent savevault-scheduled binary, which never flashes a console window; on Linux and macOS the systemd timer and launchd job run savevault-cli schedule-run directly. Scheduled passes include configs by default (schedule.include_configs) and can write to a separate folder (schedule.output_dir). A notification summarizes each pass according to notifications.scheduled_run_mode.

Before each scheduled pass or Smart Backup, SaveVault checks for a newer game database (a cheap conditional request; if it fails, the run carries on with the database you have). Turn that check off with Settings → Scheduled Backups → Update Game Database Before Scheduled / Smart Backup (shown on the Schedule page as Game DB:), or savevault-cli config set schedule.refresh_manifest_before_run false.

Two independent knobs tune throughput:

  • scan.parallelism — threads for the install scan (default: all logical CPUs).
  • backup.parallelism — threads for per-game archiving (default: half your logical CPUs).

Set them under Settings → Game Scanning → Scan Threads and Settings → General → Backup Threads, or with savevault-cli config set. Each dropdown offers Automatic (showing the thread count it would use), Sequential (1), or a fixed thread count; on the CLI pass auto or a number (savevault-cli config set backup.parallelism auto).