Backup info for PC game saves
MIT License
The Ludusavi Manifest format is a YAML structure for defining the location of game save data and other files that are of interest to back up. Although this project was started for use by Ludusavi, the goal is for the manifest format to be generic enough for any game backup tool to implement, while leaving room for new fields and functionality over time.
This repository contains the primary manifest, which is compiled from data on PCGamingWiki, along with accessing the Steam API for game installation directory names. If you find any data that is missing or incorrect, please contribute to the wiki, and such changes will be incorporated into the primary manifest periodically. There is also a list of games without any info on what to back up, as well as articles with wikitext that failed to parse.
Game developers may include a secondary manifest (named .ludusavi.yaml
) with their games,
so that backup tools can automatically detect and use it
to discover what files need to be backed up for save data and configuration.
For the schema, refer to schema.yaml. Note that the primary manifest is validated with schema.strict.yaml, which additionally specifies enums for some fields. However, tools should implement schema.yaml, so that new values in the manifest do not break older tools.
Here is an example:
An Example Game:
files:
<base>/saves:
tags:
- save
<base>/settings.json:
when:
- os: windows
- os: linux
tags:
- config
<base>/other:
when:
- os: mac
store: steam
installDir:
AnExampleGame: {}
registry:
HKEY_CURRENT_USER/Software/An Example Game:
tags:
- save
- config
steam:
id: 123
This means:
<base>/saves
will be backed up on any system.<base>/settings.json
will be backed up if you're using Windows or Linux.<base>/other
will be backed up if you're using Mac and Steam.HKEY_CURRENT_USER/Software/An Example Game
will be backed up.Paths in the files
section can include these placeholders:
placeholder | meaning |
---|---|
<root> |
a directory where games are installed (configured in backup tool) |
<game> |
an installDir (if defined) or the game's canonical name in the manifest |
<base> |
shorthand for <root>/<game> (unless overridden by store-specific rules) |
<home> |
current user's home directory in the OS (~ ) |
<storeGameId> |
a store-specific id from the manifest, corresponding to the root's store type |
<storeUserId> |
current user's ID in the game store |
<osUserName> |
current user's name in the OS |
<winAppData> |
%APPDATA% on Windows |
<winLocalAppData> |
%LOCALAPPDATA% on Windows |
<winDocuments> |
<home>/Documents (f.k.a. <home>/My Documents ) or a localized equivalent on Windows |
<winPublic> |
%PUBLIC% on Windows |
<winProgramData> |
%PROGRAMDATA% on Windows |
<winDir> |
%WINDIR% on Windows |
<xdgData> |
$XDG_DATA_HOME on Linux |
<xdgConfig> |
$XDG_CONFIG_HOME on Linux |
Tools must implement the following in addition to respecting the schema:
.ludusavi.yaml
and located directly in <base>
.<root>/steamapps/common/<game>/.ludusavi.yaml
.Tools may also:
<base>
.~/.steam/steam
,<base>
would be <root>/steamapps/common/<game>
.<root>/**/<game>
as a generic option,os: windows
,files
mapping./
or ../
).For authors of secondary manifests bundled with games:
.ludusavi.yaml
.<base>
instead of relative paths.<base>/save.dat
instead of ./save.dat
,<base>/../parent
instead of ../parent
.The latest version of the primary manifest can be downloaded from https://raw.githubusercontent.com/mtkennerly/ludusavi-manifest/master/data/manifest.yaml . To check for updates:
ETag
header for the last downloaded version.If-None-Match
header set to the last known ETag
value.ETag
value.Please refer to CONTRIBUTING.md.