Skip to content

Add Decky Launch Options to Plugin Store#971

Open
Wurielle wants to merge 11 commits intoSteamDeckHomebrew:mainfrom
Wurielle:main
Open

Add Decky Launch Options to Plugin Store#971
Wurielle wants to merge 11 commits intoSteamDeckHomebrew:mainfrom
Wurielle:main

Conversation

@Wurielle
Copy link

@Wurielle Wurielle commented Jan 26, 2026

Add Decky Launch Options to Plugin Store

Decky Launch Options is a streamlined way to manage launch options for games allowing the user to register launch options once and enable them either per game or for all games.

Decky Launch Options plugin screenshot

The user can:

  • Add multiple launch options through the plugin
  • Allow launch options to run for all games
  • Handle multiple behaviors (launch options for on and off states)
  • Toggle launch options on the game page quickly and easily

More screenshot:

Decky Launch Options plugin screenshot

Decky Launch Options plugin screenshot

Task Checklist

Developer

  • I am the original author or an authorized maintainer of this plugin.
  • I have abided by the licenses of the libraries I am utilizing, including attaching license notices where appropriate.

Plugin

  • I have verified that my plugin works properly on the Stable and Beta update channels of SteamOS.
  • I have verified my plugin is unique or provides more/alternative functionality to a plugin already on the store.

Backend

  • No: I am using a custom backend other than Python.
  • No: I am using a tool or software from a 3rd party FOSS project that does not have it's dependencies statically linked.
  • No: I am using a custom binary that has all of it's dependencies statically linked.

Community

  • I have tested and left feedback on two other pull requests for new or updating plugins.
  • I have commented links to my testing report in this PR.

Testing

  • Tested by a third party on SteamOS Stable or Beta update channel.

@Wurielle Wurielle requested a review from a team as a code owner January 26, 2026 22:41
@github-actions github-actions bot added the plugin-addition Adding a plugin to the Plugin Store label Jan 26, 2026
@github-actions
Copy link

Issues Found

  • Both testing boxes are present in your description. Please remove one of them per the Markdown comment above the testing section.

Next Steps

  1. If we found any issues above, please edit your pull request description to resolve them and leave a comment saying you've done so.
  2. For the quickest review, please see the Community section of the pull request template for how you can help other developers.
  3. Once your description is correct, a maintainer will review your pull request as soon as possible.

Thank you for your contribution! If you need any help, please reach out on our Discord server. ❤️

@Wurielle Wurielle changed the title feat: add decky-launch-options plugin Add Decky Launch Options to Plugin Store Jan 26, 2026
@Wurielle
Copy link
Author

Wurielle commented Jan 26, 2026

@MoYoez
Copy link

MoYoez commented Jan 29, 2026

Plugin Testing Report

Installed Plugins

  • Decky LSFG-VK 0.12.2
  • To Moon - 0.2.8
  • ProtonDB Badges - 1.2.0
  • Web Browser - 1.4.3
  • EmuDecky - 1.0.10
  • Css Loader - 2.1.2
  • SteamGridDB - 1.7.0
  • Animation Changer - 1.3.2
  • Bluetooth - 2.3.0
  • vibrantDeck - 2.0.1
  • AutoFlatpaks - 1.6.8
  • steamdeck-input-disabler - 1.0.2
  • Launch Options - 1.1.0

Specifications

  • SteamOS 3.7.19 (Stable)
  • Steam 1769025840 (Stable)
  • Decky 3.2.1 (Stable)

Issues

LGTM, did not found any issues for me.

Summary

By using the lsfg plugin, I can quickly add the games I need to the launch options and then try running them. I didn’t encounter any issues.

It’s a very convenient plugin!

@MoYoez MoYoez mentioned this pull request Jan 29, 2026
7 tasks
@beebls
Copy link
Contributor

beebls commented Jan 29, 2026

What's the reasoning behind needing _root? It's certainly not something that's out of the question, I'm more-so just curious if there is a way to achieve the creation of your run script without needing root, as a root-owned shell script being run when launching games is something that could be exploited.

