Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CLI Reference

This is the exhaustive reference for the modde command-line interface. Every top-level command group, every subcommand, every flag, and the environment variables modde reads are documented here. The binary is invoked as modde (installed via the Nix flake); the GUI is the same binary under modde gui.

Run modde --help or modde <command> --help at any time for the clap-generated usage of a specific command.

Global flags

These flags are accepted on every command (clap global = true).

FlagEnvironmentDescription
--data-dir <path>MODDE_DATA_DIROverride the data directory for a single invocation (default: ~/.local/share/modde)
--heap-profile <path>MODDE_HEAP_PROFILEFeature-gated. Write a DHAT heap profile. Requires building with --features heap-profile; errors out otherwise
--debug-panicFeature-gated, hidden. Panic after startup to smoke-test the remote-telemetry crash-capture path. Only compiled in with --features remote-telemetry

--data-dir overrides the active instance (see modde instance) for that one command only — it does not change the persisted active instance. The release builds shipped through the flake do not enable heap-profile or remote-telemetry, so --heap-profile returns an explanatory error and --debug-panic is absent unless you build those features yourself.

Environment variables

modde reads the following environment variables in addition to the --data-dir override above.

VariableDefaultPurpose
MODDE_DATA_DIR~/.local/share/moddeData directory (DB, store, downloads, backups). Equivalent to --data-dir.
NEXUS_API_KEYNexus Mods API key, used when no modde-owned config-file key is present.
NEXUS_API_KEY_FILEPath to a file containing the Nexus API key (read after the keyring is consulted).
GITHUB_TOKENBearer token for the GitHub API; raises rate limits for release-backed tools (reshade, optiscaler).
RUST_LOGtracing/env_logger-style filter controlling log verbosity (e.g. RUST_LOG=modde=debug).
MODDE_BYTE_CACHE_MIB512Size (MiB) of the in-memory LRU byte cache used by the download/source layer.
MODDE_ZSTD_MIN_BYTES1048576Minimum file size (bytes) before Wabbajack staging entries are zstd-compressed. Default 1 MiB.
MODDE_ZSTD_LEVEL9zstd compression level for staging (clamped to the 1–22 range).
MODDE_ARCHIVE_RETENTIONkeepDefault source-archive retention after a Wabbajack archive batch integrates. Accepts keep, prune-applied (aliases prune/delete), or auto. The --archive-retention flag on install wabbajack overrides this.
MODDE_HEAP_PROFILESame as the --heap-profile flag; only meaningful in a heap-profile build.

Nexus API key resolution order

When a command needs a Nexus key, modde resolves it in this order and uses the first source that yields a non-empty value:

  1. The modde-owned config file (written by modde nexus auth).
  2. NEXUS_API_KEY.
  3. The system keyring.
  4. NEXUS_API_KEY_FILE.
  5. A legacy key stored in app settings.

An OAuth token (if present and unexpired) takes precedence over the API-key chain. Under Home Manager, prefer programs.modde.nexus.apiKeyFile, which feeds NEXUS_API_KEY_FILE.


modde profile

Manage mod profiles.

profile list

List all profiles.

modde profile list [--game <id>]
FlagDescription
--gameFilter by game ID

profile create

Create a new profile.

modde profile create <name> --game <id>

profile delete

Delete a profile.

modde profile delete <name> [--game <id>]

profile switch

Switch to a profile. Automatically swaps saves.

modde profile switch <name> --game <id>

profile active

Show the active profile for a game.

modde profile active --game <id>

profile try

Push a profile onto the experiment stack. Can be stacked multiple times.

modde profile try <name> --game <id>

profile rollback

Pop the experiment stack, returning to the previous profile.

modde profile rollback --game <id>

profile commit

Accept the current experiment and clear the rollback stack.

modde profile commit --game <id>

profile fork

Clone a profile including its mods, load order rules, and saves.

modde profile fork <source> <name> --game <id> [--unlock]
FlagDescription
--unlockStrip profile-level lock and all per-mod pins from the fork

profile lock

Apply a manual load order lock to a profile.

