dml is Detour's Mod Loader, a Linux-native XCOM 2 mod-launch workflow tool written in Go. Inspired by the classic XCOM 2 AML (Alternative Mod Launcher).
Today it can:
- detect XCOM 2 / War of the Chosen install roots
- detect workshop and local mod roots
- enumerate and parse mods
- normalize mod metadata into domain models
- load, save, and validate profile state
- resolve required dependencies from the scanned inventory and compute conflict warnings
- generate launch plans and doctor diagnostics
- apply config changes with rollback manifests
- launch the game directly or hand control back to Steam through a launch-options wrapper
- expose the core through a CLI and a minimal terminal UI
For a local user-scoped install:
make install PREFIX=$HOME/.localFor a direct source install from the public module path:
go install github.com/david-torres/dml/cmd/dml@latestFor a local release archive build:
make dist VERSION=v0.1.0That produces versioned Linux amd64 and arm64 tarballs plus sha256 checksum files under dist/.
If you are an XCOM 2 player on Linux and just want your mods to load:
- Install
dml.
go install github.com/david-torres/dml/cmd/dml@latest- Check that
dmlcan see your game install and workshop content.
dml detect
dml scan- Import the mods you already have enabled in XCOM 2 into a launcher-owned profile.
For War of the Chosen with Proton:
dml profiles import-active --name "My WOTC" --game wotc --runtime protonIf you already have a saved dml profile, refresh it from your current live ActiveMods instead:
dml profiles import-active --profile ~/.config/dml/profiles/my-wotc.json- Ask
dmlfor the Steam launch-options wrapper for that profile.
dml steam launch-options --profile ~/.config/dml/profiles/my-wotc.json- Paste the emitted value into Steam:
- open Steam
- right-click
XCOM 2 - open
Properties - paste the value into
Launch Options
- Sanity-check the profile before you launch.
dml doctor --profile ~/.config/dml/profiles/my-wotc.json- Launch XCOM 2 from Steam as usual.
Steam will call back into dml, dml will apply the selected profile's config and mod state, and then Steam will run the normal XCOM 2 command.
If you want to manage the profile interactively instead of staying in the CLI, run:
dml tuigo build ./...
make builddml help
dml version
dml detect
dml scan --json
dml profiles list
dml profiles import-active --name "My WOTC" --game wotc --runtime proton
dml doctor --profile ~/.config/dml/profiles/my-wotc.json
dml steam launch-options --profile ~/.config/dml/profiles/my-wotc.json
dml tuiFull command behavior and examples live in docs/commands.md.
1/2/3: switch between the Mods, Diagnostics, and Profiles workspacestab/shift+tab: move focus within the active workspacej/kor arrow keys: move in the focused list or viewport/: start editing the mod search queryf/F: cycle the mod inventory filter forward or backwardspace: toggle the selected mod in the current profile using dependency-tree semanticse/d: explicitly enable or disable the selected mod in the current profilet/T: switch the inspector subview between details, config, dependencies, conflicts, and warningsc: refresh the selected mod's discoveredConfig/*.inifiles in the inspector[/]: move between discovered mod config files in the inspectors: save the selected config file's current disk content as a launcher-owned overrideo: apply the saved override for the selected config file onto disku: remove the saved override for the selected config fileb: roll back the last mod-config save/apply/remove manifest from the inspectorn: create a new launcher-owned profile from the profiles workspaceI: import liveActiveModsinto a newly named launcher-owned profilei: refresh the selected profile from liveActiveModsx: delete the selected profile, with a second press to confirmenter: submit a profile prompt, or load the selected profile when no prompt is activeg: refresh doctor diagnostics for the selected profilep: refresh the selected profile plan previewa: apply config for the selected profilel: launch the selected profileesc: cancel a profile prompt, stop editing search, or clear the current search query from the mod panelr: reload dashboard dataq: quit
go test ./...
make test- The public module path is
github.com/david-torres/dml. - The project is licensed under MIT; see LICENSE.
dml versionprints embedded build metadata so packaged binaries can be identified reliably.- Command docs live in docs/commands.md.
- Release workflow details live in docs/releasing.md.