Linux Steam / Android

Explainer · September 2026

Valve's Linux Steam client now runs on an Android phone. No root.

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-client

The 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.


Start here: six words that do all the work

Skip this if you already know what Proton is.

Operating system
The software a device actually boots. Your phone runs Android. Your PC runs Windows. A Steam Deck runs Linux. Programs are built for one of them and normally will not run on another.
x86 and ARM
Two different machine languages. PC games are written in x86. Your phone's chip speaks ARM. Different words, not just a different accent — something has to translate.
Wine
Not an emulator. A re-implementation of Windows' own plumbing, so a Windows program's requests are answered by something that isn't Windows. It handles the operating system gap, not the chip gap.
Proton
Valve's packaged Wine, tuned for games, shipped through Steam. It is how a Steam Deck plays Windows games while running Linux.
Vulkan
The modern graphics language phones and PCs share. Games speak DirectX; something must convert it. Vulkan is the common ground that makes all of this possible at all.
Compositor
The thing that takes finished pictures from programs and puts them on the screen in the right order. Android has one. Linux needs one. We wrote one that lives inside the app.

Two roads to the same Windows game

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.

THE APP-SIDE ROAD Bannerlator / WinNative, as always THE LINUX ROAD new — Valve's client, our plumbing Your Windows game — an .exe, built for x86 The same .exe, installed by Steam itself Wine — ours built for Android's C library, as arm64ec Wine — Valve's, inside Proton ARM64 downloaded by Steam like any other depot FEX — ours x86 instructions → ARM instructions FEX — Valve's, inside Proton same job, their build, their bug fixes DXVK / VKD3D — ours DirectX → Vulkan DXVK / VKD3D — Valve's DirectX → Vulkan Turnip driver — ours (Android build) talks to the Adreno GPU Turnip driver — ours (Linux build) same GPU, rebuilt for the Linux side Our X11 server or Wayland compositor one game window, ours to place gamescope → our Wayland compositor Valve's game compositor, as our client Android hands the finished frame to your screen the game never knows which road it took

Windows plumbing we build Valve's own software, unmodified Our Android-side pieces

The same seven steps, different owners. On the right road we stopped building the Windows half — Valve's Proton does it — and kept only the two pieces that have to know about Android: the GPU driver and the compositor that puts frames on the panel.

Why the right road is worth the trouble

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.

A Linux system inside an app, with no root

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.

INSIDE THE FAKE ROOT — an ordinary Linux world, as far as the programs in it can tell Your Windows game (.exe, x86) — installed by Steam Proton ARM64 + FEX — Valve's, fetched by Steam as a normal download Steam for ARM Linux — Valve's client, fetched from Valve on first run gamescope + Xwayland — Valve's game compositor the same thing that runs a Steam Deck's game session all of the above lives in a 790 MB Linux system the app downloads once proot — builds that fake root without any root access watches every file request and rewrites the path; no kernel privileges involved The Android app — an ordinary sideloaded APK Wayland compositor PulseAudio on AAudio synthetic Xbox pad the three things a Linux program expects the system to provide
Nothing here is privileged. 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.

The walls, and what each one cost

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, and how a frame gets to your screen

"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.

The game Vulkan → Turnip → GPU gamescope Steam UI + game Our compositor in the app, on Vulkan Android SurfaceFlinger Panel frame buffer + fence surface Frame generation extra frames inserted here
What is ours here is the placement: the extra frames are inserted in our compositor, after gamescope, on the already-finished picture — which is why it works for any game with nothing changed inside the Linux system. Who wrote the engine doing the inserting is a separate question, answered directly below. Measured on a handheld: 30 → 61, 60 → 118 and 61 → 123 fps.

Who actually made the frame generation

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.

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.

Why a driver can't cross the line

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:

SlotWhich world it servesWhat goes in itOn the test device
GPU DriversAndroid apps and app-side Wine gamesAn Adrenotools zip (vulkan.adXXXX.so)Turnip 26.3.0-r4 · Vulkan 1.4.359
Wayland game driversGames under the Wayland display backendA libvulkan_freedreno*.so built for WaylandTurnip 26.3.0-7cda785 · Vulkan 1.4.362
Linux runtime driversThe Steam client and every game it launchesA “-Linux” Turnip zip, built against glibcTurnip 26.3.0-20260921 · Vulkan 1.4.363
Three builds of the same Mesa Turnip driver, for the same Adreno GPU, that cannot be swapped for one another.

Three ways to get it

Same runtime underneath. The difference is how much else comes with it.

AppWhat it isPick 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.
All three are sideloaded. The standalone app's runtime image is the same one Bannerlator installs, so a device with both can share one download.

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.

What actually works today

An honest ledger, not a feature list. Most of this has been proven on one or two devices.

ThingStateEvidence
Signing in, the store, installing, launchingProvenEnd to end on device; Proton ARM64 fetched by Steam itself
Windows games from the clientProvenHalf-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 compositorProven30 → 61 · 60 → 118 · 61 → 123 fps
Sound, and the microphoneProvenVoice confirmed in Steam's own voice tester while a game ran
Controllers, and on-screen controls without oneProvenRe-published as an Xbox 360 pad; Steam shows Xbox glyphs
Other Protons (GE-Proton, proton-cachyos)ProvenInstalled as catalog downloads and selected per game in Bannerlator
Linux desktop, browser, file managerProvenFirefox browsing live pages at 93 fps
Folding the phone mid-session; backgroundingProvenSession survives both; wake locks hold a download
The console emulators on the desktopUntestedThey build, publish and install — none has been run with a game
Starting Steam with no internet; soft keyboardUntestedBuilt, not yet exercised on device

What doesn't work, and why

Questions people are already asking

Do I need root?

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.

Is this an emulator?

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.

So will my whole Steam library just work?

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.

Is any of Valve's software being copied or cracked?

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.

Does this replace flashing ArmadaOS or Rocknix?

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.

Why is it not on the Play Store?

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.

My phone has a Mali GPU. Can I use it?

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.

Something didn't start. Where do I look?

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.