modde profile lock <name> [--game <id>] [--note <text>]

profile unlock

Clear the profile-level load order lock.

modde profile unlock <name> [--game <id>]

profile lock-info

Show lock status and per-mod pins for a profile.

modde profile lock-info <name> [--game <id>]

profile lock-mod

Pin an individual mod in place.

modde profile lock-mod <name> <mod_id> [--game <id>] [--note <text>]

profile unlock-mod

Release a per-mod pin.

modde profile unlock-mod <name> <mod_id> [--game <id>]

profile dedup

Detect filesystem-scanner rows that duplicate Wabbajack manifest entries.

modde profile dedup <name> [--game <id>] [--manifest <path>] [--apply]
FlagDescription
--manifestPath to a .wabbajack file as the authoritative reference
--applyActually delete leaked rows (without this flag, dry-run only)

Without --manifest, this runs the layer-1 heuristic: it lists filesystem-scanner rows (cet/*, reds/*, tweak/*, archive/*, redmod/*) on a locked profile as read-only “suspects”. With --manifest, the manifest’s install directives classify each suspect as LEAKED (safe to delete) or GENUINE (a user addition to keep), and --apply deletes the LEAKED rows.


modde play

Switch profile, deploy mods, and launch the game.

modde play [profile] --game <id> [--no-deploy] [--no-switch] [--no-capture]
FlagDescription
--no-deploySkip mod deployment
--no-switchSkip profile switch
--no-captureSkip save auto-capture after game exit

modde deploy

Deploy mods for the active or specified profile.

modde deploy [--profile <name>] [--game <id>]

modde rollback

Rollback to the previous deployment.

modde rollback [--profile <name>] [--game <id>]

modde install

Install mods from various sources.

install wabbajack

Install from a Wabbajack modlist. This is the largest single command in the CLI; the defaults below match a normal full install.

modde install wabbajack <path> [--profile <name>] [--game-dir <path>] [flags...]
FlagDefaultDescription
--profileTarget profile (created if it doesn’t exist)
--game-dirGame installation directory to deploy mods into
--forcefalseForce full reinstall, skipping preflight checks
--no-deployfalseStage into modde’s data dir but skip the final copy into --game-dir (Stock-Game lists)
--continue-on-errorfalseLog per-archive failures instead of aborting; install proceeds as far as possible
--reset-stagingfalseExplicitly discard existing Wabbajack staging before installing
--skip-validatefalseSkip staging validation before deploy
--diagnostics-dirWrite apply diagnostics JSONL to this directory (consumed by wabbajack analyze-diagnostics)
--diagnostics-interval30Diagnostics heartbeat interval in seconds
--stall-warn-seconds600Warn when apply makes no batch/sentinel progress for this many seconds
--stall-abort-seconds1800Abort when stalled this long and cgroup memory/swap are saturated
--archive-retentionkeepSource-archive retention after successful integration: keep, prune-applied, or auto
--missing-archive-policyfailBehavior for missing optional manual/Nexus archives: fail, omit-files, or omit-mods
--acquire-missingfalseFrontload assisted manual-archive acquisition before applying
--acquire-download-dirBrowser download directory to watch during assisted acquisition
--acquire-timeout900Per-archive assisted acquisition timeout in seconds
--acquire-include-nexusfalseInclude Nexus archives in frontloaded acquisition
--acquire-browser-controllerfalseUse controlled Chromium tabs for frontloaded acquisition
--no-acquire-missingfalseDisable automatic frontloaded manual-archive acquisition
# Smoke-run a large list without writing into the live game install
modde install wabbajack ./lotf.wabbajack --profile lotf \
  --no-deploy --continue-on-error --skip-validate \
  --diagnostics-dir ./wj-diag --missing-archive-policy omit-mods

See the Wabbajack guide for the full readiness workflow.

install nexus-collection

Install a Nexus Collection.

modde install nexus-collection <slug> [--version <rev>] [--profile <name>]
FlagDescription
--versionPin a specific collection revision
--profileTarget profile (created if it doesn’t exist)

install mod

Install a single mod from Nexus.

modde install mod <url> [--profile <name>] [--fomod-config <path>]
FlagDescription
--fomod-configPath to a FOMOD declarative config (TOML or JSON) for non-interactive installation

modde mod

Manage individual mods.

mod remove

Remove an installed mod from a profile and unlink its staged files. Removal uses the V8 installed_mod_files manifest, so it is precise — no orphaned files, no collateral damage.

modde mod remove <mod_id> [--profile <name>]
FlagDescription
--profileProfile to remove from. Defaults to the active / unambiguous profile.

The mod_id is the id stored in the profile — usually <domain>_<mod_id>_<file_id> for Nexus installs.

mod diagnose

Print the skill-dossier path and an inline prompt for a mod whose install type could not be detected. Handy for piping into an agent or pasting into a chat.

modde mod diagnose <mod_id>

modde wabbajack

Search, download, inspect, prepare, and support Wabbajack modlists. These are the read-only and supporting utilities; the actual install runs through modde install wabbajack.

Search public Wabbajack modlist catalogs.

modde wabbajack search [query] [--game <id>] [--source official|authored|both] [--json]
FlagDefaultDescription
--gameFilter by game ID
--sourcebothCatalog source: official, authored, or both
--jsonEmit machine-readable JSON

wabbajack download

Download a .wabbajack file by URL, machine URL, or title. Authored-files URLs are downloaded through modde’s chunk-aware downloader when required.

modde wabbajack download <url-or-machine-url> [--output <dir>]
FlagDescription
--outputOutput directory for the downloaded file

wabbajack hm-snippet

Generate a Home Manager profile snippet for a .wabbajack source.

modde wabbajack hm-snippet <url-or-file> --profile <name> --game <id> [--game-dir <path>] [--output <path>]
FlagDescription
--profileProfile name to emit in the snippet (required)
--gameGame ID to emit in the snippet (required)
--game-dirGame install directory to emit
--outputWrite the snippet to a file instead of stdout

wabbajack import-archive

Import local archives into the modde store by matching the Wabbajack manifest hash. Useful when an upstream authored-files archive disappeared but you still have the exact archive in an old Wabbajack cache.

modde wabbajack import-archive <path.wabbajack> <archive-path>...

The command hashes each archive and imports only files whose Wabbajack hash is referenced by the manifest. Matching by filename is intentionally refused — only exact hash matches are accepted.

wabbajack acquire-missing

Open manual Wabbajack archive pages and import matching browser downloads.

modde wabbajack acquire-missing <manifest> [flags...]
FlagDefaultDescription
--download-dirBrowser download directory to watch
--data-dirOverride the data directory for this acquisition
--browser-profileBrowser profile directory to use
--include-nexusfalseInclude Nexus archives in acquisition
--browser-controllerfalseDrive controlled Chromium tabs instead of just watching downloads
--timeout900Per-archive acquisition timeout in seconds
--jsonfalseEmit machine-readable JSON

wabbajack missing-impact

Report missing manual/Nexus archives and their install impact (how many files / mods would be omitted).

modde wabbajack missing-impact <manifest> [--data-dir <path>] [--json] [--nix-snippet]
FlagDescription
--data-dirOverride the data directory
--jsonEmit machine-readable JSON
--nix-snippetPrint Home Manager manualArchives entries for the missing archives

Print missing manual-archive URLs that require an operator to visit each page.

modde wabbajack manual-links <manifest> [--data-dir <path>] [--json]

wabbajack assess

Assess readiness for a large Wabbajack install without mutating any state.

modde wabbajack assess <manifest> [--profile <name>] [--game-dir <path>] [--json]
FlagDescription
--profileProfile context for the assessment
--game-dirGame install directory to assess against
--jsonEmit machine-readable JSON

wabbajack analyze-diagnostics

Summarize the Wabbajack diagnostics JSONL written by a previous install run (the directory passed to --diagnostics-dir).

modde wabbajack analyze-diagnostics <diagnostics-dir> [--json]
# Assess, resolve missing archives, then analyze the run afterwards
modde wabbajack assess ./lotf.wabbajack --game-dir ~/Games/skyrim
modde wabbajack missing-impact ./lotf.wabbajack --nix-snippet
modde wabbajack analyze-diagnostics ./wj-diag

modde game

Manage user-defined games. Built-in games are resolved from the internal registry; these commands register and inspect generic / user-defined games via a GameSpec TOML. (User-defined game support is Partial — deployment, conflict analysis, and launchers work, but there is no bespoke per-game scanner or save tracker. See the generic games guide.)

game add

Add or overwrite a user-defined game registration.

modde game add <id> --display-name <name> --executable-dir <path> [flags...]
FlagDescription
--display-nameHuman-readable name (required)
--executable-dirDirectory containing the game executable, relative to the install (required)
--steam-app-idSteam App ID, for launcher detection
--install-dir-nameSteam steamapps/common directory name
--mod-dirMod deployment subdirectory
--nexus-domainNexus Mods domain slug for this game
--proxy-dll <name>Proxy DLL name (repeatable) used by OptiScaler/ReShade-style hooks
--forceOverwrite an existing user-defined game TOML
modde game add stalker2 \
  --display-name "S.T.A.L.K.E.R. 2" \
  --executable-dir "Stalker2/Binaries/Win64" \
  --steam-app-id 1643320 \
  --nexus-domain stalker2heartofchornobyl \
  --proxy-dll dinput8.dll

game list

List user-defined games.

modde game list

game remove

Remove a user-defined game registration.

modde game remove <id> [--yes]
FlagDescription
--yesSkip the confirmation prompt

game detect

Detect executable-bearing directories under a game install (helps you pick the right --executable-dir for game add).

modde game detect <install-path>

game show

Show a resolved game registration (user-defined first, then the built-in registry).

modde game show <id>

game export

Export a game registration to TOML.

modde game export <id> [--with-optiscaler] [--output <path>]
FlagDescription
--with-optiscalerAppend resolved OptiScaler profiles to the exported TOML
--outputWrite to a file instead of stdout

game import

Import a game registration from TOML.

modde game import <path> [--force]
FlagDescription
--forceOverwrite an existing destination TOML

game import-profile

Import OptiScaler profiles from TOML for a game.

modde game import-profile <path> --for <game-id> [--force]
FlagDescription
--forGame ID the profiles apply to (required)
--forceOverwrite an existing destination TOML

modde exec

Manage named launch targets (xEdit, BodySlide, FNIS, etc.). This is a thin alias for the executable subset of modde tool — the underlying storage is shared, so modde exec list and modde tool list-executables print the same rows. Executable management is Done end to end (named executables with args, working dir, env, Wine DLL overrides, a configurable output mod, and overwrite capture). See the executables guide.

exec add

Save (or update) a named launch target. Re-running with the same name overwrites the existing entry, so add doubles as edit.

modde exec add <name> <executable> --game <id> [flags...] [-- <args>...]
FlagDefaultDescription
--gameGame ID (required)
--working-dirgame installWorking directory for the launched process
--output-mod__overwrite__Mod that captures files written during the run
--wine-dll-overridesWine DLL overrides, e.g. dinput8=n,b;winmm=n,b
--env KEY=VALUEEnvironment variable assignment (repeatable)
-- <args>...Default arguments to pass when running this executable
modde exec add xEdit "~/tools/SSEEdit/SSEEdit.exe" --game skyrim-se \
  --wine-dll-overrides "dinput8=n,b" --env "SSE_GAME_PATH=Z:\\game" -- -IKnowWhatImDoing

exec list

List configured launch targets for a game.

modde exec list --game <id>

exec remove

Remove a launch target.

modde exec remove <name> --game <id>

exec run

Run a saved launch target with overwrite capture.

modde exec run <name> --game <id> [--profile <name>] [-- <args>...]
FlagDescription
--profileProfile context for the run
-- <args>...Additional arguments appended after the saved defaults

modde nexus

Nexus Mods account management.

nexus auth

Save your API key to modde’s config (and the system keyring where available).

modde nexus auth

nexus status

Show API key validity and premium status.

modde nexus status

modde nxm

Handle nxm:// download links from Nexus Mods.

nxm handle

Handle an nxm:// download URI.

modde nxm handle <uri> [--profile <name>]

nxm install

Install the nxm:// URI handler for your desktop environment.

modde nxm install

modde save

Manage save files and the git-backed save vault. See the saves guide for the conceptual model.

save assign

Assign a save file to a profile.

modde save assign <path> --profile <name> [--game <id>] [--label <text>]
FlagDescription
--profileTarget profile (required)
--gameGame ID
--labelOptional label for this save

save unassign

Remove a save assignment.

modde save unassign <path>

save list

List saves for a profile.

modde save list --profile <name> [--game <id>]

save scan

Scan for unassigned save files.

modde save scan --game <id>

save adopt

Import existing saves from the game directory into a profile’s vault. If no profile is active for the game, the adopted profile becomes active.

modde save adopt --game <id> --profile <name>

save capture

Snapshot current saves into the vault (creates a new snapshot).

modde save capture --game <id> --profile <name> [-m <message>]
FlagDescription
-m, --messageOptional message for the snapshot

save history

Show save snapshot history.

modde save history --game <id> --profile <name> [--limit <n>]
FlagDefaultDescription
--limit20Max entries to show

save restore

Restore saves from a specific snapshot.

modde save restore <commit> --game <id> --profile <name>

The <commit> may be a full commit ID or an unambiguous prefix.

save auto-capture

Detect and capture new saves (called by the launch wrapper on game exit; defaults to the active profile).

modde save auto-capture --game <id> [--profile <name>]

save watch

Watch for save changes and auto-capture via polling.

modde save watch --game <id> [--profile <name>] [--interval <secs>]
FlagDefaultDescription
--interval30Poll interval in seconds

modde update

Check for, and apply, updates. With no flags, update check checks for a new modde release; with --mods, --profile, or --game, it checks tracked profile mods on Nexus instead.

update check

modde update check [--profile <name>] [--game <id>] [--period <period>] [--mods]
FlagDefaultDescription
--profileCheck this profile’s tracked Nexus mods
--gameRestrict to this game
--period1wTime window: 1d, 1w, or 1m
--modsCheck Nexus-tracked profile mods instead of modde itself

If none of --mods, --profile, or --game is given, this performs the product (modde) update check.

update apply

Download and install the latest MAIN file for any tracked mod in the profile that has a newer Nexus version.

modde update apply [--profile <name>] [--game <id>] [flags...]
FlagDescription
--period <period>Time window to scan: 1d, 1w, or 1m (default 1w)
--dry-runPrint the mods that would be updated without downloading
--confirm-lockedAcknowledge that the profile is locked (Wabbajack / Collection / TOML import); required for any locked profile, since updating drifts it away from its authoritative source
--accept-breakingPermit applying updates that look like breaking semver bumps (major version change)
--yesSkip interactive prompts (assume “yes”); still refuses breaking updates unless --accept-breaking is also set

Breaking (major semver) updates always require an interactive y/N confirmation per mod even with --accept-breaking, unless --yes is also passed.

# Preview, then apply on a locked Wabbajack profile, allowing major bumps
modde update apply --profile lotf --period 1m --dry-run
modde update apply --profile lotf --period 1m --confirm-locked --accept-breaking

modde loot

LOOT masterlist integration for Bethesda plugin sorting.

loot sort

Sort plugins using LOOT masterlist rules.

modde loot sort --game <id> [--data-dir <path>]
FlagDescription
--data-dirPath to the game Data directory (auto-detected if omitted)

loot validate

Validate plugins for Form 43 and missing master errors.

modde loot validate --game <id>

modde tool

External tool, executable, and overlay management. This command exposes both the overlay/patch surface (MangoHud, vkBasalt, GameMode, ReShade, OptiScaler, Proton) and the full named-executable surface (the same storage modde exec aliases).

tool run

Run an external tool by path with overwrite capture.

modde tool run <executable> [--profile <name>] [--game <id>] [-- <args>...]

tool add-executable

Save a named executable launch target for a game. Equivalent to modde exec add.

modde tool add-executable <name> <executable> --game <id> [flags...] [-- <args>...]
FlagDefaultDescription
--gameGame ID (required)
--working-dirgame installWorking directory
--output-mod__overwrite__Mod that captures files written during the run
--wine-dll-overridesWine DLL overrides, e.g. dinput8=n,b;winmm=n,b
--env KEY=VALUEEnvironment variable assignment (repeatable)
-- <args>...Default arguments

tool list-executables

List saved executable launch targets for a game.

modde tool list-executables --game <id>

tool remove-executable

Remove a saved executable launch target.

modde tool remove-executable <name> --game <id>

tool run-executable

Run a saved executable launch target with overwrite capture. Equivalent to modde exec run.

modde tool run-executable <name> --game <id> [--profile <name>] [-- <args>...]

tool list

List detected tools for a game.

modde tool list --game <id>

tool status

Show status of all gaming tools and overlays.

modde tool status --game <id>

tool enable

Enable a tool or overlay.

modde tool enable <tool_id> --game <id>

Tool IDs: mangohud, vkbasalt, gamemode, reshade, optiscaler, proton.

tool disable

Disable a tool or overlay.

modde tool disable <tool_id> --game <id>

tool configure

Configure tool settings as key=value pairs.

modde tool configure <tool_id> --game <id> -- <key=value>...

tool apply

Apply tool patches to the game directory (DLLs, configs).

modde tool apply <tool_id> --game <id>

tool revert

Revert tool patches from the game directory.

modde tool revert <tool_id> --game <id>

tool releases

List releases for a release-backed tool (reshade, optiscaler). Set GITHUB_TOKEN to raise the GitHub API rate limit.

modde tool releases <tool_id> --game <id>

tool install-release

Install a specific release asset for a release-backed tool, downloading it from GitHub.

modde tool install-release <tool_id> --game <id> --tag <tag> --asset <asset>
FlagDescription
--tagRelease tag (required)
--assetAsset filename (required)

tool install-release-from-path

Install a specific release asset from an already-downloaded local file.

modde tool install-release-from-path <tool_id> --game <id> --tag <tag> --asset <asset> <path>
FlagDescription
--tagRelease tag the asset corresponds to
--assetAsset filename
<path>Local path to the downloaded asset
modde tool releases optiscaler --game cyberpunk2077
modde tool install-release optiscaler --game cyberpunk2077 \
  --tag v0.7.7 --asset OptiScaler_v0.7.7.7z

See the tools guide for what each overlay does.


modde fomod

FOMOD installer utilities. See the FOMOD guide.

fomod generate

Generate a declarative FOMOD config template from a mod’s ModuleConfig.xml.

modde fomod generate <mod_path> [--all] [--format <fmt>]
FlagDescription
--allInclude all plugins (not just defaults)
--formatOutput format: toml (default), json, or nix

fomod apply

Apply a declarative FOMOD config non-interactively.

modde fomod apply <mod_path> --config <path> --dest <dir>

fomod inspect

Inspect a mod’s FOMOD steps, groups, and plugins.

modde fomod inspect <mod_path>

modde scan

Scan a game directory for installed mods. See the scanning guide.

modde scan --game <id> [--game-dir <path>] [--manifest <path>] [--import-to <profile>] [--threshold <0.0-1.0>] [--dry-run] [--prune-duplicates]
FlagDefaultDescription
--game-dirauto-detectedGame installation path
--manifest.wabbajack file for manifest matching
--import-toImport discovered mods into this profile
--threshold0.5Minimum file presence fraction for a match
--dry-runReport only, don’t write to database
--prune-duplicatesRemove filesystem-scanner rows covered by the manifest (requires --manifest and --import-to)

modde collisions

Analyse mod file collisions. See the conflicts guide.

modde collisions [--profile <name>] [--game <id>] [--all] [--suggest-hides]
FlagDescription
--allShow all collisions including cosmetic ones
--suggest-hidesSuggest hide commands for redundant files

modde diagnostics

Run diagnostic checks for common modding issues.

modde diagnostics --game <id> [--profile <name>]

modde export

Export a profile’s mod list to CSV.

modde export [--profile <name>] [--game <id>] [--columns <col,col,...>] [--output <path>]

Outputs to stdout if --output is omitted.


modde verify

Verify installed file integrity for a profile.

modde verify [--profile <name>] [--game <id>]

modde backup

Manage mod and plugin order backups.

backup create

Create a backup of an installed mod’s content-store directory.

modde backup create <mod_id>

backup restore

Restore a mod from its latest backup.

modde backup restore <mod_id>

backup list

List available backups for a mod.

modde backup list <mod_id>

backup plugins

Backup the real plugin order for a profile. modde reads the DB-backed order first and falls back to native plugins.txt when needed.

modde backup plugins --profile <name> --game <id>

backup restore-plugins

Restore plugin load order from a backup, writing back to both the profile DB state and native plugins.txt when the game uses one.

modde backup restore-plugins --profile <name> --game <id>

modde stock

Manage vanilla game snapshots.

stock snapshot

Capture a snapshot of the vanilla game installation.

modde stock snapshot <game_id>

stock verify

Verify snapshot integrity against the current installation.

modde stock verify <game_id>

modde detect

Detect installed games across Steam and Heroic launchers.

modde detect

modde instance

Manage modde instances (multiple data directories). instance switch changes the active modde data root used by the database, store, downloads, and backups unless --data-dir overrides it for a single command.

instance create

Create a new instance.

modde instance create <name> --data-dir <path>

instance list

List all instances.

modde instance list

instance switch

Switch to a different instance.

modde instance switch <name>

modde skill

Install and update the built-in modde-maintained agent skills (written under ~/.agents/skills/). The built-in set is modde-hm-integration, wabbajack-readiness, and manual-archive-curation.

skill list

List built-in modde skills and their install status (missing, installed, outdated, or newer).

modde skill list

skill path

Print the target skill directory ($HOME/.agents/skills).

modde skill path

skill install

Install or update one built-in skill, or all.

modde skill install <name|all> [--force]
FlagDescription
--forceReplace installed skills even when the installed version is newer
modde skill install all
modde skill install wabbajack-readiness --force

modde import

Import existing TOML-format profiles into the database.

modde import

modde gui

Launch the graphical user interface (the same binary, with its own iced runtime).

modde gui

Common workflows

First install and play (Nexus collection)

modde nexus auth                                  # store the API key once
modde detect                                      # find installed games
modde install nexus-collection my-collection --profile main
modde play main --game skyrim-se                  # switch + deploy + launch + capture

Prepare and run a large Wabbajack list

modde wabbajack assess ./lotf.wabbajack --game-dir ~/Games/skyrim
modde wabbajack missing-impact ./lotf.wabbajack --nix-snippet
modde wabbajack import-archive ./lotf.wabbajack ~/Downloads/manual-archive.7z
modde install wabbajack ./lotf.wabbajack --profile lotf \
  --game-dir ~/Games/skyrim --continue-on-error --diagnostics-dir ./wj-diag
modde wabbajack analyze-diagnostics ./wj-diag

Experiment safely with the rollback stack

modde profile fork main experiment --game skyrim-se --unlock
modde profile try experiment --game skyrim-se     # push onto the stack
modde update apply --profile experiment --period 1m --accept-breaking
modde profile rollback --game skyrim-se           # undo if it broke
modde profile commit --game skyrim-se             # or keep it

Wire up a modding tool

modde exec add xEdit "~/tools/SSEEdit/SSEEdit.exe" --game skyrim-se \
  --wine-dll-overrides "dinput8=n,b"
modde exec run xEdit --game skyrim-se --profile main   # output captured to __overwrite__
modde collisions --profile main --game skyrim-se --suggest-hides

Back up before and capture after a session

modde backup plugins --profile main --game skyrim-se
modde save capture --game skyrim-se --profile main -m "before the dungeon"
modde play main --game skyrim-se                  # auto-captures saves on exit
modde save history --game skyrim-se --profile main

See also