Skip to content

Bannerlator 3.1.7

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Oct 09:01
· 13 commits to main since this release

Bannerlator

Bannerlator 3.1.7

Run Windows apps and games on Android — no PC and no root required.

3.1.7 app-side update Xbox and PC Game Pass store Xbox Cloud Gaming Deck style BANNERIN controllers layers v15

3.1.7 adds an Xbox / PC Game Pass store with cloud streaming, finishes the Deck style, and replaces how controllers reach your games. Sign in with your Microsoft account, then download the PC games you own or have on Game Pass and play them with a licensed launch — or stream them, console-only games included, with optional frame generation. The console-style Deck interface now covers every screen and every setting. Controller input runs on BANNERIN, written from scratch for Bannerlator: sticks stop the moment you let go, XInput games can read the pad directly, and controller settings change while the game runs. Windows components can be removed again, recommendations look at what a game really uses, and the new v15 layers bring 144 Hz back to the newest Wine builds.

  • Xbox / PC Game Pass store: sign in, browse your library and Game Pass, download, add to your games and play — with cloud saves and your gamertag.
  • Xbox Cloud Gaming: stream Game Pass games, console-only ones too, with the store's sign-in; an optional native player adds frame generation.
  • Deck style, complete: every screen, every setting and the in-game menus, made for controllers; the XMB is back, full screen.
  • BANNERIN controllers: sticks stop when you let go, Direct XInput with rumble, controller settings in game, DirectInput vibration.
  • Windows components: a Deck page, Remove (puts back what an install changed), recommendations from what the game really uses, and Wine Mono installs again.
  • Steam: switch between saved accounts, extra library folders, sort by Steam rating, and Goldberg fixes — from community contributor MGamer404.

✅ Nothing to set up. Update the app. The Xbox store is a new tab next to Steam, GOG, Epic and Amazon. Switch to the Deck style in Settings › Appearance › Interface Style (Classic stays the default). Controllers move to BANNERIN automatically. Take the v15 layer updates from the catalog when a container offers them.

⬇️ Smaller update. On 3.1.7-pre4 the in-app updater downloads about 32 MB; on 3.1.6 about 136 MB (bigger because the containers' template changed for AIO Graphics Test 2.2.0 and the Xbox store brings its own runtime) — instead of the whole app (about 575 MB). Older versions, first installs and this page give the full APK.

What's New — everything since 3.1.6

🟩 Xbox / PC Game Pass store

A fifth store, next to Steam, GOG, Epic and Amazon. Games are downloaded and run on your device.

  • Sign in with your Microsoft account on Microsoft's own page. The app shows your gamertag, never your sign-in email, and keeps the account out of logs.
  • Library: the PC games you own plus PC Game Pass titles (with a Game Pass badge and filter), on art-shaped cards.
  • Downloads use several connections across all of Microsoft's download servers, split big files into chunks, show speed and time left, and resume after an app update. Library cards show Downloading N%.
  • Add to games with the usual container picker; the card gets an XBOX label.
  • Licensed launch: every launch checks your license with Microsoft and starts the game's own program — no Xbox app. The Xbox runtime the games talk to (sign-in, saves, store checks) is installed into the container for the session and put back afterwards.
  • What games need is set up for you: the Visual C++ runtime a game declares is installed before its first launch — in arm64ec containers also Microsoft's ARM64 Visual C++ 2015–2022 runtime when a game asks for it (Valor Mortis); the Windows Runtime classes Xbox sign-in needs are registered; Proton 10 containers get the sign-in pieces they lack.
  • Saves: a game's saves stay in the container, the Save Manager backs them up on exit, and cloud saves sync while you play and when you leave the game — from its own Quit or from the side menu (switch in the Xbox tab's settings, off by default).
  • Games that ship Microsoft's own Xbox runtime (Cyberpunk 2077) use the app's instead, which works without Windows' Gaming Services. A per-game switch, Use the app's Xbox runtime (on by default), appears only for those games.

✅ Device-tested on the Pocket FIT: sign-in and gamertag; library (26 owned + 723 Game Pass, 437 with a PC version); owned and Game Pass downloads incl. resume after an app update; A Game About Digging A Hole (78 fps), BALL x PIT (225 fps, cloud saves uploaded on both ways of quitting), Brotato (427 fps) and High On Life (title screen, 171 fps) run; Cyberpunk 2077 reaches its main menu (~100 fps, D3D12); Valor Mortis gets its ARM64 runtime and reaches its shader-compilation screen.

⏳ First launch of a game with cloud saves can sit on its loading screen for a long while — the game is downloading your saves (Cyberpunk 2077: about 6 minutes here, others report 20–30). Leave the game in front: Android pauses a game in the background. Later launches are quick.

☁️ Xbox Cloud Gaming

