Runtime Paths and User Data Locations
Anomaly uses three main storage roots:
| Root | What lives there |
|---|---|
%APPDATA%/Anomaly/ | Shared identity, launcher metadata, asset cache, crash reports, and platform/cache files. |
GameRoot/ | Installed SCP:SL builds, catalog mod cache, loadouts, materialized runtime folders, and Linux Wine prefixes. |
<MelonLoader UserData>/ | Per-launch MelonLoader data exposed to the running game, including Anomaly overrides, input bindings, skins, translations, and MelonPreferences. |
On Windows, %APPDATA%/Anomaly/ usually means C:\Users\<you>\AppData\Roaming\Anomaly\.
On Linux through Wine or Proton, the in-game %APPDATA% path lives inside the Wine prefix. The native Launcher may also have a native Linux config location, but the modded game sees the Wine/Proton path.
%APPDATA%/Anomaly/
Section titled “%APPDATA%/Anomaly/”%APPDATA%/Anomaly/|-- user.json|-- launch_args.txt|-- installed_mods.json|-- game_builds_cache.json|-- catalog_cache.json|-- platform.json|-- FileCache/|-- cache/|-- install-staging/`-- CrashReports/user.json
Section titled “user.json”Stores your local Anomaly profile, identity, and Launcher-level preferences such as the selected GameRoot. Treat this file as sensitive. Anyone with a copy can impersonate that Anomaly identity.
Back it up if you want to keep the same @anomaly ID across machines or clean OS installs.
launch_args.txt
Section titled “launch_args.txt”Optional Launcher-saved arguments passed to the modded game when you launch it.
installed_mods.json
Section titled “installed_mods.json”Legacy install-state file used during migration from the old single-install layout. The loadout-aware Launcher stores active mod selections in each loadouts/<name>/loadout.json.
game_builds_cache.json
Section titled “game_builds_cache.json”Caches the game-version list used by the Launcher’s Game Versions tab so the UI can still show known builds if the online catalog is temporarily unavailable.
catalog_cache.json
Section titled “catalog_cache.json”Launcher catalog cache for the public repository UI.
platform.json
Section titled “platform.json”Optional Launcher platform override. Most users should not create this file. Developers can use it to point the Launcher at a non-production mod platform while testing.
FileCache/
Section titled “FileCache/”Shared cache for assets downloaded from Anomaly servers. Do not edit files here directly; Anomaly manages cache entries and mods access them through public asset APIs.
cache/ and install-staging/
Section titled “cache/ and install-staging/”Launcher and installer workspaces for verified install resources and temporary install operations. They should be cleaned automatically after install attempts.
CrashReports/
Section titled “CrashReports/”JSON crash reports produced by the modded client. See Logs and Crash Reports.
GameRoot/
Section titled “GameRoot/”GameRoot/|-- games/<gameVersion>/| |-- SCPSL.exe| |-- SCPSL_Data/| |-- version.dll| |-- MelonLoader/| `-- .anomaly_links.json|-- mods-cache/<modId>-<version>/| |-- package.json| |-- Mods/| |-- UserLibs/| `-- UserData/|-- loadouts/<name>/| |-- loadout.json| |-- runtime/| | |-- Mods/| | |-- UserLibs/| | `-- UserData/| `-- local/| |-- Mods/| |-- UserLibs/| `-- UserData/`-- wineprefixes/<loadout>/games/<gameVersion>/
Section titled “games/<gameVersion>/”One full SCP:SL install per game build. When a loadout starts, the Launcher links that loadout’s runtime Mods/, UserLibs/, and UserData/ into this folder for the lifetime of the game process.
.anomaly_links.json records the active links so the Launcher can clean them up after exit or on the next launch if the previous process crashed.
mods-cache/<modId>-<version>/
Section titled “mods-cache/<modId>-<version>/”One extracted platform package per mod version. Multiple loadouts can reference the same cached package.
loadouts/<name>/loadout.json
Section titled “loadouts/<name>/loadout.json”The loadout definition:
{ "gameVersion": "14.2.6", "enabledMods": [], "trackAnomalyClient": true}loadouts/<name>/runtime/
Section titled “loadouts/<name>/runtime/”Materialized active view for one loadout. LoadoutMaterializer rebuilds Mods/, UserLibs/, and package-managed UserData/Anomaly/ before launch, then the Launcher links these folders into the selected games/<version>/.
loadouts/<name>/local/
Section titled “loadouts/<name>/local/”User-owned local overrides for that loadout. Put dev DLLs in local/Mods/, shared libraries in local/UserLibs/, and loadout-specific files under local/UserData/.
See Local and Dev Mods.
wineprefixes/<loadout>/
Section titled “wineprefixes/<loadout>/”Native Linux Launcher only. Each loadout gets its own Wine prefix when launched through umu-run.
<MelonLoader UserData>/
Section titled “<MelonLoader UserData>/”This is the UserData folder that MelonLoader exposes to the running game. Under the loadout model it is normally the active loadout runtime UserData/ linked into games/<version>/.
<MelonLoader UserData>/|-- MelonPreferences.cfg|-- Loader.cfg|-- Skins/|-- i18n/| |-- anomaly/| `-- <modNamespace>/`-- Anomaly/ |-- bindings.json `-- Overrides/ |-- AudioClip/ |-- Texture2D/ |-- Sprite/ `-- Mesh/MelonPreferences.cfg
Section titled “MelonPreferences.cfg”MelonLoader preferences file. Anomaly’s own preferences include category anomaly, entry locale, and category anomaly, entry class_d_favorite_color.
ClientConfig.For(modId) and ClientPersistence.For(modId) are compatibility facades backed by MelonPreferences categories. Their values are stored as JSON strings in preferences entries, not as per-mod config.json / data.json files.
Loader.cfg
Section titled “Loader.cfg”MelonLoader loader preferences. Package-provided Loader.cfg files are skipped by the loadout materializer because this file is user-owned.
Skins/
Section titled “Skins/”Local UI skin files. Skins/logo.png replaces the main-menu logo when present. Package-provided UserData/Skins/ is skipped because skins are user-owned.
Anomaly and mod translation files:
i18n/|-- anomaly/| `-- en.yaml`-- mymod/ `-- en.yamlTr.RegisterMod("mymod") resolves <MelonLoader UserData>/i18n/mymod/ automatically. Tr.RegisterMod("mymod", customDir) remains available for custom locations.
Anomaly/bindings.json
Section titled “Anomaly/bindings.json”User keybinding overrides registered through Anomaly input APIs.
Anomaly/Overrides/
Section titled “Anomaly/Overrides/”Local user asset overrides. The generated catalogs show supported paths.
Overrides/|-- AudioClip/|-- Texture2D/|-- Sprite/`-- Mesh/Audio overrides are supported today. Texture and mesh support depends on the specific catalog and runtime support for that asset kind.
What survives reinstall
Section titled “What survives reinstall”user.jsonsurvives because it lives in%APPDATA%/Anomaly/.- Server asset cache survives because it lives in
%APPDATA%/Anomaly/FileCache/. - Crash reports survive until deleted.
- Loadout definitions and local dev files survive ordinary game-version reinstall flows because they live under
GameRoot/loadouts/. - Cached catalog packages survive ordinary game-version reinstall flows because they live under
GameRoot/mods-cache/. - Deleting the whole GameRoot removes installed builds, loadouts, local dev files, and cached catalog packages unless you back them up first.
Linux specifics
Section titled “Linux specifics”The native Launcher and the Wine/Proton game process can resolve user-data paths differently. If the Launcher and game disagree about identity or cache state, check both the native Linux config location and the Wine prefix’s mapped %APPDATA% folder.
Native Linux loadout launches use GameRoot/wineprefixes/<loadout>/ through umu-run. Steam Deck Gaming Mode and other Windows-launcher-under-Proton setups use Steam’s Proton prefix instead.