Explainer · September 2026
Not Wine pretending to be Steam. Not a streaming app. Valve's own Steam client for ARM Linux — the same build a Steam Deck-class ARM device would run — executing on your phone as ordinary ARM code, signing in, downloading from the store, and launching Windows games through Valve's own Proton.
“Max and I have been working hard on bringing everyone a true Linux Steam client running on Android without root requirements. His work with Gamescope and mine using Wayland has unlocked a powerful future for us all. No longer need to flash or dual-boot ArmadaOS or Rocknix — it comes straight to you via Bannerlator, WinNative, or a standalone app.”
The412Banner, announcing it in #gamescope-linux-steam-clientThe first reply in that channel was, roughly: I still don't know what any of this means. Fair. This page is that answer, written for someone who has never used Linux and does not want to start now.
Skip this if you already know what Proton is.
This is the whole story in one picture. The rows are the same on both sides; what changes is who supplies each piece.
Bannerlator has always taken the left road: we build everything ourselves and run it as an Android app. The new work adds the right road: build a small Linux system instead, and let Valve's own software do its own job inside it.
Windows plumbing we build Valve's own software, unmodified Our Android-side pieces
On the left road, every Windows-side fix is ours to make. When a game needs a newer Wine, we build one. When Valve improves Proton, we port it. The game also has no idea Steam exists: to install and update games, Bannerlator implements Steam's own download protocol itself.
On the right road, the Steam client is the real thing. Your library, cloud saves, the store, downloads, updates, friends, Big Picture, controller mapping — that is Valve's code doing its normal work. When Valve ships a better Proton for ARM, Steam downloads it by itself, like on a Deck.
This is the part people assume is impossible, and the part Max's work cracked.
Android is Linux underneath — but a locked-down one. You cannot become the administrator, you cannot mount a second filesystem, and an app lives inside a sandbox designed to stop exactly this. So rather than fight the phone, the runtime works entirely inside what an ordinary app is already allowed to do.
proot is a normal program that watches the programs
inside it and rewrites their file paths on the fly, so a folder in the app's private storage convincingly
answers to /usr. The app supplies a screen, sound and a gamepad from the outside.Every one of these was a dead stop at some point, and the answers are the actual engineering in this project.
The wall
An app is not allowed to run programs out of its own storage — modern Android forbids it outright.
The answer
Declare the app against an older Android rulebook (targetSdk 28), where it still is. That is also why this can never be on the Play Store.
The wall
A Linux system expects to be the filesystem — /usr, /etc, /home. Mounting one needs root.
The answer
proot, which fakes it from the outside by rewriting paths. We build our own copy so nothing about it is a mystery when it breaks.
The wall
Steam normally wraps every game in its own sandbox first. That needs a kernel feature Android denies apps, and Steam silently gave up — no window, no error, nothing.
The answer
Re-register Valve's own Proton as a compatibility tool of our own, with that one requirement removed — every file symlinked, so Steam still updates the real thing.
The wall
Steam looks for gamepads the way a desktop does, through a system service that does not exist here. It retried hundreds of times a second until it crashed.
The answer
Max's stand-in: a plain socket that answers where that service would be. Your real controller is then re-published as a synthetic Xbox 360 pad, the one identity Steam always has a mapping for.
The wall
No sound server, and Linux audio cannot talk to Android audio.
The answer
A PulseAudio server run by the app on top of Android's own audio path — Winlator's original trick — plus DirectAudio, which now carries the microphone too. Steam voice chat works.
The wall
Linux graphics expect a GPU device node that Android's Adreno driver does not present.
The answer
A Turnip driver built to speak to Qualcomm's own interface instead. Games get the real GPU; only the Linux desktop's own compositing falls back to the CPU.
Why it took two people
Max (maxjivi05) got the Linux side standing up in WinNative: the proot
session, gamescope, the shims that answer what the sandbox refuses, and the controller work — including
the fixes that stopped Steam crashing a minute or two into every session.
The412Banner built the Android side it presents through: the Wayland compositor inside the app, the wiring that lets frame generation run on gamescope's finished output — plus Win-FG, the one frame-generation engine here written from scratch — the runtime packaging and downloads, the audio with microphone support, and the Bannerlator and standalone apps around it.
"Wayland" is the word doing the most work in the announcement, so here is what it means.
On Linux, programs do not draw straight to the screen. They hand finished pictures to a display server, which decides where each window goes. The old one is X11, from the 1980s; the modern replacement is Wayland, which is simpler and much better suited to one program handing over one finished frame at a time — exactly our situation.
So the app contains a Wayland display server of its own. Linux programs connect to it as if it were a normal desktop. It takes their frames, and hands them to Android's compositor, which puts them on the panel. Nothing else on the phone is involved.
We did not invent frame generation, and most of what runs here is not ours. It is worth being exact about this, because it is easy to read “frame generation in our compositor” as a bigger claim than it is.
Lossless.dll in the Steam library for you, and
the switches that turn it on mid-game.So: one engine ours, one engine someone else's that we made work in a place it had never run, and the pacing and placement in between. Nothing else about frame generation on this page is a claim of authorship.
Programs need a small library to talk to the operating system, and Android and Linux use different ones — Android's is called bionic, desktop Linux uses glibc. Same language, different dialect: a driver built for one cannot load in the other, even on the same phone, for the same GPU. That is why Bannerlator's Contents screen has three separate driver slots, and why putting a file in the wrong one is refused rather than quietly broken:
| Slot | Which world it serves | What goes in it | On the test device |
|---|---|---|---|
| GPU Drivers | Android apps and app-side Wine games | An Adrenotools zip (vulkan.adXXXX.so) | Turnip 26.3.0-r4 · Vulkan 1.4.359 |
| Wayland game drivers | Games under the Wayland display backend | A libvulkan_freedreno*.so built for Wayland | Turnip 26.3.0-7cda785 · Vulkan 1.4.362 |
| Linux runtime drivers | The Steam client and every game it launches | A “-Linux” Turnip zip, built against glibc | Turnip 26.3.0-20260921 · Vulkan 1.4.363 |
Same runtime underneath. The difference is how much else comes with it.
| App | What it is | Pick it if |
|---|---|---|
| Bannerlator | The full app: containers, app-side Wine, its own Steam, Epic, GOG and Amazon stores — with the Linux runtime as an optional download that leaves a permanent “Steam (Linux)” entry in your Games tab. | You already use it, or you want both roads on one device and per-game control over everything. |
| WinNative | Max's app, where the gamescope runtime was born and where its controller and session work is developed. | You follow that project, or you want the Linux work closest to its source. |
| The standalone app 0.1 | One screen, one button: install the runtime, press Play, Big Picture. Plus an optional Linux desktop — LXQt, Firefox and a shelf of console emulators — in the same session. | You only want Steam, or you want a Linux desktop on your phone and nothing else. |
Rough cost either way: about 790 MB for the Linux system, once, before any games. The desktop and emulator packages are roughly another 1.1 GB if you want them. You need an ARM64 Android 9+ device with an Adreno GPU — Mali, Xclipse and PowerVR are not supported by this path.
An honest ledger, not a feature list. Most of this has been proven on one or two devices.
| Thing | State | Evidence |
|---|---|---|
| Signing in, the store, installing, launching | Proven | End to end on device; Proton ARM64 fetched by Steam itself |
| Windows games from the client | Proven | Half-Life 2 79 fps · FlatOut 144 Hz · NFS Most Wanted 48 fps · GTA V Legacy 32 fps · Portal 2 · Brawlhalla · TF2 |
| Frame generation — LSFG 2× wired into our compositor | Proven | 30 → 61 · 60 → 118 · 61 → 123 fps |
| Sound, and the microphone | Proven | Voice confirmed in Steam's own voice tester while a game ran |
| Controllers, and on-screen controls without one | Proven | Re-published as an Xbox 360 pad; Steam shows Xbox glyphs |
| Other Protons (GE-Proton, proton-cachyos) | Proven | Installed as catalog downloads and selected per game in Bannerlator |
| Linux desktop, browser, file manager | Proven | Firefox browsing live pages at 93 fps |
| Folding the phone mid-session; backgrounding | Proven | Session survives both; wake locks hold a download |
| The console emulators on the desktop | Untested | They build, publish and install — none has been run with a game |
| Starting Steam with no internet; soft keyboard | Untested | Built, not yet exercised on device |
proot, and its tabs crash otherwise. Treat browsing there as less protected than
on a real desktop.No. That is the headline. Root only saves you a download, by letting you copy an existing runtime between apps instead of fetching it again.
Partly, and the distinction matters. The Steam client itself is not emulated — it is ARM code running on an ARM chip at full speed. Only the Windows games need translation, because they are x86 programs: Proton answers their Windows requests, FEX converts their x86 instructions, and DXVK converts their DirectX calls to Vulkan.
No — treat it as “some of it, sometimes, and you should expect to fiddle.” A modern phone is running a translated x86 game on a mobile GPU; heavy titles are heavy, anti-cheat is a wall, and version 0.1 means 0.1. The proven list above is the honest picture.
None of it. The Steam client is downloaded from Valve's own servers on your device the first time you press Play, and Proton arrives as an ordinary Steam download. Nothing of Valve's is redistributed, and none of this is affiliated with or endorsed by Valve.
For the Steam-on-a-handheld part, yes — that was the point. No unlocked bootloader, no wiped device, no dual boot. You install an APK.
It cannot be. Running programs out of the app's own storage requires declaring the app against an older Android rulebook, and Play requires a recent one. Sideloading is the only route, by design.
Not on this path yet. The compositor loads a Turnip driver, which is for Qualcomm Adreno. Support for other GPUs is a separate piece of work.
Each session writes its own log file to your Download folder — in the standalone app,
under SteamDeck/. That log is the first thing to read, and the first thing to attach when
you report a problem.