@SheffeyG
Copy link
Contributor

It seems this plugin is reimplementing some features of CheatDeck. However, user launch options are often quite complex, such as native flatpak or appImage applications, environment variables, and parameters. The way Decky Launch Option works appears to be adding a wrapper directly on the outside? I wonder how compatible this approach is.

@Wurielle
Copy link
Author

Wurielle commented Jan 29, 2026

What's the reasoning behind needing _root? It's certainly not something that's out of the question, I'm more-so just curious if there is a way to achieve the creation of your run script without needing root, as a root-owned shell script being run when launching games is something that could be exploited.

Maybe I misunderstood reading the doc and thought _root didn't enable root and was just a placeholder and root was the correct value to use in order to enable it? In any case, I won't need root for this plugin so I'll remove it altogether to avoid any confusion.

It seems this plugin is reimplementing some features of CheatDeck. However, user launch options are often quite complex, such as native flatpak or appImage applications, environment variables, and parameters. The way Decky Launch Option works appears to be adding a wrapper directly on the outside? I wonder how compatible this approach is.

Decky Launch Option ignores apps outside of Steam apps/games currently as they're not registered inside the user config. That means it won't attempt to change the launch options for those. I believe it would work if I implemented it but I'm planning to look into it at a later date when I understand more how those type of launch options work.

As to the similarity with CheatDeck, I'm not familiar with it so I can't comment on it yet so to clarify: my implementation aims to concatenate multiple launch options without hassle and enable launch options per game or for all games. I also plan to allow support for other plugins to add their launch options to Decky Launch Options directly with a simple "Add to Decky Launch Options" button on their end. This aims to greatly improve the user experience for dealing with launch options, nothing more.

Edit: After reading the CheatDeck README I understand more your inquiry about launch options. Decky Launch Options works flawlessly with "Prefix Commands" for apps but I have not tested other kinds of launch options. I agree, support for all types of launch options needs to be implemented so I'll look into it as a future evolution and plan to support Non-Steam apps as well. 🙂

@Wurielle
Copy link
Author

Wurielle commented Feb 1, 2026

I have improved the plugin to support a wider range of launch option types and added an explanation on how they work on my README for potential users. I plan to add support for Non-Steam Games at a later date.

@beebls I have removed _root as I do not require it, thank you for pointing it out.

@SheffeyG After doing some testing with CheatDeck here's a more thorough comparison between the 2 plugins. Since only the launch options part is similar, this will be the focus of the explanation and not the cheat part offered by CheatDeck.

CheatDeck Decky Launch Options
Purpose Allow the use of cheats or trainers and manage launch options Improve the user experience for Steam's Launch Options field with an alternative interface
Expected experience The user opens the plugin settings from the application page then goes to the Custom tab. Here the user can add launch options of different types. Once launch options are added they are saved for future usage. The user can then toggle the provided launch options and click the save button which will apply the launch options to the application. The user opens the plugin settings from the application page or the plugin page. The user can add launch options for the on and off state respectively and can choose to enable the launch option for all applications. On the application page, the user can quickly and easily toggle launch options for the current application without having to save.
Supports multiple launch options types (commands, args, envs,...)
Automatically detects launch option types
Supports different launch options for different states
Launch options are persisted for multiple uses
Launch options can be applied to all applications automatically
Saves original launch options
Restores original launch options on uninstall
Supports Non-Steam applications
Provides a collection of launch options
How are launch options applied Through the SteamClient api Through the SteamClient api and a wrapper command

Although the functionality seem similar, the user experience is fairly different. My plugins aims to fix a specific UX problem with Steam's Launch Options feature by improving the user experience through an alternative interface. As a user, this is fastest and easiest implementation of Launch Options I can think off.

@beebls
Copy link
Contributor

beebls commented Feb 4, 2026

From my understanding of the code, you replace all game launch scripts to point to your own custom run script.

My only concern with this is that, if decky or your plugin fails to load, this script could get bricked and as such no games would launch.

