Steamworks Documentation
How to load and run games on Steam Deck

Overview

To help developers work with Steam Deck, we are providing the SteamOS Devkit Client Tool and the SteamOS Devkit Service. These tools allow you to load game builds directly from your development machine to your Steam Deck Dev-kit (or Linux machine), as well as perform other development activities.
Important:
Before uploading and testing your own title using the instructions below, we recommend installing and running another title from Steam that uses Steam Play(Proton) on the Steam Deck dev-kit. This will ensure Proton and its dependencies are installed.

Install Tools

Client Setup (Dev PC side)

  • The SteamOS Devkit Client runs on your development PC and allows developers to connect to a Steam Deck or Linux system to deploy / debug software.
  • Install SteamOS Devkit Client from Steam - here is a direct install link.
  • The tool can be started from the Steam Library, in the Software category. If you prefer to run it from the command line:
    • On Windows, run windows-client/devkit-gui.exe
    • On Linux, run python3.9 ./devkit-gui-cp39.pyz in the linux-client directory

Server Setup (Steam Deck side)

  • The SteamOS Devkit Service runs on the target Steam Deck / Linux system, and allows developers to connect from another PC and deploy / debug their software.
  • If you have a Steam Deck dev-kit, the SteamOS Devkit Service is pre-installed and running - no further action is needed.
  • If you do not have a Steam Deck and are testing from your own Linux system, you will need to install the SteamOS Devkit Service. Here is a direct install link to the Devkit Service tool. (This service is only supported on a PC running Manjaro as per the instructions here)

Connecting to Deck

On your Dev PC, launch the SteamOS Dev-kit Client. The dev-kit / Linux system needs to be on a local area network allowing Multicast DNS with the development host in order to be discovered and listed. This works over Wi-Fi or ethernet (via a USB-C hub).

  • Make sure your Steam Deck is connected to the network, and all updates have been applied (Settings > System)
  • On your Steam Deck: Go to Settings > System, and select Enable Developer Mode under the System Settings section. Then in Settings > Developer, select Pair new host under the Development Kit section
  • On your Dev PC: In the Devkit tool, look for your Linux system (EV2 devkits will show up as callistoXXX, the newer DV units as 'Valve Aerith'). Click the Register button to the right to register this devkit with the tool. (This sets up a ssh key on the device and grants full control.)
  • On your Steam Deck: Approve the pairing request from your PC.
  • If you don't see anything in the dev-kit tool UI, check to make sure your dev pc and dev-kit are on the same LAN. Depending on your environment, you may have to use the Add by IP field.

dev-kit_landing.png

In the screenshot above, callisto530 is a registered devkit.

Uploading a game build to Steam Deck

Click the Title Upload tab to configure a game for upload from your dev PC to the Steam Deck dev-kit. The screen looks something like this when filled out:

title-upload-20211111.png

This screenshot is an example of uploading a Windows build of a test game to the devkit.
  • Local Folder - The base directory that contains all the files necessary for your game to run.
  • Upload filtering - The upload process uses rsync over ssh, and is meant to be fast for repeated uploads with few content changes.

    There are three options to control what gets uploaded:

    Exclude only takes a space separated list of patterns to exclude from the upload.
    Include only will only upload files and directories matching the patterns, ignoring everything else.
    Rsync args allows advanced users to specify rsync command line arguments directly.

    For more details on the filtering patterns, see exclude patterns.

  • Clean upload - Enable this to delete any files on the devkit that are not present in the Local Folder once the exclude patterns are applied.
  • Start Command - Set this to game's binary executable (and any arguments you want to add).
  • Steam Play - Check this if you are uploading Windows binaries that need to be executed over Steam Play using Proton.
  • Steam Play debug - The debugger service checkbox allows you to step through your C++ build in Visual Studio.

If you have an appid for your game already and are using the Steamworks API, you'll want to include the steam_appid.txt file (which should just contain your appid) at the top root folder of your upload, as well as next to your executable. You can read more about that in the Steamworks API Initialization and Shutdown article.

Running uploaded game builds

On your Steam Deck devkit, navigate the library to find a new title named 'Devkit Game: YourGameName' and select it to run.
As mentioned at the top of the article, before uploading and testing your own title directly, we recommend installing another title from Steam that uses Steam Play (Proton) on the Steam Deck devkit and running it first. This will ensure Proton and all its dependencies are properly installed.

Steam Client Console

If your development requires you to run Steam client console commands, these are available through the CEF Console.

With your Devkit client tool running and connected to your Deck, on the Devkits tab, click the CEF Console button. This should open a browser tab which connects to the CEF client on your Steam Deck device. On that page, click SP to open a tab specific to the main Steam Deck client UI. This will include a CEF debug console on the right side of the page.

Once the CEF debug window opens, in the Console tab, enable Steam Console output by running the command EnableSteamConsole(). After running this command, output normally shown in the Steam client Console tab (when launched with -console) will show up here highlighted as SteamClient.

To execute console commands, wrap the entire command in double quotes in a call to SteamClient.Console.ExecCommand(). The example below shows two such calls, one to enable testing Dynamic Cloud Sync for app 480, and the subsequent one to disable it:

deck_cef_client_console_example.png