How to Transfer Game Builds to a Steam Deck
This tutorial will teach you how you can push your game builds to your Steam Deck fast and automatically using Syncthing, a multiplatform file synchronization program. By Eric Van de Kerckhove.
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Contents
How to Transfer Game Builds to a Steam Deck
35 mins
Auto Start Syncthing
In this optional section, I’ll explain how to make it so Syncthing automatically starts when you boot your Steam Deck, even in Gaming mode. The application hardly uses any system resources, so the impact while gaming will not be noticeable unless you’re playing an online game while syncing a huge amount of files. You can disable the auto starting or temporarily stop Syncthing via the terminal at any time.
Feel free to skip to the next section if you don’t want Syncthing to be running in the background or don’t want to bother setting that up now.
To make Syncthing run after the system boots, it needs to be set up as a systemd service. Systemd is a popular Linux initialization system and service manager that provides system components for Linux operating systems like Ubuntu and SteamOS. It allows services to be set up using a systemd service file that contains information on what process to start. Systemd parses this file at startup and creates and supervises the process. In short, you need to tell systemd what to do by supplying a file with some information.
Luckily, Syncthing comes with a template systemd service file you can use. Open Dolphin and open the Syncthing folder. From there, open the etc/linux-systemd/user folder, inside of which is a single file named syncthing.service.
Double-click the file to open it in Kate (the KDE text editor) and find the ExecStart line in the [Service] section.
This is the command that systemd will execute at startup. Right now it points to /usr/bin/syncthing, but it needs to point to the syncthing executable in the Syncthing folder you created earlier. To do that, replace this line:
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
With this:
ExecStart=/home/deck/Syncthing/syncthing serve --no-browser --no-restart --logflags=0
Save the file by pressing the Save button at the top or press CTRL+S and close Kate.
To make systemd use this file, you need to copy it to the systemd user folder. The easiest way of doing this is via the terminal, so switch to Dolphin and make sure you’re still in this folder: /home/deck/Syncthing/etc/linux-systemd/user/. Next, right-click on an empty space in the folder and select Open Terminal Here to open a Konsole window.
To copy the syncthing.service file to its proper location, execute the following command:
cp syncthing.service ~/.config/systemd/user/syncthing.service
Verify that the file copied over successfully by running this command:
ls ~/.config/systemd/user/
The ls
commands lists the contents of a folder, which should now contain syncthing.service:
As a final step, enable the syncthing service by running this command:
systemctl --user enable syncthing.service
This in turn will return with this line:
Created symlink /home/deck/.config/systemd/user/default.target.wants/syncthing.service → /home/deck/.config/systemd/user/syncthing.service.
Congratulations, from now on Syncthing will start automatically whenever you boot your Steam Deck!
If you ever need to temporarily stop the service for some reason, you can do so with this command:
systemctl --user stop syncthing.service
If you ever want to disable the service, which prevents the automatic starting, use this command:
systemctl --user disable syncthing.service
Leave Syncthing running for now as you’ll need it further down.
PC Side Installation
Now that Syncthing is set up on your Steam Deck, switch over to your development machine. Just like on the Steam Deck, you’ll need to download the application and set it up.
Start off by opening a web browser and navigate to https://syncthing.net/downloads. Since your development machine can be running any operating system, here are my recommendations for what package to download depending on your OS:
- Windows: Download and install SyncTrayzor, this is a wrapper for Syncthing that includes a desktop interface and a tray icon. It comes with the needed dependencies, which makes the set-up a breeze. You can find the installation instructions here.
- macOS: Get syncthing-macos, a native macOS tray application bundle that wraps Syncthing. The instructions are detailed here.
- Linux: For Linux distributions, I recommend following the same instructions as for the Steam Deck I laid out above.
Connecting Devices
After downloading and installing your flavor of Syncthing, start it up and navigate to the web interface on http://127.0.0.1:8384. Delete any default folders like you did on the Steam Deck. Next, you’ll need to create a connection between your device and Steam Deck. To do that, make sure the Steam Deck is powered on and connected to the internet first and then click the Add Remote Device button at the bottom right on your development device.
In the Add Device window, click on nearby device id, below the “You can also select one of these nearby devices” text.
If you don’t see a nearby device, make sure Syncthing is running on your Steam Deck and that’s it’s connected to the same Wi-Fi network as your development device. You can also manually input the device ID by clicking Actions ▸ Show ID on the Steam Deck and either copying it over by hand or sending it to yourself via email for example.
Once you have a Device ID filled in, click the Save button.
After doing this, an attempt to create a connection to your Steam Deck is made. Look at the Syncthing web interface on your Steam Deck, a prompt at the top of the page should ask if you want to add a new device. Click the Add Device button to confirm this.
Next, you’ll be asked to rename the device. Fill in a different device name if you want and click Save.
Your dev device and the Steam Deck are now connected to each other! In the next section, you’ll do the final part of the Syncthing setup: configuring what folders should be synced.
Folder Setup
The way Syncthing works is by reading any changed files (and folders) in a directory and sending those over the network to connected devices that have access to that folder.
Start by creating a new folder somewhere on your development device. In my case, I’ve created a new folder named Steam_Deck_Sync at the root of my U: drive.
Next, open the folder and copy the path to your clipboard, U:\Steam_Deck_Sync in my case. Now open the Syncthing web interface and click the Add Folder button below the Folders section on the left.
This opens the Add Folder window. Give the folder a label in the Folder Label field and paste the path to the folder that’s in your clipboard in the Folder Path field. I chose Steam Deck Sync as the label and U:\Steam_Deck_Sync as the folder path.
Now open the Sharing tab to choose what device(s) get access to this folder via syncing. Check the box before the name of your Steam Deck here and click the Save button.
On the Steam Deck side, you’ll get another prompt in Syncthing, this time asking if you want to add the folder you just created.
Click the Add button to open the Add Folder window on your Steam Deck. All you need to set up here is the Folder Path, which points to a folder on your Steam Deck. You don’t have to create the folder first, as Syncthing will do this for you. I’ve changed my folder path to home/deck/Steam_Deck_Sync since I dislike spaces, especially on Linux. :] This will create a new folder named Steam_Deck_Sync in the home directory.
Click Save to create the folder and finish the setup. This new folder will now appear in the interface at the left, clicking it shows you more information about its status.
Now the folder is set up on both devices, I think it’s time for a quick test run! You can drop any file in the folder on your development device and it should show up on the Steam Deck side. You can copy the two sample builds I provided in the materials zip file, any of your own builds or any random file. I put the sample build folders in there.
After a few seconds, Syncthing will spring into action and start copying the files to the Steam Deck over the network. If you’re fast enough, you’ll be able to see this happening in the web interface as the folder information will change and the network rates will reflect the upload.
After the sync is done, you can take a look at the synced folder on your Steam Deck and you’ll see the same folders and files.
And there you have it, a two-way automatic sync between your devices that allows you to copy files with ease to your Steam Deck. By exporting builds from your favorite game engine to the synced folder, you can be testing changes in seconds as the sync will only upload changed files. All of that, without having to leave Gaming mode!
My preferred way of playtesting is adding the executable to Steam, switching to Gaming mode and test everything on the Steam Deck. If I need to push changes, I close the game on the Steam Deck, generate a new build over the previous one and start the game again. This allows for fast iteration without dropping a beat. If you’re in a team, you can even sync your new build across multiple devices at once after installing Syncthing on them. If you thought of another cool way to use Syncthing, be sure to share it in the discussion below.
If you already know your way around the Steam Deck and know how play games in Desktop mode and how to add Linux and Windows executables to Steam to play them in Gaming mode, you should be all set. To everyone else, stick around for a bit longer as I’ll show you how to test your builds.