Bannerlator 3.0.5
Bannerlator 3.0.5
Run Windows apps and games on Android — no PC and no root required.
3.0.5 is the downloads and tuning update. Steam depot downloads have been rebuilt around adaptive concurrency and are roughly eleven times faster on a real connection; the Steam section now opens on a storefront instead of an empty library; and the two things that were previously edit-a-config-file-and-hope — DXVK settings and the FEXCore/box64 tuning tiers — are now real editors with a help button on every option. The DXVK half of that, VEGAS, is a community contribution from @isygold and is the largest single change in this release. As always the update is entirely app-side — no ImageFS reinstall — so your containers, Wine installs, themes, accent colour and per-game settings all carry over untouched. Install straight over 3.0.4.
⚠️ Win-FG frame generation is EXPERIMENTAL and a work in progress — it does not work on all devices. It has only been proven on a handful, mostly higher-end. Elsewhere it may do nothing, engage inconsistently, or look wrong. It is off by default; if it misbehaves, leave it off.
- Needs a Vulkan renderer and a Mailbox or Immediate present mode — it will not engage on FIFO.
- Starts OFF on every launch by design; switch it on from the in-game menu.
- The frame counter can read higher than what actually reaches your screen — generated frames are produced and counted, but on some setups they do not all make it to the panel, so the HUD can show roughly double while the display shows less. Still being worked on; not fixed in this release.
Download speeds: the new engine ramps only while throughput is actually rising, so a slow connection settles where it always did — picking a faster tier will not force a weak link past what it can carry.
What's New — everything since 3.0.4
⬇️ Steam downloads — rebuilt, and about 11× faster
- Adaptive-concurrency depot fetch. The downloader now runs many chunk requests in flight at once and continuously tunes how many — per CDN host — from what the connection is actually doing, instead of the old blocking per-worker loop.
- Measured on device (Borderlands 2, 7.5 GB, Blazing tier, 1 Gbps line): 2m52s end to end, against 3m38s on the previous build and roughly 30 Mbps before this work. Four owned depots validated against their manifests, 27 unowned DLC depots excluded, zero skipped chunks, locks released clean.
- Slow connections are unaffected. The concurrency window bootstraps low and only ramps while throughput is actually rising, so a weak link settles far below the tier ceiling no matter which speed tier you pick.
- Downloads survive being backgrounded. A WifiLock stops Android throttling a backgrounded download into a stall, and a stalled download stays resumable instead of vanishing.
- One download at a time, properly queued, on both engines.
- Auto-resume on the native engine. A genuinely short depot used to fail straight to you with nothing retried — the Dead Cells regression. It now retries three times with 2/5/10s backoff, while denied depots still fail fast.
- Games with depots Steam won't hand over now finish on the depots you do own, instead of failing the whole download.
- The download row clears when a download completes, and installed games reconcile.
- A "?" on the download-speed picker, per tier and general.
- Install to SD card and cloud-save handling on SD are fixed alongside it.
⚠️ Known issue — cancelling a download. Cancel and delete remove the entry from the list, but do not yet stop the transfer engine underneath: workers can keep writing, and a duplicate worker can spawn for the same app once the entry is gone. If you cancel a download, force-stop the app to be certain it stopped. The control plane for the new engine is the next piece of work.
🛒 Steam is a storefront now
- The Steam section opens on a store, not an empty library — featured hero, What's New, Top Free Games and current deals, with catalog search. Your owned library moves behind its own tab, and there are new Friends and Profile tabs.
- Free and free-to-play games can be added to your account from inside the app and downloaded without leaving it. Paid titles show their price and ownership state and deliberately offer no Add button — no API grants a paid license, and pretending otherwise would be dishonest.
- Landscape uses a navigation rail with D-pad traversal throughout, because these are handhelds.
- Artwork actually resolves. The engine now publishes each owned game's real artwork addresses from appinfo instead of leaving the app to guess, falling back through constructed hosts, appdetails, SteamGridDB and finally a themed placeholder. Only the first costs nothing extra — it arrives with data the app already downloads.
- Your profile paints on the first frame. Profile state lives in the store rather than the screen, persisted per account, so switching tabs costs nothing and a cold start paints immediately while revalidating quietly behind. A failed refresh keeps what is on screen; signing out empties it; switching accounts mid-flight can no longer publish the previous account's data.
- Library filter chips — All / Games / Demos. Games stays selected by default, so the library looks exactly as it did unless you opt in. All means games and demos only — DLC, tools, config apps, soundtracks and videos stay out.
- Fixed: a demo you own was labelled "Not owned" in store rails. Demos never reached the ownership set at all.
- Fixed a crash that was already live in 3.0.4. Opening the store could die with a duplicate row key when a featured category listed the same appId twice. The guard existed on two other paths but not the shared category parser feeding new releases and specials, so a partial fix had been reading as a finished one.
- Fixed: the Steam notification that would not go away. It is now seeded from the live connection state instead of a hardcoded "Connecting to Steam…", reports Signed out when there is no saved sign-in, and dies on a recents swipe — unless a download still owns the session.
- Steam honours the app's orientation preference, which six of its activities had been ignoring outright. A running game is untouched; it owns its own orientation.
- Clearer emulator labelling — WOWBox64 on arm64ec, Box64 on x86_64. Display only; your stored settings are unchanged.
👥 Friends while you play
- The in-game drawer's Friends tab no longer shows everyone as Offline during a real-Steam game. The in-container roster used to be applied as truth, so 28 friends shrank to 19 and every unconfirmed state was read as a confirmed Offline. Rosters now merge by SteamID, a relayed state applies only when confirmed, and anything unconfirmed keeps the app session's last-known presence marked "– last known".
⚠️ Known issue. The Steam client inside the container still receives no presence stream from Steam's servers, so during a real-Steam launch those statuses are last-known rather than live. Agent-side work, tracked separately.
🎨 VEGAS — DXVK configuration (contributed by @isygold, PR #450)
DXVK has always been tunable in principle and unreachable in practice: a config file you could not see, full of keys you had to already know. VEGAS turns it into a real screen.
- A 161-key catalog with a per-key editor inside the DXVK config dialog — add, edit and delete keys, compare against the baseline, switch between stock and custom sources, and back up or restore before you experiment.
- V-Glossary classifies every key by where it actually applies: in this build, upstream only, another build, or nowhere. That last bucket matters — plenty of keys copied out of guides do nothing on the DXVK you are running.
- Tier presets chosen from your GPU, so you start from something sane rather than a blank file.
- Stock config download — pull a known-good VEGAS config straight from releases, parked alongside the wcp with a provenance sidecar.
- VEGAS HUD tokens in the environment editor, and
DXVK_CONFIG_FILEeditable as free text. - Also fixes two pre-existing bugs of ours: a stale
dxvkConfigFilepath leaking into plain DXVK when you switched wrapper, in both the container editor and the shortcut editor.
Device-verified on Adreno 750 (AYANEO Pocket FIT); developed on Redmi Note 11 and POCO X3 Pro.
⚙️ Emulator presets — new tiers, editable, and explained
- New FEXCore tiers — Extreme-wn, Extreme (TSO)-wn and Extreme-gn. FEXCore previously stopped at Performance (TSO) while both sibling projects shipped an Extreme tier.
- New Box64 tier — Extreme-2, the community 32-variable tuning, added as a second tier so the existing Extreme keeps its values for anyone already using it.
- Box64 environment variables went 19 → 32. Community
.wbppresets set all 32, so importing one had been silently dropping 13 values, including every CPU-feature flag. - Built-in presets are now editable. Editing one previously did nothing at all. Edits are stored as an override, so the shipped values survive underneath and a per-preset Reset restores them.
- The preset editors follow your theme. They were
android.app.Dialogsubclasses themed by AppCompat's hardcoded#0055FF, so they stayed blue whatever accent colour you had chosen. They are now one Compose dialog drawing from the app theme. - Every one of the 49 variables now has a description, a value-by-value table and a "When to change" scenario, plus a "?" beside the preset name covering all 19 presets. Most entries had been one-liners — every FEXCore string was 27 to 117 characters.
- Fixed six FEXCore rows that rendered as 0/1 dropdowns instead of switches, and the FEXCore help lookup, which searched for
FEXCORE_when the variables are namedFEX_and so never resolved.
🖥️ GPU tier auto-detection (@isygold, PR #462)
- Fixed: flagship Adreno GPUs were being handed the entry-level preset. The detector read the GPU name from a kernel node that reports an internal code name on 7xx and 8xx parts — an Adreno 750 reports as
Adreno33v2, which parsed as "33" and landed in Tier 1. That meant entry-tier draw thresholds (100/300 instead of 350/800) and frame generation switched off on some of the fastest devices we support. Detection now uses a native Vulkan probe. Verified on an Adreno 750.
⚠️ Still misdetects on custom drivers. When you run a custom adrenotools driver the Vulkan probe is skipped by design and detection falls back to the old kernel node, so the same misclassification can happen. Set the tier manually if you use a custom driver on a 7xx/8xx GPU.
🧰 Environment variables — now explained
- A "?" on all 89 environment variables, in both the variable list and the add-picker. Every row used to be a name and a control with no indication of what it did. That matters most for the double-edged ones:
WINE_FAST_YIELDcan hang a game by starving the thread it stopped waiting for,DXVK_ASYNCtrades correctness for smoothness,WINEESYNCdeadlocks some titles, and the BCn options change texture quality. WINE_FAST_YIELDis a proper checkbox now, besideWINEESYNCandWINEFSYNC, instead of a free-text box you had to know the name of. It is our own scheduler gate: on a tester's device in Cyberpunk it took the prime core from 100% to roughly 0–3% and ~5.3 W down to ~3.9 W, with the frame rate steady at its 30 fps cap. Present on 6 of the 8 installed Proton layers.
🛒 GOG
- Fixed: "Sign in with Google" showed a white screen. The GOG login page opens each provider in a popup window, which the app was silently discarding — and when the login did come back, the app's own security check rejected it, because GOG does not return the token in the shape that check expected. Google, Steam, Discord and Xbox sign-in all work now.
- The GOG login screen is a real screen — a title bar with close and reload, a loading bar, and an actual error message with a Retry button when something fails. Previously any failed load left a blank white page with no way back.
- Your existing GOG sign-in is unaffected; tokens are stored and refreshed exactly as before.
⚠️ Carried over from 3.0.4 — still open
- 64-bit titles launched directly by Steam can still crash at startup with the overlay-injection signature and fall back to an insecure start. Non-VAC games play online normally; a 64-bit VAC game started this way would be rejected by VAC servers. Titles that go through a 32-bit launcher (Counter-Strike: Source, Team Fortress 2, Left 4 Dead 2) are unaffected. Fix still in progress.
- The Java Steam engine fallback is still present. 3.0.4 said it would be removed this release; it has not been. Removal moves to 3.0.6.
🙏 Credits
🙏 Special thanks to @isygold for the VEGAS DXVK config UI (PR #450) and the Adreno 7xx/8xx tier auto-detection fix (PR #462) — between them the largest contribution in this release, developed and tested on Redmi Note 11 and POCO X3 Pro, and device-verified on Adreno 750.
Built on the work of many open-source projects and their communities:
- Native Steam engine & SteamLite agent — derived from WinNative's GPL
wnsteamclient andwn-steam-launcher(hardened, extended and rebranded here); protocol groundwork from SteamKit2 (the SteamRE team). - Steam (fallback engine) — JavaSteam (joshuatam's fork of SteamKit2) and Goldberg / gbe_fork (Detanup01 & contributors).
- Graphics & Frame Generation — DXVK (Philip Rebohle & contributors), VKD3D-Proton (Hans-Kristian Arntzen & contributors), Mesa / Turnip (the Freedreno & Mesa teams), and AMD FidelityFX (FSR).
- Containers, launch & runtime — Wine (WineHQ) and Proton / GE-Proton (Valve & GloriousEggroll); box64 (ptitSeb) and FEXCore (the FEX-Emu team).
- Audio — Android AAudio, driven by our own DirectAudio endpoint.
- The app itself — Winlator (brunodev85) and its Cmod lineage; GameNative (GPL-3.0) for the Steam session-hardening and present paths.
Steam is a trademark of Valve Corporation; other names are trademarks of their respective owners. Bannerlator is an independent project — not affiliated with or endorsed by any of them. Each component remains under its own license.