Do you have any mechanisms in place to fix this, more specifically

  1. Does the script have a failsafe to still launch the game if plugin features fail
  2. Do you only overwrite launch options for the lifecycle of your plugin (eg: create the link on start and remove it on onDismount)

@Wurielle
Copy link
Author

Wurielle commented Feb 4, 2026

From my understanding of the code, you replace all game launch scripts to point to your own custom run script.

Correct, the original launch options are kept and still applied after the launch options in the settings get replaced. If something goes wrong and the frontend is unable to request the launch options, nothing happens:

https://github.com/Wurielle/decky-launch-options/blob/5f7645557ede57d7493d38cd0b44ac4cea171c52/src/query.ts#L53-L65

My only concern with this is that, if decky or your plugin fails to load, this script could get bricked and as such no games would launch.

Do you have any mechanisms in place to fix this, more specifically

  1. Does the script have a failsafe to still launch the game if plugin features fail
  2. Do you only overwrite launch options for the lifecycle of your plugin (eg: create the link on start and remove it on onDismount)

1. The run script only require static files and works without the plugin being loaded.

Here's the normal flow in a normal case:

  1. The python backend runs and creates the .dlo/run script which points to the run.py in the plugin directory
  2. The frontend adds ~/.dlo/run %command% when visiting an application page if applicable (see previous link)
  3. The user updates their preferences which updates ~/.dlo/settings.json with launch options and profiles

From there on, when a game is launched, %command% is passed to ~/.dlo/run which points to {plugin_dir}/run.py. run.py reads the settings and handles all the logic but does not require any link to the python backend.

In order to be 100% fool proof, I can:

  1. Apply launch options in the frontend if:
    1. the result for getting the original launch options is successful (no change)
    2. the ~/.dlo/run file exists (in case the python backend failed to create the file)
  2. Check inside ~/.dlo/run that the {plugin_dir}/run.py exists (in case the plugin folder doesn't exist)
  3. try/catch inside {plugin_dir}/run.py in case something goes wrong with reading the settings or applying launch options

2 The plugin does handle cleanup properly

Although I'm not sure if you mean plugin lifecycle or the flow of when the launch options are applied (in which case refer to the flow above).
If you mean plugin lifecycle then yes,

  • on _uninstall the python backend removes the ~/.dlo folder containing the run command, the settings and the logs.
  • onDismount the frontend sets the launch options for all games with their original launch options (hence why they're originally overwritten only when I'm sure I can set them back)

I'll try to apply the updates mentioned above, after that the plugin will be as foolproof as it can be. Even if all else fail, the user will be able to remove the plugin and change their launch options back. All the combinations of launch options I could think of were tested in tests.py. There isn't any other case I can think of that could cause a failure except the few points mentionned above.

@Wurielle
Copy link
Author

Wurielle commented Feb 7, 2026

I updated the plugin following my previous message so here's a summary of what I have changed:

  • In case the ~/.dlo/run script no longer exists
    • The frontend checks if the ~/.dlo/run script exist before setting the plugin's launch option or resets the launch options to the previous original launch options value or an empty value if all fails
  • In case the plugin dir no longer exists
    • The ~/.dlo/run script checks if the {plugin_dir}/run.py script exists otherwise it will execute the launch options provided by Steam
  • In case an error occurs when applying launch options
    • The {plugin_dir}/run.py will catch the error and execute the launch options provided by Steam
  • In case the user provides commands that do not exist
    • The {plugin_dir}/run.py will check that each command exists before being added to the list of executable commands or skip them otherwise
  • In case the plugin is uninstalled and an app's launch options still points to ~/.dlo/run (unsuccessful frontend cleanup)
    • on uninstall the python backend recreates a simple ~/.dlo/run script that will execute the launch options provided by Steam

At this point apps have a better chance to launch with Decky Launch Options than without haha 😅

In a realistic scenario, none of these should happen but if they do they are handled accordingly. The only possible failure is if the user deletes the ~/.dlo/run file manually and an app's launch options points to it AND the plugin is unintalled or failed to load in the frontend. However this goes for any application or mod that requires launch options to be fair.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin-addition Adding a plugin to the Plugin Store

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants