Recently (July 20th, 2026) I've finally released my Flutter and Flame game on Steam! It is a milestone for me as this was not my first published game, but it was the first one on that platform.
If your game is targeting only Desktop windows, Flutter already got you covered out of the box, and not much additional effort is needed, flutter build windows gets you covered!
But if you want to make your game run on the Steam Deck, Valve's popular handheld gaming device, the path might not be that clear, and that is what I hope to cover in this article!
The Steam Deck
The Steam Deck is a handheld computer gaming device from Valve, the big company behind Steam. It runs a Linux operating system and has the premise to enable PC gaming on the go. Even though it has a Linux system, it can play a huge amount of Windows only games as well through the use of Proton, a compatibility tool also provided and maintained by Valve that allows Windows games to run on Linux.
Flutter on the Steam Deck
So, as you might have already guessed, there are two ways of running your flutter game on the Steam Deck: either by running a Windows build via Proton or running a Linux build natively on the device.
The windows build approach
Using this approach, there isn't much to it. A simple flutter app, without many native plugins will be able to run smoothly via Proton, as you add plugins with native dependencies, you might run into issues if Proton doesn't support that dependency, in those cases you can always try changing the dependency or change to the Linux native approach.
The Linux native approach
Running your Flutter game natively on Steam isn't as simple. If you make your linux build, take its files and put them on the Steam Deck and try to run the game via the Steam Launcher, it will most likely not work.
This happens because Steam will try to run your game via the Steam Linux Runtime (SLR will be used moving forward to refer to the Steam Linux Runtime)!
SLR is a containerized environment made by Valve to ensure that games run consistently across different Linux distributions and also isolated from the host system, which ensures safety for the users.
SLR also contains a set of fixed version system dependencies, which ensures that the game will run consistently across different distributions.
That characteristic though is what will break your Flutter app when running in a SLR, the container doesn't have, or not in the expected version, dependencies that your Flutter build expects to have, and that is why we need to “patch” (I will explain more what patching your app means below) our build in order for it to run correctly!
There (at least at the moment of the writing) 4 versions of the SLR: Scout, Soldier, SLR 3.0 (Sniper) and SLR 4.0. Scout and Soldier are deprecated and are usually only used for legacy titles, developers moving forward should use SLR 3.0 or SLR 4.0.
The approach I choose for my game and why
My initial idea was to publish only a Windows build of my game, and let Steam Deck players play via Proton. That would, in theory, make my life simpler, as I would only need to push one binary to Steam and I would not need to handle more than one pipeline.
Sadly, when I first tested the game on my Steam Deck I noticed that the gamepad controls were not working. Everything else was working flawlessly, including sound, data management, etc, but controls were not, and the Steam Deck being in fact a gaming console, that was a big deal.
Upon investigating, I discovered that the Windows implementation of the gamepad plugin (LINK) I use uses a native API (GameInput) that is not well supported on Proton, and that was the reason for it not working. From researching, I found out that one alternative would be to give a new implementation of the gamepad plugin using the XInput API, which is an older API, but it is well supported by Proton.
So I came down to two choices: Make a new implementation of the gamepad plugin using XInput, or moving to the native linux approach!
And well, I was not super excited about making a new implementation for an older API like XInput, so I decided, hey, let's do this the “right way” and make it a Linux native build for the Steam Deck.
Patching my game for the SLR
As mentioned before, we need to patch our Flutter linux build in order for it to work on the SLR due to system dependencies presence and versions.
I ended up choosing the SLR 3.0 because SLR 4.0 doesn't have the GTK lib, which is the graphical interface toolkit used by Flutter, so using that runtime version means one less system dependency I need to bundle/patch!
It is important to note that Valve recommends new games to use the latest version (SLR 4.0), but given the fact that we need GTK I took the leap to choose SLR 3 since it already bundles that dependency, so this is a trade off to consider!
This is how I did the patching on a high level:
- The game is built in Docker, using a Debian 11 container, which matches SLR 3
- Bundle and fix the RUNPATH of all libraries needed that are not included, were older, or had a SONAME mismatch in that version of Debian, most of them are related to the flutter_soloud plugin, which requires many libs like libFLAC.so, libvorbis.so, etc to run.
All that is executed from a bash script, which I will not go into details because that can get very extensive. I will nonetheless share the scripts verbatim here, which I am sure people could easily adapt to their projects if needed.
Here you can find a gist with all the scripts and explanatory README on how it works and how it can be adapted to your project:
https://gist.github.com/erickzanardo/8f92a73bbdcc4af14dba0c3d667e997c
Conclusion
This was quite the learning for me, I always dreamed of having a game of mine running in a real life console, and this was definitely a first step for me to fulfill that dream!
For my next game I might try experimenting more with the Windows Build+Proton approach, and write an XInput gamepad plugin. I guess it is always good to have alternatives to choose from!
Thanks for reading and I hope this was useful or at least entertaining! And before I close up, I would love to share with you my game! If you like relaxing and cozy puzzle games, check it out on Steam and maybe play it on your desktop, or who knows, in your own Steam Deck!
Check Mine Cart Operator on Steam:
https://store.steampowered.com/app/3997420/Mine_Cart_Operator/


Top comments (1)
Wow, thank you very much for sharing!