Skip to content

Install Roots

Ludusavi manifest paths often use <base> for a game’s install folder, and <root> for the install root itself (for Steam, the Steam folder, as in <root>/userdata/…). SaveVault stores your install folders in config.toml as additional_roots. Steam is also discovered at scan time, and Rescan & Add Roots (below) writes locked Steam and Steam Library rows for it as well.

On first launch SaveVault merges common paths. After installing a new launcher, run Settings → Game Scanning → Additional Install Roots → Rescan & Add Roots, or:

Terminal window
savevault-cli roots discover # read-only: what's found on this machine
savevault-cli roots rescan # merge, sort, dedupe, and save
savevault-cli roots rescan --dry-run # preview the merged list without writing config.toml
savevault-cli roots list # each row is marked locked or editable

Rows that a rescan adds are locked: their type and path are read-only. Remove a locked row if it’s wrong, then rescan. A rescan also drops locked rows whose folder no longer exists, and re-sorts the list alphabetically by type with Other last. Rows you add by hand stay editable and are kept even if their folder is missing.

Platform Auto-discovery includes
All Steam and each extra Steam library, plus any GOG Games folder next to a Steam library
Windows Epic, GOG Galaxy, Origin, Ubisoft Connect, Prime Gaming, Battle.net, EA App, LaunchBox emulators, Microsoft Store (WindowsApps, including secondary drives), and C:\GOG Games
Linux Heroic (including the Flatpak install), Lutris (including Flatpak), Legendary, and ~/GOG Games
macOS Steam and ~/GOG Games only

On Linux, Flatpak installs are found at their sandbox paths: Steam at ~/.var/app/com.valvesoftware.Steam/.steam/steam, Heroic at ~/.var/app/com.heroicgameslauncher.hgl/config/heroic, and Lutris at ~/.var/app/net.lutris.Lutris/config/lutris (with its data in .../data/lutris).

A candidate whose folder doesn’t exist is dropped during discovery, and a configured root whose path is unusable (missing, or a glob that matches nothing) is skipped at scan time with a warning in the log rather than failing the scan.

Use Add Root to add a row by hand, on any platform; it starts as Other and stays editable. The Move up and Move down arrows on each row reorder the list, and Remove deletes the row. Every launcher kind in a row’s kind dropdown can be chosen manually (Steam, Steam Library, GOG Library, GOG Galaxy, Epic, Heroic, Lutris, Legendary, Origin, EA App, Ubisoft Connect, Prime Gaming, Battle.net, Microsoft Store, LaunchBox), not just the Ludusavi-style kinds below:

Kind Purpose
home Alternate HOME; <base> = {root}/{installDir}
wine_prefix Wine/Proton prefix; expands drive_c user paths
windows_drive / linux_drive / mac_drive External OS disk
other Child-folder layout (each subfolder is a game)

In config.toml, kind names are case-insensitive and a few alternate spellings are accepted and normalized to the names above: otherHome / other_home for home, otherWine / other_wine for wine_prefix, otherWindows, otherLinux, and otherMac (and their snake_case forms) for the matching drive kinds, xbox for microsoft, launch_box for launchbox, and a bare drive for the drive kind of the current OS.

Root paths support Ludusavi-style globs (D:/Games/*) and the <game> placeholder (~/prefixes/<game>), which resolves per title at scan time instead of walking every child folder. Combined patterns like ~/prefixes/*/<game> work too.

[[additional_roots]]
kind = "other"
path = "D:/Games/*"
[[additional_roots]]
kind = "wine_prefix"
path = "/home/deck/Games/Heroic/Prefixes/GamePrefix"