Repository navigation
Bannerlator 3.1.6-pre2
Pre-releaseBannerlator 3.1.6-pre2
Run Windows apps and games on Android — no PC and no root required.
3.1.6-pre2 adds Steam Input for SteamLite and a Wayland fix for the newest Wine layers. SteamLite games can now take your controller through Valve's own Steam Input layer, toggled per game. On the display side, Bannerlator's Wayland compositor now speaks xdg-shell version 3, which the new Proton-CachyOS 11.0-20261005 layer needs to open a window at all — so CachyOS now runs on Wayland as well as X11. Everything from 3.1.6-pre1 (Headless Steam, the server browser, Box64EC, the AnTuTu APK) is included.
- SteamLite Steam Input: a per-game toggle and layout pick in the SteamLite launch options. Needs the SteamLite v8 package (the app offers the update).
- Wayland xdg-shell v3: windows and pop-ups from Wine builds that require it now open; older layers are unaffected.
- Proton-CachyOS 11.0-20261005: a new layer on CachyOS's Proton-EM-based Wine, arm64ec and x86_64, in the catalog now.
✅ Nothing to set up. Update the app. When you next launch a SteamLite game the app offers SteamLite v8 — accept it to get Steam Input (games that don't use it behave exactly as before). The new CachyOS layer is in the catalog under Proton.
📘 Guides: OpenGL games now run 4 to 5 times faster · LSFG Native Made Simple
What's New — everything since 3.1.5
🆕 New in pre2
🎮 SteamLite: Steam Input
SteamLite runs Valve's Windows Steam client inside the container, and now it can hand your controller to the game the way Steam on PC does — through Steam Input, Valve's controller layer, with a layout applied.
- Where: the SteamLite launch options of a Steam game have a Steam Input toggle and a layout pick. Off by default.
- When to use it: games that only read controllers through Steam Input, or when you want Steam's remapping. Keep it off for games that already read a controller themselves — with it on, such a game can see two pads at once.
- Default layout: a plain gamepad layout, so the pad stays a pad. The gamepad + mouse layout (right stick moves the mouse, buttons press keys) is there for mouse-only games.
- Needs SteamLite v8 — the package now carries Valve's
SDL3.dlland four controller layouts next to the client, and the agent switches Steam Input on for the game before it starts. Without the toggle the agent behaves exactly like v7, so older app builds are unaffected by the update.
✅ Device-tested on the Pocket FIT with Left 4 Dead 2 online through SteamLite: the layout is applied, Steam confirms it, a full match played and exited cleanly.
🪟 Wayland: xdg-shell version 3
Every window on Wayland is created through the xdg-shell protocol. Bannerlator's compositor offered version 1 and only pretended to support pop-ups and their positioning; the Wayland driver in the newest Wine (the CachyOS 11.0-20261005 layer) refuses anything below version 3, so it could not create a single window — the desktop died and the game reported exited before rendering.
- The compositor now implements positioners (size, anchor, gravity, offset, the version-3 extras), real pop-up windows (placed against their parent, kept on screen, drawn above it, touchable) and
reposition, and advertises version 3. - Layers that ask for version 1 or 2 still get exactly that, so every existing layer behaves as before.
✅ Device-tested on the Pocket FIT: Insane 2 on Wayland with the new CachyOS layer (≈1,400 fps on the menu, controller working) and, as a regression check, on the v13 Proton 11.0-2 layer.
📦 New compatibility layer — Proton-CachyOS 11.0-20261005
A new, separate Proton-CachyOS layer next to the 20260703 one (both stay): the Wine of CachyOS's release cachyos-11.0-20261005-slr, which is now rebased on Proton-EM, with our full Android stack ported onto it. arm64ec and x86_64, versionCode 13, in the in-app catalog now. Release notes: bionic layers v13.
- Wayland needs this build (3.1.6-pre2 or newer) — on older app builds use X11 with this layer.
- Controller fix — the new upstream base made XInput skip the pads Bannerlator's Exclusive XInput hides from DirectInput, so the controller vanished entirely; that change is reverted in the layer.
- x86_64 start-up fix — the new base looks for the 64-bit Wine launcher in a folder the Android layers don't have, so nothing could start (failed to start wineboot); the layer keeps the working location.
✅ Device-tested on the Pocket FIT: arm64ec on X11 and Wayland, x86_64 (box64) on X11 — Insane 2 with the controller each time.
🧩 From 3.1.6-pre1
🎮 Headless Steam: the app's own Steam session hosts the game
SteamLite runs Valve's Windows Steam client inside the container — the real thing, VAC and all, at the cost of a Steam client under translation. Headless Steam takes the other road: the app already holds a signed-in Steam session for your library, so a small native host (Valve's own Android Steam library, driven by the app) signs in on the account, and the game talks to it through the Steam bridge the Proton 11 layers have carried since v9. No Steam window, nothing to install in the prefix, and every Steam call the game makes runs natively instead of through translation.
- Launch popup: Steam shortcuts offer Headless Steam next to SteamLite, Goldberg and Raw; the choice is remembered per game like the others.
- What works, device-proven: sign-in in about a second, the game attached to the session (Steam sees you in-game), cloud saves, stats and achievements, multiplayer servers — Counter-Strike: Source was the test case, including a live match on a community server.
- What it is not: a VAC session. Valve's Android library contains only VAC status plumbing, no scanner — that only exists in the Windows and x86 Linux clients. Secure servers may still let you in, but you are not being VAC-scanned; for that, keep using SteamLite.
- Relaunches: a quick relaunch no longer trips over the previous session's lingering port; when the port really is busy (another app's Steam client — DroidDeck's Linux Steam uses the same one), the launch now stops with a clear card instead of starting the game without Steam.
- Log Manager: a Headless Steam toggle (same place and ? button as SteamLite) writes a per-game
headless_steam.txtwith a PASS/FAIL checklist — sign-in, bridge, session, server browser — plus the host, bridge and engine logs, redacted like the SteamLite one.
🔎 Find Servers works — the server browser
Valve's Android Steam library has no working in-game server browser: the moment a Source game asks for the server list it trips over an object that was never created and hangs. Inside our host it accepts the request and returns nothing. So the v13 layers carry their own:
- the game asks the bridge; the bridge asks the app, which fetches the master list through Steam's Web API with a token from your session (five thousand servers in about a second);
- the bridge pings every server itself (the same query protocol the PC client uses) and feeds the game its callbacks on the game's own thread;
- a small x86-64 front inside the layer answers the game's hottest lookups without leaving the emulator — the Source server browser re-reads server details tens of thousands of times a frame while sorting, and each read used to be a crossing into native code. With the front, the list refreshes at 316 to 376 fps; before it, 0.
✅ Tested on the Pocket FIT with Counter-Strike: Source on Proton 11.0-2, 11.0-1 and GE 11.0-3 (v13): full lists, the three filter boxes, latency / location / anti-cheat filters, and joining a game.
📦 New compatibility layers — versionCode 13
All eight Proton 11 layers (Proton 11.0-2, 11.0-1, GE-Proton 11.0-3 / 5 / 6 / 7 / 7.1, Proton-CachyOS) are rebuilt at versionCode 13 with the server browser and its x86-64 front; the four x86_64 flavours are in the same release so the set stays together, but they have no Steam bridge (Headless Steam and the server browser do not apply to them) and are unchanged apart from the version number. The two Proton 10 layers stay at v12 — no Steam bridge there either. They install into a new coexisting -13 slot; a container on an older build of the same layer is offered Update layer → v13 with a revert snapshot. Release notes: bionic layers v13.
🧬 Box64EC — an experimental second x86-64 translator (unofficial)
arm64ec containers gain an Emulator (64-bit) picker (container settings, and per game under Advanced → Box64EC) that switches the x86-64 translator between FEXCore (unchanged default) and Box64EC. The old picker is now labelled Emulator (32-bit).
⚠️ Box64EC components are experimental and unofficial. They are built by The412Banner from the box64 project's work-in-progress ARM64EC target and airidosas252's pull request #4480, with our own hookup of the fast engine; they are not releases of the box64 project. Nothing installs by itself: the picker only appears once you install a Box64EC component from the catalog. Expect games that run slower or not at all; FEXCore remains the supported path.
📦 A fourth APK: AnTuTu
Every release now ships four builds of the same app under different package names — standard (com.winlator.banner), PuBG (com.tencent.ig), Ludashi (com.ludashi.benchmark) and, new, AnTuTu (com.antutu.ABenchMark). Take standard unless your device gives a specific package a performance mode; the in-app updater follows whichever one you installed.
🛠️ Fixes
- A malformed container folder (for example a leftover
xuser-directory) crashed the app on every launch; it is skipped with a log line instead. - Wayland HUD: a Vulkan game is no longer labelled "OpenGL"; the adapter's
icd.jsonis written without escaped slashes. - Headless Steam host: a
dlopenfailure path crashed instead of reporting the error.
⚠️ Carried over — still open
- SteamLite Steam Input: tested on Left 4 Dead 2; games that only speak Steam Input have not been run through it yet.
- xdg-shell v3: pop-ups take no input grab and never take keyboard focus; the "resize to fit" placement rule is not implemented (pop-ups slide or flip back on screen instead).
- Headless Steam: not VAC-protected (by construction); Proton 10 layers have no Steam bridge; voice chat untested; only Counter-Strike: Source has been run through a full online session so far.
- Server browser: LAN tab scans the common Source ports by broadcast only; the Friends tab is empty on this path.
- Box64EC: experimental — no performance work yet beyond the fast-engine hookup.
- Everything listed as open in 3.1.5 is unchanged: Cutscenes / Codecs (FFmpeg arm64ec only), X11 cursor items, save-sync device checks, Fast OpenGL's 32-bit-only setups, the Wayland items, and the Linux Steam client items from 3.1.3.
📦 Where to get Proton 9 (tap to expand)
The APK does not bundle Proton 9 — Wine installs from the in-app catalog on first run. The Linux Steam client does not use these layers at all: its games run through Valve's own ARM64 Proton.
Proton 9.0 arm64ec — not bundled, download it if you want it:
https://github.com/The412Banner/Nightlies/releases/download/Proton/wine/proton-9.0-arm64ec.wcp
66.7 MB · sha256 f8a99fed387f1b097009129dc49368c8f500927640a9d4c7a192d850b1b2068c
Install it via Containers → download icon → install the .wcp. It also appears in the in-app catalog. (Compiled as a wcp by Xnick417x.)
🙏 Credits (tap to expand)
The cutscene fixes in the v12 layers: the Media Foundation series by NelloKudo; the media-converter gate by GloriousEggroll; the original shared-texture driver (sharedgpures.sys) by Valve (Derek Lesho), rewritten here for Wine 11; the bionic prefix packs and build sysroot by GameNative; winedmo from Wine (Rémi Bernon), with Proton's PCM filter (© 2025 Conor McCarthy for CodeWeavers) replaced by our own. Full per-layer credits are in the v12 layer release.
The Codecs setting is modelled on Pipetto-crypto's winedmo backport for Proton 9 (winlator a81fae78): the pseudo-components in the Win Components list and the WINE_USE_DMO name. No code was copied; the Compose UI and plumbing are new.
Proton-CachyOS 11.0-20261005 is the CachyOS team's (wine-cachyos, rebased on Proton-EM) on Valve's Proton; our Android stack is ported on top. SteamLite Steam Input drives Valve's own controller layer; SDL3.dll and the four controller layouts in the package are Valve's, unmodified. The xdg-shell v3 compositor work is ours, following the wayland-protocols xdg-shell specification.
box64 is ptitSeb's; the GStreamer-wrapper fix is ours and submitted upstream as #4528. FEXCore is the FEX-Emu team's; the 2609-unix package is the catalog build with its unixlib pair.
XInput 2 raw mouse follows what GameNative and WinNative already do in their X servers, extended with touch and stylus raw motion. Colour cursors came from a Discord #bugs report of black-and-white cursors in Kingdom Come and the Gothic Remake — thank you to the reporter.
Everything credited in 3.1.4 still applies: Fast OpenGL (Mesa, Banners-Turnip, Wine's EGL route), the Wayland adapter (Pipetto-crypto's bionic Vulkan wrapper), winhandler.exe (Winlator by brunodev85), the Turnip fix (Mesa / Turnip by the Freedreno and Mesa teams), the Linux Steam client (Valve, DroidDeck, WinNative, Armada, Termux proot, Arch Linux ARM, FEX-Emu), ntsync (Joshua Tam / joshuatam, GameNative), the bundled Wayland drivers (Vauzi-17, the WinNative development team, StevenMXZ, whitebelyash), DXVK, VKD3D-Proton, Wine, Proton / GE-Proton, box64, SteamKit2 and Wayland.
Entirely app-side — no ImageFS reinstall. Install over 3.1.6-pre1 or any earlier 3.1.x; everything carries over. Then take the v13 layer updates from the catalog.