Play Game Pass games streamed from Microsoft's servers instead of downloading them — including console games that have no PC version.

  • In the Xbox library: every game you can stream has a Cloud badge, console-only games say Cloud only, and a Cloud filter shows just those. A game page offers Stream next to Install (or on its own for a cloud-only game).
  • One sign-in: streams use the store's Microsoft sign-in. Nothing to sign in to again, and the streaming tokens stay inside the app.
  • Bannerlator's own player runs the stream with your controller (rumble included). Guide once opens the Xbox menu; twice (or held) opens the player's own menu.
  • Player settings (Xbox tab › Profile › Cloud gaming settings, and in the player's menu): resolution (phone, PC or TV profile — the PC profile gave 2560×1440 on the Pocket FIT), server region, game language, video quality, a bitrate limit and Stop quality drops; picture effects (brightness, contrast, gamma, saturation, sharpening, deband, FXAA, CRT, NTSC, Toon) that share their profiles with the Wine games' screen effects; a performance overlay, volume and rumble. Settings that only apply when a stream starts offer Restart the stream with these settings.
  • In Games before you install: a streamable Xbox game can be added to Games and streamed from there. Download later completes the same entry, which then launches the installed game. Xbox shortcuts can launch the installed game (Raw) or Stream it.
  • Microsoft's own web player (xbox.com/play) is still there, behind the cloud button in the Xbox store's header (or its menu). It needs its own Microsoft sign-in.

Native player with frame generation (experimental, opt-in)

Cloud gaming settings › Player engine › Native (frame gen) (Android 10 and newer) plays the stream with Google's WebRTC library and Bannerlator's own Vulkan compositor instead of a web page, so frame generation can add frames to the 60 fps stream.

  • Frame generation: Win-FG 2×, or LSFG 2× / 3× / 4× with the Lossless.dll you imported in Settings (the same one Wine games use). A frame-rate target (the screen's rate, 30–165 fps, or any value with a slider) sets what you see.
  • Low latency switches: instant controller input (each press sent at once instead of every 16 ms), a small network buffer, the video chip's low-latency decoder mode, and a zero-copy picture (frames go straight from the video chip to the screen, used while frame generation is off). Zero-copy and frame generation switch live, mid-stream.
  • Leaving the player: a short trip to another app keeps the stream. After 45 seconds away, the session is closed cleanly and the player offers to restart it when you come back, instead of showing a dead stream.
  • The web engine stays the default, and the native player falls back to it if it can't start. Picture effects and the overlay levels apply to the web engine.

✅ Device-tested on the Pocket FIT: BALL x PIT and SpeedRunners 2 streamed in our player with the controller (SpeedRunners 2 then downloaded from the same Games entry and launched installed); GRID Legends in Microsoft's web player. Native player: 2560×1440 at 60 fps, Win-FG and LSFG 2× 59 → 119 fps, zero-copy picture delay about 17 ms, frame generation switched Off / Win-FG / LSFG in any order mid-stream without a crash.

🎮 The full Deck style

The Deck style is a console-style interface, made to be driven with a controller. It existed as a preview; 3.1.7 makes it complete.

  • Landscape: main tabs down the left side, a slim title line and a button-hint bar (L1/R1 tabs, A select, B back, X options, Y search). Android's navigation bar stays hidden, also behind pop-ups and sheets. Portrait: a phone layout with tabs along the bottom.
  • Home with a hero banner for the game you played last, shelves and library views; game pages with play time, launches, storage and the full game menu.
  • Settings editor for every container, every game and the defaults for new containers: Simple, Advanced and Expert levels, search, an Inherits from chain (All containers › container › this game), an Unsaved-changes bar and per-row reset. Every setting is edited in place — DXVK/VKD3D, the DX wrapper, the X11 driver, Wayland (incl. Mali PanVK), drives, audio, ReShade, env vars, the Linux runtime and the rest; nothing opens a Classic screen any more. The Steam (Linux) client has its own page and never shows Wine-only options.
  • In-game menus: a game menu (Back, or a four-finger tap) and a quick menu (the Menu button), every page driven with the controller.
  • Fits every screen: the console layout works at the stock and large display sizes, draws 20% smaller than Classic and keeps clear of a camera hole.
  • The XMB is back as a Shelf library view, full screen, with a game's settings in its own columns.
  • Add games, game details, drive C and Change exe open over Deck instead of Classic's Games screen. First-run setup appears only on a fresh install.

🕹️ BANNERIN — new controller input

The way the app hands controller input to Wine has been replaced with BANNERIN, written from scratch in Rust for Bannerlator.

  • Sticks stop when you let go. Stick updates follow the game's own frame rate (at most 60 a second by default), so a game that reads input slowly never falls behind. Buttons are never delayed.
  • Idle controllers no longer wake the CPU, and games list only the controllers you actually have (before, four were always shown).
  • Direct XInput: XInput games read the controller straight from BANNERIN — 32-bit, 64-bit and ARM64X — with rumble on Both motors or a Single one (the default on the AYANEO Pocket FIT). On for new containers; existing containers keep their setting.
  • Controller settings in game (Controls › Pad): controller type (Generic, Xbox 360 / One / Series, a classic DirectInput pad, and experimentally DualShock 4, DualSense, Switch Pro, Joy-Con pair, Steam Deck), XInput source, DirectInput visibility and stick updates — without restarting the game. Saved per game or per container.
  • DirectInput vibration: DirectInput games can now vibrate the controller (constant force, ramp and the periodic effects, mixed into the two motors; steady forces fade after about 2 seconds). On by default.
  • A game's own XInput DLL (Dark Souls Remastered and others) is handled automatically.
  • Controller input log: Log Manager › Controller input writes a pass/fail checklist per player (controller.txt) to send when a game's controls don't work. Off by default.
🔍 Old system vs BANNERIN (tap to expand)
Old system BANNERIN
Fast stick spin, then let go kept moving for a few seconds stops at once
Button presses instant instant (never delayed)
Route for XInput games always through Wine Direct (new containers) or Wine — your choice
Change controller settings while playing no (restart needed) yes — Controls › Pad in the in-game menu
Controller type games see Generic only Generic, Xbox 360 / One / Series, PlayStation, Switch, Steam Deck…
Phantom extra controllers games saw 4 controllers only the real ones
Vibration in XInput games yes yes, plus a Single motor option
Vibration in DirectInput games no yes (on by default)
Idle controller woke the CPU constantly sleeps (saves battery)

🧩 Windows components

  • A Windows components page in Deck for a game, a container or the defaults: Recommended for this game, Optional, every component with search, and Wine's or Microsoft's DLLs for Direct3D, DirectSound, XAudio and the rest.
  • Remove: every install now records what it changed — files placed, originals replaced, folders and registry values. Remove puts the originals back and deletes only what the component added. Components installed before 3.1.7 can be removed when they have a Windows Installer product; otherwise Reinstall once to make them removable.
  • Smarter recommendations, strongest evidence first: what the game's store lists (Steam, GOG, Epic, Amazon), the game's Steam install script, then the DLLs its exe actually loads. Installers nothing confirms move to a folded Also in the game's folder group. DiRT Showdown went from eight suggestions to the DirectX pieces and OpenAL it really uses.
  • Wine Mono installs again: every Mono entry failed with the package installs nothing here. They now install without opening the container, including Mono's Windows support package (the .NET folders and registry entries .NET programs look for). mono-10.4.1 now really is Wine Mono 10.4.1 (it downloaded 10.1.0 before), and installing a Mono over an older one clears the old version's leftover files — Remove puts them back.
  • ARM64 Visual C++ 2015–2022 is a new catalog component (by MGamer404), used by the Xbox store for arm64ec containers.

✅ Device-tested on the Pocket FIT: Wine Mono 10.4.1 installed into a container that had 10.1.0 — all 2,949 files and the registry in place, the two leftover files of 10.1.0 removed on a reinstall, no crash. A .NET program has not been run on it yet.

🚂 Steam

  • Switch between saved Steam accounts without signing in again, by profile name (#615).
  • Extra library folders: install Steam games into additional folders in the normal Steam layout; games imported from another client keep that client's files on uninstall (#616).
  • Search and sort your Steam library by Steam rating (#617).
  • Goldberg: no more black screens, errors are shown, and switching back to real Steam works (#613). Steam Cloud sync during Goldberg launches is a setting, on by default (#614).
  • Headless Steam accepts Valve's Steam build 1791918634, checks itself before use, and reads the client's zip correctly.

💾 Save backups that include emulator saves

Many Steam emulators keep saves outside your user folder, so backups never had them. Container backups now also take ProgramData/Steam/<name>/<app id>, Users/Public/Documents/Steam/…, OnlineFix and EMPRESS folders; a game's backups (incl. the automatic one after a session) take that game's emulator folders, found by its Steam app id. Restore puts them back.

📦 New compatibility layers — versionCode 15

Six layers are rebuilt at versionCode 15 and are in the catalog: Proton 10.0-4, GE-Proton 10.0-34, Proton 11.0-1, Proton 11.0-2, GE-Proton 11.0-9 and, new, DroidDeck-Proton 11.0-11.1, which replaces 11.0-9.1 (x86_64 builds of 11.0-2, GE 11.0-9 and DroidDeck 11.0-11.1 too). Release notes: bionic layers v15.

  • FEX's unixlib loads again on GE-Proton 11.0-9 and DroidDeck-Proton (the drawer showed N/A).
  • Windows Runtime classes in both halves of the prefix, so 64-bit games find the newer ones (Xbox sign-in among them).
  • Fixes from GameNative: the full resolution list in virtual-desktop mode, .NET / MonoMod mods no longer crashing on arm64ec, memory-layout and crypt32 fixes, and more.
  • They install into a new -15 slot next to the old ones; a container on an older build of the same layer is offered Update layer → v15 with a revert snapshot.

Two app changes go with them:

  • 144 Hz on GE-Proton 11.0-9 and DroidDeck-Proton: Valve's newer Wine reads the app's refresh-rate unlock the other way round, which capped these layers at 60 Hz. 3.1.7 recognises the newer Wine and writes the setting its way.
  • DroidDeck-Proton is one line: a container on DroidDeck-Proton 11.0-9.1 is now offered Update layer → 11.0-11.1 (the updater only matched identical version names before).

✅ Device-tested on the Pocket FIT: DroidDeck-Proton 11.0-11.1 arm64ec — FEX's unixlib loaded, BALL x PIT runs, and a container updated in place from 11.0-9.1 kept its saves and ran DiRT Showdown at 143.7 fps on the 144 Hz screen. The other five layers are built from the same sources but were not launched on the device.

🌊 Wayland

  • The bundled Wayland adapter is the default whenever the container's graphics driver can carry it. The driver cog becomes adapter settings: a profile (Auto, Smooth, Fast, Compatibility) plus Advanced switches for present mode, asynchronous copy, zero-copy, render fences, UBWC, DRM modifiers, the KGSL timing fix and Subgroups, each explained in a line.
  • Smoother frames under GPU load: the compositor's copy path no longer waits for the GPU on its only thread (34–86 ms stalls measured on an Adreno 6xx, 3–12 ms on the Pocket FIT), and zero-copy frames carry the game's own render fence, so they no longer reach the screen half drawn on older Adreno kernels.
  • Native Vulkan games: subgroup support is passed through on Mesa drivers and BGRA formats are offered to native Vulkan programs — DOOM Eternal no longer quits on start or shows a black screen with zero-copy.
  • No clipboard notice: Wayland games read your phone's clipboard only when you paste inside the game.

🔊 DirectAudio

  • Support is detected from the layer's files instead of a fixed list, so new layers that ship the driver are no longer greyed out.
  • Driver 1.4.0 bundled; at launch the newest build wins — a layer's own newer driver is kept, an older one is upgraded.

✅ Device-tested on the Pocket FIT: BALL x PIT on Proton 11.0-9.1 with DirectAudio, the layer's driver upgraded 1.3.2 → 1.4.0.

🈶 Chinese, Japanese and Korean text

Games that use a Chinese, Japanese or Korean code page (GBK, Shift-JIS…) showed garbled text: Android always answers C.UTF-8 when Wine asks for the language, so Wine fell back to English and code page 1252. Bannerlator now hands Wine the language from the LC_ALL setting of the container (or the game) — for example zh_CN.UTF-8. LOCALE_FIX_DISABLE=1 in the env vars turns it off.

🧪 Not yet tested with a game. The fix itself was checked on the device (C.UTF-8 → zh_CN.UTF-8); please tell us how your CJK games look.

📂 Open with → Bannerlator

Long-press a Windows .exe in any file manager and choose Open with › Bannerlator: pick the container, then Play from library (when the container already has the game), Add to library and run, or Run once.

⬇️ Small updates

3.1.6 introduced small updates; 3.1.7 is the first stable release that uses them. On 3.1.6 or a 3.1.7 test build the in-app updater downloads a patch instead of the whole app, rebuilds the new app from the installed one, checks it is an exact copy of the release and installs it as a normal update. If anything goes wrong it falls back to the full download.

🛠️ Fixes

  • Smoother Games screen and side menu: store art was saved and loaded at full size (Xbox posters are 1440×2160), which overflowed Android's image cache, so the grid and the side menu stuttered (73 ms frames measured). Covers and tile pictures are now kept at most 1200 px on their long side. Measured on the Pocket FIT: 0 late frames.
  • Xbox games crashed at start (Cyberpunk 2077's crash reporter closed it at once): the ARM64X build of BANNERIN's XInput DLL ran its ARM-only start-up code as PC code on every thread start. It now has none.
  • On-screen controller: it takes its player slot before Wine starts, so games that look for controllers only at startup (Ender Lilies, Dark Souls III, Ninja Gaiden Sigma, Toy Story 2) see it.
  • DirectInput "visible" writes no registry entry again, as the old Exclusive Input off did — Watch Dogs 2's controls work again.
  • winhandler.exe / wfm.exe are put back whenever a container's copy differs from the app's, so the Toy Story 2 black-screen fix can't be undone by a container update.
  • Unsaved edits: the container editor and a game's settings ask Save / Discard / Keep editing instead of dropping your changes on Back.
  • Frame generation: the interpolation-model list offers Win-FG's two real models (optical flow, bidirectional) instead of five entries.
  • Win-FG could crash when it was switched off and on again in the same session; fixed (found in the cloud player, the same code serves Wine games).
  • Settings: the MIDI SoundFont choice is saved and used for new containers. The VEGAS stock-config download sheet now opens.
  • Saving DirectAudio's fine-tune no longer switches the DirectAudio microphone off.
  • Classic, Linux client: the Steam (Linux) tile and its in-game drawer no longer offer Wine-only actions.
  • The side menu closes with Back and a tap beside it on every screen.
  • New containers get AIO Graphics Test 2.2.0 and a Cursor Test in drive C.

⚠️ Carried over — still open

  • Xbox: Forza Horizon 5 does not start (its anti-tamper closes the game after the splash). The download notification updates too often (Android drops some updates). Some games need a long first launch while cloud saves download (see above). Valor Mortis was not played past its shader compilation.
  • Xbox Cloud Gaming: touch controls have not been tried; the native player is experimental. The Win-FG fix has not been re-tested in a Wine game.
  • Steam (MGamer404's changes): switching between two saved accounts and a Goldberg Cold Client shortcut have not been device-tested yet.
  • Download Manager: uninstalling a Steam game from its game page, or moving it, leaves its row in the library list until the list refreshes.
  • Logs: Epic, GOG and Amazon user names are hidden by pattern only (the Steam and Xbox stores register theirs).
  • Chinese / Japanese / Korean text: not yet tested with a game (see above).
  • Wine Mono: a .NET program has not been run on a Mono installed this way yet. Mono's setup steps that need its own code (Wine's placeholder .NET files) can't run outside the container.
  • v15 layers: only DroidDeck-Proton 11.0-11.1 was launched on the device.
  • Deck style: broadly reworked — please report anything that looks or navigates wrong, with a screenshot.
  • BANNERIN: if a controller misbehaves in a game, please report it with the game and the controller type. On Wine 9.5 and other older Wine builds, Game Controllers' DInput tab can't play effects (that Wine's control panel; games are not affected).
  • Windows components: Steam games you added yourself but don't own can't be looked up on Steam yet; GOG and Epic games installed before 3.1.7 have no saved dependency list.
  • Everything listed as open in 3.1.6 is unchanged.
📦 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.)

📜 Every change since 3.1.6 — 165 merged, oldest first
  • Deck UI: bundle Sora and Nunito Sans fonts (OFL 1.1) · 0320a29b
  • Deck UI phase 1: console-style shell behind Appearance > Interface style · a8a412a2
  • Deck UI: never restore state when switching to the Home tab · a2ca7907
  • Container editor: fix ENVIROMENT tab typo (ENVIRONMENT, short label ENV) · 4d515795
  • Container editor: render the VEGAS stock-config download sheet (was never composed) · 635bdaf5
  • Container editor: drop the unreachable lsfg-vk Performance mode / Auto-enable toggles · 00a0aca1
  • Frame gen: interpolation model offers Win-FG's two real models · 1dcf4b46
  • Settings: save the MIDI SoundFont choice and use it for new containers · 81016d66
  • Container and per-game editors: ask before throwing away unsaved edits · 6fd35723
  • In-game: Select + Start on a controller toggles the side menu, B closes it · 7a7573aa
  • Game page, search, hubs, onboarding — deck/pages · 49b1459f
  • Deck in-game quick menu and game menu — deck/ingame · 262964fd
  • Deck two-pane settings editor — deck/settings · cf8d0d61
  • Deck: L1/R1 always switch menus with focus on the top bar; Down enters the page · 204551cd
  • Deck: analog L2/R2 switch a page's tabs; Down goes past the tab strip · 8428734b
  • README: Linux Steam section and version row match the 3.1.3 stable; note the 3.1.4-pre1 adapter · ce2e38c4
  • Deck style: in-game is the Classic side menu · 98659808
  • Deck style: settings are the Classic screens · f77e5961
  • Deck: game menus match Classic; Android games on Home and the game page · 51743dcf
  • Deck style: draw everything 15% smaller · 705f2ae8
  • Deck game page: name the Android flag isAndroid so it never shadows the android package · 1e09d58f
  • Deck style: back to the original size · 6c16e8b4
  • Deck landscape: side rails instead of the top bar · 0b7562b1
  • Contents: "Set as default…" for installed drivers and components · a1fe75b8
  • Deck: bring back the Deck settings editor · 0b9191db
  • Deck home: scroll back to the top when the hero's buttons take focus · 59548700
  • Deck game page: art banner in portrait, Linux entry without Wine details · f7a8550b
  • Deck settings: keep the Wine, Linux and Android worlds apart · b96c6688
  • Deck settings: bring the game and container rows up to date · 0bd6b581
  • Deck settings: bring the app settings up to date · ed14f5ca
  • Deck: show the first-run setup only on new installs · 5e3c46b8
  • Deck home: scroll back to the top after the hero button's own focus scroll · 58e1b741
  • Deck settings: find the Linux Steam client and Android games in their own homes · 55d01229
  • Deck settings: neutral screen-size hint, shared by Wine games and the Linux client · cc1647f8
  • Deck style: bring back the in-game quick menu and game menu, gated per session · 7ce3c82e
  • Deck in-game: no Wine runtime card in Linux sessions, readable helper lines on hosted cards · fe6137b0
  • Deck in-game: the controller test reads the sticks while a Deck panel is open behind it · c36b0071
  • Deck: dialogs and sheets keep the landscape navigation bar hidden · e33fe36a
  • Deck: the side rail fits short landscape screens; bigger legend and L1/R1 tap targets · 6dd1ad87
  • Deck: landscape keeps the console layout down to 560dp wide · e54c1d18
  • Deck: 20% smaller overall, no empty strip at the camera hole, narrower game menu · fdc247fb
  • Deck: dialogs and sheets are drawn at the Deck size too · 27428471
  • Deck: hero buttons and the game page's side menu fit large display sizes · 0c57b413
  • Deck: About and all-files dialogs take the Deck size · ce4f4ada
  • Deck in-game: every page of both panels can be driven with the pad · f08501ec
  • Deck: a Windows components page for games and containers · 54214553
  • Components: remove an installed component and revert what it changed · 45c29ee4
  • Components: recommend from evidence, per source, like DroidDeck · 572e5844
  • Release 3.1.7-pre1: versionCode 99, notes and README · 7ea67dbb
  • Deck: DXVK / VKD3D / VEGAS / WineD3D and X11 driver settings as Deck rows · 3d18f486
  • Deck: every setting native, game actions in place, XMB view · 94c1a3fb
  • Deck: no Classic editor left; env vars and the Linux runtime native · c9756caf
  • Deck: the XMB view is full screen · 5e2e36b7
  • Deck XMB: a game's Settings opens the XMB's own settings columns · 9d38926e
  • Open with Bannerlator: run a Windows .exe from any file manager · 8a2acb84
  • Wayland clipboard read only on paste; XMB game row just above the middle, lighter backdrop blur · 193b6efd
  • Deck XMB: the game row sits three quarters up the screen in landscape · aacb30e4
  • Deck XMB: larger top line (hints, position, clock) in landscape · b388668d
  • Release 3.1.7-pre2: versionCode 100, notes and README · 22fcc6ab
  • Mali-report 2026-10-14T13-54-58-aefd9d: log wine_debug.log · a0ee6b10
  • Mali-report 2026-10-14T13-54-58-aefd9d: log BREAKTHROUGH_splash_novulkan_confirm_1032.png · 30cd5ae8
  • Mali-report 2026-10-14T13-54-58-aefd9d: log WIN4_minegraph_menu_1243.png · 933796f9
  • Mali-report 2026-10-14T13-54-58-aefd9d: log WIN3_INGAME_intro_dialogue_1214.png · e1cd115b
  • Mali-report 2026-10-14T13-54-58-aefd9d: data · 9a1aeb46
  • Mali-report 2026-10-14T13-54-58-aefd9d: page · 653a2fb8
  • Mali-report 2026-10-14T13-54-58-aefd9d: index · 94870170
  • Accept Valve build 1791918634, structural self-check, catalog build list, zip prefix fix — feat/headless-steam-auto-verify · b6217d56
  • Mali-report 2026-10-15T11-55-54-628360: data · 78489781
  • Mali-report 2026-10-15T11-55-54-628360: page · d2bb50d9
  • Mali-report 2026-10-15T11-55-54-628360: index · 8f02f24a
  • Bannerin: shared-state controller transport (Rust), not wired in yet · ec04d749
  • Bannerin: accept only the copy the published index names (monotonic snapshots) · 00e6848e
  • Bannerin: fork test starts tapping after the child has its baseline · d2df7fea
  • Bannerin ci: really strip the builtins from the static library · ed478039
  • Controller input: switch to BANNERIN, remove the mmap ring transport · 9e82b978
  • Bannerin: pace axis-only frames per reader (BANNERIN_AXIS_HZ, default 125) · c0b34a95
  • Bannerin tests: library diagnostics to stderr, fork-scenario stress run · 47c9f088
  • Bannerin check: stress the fork scenario and the whole scenario suite · 655da560
  • Bannerin: a forked reader no longer mistakes a live writer for a dead one · 750285e2
  • Bannerin: stick pacing follows the game's frame rate (auto, the new default) · f7774092
  • Bannerin: frame-credit stick pacing (one stick frame per game frame) · fc306642
  • Bannerin: idle pads stop waking the CPU · 7503b8e7
  • Bannerin tests: the frozen-game scenario really holds a change · f3f6ba57
  • Bannerin-xinput: XInput DLLs that read the pad straight from the slot files · 98907032
  • Bannerin-xinput: the export check skips the unused ordinal slots · ef7c93e0
  • Bannerin-xinput: the DLL reports version 1.0 in its log line · f2c37191
  • Bannerin: cap frame credits at 60 stick frames/s (BANNERIN_AXIS_AUTO_MAX) · ed82c681
  • Bannerin-xinput: ARM64X image for arm64ec prefixes, and a load line from every process · c6d75de5
  • Bannerin-xinput: the load line names its log channel; probe the ARM64 Wine runner · f264ebbe
  • Bannerin-xinput CI: both ARM64X views under Hangover (Wine arm64ec + FEX) on the arm runner · 6809b22e
  • Bannerin-xinput CI: install Hangover with the dependencies the arm runner can satisfy · ae7dc586
  • Bannerin-xinput: extended functions exported by name too; Wine export check; rumble log · f0b2bfc0
  • Bannerin-xinput: Wine's export table, exactly: DllMain @1 where Wine has it, Wine's ordinals; strict check · ab48806e
  • Rumble motors (Both / Single) and Controller identity · f1e010d6
  • Controllers: list only the slots a controller holds (no phantom pads) · b75dd6ab
  • Controller switches: one "DirectInput games can see the controller" switch · 28f0a14b
  • Mali-report 2026-10-17T14-39-40-51e301: data · 22dc7c01
  • Mali-report 2026-10-17T14-39-40-51e301: page · a39c3180
  • Mali-report 2026-10-17T14-39-40-51e301: index · 42d0e944
  • Winebus: DisableHidraw in the registry, so the PlayStation identities keep the pad · 6ec6e9eb
  • Live controller settings, groundwork: launch env, registry builder, reconnect engine · 57ea0534
  • Bannerin-xinput: live Direct XInput (direct / forward to Wine's xinput / hidden) from the control block · 845390ac
  • Bannerin: per-slot control block (format 1.5) for live pacing and controller identity · 3a59d149
  • Live controller settings: Controls > Pad, reconnect, per-slot identity · b72420e6
  • Linux runtime session: clear the BANNERIN control block before its nodes · 70ff0a90
  • Controller settings: per-game parity, in-game save scope, in-game switching on by default · 6dcc71ac
  • Direct XInput: a game's own xinput DLL no longer shadows Wine's · b117ef03
  • Stick updates: − / + buttons instead of the sliders · 7830657a
  • Side menu: Back and a tap beside it close it on every screen · 4865b8a6
  • Bannerin: force-feedback engine for DirectInput vibration (API 3, format 1.6) · 42a90244
  • Bannerin: force-feedback smoke test spreads its calls over the engine's ticks · bc2ce4ce
  • DirectInput vibration: force feedback through BANNERIN, with a setting · f5253ae4
  • Game Controller tab: OverrideDrop's enabled before onHelp, so the trailing help lambdas still bind · b8ea4130
  • Save backups: include Steam emulator saves kept outside the Wine profile · e6e35c10
  • Mali-report 2026-10-18T00-53-57-7623d1: data · 88c03c87
  • Mali-report 2026-10-18T00-53-57-7623d1: page · ee08462d
  • Mali-report 2026-10-18T00-53-57-7623d1: index · 902205a4
  • Release 3.1.7-pre3: versionCode 101, notes and README · 0ea6d894
  • 3.1.7-pre3 notes — Direct XInput is off by default; Rumble motors default per device · 5136cccc
  • 3.1.7-pre3 notes — old system vs new, as a tap-to-expand section · c99141b2
  • 3.1.7-pre3 notes — old system vs new moved to the top, clearer to tap · 0064c3fe
  • Direct XInput on by default for new containers · 214470e5
  • Log Manager: "Controller input" log (controller.txt per game, off by default) · 257f07dd
  • DirectInput visible: no registry entry again (the old Exclusive Input off) · 707fb169
  • Controller log: report only players a controller held · 3d0aacb8
  • Bake-aio: optional CursorTest.exe and removal of the v1 AIO folder · b8c874c7
  • Containers: AIO Graphics Test 2.2.0 + Cursor Test, drop the v1 AIO folder · 45c020fa
  • Bake AIO Graphics Test 2.2.0 into the container pattern (drive_c/AIO Graphics Test v2), add CursorTest, drop the v1 folder · 358ec448
  • Audio bundle check no longer fails at random under pipefail — fix/ci-grep-pipefail · 2215e96e
  • Wayland compositor: asynchronous copy path, high-priority queue, present-interval stats · c1522a56
  • Wayland: client render fences for zero-copy buffers, driver capability probe · 7c6ef6e4
  • Wayland: adapter by default, adapter settings with profiles, driver report · 4d245fae
  • Wayland compositor: room for the longer perf line in the log buffer · 9ab8d40f
  • Wayland adapter asset: Mali switches + pass-through dispatch + client render fences in one build (d2094e8) · fc4d5363
  • Wayland adapter asset: pass subgroup properties through on Mesa drivers (cccc812) · fba7e96d
  • Wayland adapter settings: Subgroups switch (Auto / Off) · 0b3edbab
  • Zero-copy offers BGRA to native Vulkan programs — fix/adapter-bgra-native · ea14a3ba
  • On-screen pad takes its player slot before Wine boots — fix/osc-pad-at-start · 4f896584
  • Bundled winhandler.exe / wfm.exe: restage when the file differs, not only on a marker mismatch · 847d3ee5
  • Container pattern: winhandler.exe and wfm.exe = the bundled assets · a06e97f2
  • CI skips bannerin tests, libblsteam.so and Linux runtime asset builds whose inputs did not change — fix/ci-skip-unchanged · e8073f18
  • Xbox backend: build Xodus for Android (aarch64-linux-android) from DroidDeck's tools/xbox recipe · ba66c968
  • DirectAudio: detect support from the layer's files; bundle driver 1.4.0, newest wins · 549fe330
  • Goldberg: Steam Cloud sync during Goldberg launches is a setting (#614) · 26857807
  • Steam Library: search and sort by Steam rating (#617) · 7d3ed5f5
  • Steam: install games into extra library folders, in the normal Steam layout (#616) · 00ebb823
  • Steam: switch between saved accounts without logging in again (#615) · f616db1b
  • Goldberg: stop black screens, show errors, switch back to real Steam (#613) · 62f6a97f
  • No TLS directory in the BANNERIN-XInput ARM64X image — fix/bannerin-arm64x-tls · c4a75e0e
  • Use Xodus Nexus' xgameruntime when a game ships Microsoft's (per-game setting) — fix/xbox-bundled-xgameruntime · e63ccfd4
  • Xbox cloud saves upload on exit (wait while the game runs; bxsaveup.exe after the game closed itself) — fix/xbox-save-upload-on-exit · e0929393
  • Keep game covers and tile icons at most 1200 px — fix/cover-art-size · f9a4a62f
  • Release 3.1.7-pre4: versionCode 102, notes and README · 83942dfe
  • Write EmulateModeset per layer (Valve 2026-09-01 semantics) — fix/refresh-unlock-modeset · ea07e522
  • Layer updater treats DroidDeck-Proton layers as one line — feat/dd-layer-family · 301facfe
  • Xbox Cloud Gaming (own player, store sign-in), stream or install per game, cloud entries in Games — feat/xbox-cloud · 5b868f86
  • Native cloud player (WebRTC + Vulkan frame generation, opt-in), frame-rate targets, latency overlay — feat/xbox-cloud · a73140d7
  • Native cloud player low latency, live zero-copy switching, background handling, Win-FG re-enable fix — feat/xbox-cloud · 6c44c331
  • Cloud players hide the system bars again after returning — feat/xbox-cloud · 94758b23
  • Pull request #627 — vc14-arm64 · 4857a48d
  • Hand Wine the container's LC_ALL on Android (CJK code pages) — fix/cjk-locale · defb2b9f
  • Components install Wine Mono without opening the container — fix/offline-msi-mono · 93a8e8ff
  • Installing a Wine Mono clears the earlier version's leftover files — fix/mono-clear-old · 80746813
  • Release 3.1.7: versionCode 103, notes and README · 6c4d45b7
  • 3.1.7 notes: update sizes (about 32 MB from pre4, 136 MB from 3.1.6, measured with apk_delta.py) · aa5e2ae6

🙏 Credits (tap to expand)

The Xbox store runs on Xodus (GPL-3.0, Rust) by Paweł Lidwin (imLinguin), Vidi0, ChristopherHX and the Xodus contributors, built for Android here, and on Xodus Nexus by Dominik Svoboda (domsvoboda) (MIT; its Wine modules LGPL-2.1) for the Xbox runtime, sign-in, saves and the launch view. The Android build recipe and launch flow follow DroidDeck's Xbox work by Kurt Himebauch (xXJSONDeruloXx) (DroidDeck #1156, #1164, #1170). The container-launch approach comes from MGamer404's xbox-container fork (PR #623), and the ARM64 Visual C++ runtime for arm64ec containers is his too (#627, winlator-contents #28).

Xbox Cloud Gaming: the player's WebRTC client and stream protocol are Greenlight by UnknownSKL (Jim Kroon) (MIT), and the cloud-gaming sign-in follows his xal-node; the H.264 preference, bitrate cap, sharpening, Stop quality drops and the cloud title lists follow Better xCloud by redphx (MIT). The native player uses Google's WebRTC library (BSD, the webrtc-sdk Android build). The colour, deband, FXAA, Toon, CRT and NTSC effects are Bannerlator's own.

The Steam changes in #613–#617 are by community contributor MGamer404 — thank you.

BANNERIN (controller transport, force-feedback engine and the BANNERIN XInput DLLs) is original work written for Bannerlator. The evdev layer it plugs into comes from Winlator by brunodev85; Direct XInput's forward mode uses Wine's own XInput, and Wine's SDL bus and DirectInput carry the controller and its force feedback. The XInput DLLs are built with llvm-mingw (Martin Storsjö) and checked under Hangover and FEX-Emu.

The component recommendations and the revert-on-remove model follow DroidDeck's Windows components. Wine Mono is by Esme (madewokherd) and the Wine Mono contributors. Sora and Nunito Sans (SIL Open Font License) are the Deck style's typefaces.

The v15 layers carry fixes from GameNative's proton-wine (per patch, credited in the layer release); DroidDeck-Proton 11.0-11.1 is the Android build of DroidDeck-Proton on Valve's Wine with GloriousEggroll's GE-Proton and CachyOS fixes. The Chinese / Japanese / Korean text fix came from xxydbc's report in the BannerHub Discord.

The Wayland adapter is built on Pipetto-crypto's bionic Vulkan wrapper; the frame-pacing work came from reports and logs by Hot_Ice (Adreno 7c+ Gen 3) and Vermillion (Adreno 830). DirectAudio (winedirectaudio, AAudio) is The412Banner's.

Everything credited in 3.1.6 still applies: Headless Steam and the Steam bridge, the SSBS fix (Wine MR 12262 by Jacek Caban, found by Sonicadvance1), the Mali PanVK work (FristOneRR), winhandler.exe (Winlator by brunodev85), the cutscene fixes (NelloKudo, GloriousEggroll, Valve, GameNative, Wine), Proton-CachyOS (CachyOS, Proton-EM), box64 (ptitSeb), FEX-Emu, DXVK, VKD3D-Proton, Wine, Proton / GE-Proton, SDL, SteamKit2 and Wayland.


Entirely app-side — no ImageFS reinstall. Install over 3.1.6, any 3.1.7 test build or any earlier 3.1.x; everything carries over. Then take the v15 layer updates from the catalog.