(noun) : cosmo??
WANDA runs WeMod — a Windows game-trainer app — on Linux through Wine/Proton, and gets it to actually hook into your Steam games. It handles the fiddly parts: building a compatible Wine prefix, installing a working WeMod build, and launching WeMod and the game together so WeMod can attach to the running process.
Status: early (v0.1.0). Expect rough edges.
WeMod can only apply trainers to a game if WeMod and the game run in the same Wine prefix
(the same wineserver instance). If the game launches in its own Proton session, WeMod can't see
it. Most of WANDA exists to force that co-location, plus to work around a handful of WeMod/Wine
compatibility issues:
- WeMod version pinning — WeMod 12.x renders a black window under Wine, so WANDA installs a known-good older build (11.6.0) instead of the latest.
- .NET check — WeMod's trainer engine requires .NET Framework ≥ 4.7. Wine Mono reports 4.0, so
WANDA patches
mscorlib.dll's version metadata to satisfy the check, and installs real .NET 4.8 via Proton (not winetricks, which corrupts 64-bit Proton prefixes). - Proton selection — Proton Experimental works best; GE-Proton 10.x breaks WeMod's renderer (wow64), so WANDA ranks versions accordingly and warns on bad picks.
- Linux with Steam installed (native or Flatpak)
- A working Proton — Proton Experimental or GE-Proton 8/9 recommended (install via Steam or ProtonUp-Qt)
wineandwinetricksavailable onPATH- Rust toolchain (2021 edition) to build from source; Node.js 20+ for the GUI
Run wanda doctor at any time to check that these are in place.
cargo build --release -p wanda-cli
# binary at target/release/wandaA dev shell and a CLI package are provided:
nix develop # dev shell with Rust, Node, Tauri deps
nix build # builds the wanda-cli packageshell.nix additionally provides an FHS environment (wanda-fhs) for running Wine/Proton binaries
on non-FHS distros like NixOS, configured to use the system NVIDIA drivers.
cd crates/wanda-gui/frontend && npm install
cd .. && cargo tauri dev # dev mode
cargo tauri build # production bundlewanda init # detect Steam + Proton, build the Wine prefix, install .NET + WeMod
wanda scan # list your Proton/Windows games
wanda launch <game> # launch a game together with WeMod
wanda doctor # diagnose problemswanda init can take 10–15 minutes the first time (mostly the .NET 4.8 install).
Global flags: -v/-vv/-vvv (verbosity), -q/--quiet, --config <path>.
Detects Steam and Proton, creates the default Wine prefix, installs .NET 4.8, downloads and installs WeMod.
| Flag | Description |
|---|---|
--steam-path <PATH> |
Override Steam auto-detection |
--proton <NAME> |
Force a specific Proton version |
--skip-wemod |
Don't install WeMod |
--skip-dotnet |
Don't install .NET (WeMod trainers may then fail) |
-f, --force |
Recreate the prefix even if it already exists |
Lists installed games.
| Flag | Description |
|---|---|
-f, --filter <STR> |
Filter by name |
--all |
Include non-Proton (native) games |
-l, --long |
Detailed output (path, size, prefix) |
Launches a game with WeMod. <game> is an App ID or a name substring.
| Flag | Description |
|---|---|
--no-wemod |
Launch via Steam without WeMod |
--standalone |
Start WeMod in the game's own prefix; you press Play in WeMod's UI |
--delay <SECS> |
Wait after starting WeMod before starting the game (default 3) |
--args <STR> |
Extra arguments passed to the game |
--proton <NAME> |
Override the Proton version for this launch |
-w, --wait |
Block until the session exits |
A Steam launch-option wrapper. In a game's Steam properties, set:
wanda inject %command%
WANDA then intercepts Steam's launch, sets up WeMod inside the game's own Proton prefix, and starts
WeMod so it shares the game's Wine session. If WeMod is already running for that prefix (e.g. started
via launch --standalone), it passes the launch straight through into the existing session.
Manage Wine prefixes: list, create <name>, delete <name> [-f], repair [name],
validate [name], info [name]. Most default to the default prefix.
Manage WeMod: status, install, update, uninstall, run (launch WeMod standalone).
show, path, edit, reset, and set <key> <value>. Settable keys:
steam.install_path proton.preferred_version prefix.base_path
steam.scan_flatpak wemod.auto_update prefix.auto_repair
wemod.version
Read-only diagnostic report (Steam, Proton, prefix health, WeMod, system deps).
--full lists every detected Proton version; --export <path> writes the report to a file.
Kills stale WeMod/Wine processes (WeMod, wineserver, winedevice, steam.exe, …).
The Tauri desktop app wraps the same core library with a guided setup flow and four views:
- Setup — checks Steam/Proton and runs first-time initialization
- Games — searchable grid; launch with or without WeMod
- Prefixes — prefix health, repair, and WeMod update status
- Settings — Steam/Proton/WeMod config plus an in-app doctor
- Steam discovery (
wanda-core::steam) — parseslibraryfolders.vdfandappmanifest_*.acfwith a small built-in VDF parser to find libraries, games, and existing Proton prefixes. - Prefix building (
wanda-core::prefix) — initializes the prefix via Proton's ownwineboot, patchesmscorlib.dll, and installs .NET 4.8 throughproton runinprefix. - Co-location — WANDA symlinks the real
steamapps/commonand app manifest into the prefix's fakeC:\Program Files (x86)\Steam, writes Steam registry keys, and launches the game via its C: drive path so WeMod's process-image match succeeds. It does this through one of three paths:launch(batch coordinator),launch --standalone(game's own prefix), orinject(Steam launch option).
Paths used:
~/.config/wanda/config.toml configuration
~/.local/share/wanda/ prefixes, metadata, wanda.log
~/.cache/wanda/downloads/ WeMod / .NET installers
WeMod's UI is Electron (works under Wine once GPU compositing is disabled — WANDA
passes --disable-gpu --disable-gpu-compositing --disable-direct-composition), but its
trainer engine (WeModAuxiliaryService.exe) is a .NET Framework app that requires
a real Microsoft .NET runtime (≥ 4.7.2556). Wine Mono is not sufficient — the auxiliary
process exits with code 0xC8 and WeMod shows "failed to load".
WANDA patches mscorlib.dll so WeMod's version check passes, but that only masks the
missing runtime. You need real .NET 4.8 (or 4.7.2) actually installed in the prefix, and
that install is fragile on modern Wine. Observed failure modes:
- Proton Experimental (wine-11, wow64): the .NET installer's MSI cabinet extraction fails
(
err:msi:extract_cabinet FDICopy failedonnetfx_core.mzz) — real .NET won't install. - GE-Proton 9 (wine-9):
winetricks dotnet48/dotnet472deadlocks on the Wine-Mono uninstall step (msiexec /x{…}blocked inanon_pipe_read); even after killing the stuck uninstall, the dependency chain wedges without installing .NET.
So on some machines WeMod's UI launches and the game runs, but trainers can't activate
until real .NET is present. If your Wine stack does install .NET 4.8/4.7.2 cleanly (many do),
WANDA works end to end. For the .NET install itself, winetricks dotnet48 against the WANDA
prefix, or the battle-tested wemod-launcher
project's .NET handling, are the paths most likely to succeed.
The .NET 4.8 install step in wanda init currently uses proton runinprefix, which often
silently no-ops; treat "installed successfully" with suspicion and verify (a real install makes
mscorlib.dll ~5 MB and writes HKLM\...\NDP\v4\Full\Release).
crates/
wanda-core/ library: config, error, steam, prefix, wemod, launcher
wanda-cli/ the `wanda` binary (clap subcommands)
wanda-gui/ Tauri 2 backend + React/TypeScript/Vite frontend
GPL-3.0