Launch Steam apps from RetroDECK, either as individual games or as emulators. This project is experimental. Designed for SteamOS-like distributions, it runs as a user-level systemd service that exposes an HTTP endpoint for launching Steam apps.
- Python 3
steamavailable onPATH- systemd user session
From this repository directory:
bash install.shCheck that the service is running:
systemctl --user status retrodeck-steamapprunner.servicebash uninstall.shThe service listens on localhost only, on port 8765 (configured in the systemd unit).
To change the port, edit Environment=PORT=8765 in ~/.config/systemd/user/retrodeck-steamapprunner.service, then:
systemctl --user daemon-reload
systemctl --user restart retrodeck-steamapprunner.service-
Make sure RetroDECK-SteamAppRunner is installed.
-
Add your emulator to Steam via Add a Game.
-
Right-click the Steam app, then go to Manage > Add Desktop Shortcut.
-
Open your RetroDECK custom systems file in an editor:
- By default:
/home/deck/retrodeck/ES-DE/custom_systems/es_systems.xml - Add an entry for the emulator system you want to use.
- Under
<command>, set the path to the Steam app's.desktopshortcut. - Example for Xenia Edge:
<system> <name>xbox360</name> <fullname>Microsoft Xbox 360</fullname> <path>%ROMPATH%/xbox360</path> <extension>. .desktop .iso .ISO .sh .xex .XEX .zar .ZAR</extension> <command label="Xenia Edge Steam Shortcut">curl -X POST "http://localhost:8765/launch-steam-app" -H "Content-Type: application/json" --data '{"shortcut":"/home/deck/Desktop/Xenia Edge Windows.desktop","rom_path":"%ROM%","close_rd":false}'</command> <platform>xbox360</platform> <theme>xbox360</theme> </system>
- By default:
-
Right-click the app in Steam again, then go to Properties > Launch Options:
- The ROM being launched is written to
/tmp/retrodeck-steamapprunner/rom_path. - Configure the Steam app to pass that ROM path to the emulator. This depends on the emulator's launch arguments, but in most cases:
- If the field is empty, enter:
$(cat /tmp/retrodeck-steamapprunner/rom_path) - If the field already has content, append
$(cat /tmp/retrodeck-steamapprunner/rom_path)with a space before it.
- If the field is empty, enter:
- The ROM being launched is written to
-
After adding ROMs to the new system in RetroDECK, you should be able to launch them through the Steam emulator you configured.
-
Right-click the Steam game, then go to Manage > Add Desktop Shortcut.
-
Go to your RetroDECK ROMs folder:
- By default:
/home/deck/retrodeck/roms/ - Create a new
steamfolder if it does not exist.
- By default:
-
Move the desktop shortcut into the
steamfolder. -
Open your RetroDECK custom systems file in an editor:
- By default:
/home/deck/retrodeck/ES-DE/custom_systems/es_systems.xml - Add the following system:
<system> <name>steam</name> <fullname>Valve Steam</fullname> <path>%ROMPATH%/steam</path> <extension>.desktop .sh</extension> <command label="Steam Shortcut">curl -X POST "http://localhost:8765/launch-steam-app" -H "Content-Type: application/json" --data '{"shortcut":"%ROM%","close_rd":false}'</command> <platform>steam</platform> <theme>steam</theme> </system>
- By default:
-
You should now be able to launch the Steam game from RetroDECK under the Steam system.
- With the setup above, RetroDECK stays running while the launched emulator or game is active.
- This can affect performance depending on the game.
- Set
close_rdtotrueto close RetroDECK before launching, which avoids that overhead.
POST http://localhost:8765/launch-steam-app
All parameters must be sent as a JSON request body. Query parameters are not allowed.
| Field | Required | Description |
|---|---|---|
shortcut |
yes | Path to the Steam .desktop shortcut to launch |
rom_path |
no | Path written to /tmp/retrodeck-steamapprunner/rom_path (cleared after 10 seconds) |
close_rd |
no | If true, closes RetroDECK (net.retrodeck.retrodeck flatpak) before launching |
The server reads the shortcut's Exec= line and extracts the Steam app ID from steam://rungameid/{id}.
~/.local/bin/retrodeck-steamapprunnerOr from the repo during development:
PORT=8765 python3 server.py