CheatDeck 2 is a Decky Loader plugin for launching sidecar programs and managing launch options on your Steam Deck.
- Enable Developer Mode in Decky Loader.
- Download
CheatDeck2.zipfrom the latest release or the latest nightly build. - Install the ZIP through Decky Loader's developer settings.
Important
Download CheatDeck2.zip, not GitHub's automatically generated Source code.zip. The source archive does not contain the packaged Decky plugin.
The Normal tab provides the primary Trainer/Cheat exe and Language controls.
- Download a trusted Windows executable, such as a trainer or utility, to your Steam Deck.
- Access the game context menu to find the
CheatDeck 2menu item. - Enable Trainer/Cheat exe and select an
.exeor.batfile. Changes are saved automatically. - Launch the game. If the program's window does not appear in front, press the Steam button to switch between open windows.
The selected program starts alongside the primary program in the same Proton/Wine environment and stops when the primary program exits.
Trainer/Cheat exe normally relies on Proton's own PROTON_REMOTE_DEBUG_CMD hook to start the sidecar. Some Proton/Wine builds have shipped with this hook silently broken (see GloriousEggroll/proton-ge-custom#664) - the program stays configured in CheatDeck 2 but never actually launches. To work around this, enabling Trainer/Cheat exe also installs a small wrapper script (sidecar-launch.sh, written to the plugin's data directory) as an additional launch-option prefix command. The wrapper waits briefly for Proton's own hook, and if the sidecar still isn't running under Wine, launches it directly using the game's own Wine build before handing off to the game. Both mechanisms are attempted; whichever works, works. No action is needed - this applies automatically whenever Trainer/Cheat exe is enabled from a version of CheatDeck 2 that includes it.
The Trainers tab searches FLiNG Trainer by game name and lets you download and attach a trainer without leaving Gaming Mode:
- Open the Trainers tab and enter a game name.
- Pick a result, then pick a version from the download list.
- CheatDeck 2 downloads the archive, extracts it, and sets the trainer
.exeas the Trainer/Cheat exe automatically.
This talks directly to flingtrainer.com from the Deck; CheatDeck 2 doesn't control or vouch for the content of any specific trainer, in the same way it doesn't for a sidecar program you pick manually. If an archive is password-protected or the site's page layout has changed since this was written, download it manually instead and set it as the Trainer/Cheat exe on the Normal tab.
Some games use environment locale variables to choose their language or regional behavior. Enable Language and select a locale code to set both LANG and HOST_LC_ALL. Disable the option to restore the default environment.
- If the
CheatDeck 2menu item is missing entirely, or Decky's overlay crashes/errors when you open a game's properties, update Decky Loader itself to its latest version first (Steam Client updates have repeatedly required Decky Loader fixes throughout 2026 - see SteamDeckHomebrew/decky-loader releases). This is a Decky Loader/Steam Client compatibility issue, separate from CheatDeck 2. - Ensure Developer Mode is enabled in your Steam settings.
- If you cannot interact with the sidecar program, switch the game to windowed mode.
- If a program or trainer does not launch, it may require .NET Core, .NET Framework, or the Visual C++ Redistributable that is not present in your compatibility environment. Use
protontricksto install required dependencies.
If you've successfully used CheatDeck 2 with a game and sidecar trainer program, please share your compatibility findings or solutions in our Game Compatibility Discussion. Your feedback helps the community!
CheatDeck 2 provides several launch-option controls for quick access in the Advanced tab.
| Setting | Launch Option | Purpose |
|---|---|---|
| Desktop Behavior | SteamDeck=0 |
Makes games use desktop behavior instead of Steam Deck-specific presets, launchers, or restricted settings. |
| Disable FSYNC | PROTON_NO_FSYNC=1 |
Disables futex-based synchronization as a compatibility fallback for freezes or synchronization problems. This may reduce performance. |
| WineD3D Compatibility Renderer | PROTON_USE_WINED3D=1 |
Uses Wine's OpenGL renderer instead of Proton's Vulkan translation layers. This may fix DXVK or Vulkan rendering problems, but usually reduces performance. |
| Compatibility Data Redirection | STEAM_COMPAT_DATA_PATH=<path> |
Stores compatibility data at a selected path to share dependencies or save disk space. |
| Audio Latency | PULSE_LATENCY_MSEC=30, 60, or 90 |
Works around audio crackling or dropouts. Higher values may improve stability but increase audio delay; disabling the option removes the override. |
Warning
Compatibility data can contain game saves. You may need to migrate saves when changing STEAM_COMPAT_DATA_PATH.
Each Custom Option has a label and one Definition. CheatDeck 2 infers the Definition type from the text instead of requiring a separate type selection.
Use one static assignment:
MANGOHUD=1
LANG="de_DE.UTF-8"
The name must match [A-Za-z_][A-Za-z0-9_]*. The value is parsed as a static shell word and stored as its literal value. Quotes can group spaces or special characters, but dynamic expressions such as ENV=$HOME, command substitutions, and multiple assignments are rejected.
Environment variables use their name as the unique slot. Enabling an option replaces existing assignments with the same name, while disabling it removes assignments for that name.
Use a command followed by zero or more arguments:
gamemoderun
gamescope -f
wrapper "argument with spaces"
Prefix commands run before %command%. When several prefix commands are enabled, CheatDeck 2 separates them with --. Definitions that share the same command are combined through their argument lists. Command and argument words retain their original quoting and expansion text.
A prefix command cannot be empty, begin with -, look like an environment assignment, or use reserved markers such as %command% and --.
Use a flag followed by zero or more values:
-windowed
-width 1920
-resolution 1920 1080
Arguments are placed after %command%. The leading flag must begin with -, and its values are stored as explicit raw words. A value that also begins with - must be quoted so it is not confused with the next flag:
-offset '-1'
The complete launch-options document follows this restricted grammar:
[environment assignments] [prefix commands] %command% [flags and arguments]
CheatDeck 2 preserves untouched source and patches only the spans owned by an edit. Unsupported shell operators, redirects, comments, malformed quoting, mixed definitions, and ambiguous %command% markers make the document read-only rather than risking a partial or destructive edit.
When no Custom Options configuration exists, CheatDeck 2 initializes the following presets as ordinary custom options. They can be toggled, edited, or deleted and are not restored after deletion.
| Preset | Definition | Purpose |
|---|---|---|
| Lossless Scaling | ~/lsfg |
Enables LSFG-VK frame generation. Requires Lossless Scaling and the decky-lsfg-vk plugin. |
| OptiScaler Patch | ~/fgmod/fgmod |
Applies the OptiScaler patch. Requires the Decky-Framegen plugin. |
| OptiScaler Unpatch | ~/fgmod/fgmod-uninstaller.sh |
Removes the OptiScaler patch. Patch and unpatch are independent; CheatDeck 2 does not enforce mutual exclusion. |
- CheatDeck by SheffeyG - CheatDeck 2 is a fork of this project.
- decky-steamgriddb - The most powerful decky plugin, start point of CheatDeck.
- decky-autosuspend - Clean implementation and structure.
- SDH-CssLoader - Beautiful UI and rich customization.


