Windows applications and games on Android.
Contents • Ask AI • Download • Config Library • Mali Reports • Discord • Telegram • Builds • Credits
Bannerlator is a personal build — made by me (The412Banner), for my own device, my own needs, and my own use.
It's a personal continuation of the Winlator Star Bionic project (star-emu/star) after it was discontinued and archived. None of the original developers are involved except me; it stands on their work plus cherry-picked commits from across the community — all credited below.
This is NOT an official or general-purpose Winlator release. It is built and tuned for my hardware and my workflow, and published as-is purely in case it happens to be useful to someone else.
- No guarantee it works on any other device, GPU, or Android version.
- No support, and no commitment to fix anything that works for me but not for you. If a feature works on my device, it isn't broken — for me, which is what this build is for.
- Bug reports / feature requests for setups I don't run may simply be closed. That's not personal; this just isn't a community-support project.
You're free to use, modify, fork, or share it (GPL-3.0). If it doesn't work on your setup, that's expected — it wasn't built for it.
All coding, features, and changes in this project are developed with the assistance of Claude AI by Anthropic. Claude is used to help with the heavy lifting — writing, reviewing, and modifying the emulator's code and the features added here: the Kotlin/Compose app shell and the native emulation glue (Wine/Proton, box64/FEX, DXVK/VKD3D → Vulkan), the storefront and cloud-save integrations, and the per-game/container features — as well as porting and re-deriving community changes into this build.
Before any stable release is published, all changes are manually debugged and tested by me across multiple devices — both rooted and unrooted. Debugging is done using logcat/getlog output and in-app debug log files to diagnose and verify behaviour, and no stable release is cut until the change is verified end-to-end on real hardware. Test devices:
A note on root: using any root-only features is entirely your own choice and at your own risk. I don't encourage rooting your device in general — especially without the proper knowledge and tools to do it correctly. Bannerlator runs fine unrooted; root only unlocks a few optional performance extras.
| App label | Bannerlator Bionic (standard) · Bannerlator Bionic PuBG (pubg) · Bannerlator Bionic Ludashi (ludashi) |
| Packages | com.winlator.banner (standard) · com.tencent.ig (pubg) · com.ludashi.benchmark (ludashi) |
| Version | Bannerlator V 3.0.4 — built from Star marcescence (versionName 3.0.4, versionCode 78) |
| Android SDK | compileSdk 34 · targetSdk 28 · minSdk 26 (Android 8.0+) |
| Lineage | Winlator → cmod → Bionic Nightly → Star Bionic → marcescence → Bannerlator |
Games misbehaving on a Mali GPU (Exynos / Dimensity / Kirin / Helio devices)? We run a dedicated public bug-report board for Mali devices — file a structured report with your logs, and get answers back from the developers in a public discussion thread on each report.
Every report gets its own public discussion thread. You can reply as the original poster — no account or password needed — and the developers answer right there in the thread.
A Steam-focused update on top of the 3.0.1 point release — Friends & Chat, real-Steam (VAC) online play, achievements & cloud saves, one-touch save syncing and SD-card installs, plus graphics / frame-gen and runtime polish. Entirely app-side — no ImageFS reinstall; install over 3.0.x and your containers, Wine installs, themes, accent colour and per-game settings all carry over. (Real-Steam is a separate one-time in-app download.)
…_win64) so the game launches secure regardless of which exe the shortcut names, pops the in-game gold achievement pill for real-Steam unlocks, and can capture an opt-in scrubbed log for diagnosing a launch. The Steam client + clean-room headless agent ship as a downloadable steamlite-v1 content package, installed from inside the app. Device-proven online on Counter-Strike 1.6, Counter-Strike: Source, Team Fortress 2 and Left 4 Dead 2 (VAC-secured), plus Brawlhalla and Stumble Guys (live-service); Borderlands 2 is in testing.Also rolled up from the 3.0.1 point release on 3.0.0: swipeable on-screen controls (slide-to-press, a per-element toggle and a dedicated Swipe drawer tab), an LSFG frame-gen fix, a Steam depot OOM fix (#408), a controls-alignment fix (#413), and assorted File-Manager / ETA / crash fixes.
The big 3.0 stable — rolls up everything since 2.9.9, including the 3.0.0-pre1 / pre2 opt-in betas. Entirely app-side — no ImageFS reinstall; install over 2.9.9 and your containers, Wine installs, themes, accent colour and per-game settings all carry over. Full notes on the 3.0.0 release page.
Frame generation (lsfg-vk and win-fg) inserts AI-generated in-between frames to make motion look smoother — it helps most when a game runs below your screen's refresh rate. It runs on the Vulkan renderer.
Present mode decides how finished frames are handed to your screen:
| Mode | What it does |
|---|---|
| FIFO (default) | "Vsync on" — smooth, tear-free, most battery-friendly, but it makes the game wait for the display. |
| Mailbox | "Fast vsync" — never makes the game wait, still tear-free. The right mode for frame generation, so its extra frames actually reach the screen. |
| Immediate | "Vsync off" — lowest input lag, but can tear. |
Bannerlator automatically switches to Mailbox while frame generation is running, then restores your chosen mode when it turns off — because FIFO would otherwise throttle the generated frames before they reach the screen. You can also switch modes live from the Present Mode selector in the in-game Graphics tab, and every mode is explained by a "?" button and in the in-app "What is all this?" glossary.
With frame generation on, two apps' FPS numbers can look very different — because they count frames at different points in the pipeline:
Neither number is "frames on glass." Your panel's refresh rate (e.g. 120 or 144 Hz) is the true ceiling — above it, frames are generated but not shown. A result like 65 → 107 fps at 2× on a demanding game, with the frametime roughly halving, is frame generation working correctly.
Everything Bannerlator offers, at a glance. No PC and no root required — it runs Windows apps and games directly on your Android device.
.so) matching: whichever FEXCore version you pick per game or container, the native .so companion is kept in sync on every launch (matched for unixlib builds, cleared for DLL-only), so there's never a stale or mismatched .so.📖 Not sure which graphics driver or wrapper to use? Read the wrapper & driver guide → — what a wrapper actually does, a pick-by-GPU table (Adreno / Mali / Xclipse / PowerVR), every built-in driver explained, all 18 catalog wrappers with their authors and upstream links, which of them are byte-identical across projects (so you don't test the same file twice), and troubleshooting.
📖 New to VEGAS? Read the VEGAS DXVK FAQ — install, config, FSR, tiers, frame generation & shader-stutter troubleshooting.
🚀 Support VEGAS Development — low-level graphics dev & vibecoder: debugging, refactoring & improving original DXVK code for Adreno. ❤️ Sponsor isygold →
owner/repo) on top of the built-in sources, so you can pull Turnip / driver builds straight from the repos you trust. (Requested in #160.).tzst wrapper (from another project or your own build), browse a curated downloadable catalog of wrappers from across the Winlator family (each credited to its source, flagged "Mali only" where relevant), and get auto-detected settings — real toggles / sliders / dropdowns read straight from what each wrapper actually supports, with driver internals and log noise filtered out. Per-entry Update / Reset / Edit / Delete / Details plus a pre-import inspection view. (Modeled on WinlatorMali's graphics-driver manager; requested in #132.) 📖 Which wrapper for my device? →ℹ️ The Vulkan host renderer uses the rendering path from StevenMXZ (Winlator-Ludashi); its
AHardwareBufferpresent path — what makes Vulkan / DXVK / VKD3D content actually display correctly — was ported from / cross-examined against GameNative. See Credits.
.fx effects (colour grading, sharpen, film grain, CRT, tonemap…) on DXVK / VKD3D games. Effects compile on-device via a bundled vkBasalt layer; pick from an on-demand catalog of ~100 curated MIT/CC0 effects or drop your own into the ReShade/ folder. A dedicated in-game ReShade tab auto-generates properly typed controls (sliders / toggles / dropdowns / colour pickers) from each shader, so you can toggle and tune effects live with a Reset-to-defaults button. Effects are configured per game (container or shortcut), persist across relaunch, and can be run solo or stacked. (Color effects today; depth effects such as SSAO/DOF are not included yet.)
⚠️ Stacking multiple effects? Add them a few at a time. Each effect compiles on-device and costs GPU — selecting too many at once can stop a game from starting, showing a flat / blank screen instead of the game. If that happens, uncheck effects one at a time (or the specific heavy one) in the per-game ReShade effect settings until it boots, then add more gradually.
ℹ️ Why win-fg exists, and what it is. Bannerlator previously bundled a different frame-generation layer that was later found to embed compute shaders whose model weights were essentially identical to the proprietary Lossless Scaling frame-generation model — which cannot be redistributed. That layer was removed, and win-fg is its clean-room replacement: a frame-gen engine we built from the ground up. Its motion estimation is our MIT adaptation of AMD FidelityFX FSR3 optical flow (an algorithm — no learned weights), and its frame synthesis is written from first principles using published, permissively-licensed math. It bundles no proprietary code or weights. That's also why the two engines sit side by side: lsfg-vk relies on your own legally-owned
Lossless.dll, while win-fg is entirely Bannerlator's own and needs nothing to run.
⚠️ lsfg-vk requires you to supply your own
Lossless.dll. Bannerlator bundles no proprietary Lossless Scaling files. You must own Lossless Scaling (THS, on Steam) and import itsLossless.dllvia Settings → Frame Generation (lsfg-vk) → pick DLL. The DLL is copied into app storage and serves all containers. Until you import a validLossless.dll, the lsfg-vk option stays greyed out; win-fg needs no DLL and works without it.
IdleNotify that frees the guest's buffer, so the game itself throttles (the in-game HUD reflects the cap and GPU/power draw drops). Works the same with frame gen Off, win-fg, or lsfg-vk, on both host renderers, all guest APIs. When lsfg-vk is multiplying (2×+) the limiter automatically steps aside so lsfg's own pacing governs — no double-cap. This guest-side present-pacing mechanism was ported from GameNative (see Credits).Power-user device-tuning, reachable from App Settings → Performance and mirrored live in the in-game Debug tab (kept in two-way sync), with global defaults and optional per-game overrides — an override is honored only when it differs from the global default, and each has a one-tap reset-to-global.
DXVK_HUD variable stays listed but empty in the env-var editor, so it's one tap to opt back in whenever you want it..exe, or a whole games folder (point at a library folder and every game subfolder is scanned for its real executable, named and cover-arted for one-tap batch add)..exe auto-resolves the authoritative game name and cover art from the Steam store, fixing generic launcher-exe misnames, with a Search Steam confirm step.Browse community-shared, per-game / per-device tuning configs in-app and apply a known-good setup in one tap.
Sign in to your existing storefronts and play from libraries you already own — Bannerlator does not sell, bundle or circumvent any game or DRM.
LaunchApp, not an insecure CreateProcess) and watches the launcher exe so the game launches secure regardless of which exe the shortcut names. The Steam client + agent ship as a downloadable steamlite-v1 content package, installed from inside the app. Device-proven online: CS 1.6, CS: Source, Team Fortress 2, Left 4 Dead 2 (VAC-secured), Brawlhalla and Stumble Guys (live-service); Borderlands 2 in testing.🔒 These sign-ins are a third-party login system, exactly like any other emulator/launcher that logs into these stores — use them at your own risk (see Security Hardening).
The Steam / Epic / GOG / Amazon sign-ins are a third-party login system, exactly like any other emulator or launcher that logs into these stores. Bannerlator is not affiliated with, authorised by, or endorsed by Valve/Steam, Epic Games, GOG, or Amazon.
StoreLog.redactUrl helper: signed download / manifest URLs (Amazon / Epic / GOG CDN links carry access tokens in the query), OAuth authorization codes, GOG client_secret + refresh_token, and account identity IDs (Epic account ID, GOG user ID). Steam credentials were already redacted. None of this changes how login, downloads or cloud saves work — only what gets written to a log..lnk working-directory ("Start in") support so shortcuts for apps that only run from their own folder launch correctly.The bundled Windows file manager (C:\windows\wfm.exe) is Banner File Manager — our own native Win32 file manager, forked from BrunoSX's Winlator File Manager (MIT). It ships in every new container's Start menu.
View ▸ Split View) — two independent panes, active one highlighted, copy between them.SHFileOperation — sidesteps the Wine shell32 copy-paste crash on Proton 10.0-4.Source, releases & issues: github.com/The412Banner/banner-file-manager.
.so) or the classic DLL path is active. Read straight from the running process, so it reflects reality, not just the setting.Besides the built-in download catalog, you can add any ReShade effect yourself by dropping it into a folder. Follow these steps exactly:
1. Open the ReShade drop-in folder on your device (create the ReShade folder if it isn't there yet):
Android/data/com.winlator.banner/files/ReShade/
📁 That path is for the Standard build. For the other builds, swap the package name: PuBG →
Android/data/com.tencent.ig/files/ReShade/· Ludashi →Android/data/com.ludashi.benchmark/files/ReShade/.
2. Make one folder per effect. Name the folder whatever you want the effect to be called in the menu — for example MySepia.
3. Put the effect's files inside that folder — all in the same place, next to the .fx:
.fx file (required),.fxh files it #includes (very common — e.g. ReShade.fxh, ReShadeUI.fxh),ReShade/
MySepia/
MySepia.fx ← the effect (folder name match = used first)
ReShade.fxh ← copy in any .fxh the .fx #includes
ReShadeUI.fxh
noise.png ← copy in any textures it uses
4. Pick it in the app. Open the app → edit a container or a game shortcut → ReShade effect picker. Your folder now appears in the list — select it.
5. Use it in-game. Launch a DirectX (DXVK / VKD3D) game, open the in-game drawer → ReShade tab, and turn the effect on/off and tune its sliders live.
⚠️ Read this if something doesn't show up or work
- Only colour effects work — sharpen, colour grading, film grain, CRT, tonemap, vignette, etc. Depth effects (SSAO, depth-of-field, MXAO) do not work yet.
- ReShade only affects DirectX games running through DXVK / VKD3D — it does nothing on OpenGL / WineD3D / older 2D titles.
- Effect not in the list? Make sure it's in its own subfolder and that the subfolder actually contains a
.fxfile (a loose.fxsitting directly inReShade/is ignored).- Effect selected but no change in-game? Most often a missing
#include— open the.fxin a text editor, find any#include "Something.fxh"lines, and make sure each of those.fxhfiles is copied into the same folder as the.fx. Same for any texture files.- Game won't start / flat or blank screen after enabling effects? You likely stacked too many effects at once. Each one compiles on-device and costs GPU, and too many together can stop the game from launching. Go back into the per-game ReShade effect settings and uncheck the effects one at a time (or the specific heavy one) until the game boots correctly, then re-enable them gradually. Adding effects a few at a time avoids this.
- Can't even find
Android/data? Many stock file managers hide it on Android 11+. Use a file manager that can openAndroid/data, or copy the effect folder over from a PC via a USB cable, then drop it in.
Bannerlator does not work by itself on frontends out of the box. See the frontends workaround guide to get it running.
This project is built via GitHub Actions only — local builds are not supported.
Got a question about Bannerlator? Ask the codebase directly. An AI reads the actual source code and answers with the exact file names and line numbers, so you can check it yourself. It never guesses — if the answer isn't in the code, it says so.
It's three steps:
That's it — no form, no approval step, nothing else to do.
ℹ️ The AI replies to every new issue automatically. A few per person per day are free; past that, it will ask you to try again later.
Good things to ask:
Avoid device-specific troubleshooting like "why is my game slow?" — the AI explains what the code does, not how a game runs on your phone.
With opencode installed (npm install -g opencode-ai), run the
same agent locally against a clone of this repo:
opencode run "your question" --agent ama-agent --model opencode/big-pickle
The bot runs on the opencode/big-pickle model via your opencode credentials (not a separate API key). To enable it on a fork:
cat ~/.local/share/opencode/auth.json and copy the whole JSON.OPENCODE_AUTH under
Settings → Secrets and variables → Actions.answered and question labels exist.Every newly opened issue is answered automatically, bounded by a per-user daily
limit and a monthly cap — tune both at the top of
.github/workflows/ama-answer.yml (PER_USER_PER_DAY, MONTHLY_CAP;
maintainers are exempt from the daily limit). You can also force a re-run on an
older issue by adding the question label. Without the secret, the bot posts
a notice explaining what's missing.
This build stands on a long chain of prior work — its direct lineage, plus the projects whose commits and work are cherry-picked and implemented here:
| Contributor | Contribution |
|---|---|
| brunodev85 | Original Winlator — Wine + Box64 + Turnip on Android. Foundation of every fork below. Also serves the input_controls profiles consumed by this fork: https://raw.githubusercontent.com/brunodev85/winlator/main/input_controls/ |
| coffincolors | cmod Winlator fork — package com.winlator.cmod and the customization layer this codebase is built on. |
| Pipetto-crypto | Winlator Bionic fork (the "Bionic" half of Star Bionic) and the upstream Box64 fix branch. Co-credited on cmod. Also packaged vkBasalt into the Winlator shortcut pipeline — the integration Bannerlator's ReShade feature builds on. |
| jacojayy | Maintainer of the Star line. Timeline Semaphore patches in the bundled Turnip driver for newer DXVK compatibility. Official site developer and maintainer. |
| Star / Frost dev team | The star-emu team behind the original Star Bionic and Winlator Frost lines this build continues from. |
| isygold (AGBOOLA Israel Oluwagbogo) | Star Engine / VEGAS — the Adreno-optimized DXVK fork this build's v1.3-vegas is named for, eliminating stutter and adding real-time upscaling on mobile GPUs, plus tuned dxvk.conf profiles. See the VEGAS DXVK FAQ for help & configuration.🚀 Support VEGAS Development — low-level graphics dev & vibecoder: debugging, refactoring & improving original DXVK code for Adreno. ❤️ Sponsor → |
| vivsi | Controller support contributions. |
| arro000 | Virtual Controller Pro (#156) — a ground-up on-screen touch-controls overhaul: new control types (Dynamic Stick, Mouse Area, Button Grid, Expandable Buttons), a Jetpack Compose-rebuilt controls editor with an in-game live editor, control groups, key combos, per-element dead zones, custom control icons, and a control scale limit raised to 300%. |
| StevenMXZ | Winlator-Ludashi and extensive cherry-picked work implemented in this build. This includes the new user interface and the Vulkan rendering path — both of which were still unreleased and unfinished at the time these builds and this repo were created — along with various other cherry-picked commits. This work is set to be released properly in his upcoming 3.1. |
| GameNative | GameNative by utkarshdalal — Proton bionic translation layers and cherry-picked commits adapted into this build. Its rendering pipeline was also the reference used to fix and rewire Bannerlator's render options — the AHardwareBuffer present path that makes Vulkan / DXVK / VKD3D content render correctly on both the OpenGL and Vulkan host renderers (GPUImage socket-buffer locking + EGLImage sampling, DRI3 direct-scanout, the Present extension's FLIP / COPY branches, and the Native Rendering+ direct-scanout path) was ported from and cross-examined against GameNative's implementation. The standalone FPS limiter is GameNative's too — its guest-side present-pacing mechanism (delaying the X11 Present IdleNotify to throttle the game itself, plus the rule that lsfg-vk's own pacing governs when its multiplier is ≥ 2) was ported from GameNative. For the Steam store (2.3), the session-hardening patterns (derived-loggedIn state, off-pump PICS sync, single reconnect funnel, dead-token clearing, keep-alive / watchdog) and the DownloadSpeedConfig cores × ratio 4-tier download-speed model were also ported / adapted from GameNative. The PC-accurate controller vibration feature (dual-motor rumble with per-container mode + intensity) originates from GameNative #1214, reaching this build via TideGear's port (see below). In 2.9.8, the external-display ("game on TV") concept and the suspend-sink audio-recovery approach (re-establishing the guest's audio output after backgrounding or a mid-game output-route change) were referenced from GameNative and reimplemented clean-room — the TV Options suite and Bannerlator's native pasink libpulse audio client are original work, and the wireless casting feature is entirely Bannerlator's own with no upstream equivalent. |
| TideGear | GameHub-Vibration-Fix — the PC-accurate controller vibration work this build's rumble is built on. TideGear authored both halves: the original vibration feature PR (carrying GameNative #1214 forward) and the preload-free winebus.so rumble-duration patch (PR #91) that drops the libevshim LD_PRELOAD hook and instead byte-patches SDL's rumble duration to never auto-expire — which is what makes sustained rumble actually hold instead of dying after ~1s. Adopted with the author's permission. Bannerlator re-derived the patch patterns per Proton build (9.0 / 10 / 11 aarch64 + Wine 10.0 x86-64) and added a build-agnostic structural fallback. |
| WinNative | WinNative — the reference for Bannerlator's gyroscope (motion aim) support. Its rate-mode gyro implementation is what ours is derived from: the sensor→stick pipeline (deadzone → sensitivity → exponential low-pass → clamp), the axis and sign conventions, and the fractional-remainder accumulator that keeps slow tilts from rounding away to nothing. Bannerlator adapted it to our evdev gamepad-injection path and extended the gyro-mouse mode to also drive the X pointer directly, so motion control works on a Wine container desktop and not only in captured mouse-look games. GPL-3.0, same as this project. |
| win-fg (Bannerlator) | Frame generation is powered by win-fg, Bannerlator's own clean-room Vulkan layer — FSR3 optical flow (MIT, AMD FidelityFX) plus a from-scratch synthesis. No third-party frame-generation code or weights are bundled. |
| PancakeTAS | lsfg-vk — the open-source Vulkan frame-generation layer (a Vulkan-layer reimplementation of Lossless Scaling's frame generation) that Bannerlator's second, user-selectable FG engine is built on. |
| FrankBarretta | lsfg-vk-android — the Android/bionic port of lsfg-vk (AHardwareBuffer path + vkCmdPipelineBarrier2 shim) that runs as Bannerlator's lsfg-vk engine on the Turnip stack. The in-game live multiplier/flow-scale reload uses the conf.toml mtime-watch mechanism from GameNative's lsfg-vk-android fork. No proprietary shaders are bundled — users supply their own Lossless.dll (Lossless Scaling by THS) via the in-app picker. |
| DadSchoorse | vkBasalt (zlib) — the Vulkan post-processing layer that embeds the ReShade FX compiler. Bannerlator's ReShade feature is a continuation of this work: the bundled layer is built from DadSchoorse's source, patched for live on-device toggle and slider control. The bundled / catalog .fx effects are MIT / CC0 shaders by the ReShade (crosire), prod80 (prod80-reshade-repository), luluco250 (FXShaders) and fubax authors, each under their own MIT / CC0 license. |
| leegao (Lee Gao) | Vulkan texture-compression work used for mobile-GPU compatibility and performance — the BCn decompression layer (shader-v3, powering 2.5's "Wrapper + bcn_layer" Mali driver) and the DX12 compat_layer that, alongside it, powers 2.7's new opt-in "Wrapper + compat + bcn" Mali DX12 driver — including the just-landed layer-composition fix — plus real-time ASTC/ETC compute-shader encoders and the bionic-vulkan-wrapper (ETC2-Milestone-2) bundled as the base wrapper for the Mali BCn path. |
| WinterSnowfall | d7vk — the DXVK-lineage Vulkan implementation of DirectX 7 / DirectDraw (Direct3D 3–7) that powers Bannerlator's new D7VK DDraw-wrapper option (new in 2.9.6). Bundled as the default and offered as downloadable nightly catalog builds. |
| WinlatorMali (GunaCharanTeja / Charan) | WinlatorMali — the Wrapper Version Manager (new in 2.7) is modeled on WinlatorMali's graphics-driver manager, introduced in Winlator Mali Bionic 1.1; a number of the downloadable catalog wrappers come from WinlatorMali too (each credited in-app). The feature was requested in #132 by @6ui99uhkllj. |
| BrunoSX | The bundled Windows file manager is Banner File Manager (new in 2.7.1), Bannerlator's fork of BrunoSX's Winlator File Manager (MIT) — rebuilt with native Win32 file operations (sidestepping the Proton 10.0-4 shell32 copy-paste crash), a dual-pane split view, and Open-as-administrator / Open-with. |
| @Tony57319 | Reported / requested the lsfg Performance mode frame-gen toggle new in 2.7.1 (#152). |
| @clintOnSky 🌱 (first-time contributor) | Downstream fixes surfaced in #96, applied to main individually: the Xiaomi/HyperOS libjpeg.so symlink-shadow removal that lets the frame-gen Vulkan layer load; the sign-agnostic battery-wattage fix for Xiaomi/MTK devices that report discharge current as positive; and the WOWBOX64 content-type fix for arm64ec Box64 downloads with live refresh of the component version lists after a download sheet closes. |
| JavaSteam | JavaSteam (in.dragonbra:javasteam) by Longi94 — the Steam connection-manager client the built-in Steam store logs in and talks to Steam with, and — via the javasteam-depotdownloader fork by joshuatam — the entire depot-download engine Bannerlator's Steam store is built on. |
| Goldberg Steam Emu / gbe_fork | Goldberg Steam Emu by Mr_Goldberg, and gbe_fork by Detanup01 — the Steam emulator Bannerlator's Goldberg auto-patch installs (Regular / Experimental / ColdClient tiers) for offline / emulated play of games you own. |
| Pluvia | Pluvia — an Android Steam client whose patterns were referenced alongside GameNative while building the Steam store's login / session handling. |
| The412Banner | Full Jetpack Compose UI migration, in-game overlay rewrite, controller-support restore (SDL2 SoName fix + four event files), Box64 edit-dialog fix, theme system, and CI/release infrastructure. In 2.3, building on JavaSteam / GameNative / Goldberg, the original engineering is Bannerlator's own: the cross-store Download Manager, the four storefront integrations (Steam / Epic / GOG / Amazon), the multi-week Steam session-hardening work, the depot OOM fix, the Goldberg auto-patch integration, the store Material-3 restyle, and the store-log credential redaction (StoreLog.redactUrl). In 2.4, the fullscreen aspect-ratio pipeline (Off/Fit/Stretch/Fill/Integer across all three renderers), the in-app File-Manager import picker replacing SAF (with image thumbnails + percent/ETA import progress), the DLC picker, the true-size depot install fix, per-game persistence of scaling / fullscreen / HUD position, and the container wallpaper picker. In 2.5, the Mali / BCn hardening — wiring leegao's bcn_layer (shader-v3) + ETC2-Milestone-2 wrapper into the "Wrapper + bcn_layer" and experimental "Wrapper-gamenative" drivers, the BCn Layer Settings UI, and the in-game logging overhaul (copy-logs button, selectable log location, co-located DXVK/VKD3D logs, scrollable debug-channels dialog). In 2.5.1, the SurfaceFlinger colour + crash fix and per-container / per-game "Correct SurfaceFlinger colours" toggle (ASurfaceRenderer R/B-swap fix + GPU converter, ported from GameNative #1620 / #1644), the in-game FEX runtime indicator (arm64ec / x86-64 · FEXCore / wowbox64 / Box64 · unixlib / DLL, read live from /proc/<pid>/maps), the FEXCore unixlib (.so) auto-match at launch (per-game version sync + uninstall cleanup), and 18 new Environment Variable presets (DXVK / VKD3D / Wine / Mesa). In 2.5.2, the Community Configs system — the in-app catalog browser, per-uploaded-config cards with live upvotes / downloads / comments, the surgical config-apply engine, and the smart inline installer for DXVK / VKD3D / FEXCore + Turnip drivers — plus two new Proton 11.0-1 x86-64 compatibility layers (SDK 28 / SDK 35) built and published to the downloadable catalog. Also maintains the Nightlies WCP Hub and Banners-Turnip. |
The Wine/translation stack this app bundles or downloads:
| Component | Author |
|---|---|
| Wine | WineHQ |
| Box64 / Box86 | ptitSeb |
| FEXCore | FEX-Emu |
| DXVK | doitsujin / Philip Rebohle |
| DXVK-GPLAsync patch | Ph42oN |
| DXVK-Sarek | pythonlover02 |
VEGAS (Adreno-tuned DXVK / GPLAsync fork — v1.3-vegas) | isygold · FAQ · ❤️ Sponsor |
| D7VK (DirectX 7 / DirectDraw → Vulkan) | WinterSnowfall |
| VKD3D-Proton | Hans-Kristian Arntzen |
| Turnip / Mesa | Freedreno team @ Mesa |
| Proton layers (bionic) | GameNative |
| Steam depot engine | JavaSteam by Longi94 · depotdownloader fork joshuatam |
| Steam emulator (Goldberg auto-patch) | Goldberg Steam Emu (Mr_Goldberg) · gbe_fork (Detanup01) |
| Controller vibration (PC-accurate rumble) | Feature GameNative #1214 · port + preload-free winebus duration patch TideGear (#91) |
| Gyroscope (motion aim) | Rate-mode pipeline + axis conventions from WinNative |
| Frame Generation (win-fg) | Bannerlator (clean-room) |
| Frame Generation (lsfg-vk) | PancakeTAS · Android port FrankBarretta · live-reload fork GameNative · DLL Lossless Scaling (user-supplied) |
| Post-processing (ReShade / vkBasalt) | vkBasalt by DadSchoorse (zlib) · Winlator packaging Pipetto-crypto · effects by crosire · prod80 · luluco250 · fubax (MIT / CC0) |
Much of Bannerlator's polish is driven by the people who file issues and test builds. Recent features came directly from:
DXVK_DISABLE_TIMELINE_SEMAPHORES, VKD3D_SHADER_MODEL).…and everyone in the Discord and on GitHub who tests builds and reports issues. 🙏
Additional credits surfaced in the Star Bionic REVAMPED project (star.bionic-revamp):
If you have contributed and are not listed, open a PR — this list is intended to be complete.
Winlator and its forks are unofficial community projects. They are not affiliated with or endorsed by Microsoft, Wine, the Mesa project, Qualcomm, Valve/Steam, Epic Games, GOG, Amazon, or any game publisher. The built-in store sign-ins are a third-party login system for libraries you already own — see Security Hardening & your store accounts, and use them at your own risk. Compatibility varies by device GPU, Android version, and individual game.
Bannerlator is licensed under GPL-3.0 as a whole, because it incorporates GPL-3.0-licensed components (notably GameNative and lsfg-vk), whose copyleft governs the combined distribution.
The upstream Winlator → cmod → Bionic → Star → Ludashi lineage it builds on is MIT © 2023 BrunoSX (permissive, and GPL-3.0-compatible). That MIT notice — and the license and copyright of every incorporated component (GameNative, lsfg-vk, gbe_fork/Goldberg, vkBasalt, bcn_layer, JavaSteam, Wine/Box64/Mesa/DXVK, FSR/NIS/SGSR, ReShade shaders, …) — is preserved in THIRD-PARTY-LICENSES.md.
See LICENSE for the full GPL-3.0 text and THIRD-PARTY-LICENSES.md for all third-party attributions.
Kotlin
35.2%
C
24.7%
Java
23.1%
C++
10.0%
Rust
5.5%
Windows applications and games on Android.
Contents • Ask AI • Download • Config Library • Mali Reports • Discord • Telegram • Builds • Credits
Bannerlator is a personal build — made by me (The412Banner), for my own device, my own needs, and my own use.
It's a personal continuation of the Winlator Star Bionic project (star-emu/star) after it was discontinued and archived. None of the original developers are involved except me; it stands on their work plus cherry-picked commits from across the community — all credited below.
This is NOT an official or general-purpose Winlator release. It is built and tuned for my hardware and my workflow, and published as-is purely in case it happens to be useful to someone else.
- No guarantee it works on any other device, GPU, or Android version.
- No support, and no commitment to fix anything that works for me but not for you. If a feature works on my device, it isn't broken — for me, which is what this build is for.
- Bug reports / feature requests for setups I don't run may simply be closed. That's not personal; this just isn't a community-support project.
You're free to use, modify, fork, or share it (GPL-3.0). If it doesn't work on your setup, that's expected — it wasn't built for it.
All coding, features, and changes in this project are developed with the assistance of Claude AI by Anthropic. Claude is used to help with the heavy lifting — writing, reviewing, and modifying the emulator's code and the features added here: the Kotlin/Compose app shell and the native emulation glue (Wine/Proton, box64/FEX, DXVK/VKD3D → Vulkan), the storefront and cloud-save integrations, and the per-game/container features — as well as porting and re-deriving community changes into this build.
Before any stable release is published, all changes are manually debugged and tested by me across multiple devices — both rooted and unrooted. Debugging is done using logcat/getlog output and in-app debug log files to diagnose and verify behaviour, and no stable release is cut until the change is verified end-to-end on real hardware. Test devices:
A note on root: using any root-only features is entirely your own choice and at your own risk. I don't encourage rooting your device in general — especially without the proper knowledge and tools to do it correctly. Bannerlator runs fine unrooted; root only unlocks a few optional performance extras.
| App label | Bannerlator Bionic (standard) · Bannerlator Bionic PuBG (pubg) · Bannerlator Bionic Ludashi (ludashi) |
| Packages | com.winlator.banner (standard) · com.tencent.ig (pubg) · com.ludashi.benchmark (ludashi) |
| Version | Bannerlator V 3.0.4 — built from Star marcescence (versionName 3.0.4, versionCode 78) |
| Android SDK | compileSdk 34 · targetSdk 28 · minSdk 26 (Android 8.0+) |
| Lineage | Winlator → cmod → Bionic Nightly → Star Bionic → marcescence → Bannerlator |
Games misbehaving on a Mali GPU (Exynos / Dimensity / Kirin / Helio devices)? We run a dedicated public bug-report board for Mali devices — file a structured report with your logs, and get answers back from the developers in a public discussion thread on each report.
Every report gets its own public discussion thread. You can reply as the original poster — no account or password needed — and the developers answer right there in the thread.
A Steam-focused update on top of the 3.0.1 point release — Friends & Chat, real-Steam (VAC) online play, achievements & cloud saves, one-touch save syncing and SD-card installs, plus graphics / frame-gen and runtime polish. Entirely app-side — no ImageFS reinstall; install over 3.0.x and your containers, Wine installs, themes, accent colour and per-game settings all carry over. (Real-Steam is a separate one-time in-app download.)
…_win64) so the game launches secure regardless of which exe the shortcut names, pops the in-game gold achievement pill for real-Steam unlocks, and can capture an opt-in scrubbed log for diagnosing a launch. The Steam client + clean-room headless agent ship as a downloadable steamlite-v1 content package, installed from inside the app. Device-proven online on Counter-Strike 1.6, Counter-Strike: Source, Team Fortress 2 and Left 4 Dead 2 (VAC-secured), plus Brawlhalla and Stumble Guys (live-service); Borderlands 2 is in testing.Also rolled up from the 3.0.1 point release on 3.0.0: swipeable on-screen controls (slide-to-press, a per-element toggle and a dedicated Swipe drawer tab), an LSFG frame-gen fix, a Steam depot OOM fix (#408), a controls-alignment fix (#413), and assorted File-Manager / ETA / crash fixes.
The big 3.0 stable — rolls up everything since 2.9.9, including the 3.0.0-pre1 / pre2 opt-in betas. Entirely app-side — no ImageFS reinstall; install over 2.9.9 and your containers, Wine installs, themes, accent colour and per-game settings all carry over. Full notes on the 3.0.0 release page.
Frame generation (lsfg-vk and win-fg) inserts AI-generated in-between frames to make motion look smoother — it helps most when a game runs below your screen's refresh rate. It runs on the Vulkan renderer.
Present mode decides how finished frames are handed to your screen:
| Mode | What it does |
|---|---|
| FIFO (default) | "Vsync on" — smooth, tear-free, most battery-friendly, but it makes the game wait for the display. |
| Mailbox | "Fast vsync" — never makes the game wait, still tear-free. The right mode for frame generation, so its extra frames actually reach the screen. |
| Immediate | "Vsync off" — lowest input lag, but can tear. |
Bannerlator automatically switches to Mailbox while frame generation is running, then restores your chosen mode when it turns off — because FIFO would otherwise throttle the generated frames before they reach the screen. You can also switch modes live from the Present Mode selector in the in-game Graphics tab, and every mode is explained by a "?" button and in the in-app "What is all this?" glossary.
With frame generation on, two apps' FPS numbers can look very different — because they count frames at different points in the pipeline:
Neither number is "frames on glass." Your panel's refresh rate (e.g. 120 or 144 Hz) is the true ceiling — above it, frames are generated but not shown. A result like 65 → 107 fps at 2× on a demanding game, with the frametime roughly halving, is frame generation working correctly.
Everything Bannerlator offers, at a glance. No PC and no root required — it runs Windows apps and games directly on your Android device.
.so) matching: whichever FEXCore version you pick per game or container, the native .so companion is kept in sync on every launch (matched for unixlib builds, cleared for DLL-only), so there's never a stale or mismatched .so.📖 Not sure which graphics driver or wrapper to use? Read the wrapper & driver guide → — what a wrapper actually does, a pick-by-GPU table (Adreno / Mali / Xclipse / PowerVR), every built-in driver explained, all 18 catalog wrappers with their authors and upstream links, which of them are byte-identical across projects (so you don't test the same file twice), and troubleshooting.
📖 New to VEGAS? Read the VEGAS DXVK FAQ — install, config, FSR, tiers, frame generation & shader-stutter troubleshooting.
🚀 Support VEGAS Development — low-level graphics dev & vibecoder: debugging, refactoring & improving original DXVK code for Adreno. ❤️ Sponsor isygold →
owner/repo) on top of the built-in sources, so you can pull Turnip / driver builds straight from the repos you trust. (Requested in #160.).tzst wrapper (from another project or your own build), browse a curated downloadable catalog of wrappers from across the Winlator family (each credited to its source, flagged "Mali only" where relevant), and get auto-detected settings — real toggles / sliders / dropdowns read straight from what each wrapper actually supports, with driver internals and log noise filtered out. Per-entry Update / Reset / Edit / Delete / Details plus a pre-import inspection view. (Modeled on WinlatorMali's graphics-driver manager; requested in #132.) 📖 Which wrapper for my device? →ℹ️ The Vulkan host renderer uses the rendering path from StevenMXZ (Winlator-Ludashi); its
AHardwareBufferpresent path — what makes Vulkan / DXVK / VKD3D content actually display correctly — was ported from / cross-examined against GameNative. See Credits.
.fx effects (colour grading, sharpen, film grain, CRT, tonemap…) on DXVK / VKD3D games. Effects compile on-device via a bundled vkBasalt layer; pick from an on-demand catalog of ~100 curated MIT/CC0 effects or drop your own into the ReShade/ folder. A dedicated in-game ReShade tab auto-generates properly typed controls (sliders / toggles / dropdowns / colour pickers) from each shader, so you can toggle and tune effects live with a Reset-to-defaults button. Effects are configured per game (container or shortcut), persist across relaunch, and can be run solo or stacked. (Color effects today; depth effects such as SSAO/DOF are not included yet.)
⚠️ Stacking multiple effects? Add them a few at a time. Each effect compiles on-device and costs GPU — selecting too many at once can stop a game from starting, showing a flat / blank screen instead of the game. If that happens, uncheck effects one at a time (or the specific heavy one) in the per-game ReShade effect settings until it boots, then add more gradually.
ℹ️ Why win-fg exists, and what it is. Bannerlator previously bundled a different frame-generation layer that was later found to embed compute shaders whose model weights were essentially identical to the proprietary Lossless Scaling frame-generation model — which cannot be redistributed. That layer was removed, and win-fg is its clean-room replacement: a frame-gen engine we built from the ground up. Its motion estimation is our MIT adaptation of AMD FidelityFX FSR3 optical flow (an algorithm — no learned weights), and its frame synthesis is written from first principles using published, permissively-licensed math. It bundles no proprietary code or weights. That's also why the two engines sit side by side: lsfg-vk relies on your own legally-owned
Lossless.dll, while win-fg is entirely Bannerlator's own and needs nothing to run.
⚠️ lsfg-vk requires you to supply your own
Lossless.dll. Bannerlator bundles no proprietary Lossless Scaling files. You must own Lossless Scaling (THS, on Steam) and import itsLossless.dllvia Settings → Frame Generation (lsfg-vk) → pick DLL. The DLL is copied into app storage and serves all containers. Until you import a validLossless.dll, the lsfg-vk option stays greyed out; win-fg needs no DLL and works without it.
IdleNotify that frees the guest's buffer, so the game itself throttles (the in-game HUD reflects the cap and GPU/power draw drops). Works the same with frame gen Off, win-fg, or lsfg-vk, on both host renderers, all guest APIs. When lsfg-vk is multiplying (2×+) the limiter automatically steps aside so lsfg's own pacing governs — no double-cap. This guest-side present-pacing mechanism was ported from GameNative (see Credits).Power-user device-tuning, reachable from App Settings → Performance and mirrored live in the in-game Debug tab (kept in two-way sync), with global defaults and optional per-game overrides — an override is honored only when it differs from the global default, and each has a one-tap reset-to-global.
DXVK_HUD variable stays listed but empty in the env-var editor, so it's one tap to opt back in whenever you want it..exe, or a whole games folder (point at a library folder and every game subfolder is scanned for its real executable, named and cover-arted for one-tap batch add)..exe auto-resolves the authoritative game name and cover art from the Steam store, fixing generic launcher-exe misnames, with a Search Steam confirm step.Browse community-shared, per-game / per-device tuning configs in-app and apply a known-good setup in one tap.
Sign in to your existing storefronts and play from libraries you already own — Bannerlator does not sell, bundle or circumvent any game or DRM.
LaunchApp, not an insecure CreateProcess) and watches the launcher exe so the game launches secure regardless of which exe the shortcut names. The Steam client + agent ship as a downloadable steamlite-v1 content package, installed from inside the app. Device-proven online: CS 1.6, CS: Source, Team Fortress 2, Left 4 Dead 2 (VAC-secured), Brawlhalla and Stumble Guys (live-service); Borderlands 2 in testing.🔒 These sign-ins are a third-party login system, exactly like any other emulator/launcher that logs into these stores — use them at your own risk (see Security Hardening).
The Steam / Epic / GOG / Amazon sign-ins are a third-party login system, exactly like any other emulator or launcher that logs into these stores. Bannerlator is not affiliated with, authorised by, or endorsed by Valve/Steam, Epic Games, GOG, or Amazon.
StoreLog.redactUrl helper: signed download / manifest URLs (Amazon / Epic / GOG CDN links carry access tokens in the query), OAuth authorization codes, GOG client_secret + refresh_token, and account identity IDs (Epic account ID, GOG user ID). Steam credentials were already redacted. None of this changes how login, downloads or cloud saves work — only what gets written to a log..lnk working-directory ("Start in") support so shortcuts for apps that only run from their own folder launch correctly.The bundled Windows file manager (C:\windows\wfm.exe) is Banner File Manager — our own native Win32 file manager, forked from BrunoSX's Winlator File Manager (MIT). It ships in every new container's Start menu.
View ▸ Split View) — two independent panes, active one highlighted, copy between them.SHFileOperation — sidesteps the Wine shell32 copy-paste crash on Proton 10.0-4.Source, releases & issues: github.com/The412Banner/banner-file-manager.
.so) or the classic DLL path is active. Read straight from the running process, so it reflects reality, not just the setting.Besides the built-in download catalog, you can add any ReShade effect yourself by dropping it into a folder. Follow these steps exactly:
1. Open the ReShade drop-in folder on your device (create the ReShade folder if it isn't there yet):
Android/data/com.winlator.banner/files/ReShade/
📁 That path is for the Standard build. For the other builds, swap the package name: PuBG →
Android/data/com.tencent.ig/files/ReShade/· Ludashi →Android/data/com.ludashi.benchmark/files/ReShade/.
2. Make one folder per effect. Name the folder whatever you want the effect to be called in the menu — for example MySepia.
3. Put the effect's files inside that folder — all in the same place, next to the .fx:
.fx file (required),.fxh files it #includes (very common — e.g. ReShade.fxh, ReShadeUI.fxh),ReShade/
MySepia/
MySepia.fx ← the effect (folder name match = used first)
ReShade.fxh ← copy in any .fxh the .fx #includes
ReShadeUI.fxh
noise.png ← copy in any textures it uses
4. Pick it in the app. Open the app → edit a container or a game shortcut → ReShade effect picker. Your folder now appears in the list — select it.
5. Use it in-game. Launch a DirectX (DXVK / VKD3D) game, open the in-game drawer → ReShade tab, and turn the effect on/off and tune its sliders live.
⚠️ Read this if something doesn't show up or work
- Only colour effects work — sharpen, colour grading, film grain, CRT, tonemap, vignette, etc. Depth effects (SSAO, depth-of-field, MXAO) do not work yet.
- ReShade only affects DirectX games running through DXVK / VKD3D — it does nothing on OpenGL / WineD3D / older 2D titles.
- Effect not in the list? Make sure it's in its own subfolder and that the subfolder actually contains a
.fxfile (a loose.fxsitting directly inReShade/is ignored).- Effect selected but no change in-game? Most often a missing
#include— open the.fxin a text editor, find any#include "Something.fxh"lines, and make sure each of those.fxhfiles is copied into the same folder as the.fx. Same for any texture files.- Game won't start / flat or blank screen after enabling effects? You likely stacked too many effects at once. Each one compiles on-device and costs GPU, and too many together can stop the game from launching. Go back into the per-game ReShade effect settings and uncheck the effects one at a time (or the specific heavy one) until the game boots correctly, then re-enable them gradually. Adding effects a few at a time avoids this.
- Can't even find
Android/data? Many stock file managers hide it on Android 11+. Use a file manager that can openAndroid/data, or copy the effect folder over from a PC via a USB cable, then drop it in.
Bannerlator does not work by itself on frontends out of the box. See the frontends workaround guide to get it running.
This project is built via GitHub Actions only — local builds are not supported.
Got a question about Bannerlator? Ask the codebase directly. An AI reads the actual source code and answers with the exact file names and line numbers, so you can check it yourself. It never guesses — if the answer isn't in the code, it says so.
It's three steps:
That's it — no form, no approval step, nothing else to do.
ℹ️ The AI replies to every new issue automatically. A few per person per day are free; past that, it will ask you to try again later.
Good things to ask:
Avoid device-specific troubleshooting like "why is my game slow?" — the AI explains what the code does, not how a game runs on your phone.
With opencode installed (npm install -g opencode-ai), run the
same agent locally against a clone of this repo:
opencode run "your question" --agent ama-agent --model opencode/big-pickle
The bot runs on the opencode/big-pickle model via your opencode credentials (not a separate API key). To enable it on a fork:
cat ~/.local/share/opencode/auth.json and copy the whole JSON.OPENCODE_AUTH under
Settings → Secrets and variables → Actions.answered and question labels exist.Every newly opened issue is answered automatically, bounded by a per-user daily
limit and a monthly cap — tune both at the top of
.github/workflows/ama-answer.yml (PER_USER_PER_DAY, MONTHLY_CAP;
maintainers are exempt from the daily limit). You can also force a re-run on an
older issue by adding the question label. Without the secret, the bot posts
a notice explaining what's missing.
This build stands on a long chain of prior work — its direct lineage, plus the projects whose commits and work are cherry-picked and implemented here:
| Contributor | Contribution |
|---|---|
| brunodev85 | Original Winlator — Wine + Box64 + Turnip on Android. Foundation of every fork below. Also serves the input_controls profiles consumed by this fork: https://raw.githubusercontent.com/brunodev85/winlator/main/input_controls/ |
| coffincolors | cmod Winlator fork — package com.winlator.cmod and the customization layer this codebase is built on. |
| Pipetto-crypto | Winlator Bionic fork (the "Bionic" half of Star Bionic) and the upstream Box64 fix branch. Co-credited on cmod. Also packaged vkBasalt into the Winlator shortcut pipeline — the integration Bannerlator's ReShade feature builds on. |
| jacojayy | Maintainer of the Star line. Timeline Semaphore patches in the bundled Turnip driver for newer DXVK compatibility. Official site developer and maintainer. |
| Star / Frost dev team | The star-emu team behind the original Star Bionic and Winlator Frost lines this build continues from. |
| isygold (AGBOOLA Israel Oluwagbogo) | Star Engine / VEGAS — the Adreno-optimized DXVK fork this build's v1.3-vegas is named for, eliminating stutter and adding real-time upscaling on mobile GPUs, plus tuned dxvk.conf profiles. See the VEGAS DXVK FAQ for help & configuration.🚀 Support VEGAS Development — low-level graphics dev & vibecoder: debugging, refactoring & improving original DXVK code for Adreno. ❤️ Sponsor → |
| vivsi | Controller support contributions. |
| arro000 | Virtual Controller Pro (#156) — a ground-up on-screen touch-controls overhaul: new control types (Dynamic Stick, Mouse Area, Button Grid, Expandable Buttons), a Jetpack Compose-rebuilt controls editor with an in-game live editor, control groups, key combos, per-element dead zones, custom control icons, and a control scale limit raised to 300%. |
| StevenMXZ | Winlator-Ludashi and extensive cherry-picked work implemented in this build. This includes the new user interface and the Vulkan rendering path — both of which were still unreleased and unfinished at the time these builds and this repo were created — along with various other cherry-picked commits. This work is set to be released properly in his upcoming 3.1. |
| GameNative | GameNative by utkarshdalal — Proton bionic translation layers and cherry-picked commits adapted into this build. Its rendering pipeline was also the reference used to fix and rewire Bannerlator's render options — the AHardwareBuffer present path that makes Vulkan / DXVK / VKD3D content render correctly on both the OpenGL and Vulkan host renderers (GPUImage socket-buffer locking + EGLImage sampling, DRI3 direct-scanout, the Present extension's FLIP / COPY branches, and the Native Rendering+ direct-scanout path) was ported from and cross-examined against GameNative's implementation. The standalone FPS limiter is GameNative's too — its guest-side present-pacing mechanism (delaying the X11 Present IdleNotify to throttle the game itself, plus the rule that lsfg-vk's own pacing governs when its multiplier is ≥ 2) was ported from GameNative. For the Steam store (2.3), the session-hardening patterns (derived-loggedIn state, off-pump PICS sync, single reconnect funnel, dead-token clearing, keep-alive / watchdog) and the DownloadSpeedConfig cores × ratio 4-tier download-speed model were also ported / adapted from GameNative. The PC-accurate controller vibration feature (dual-motor rumble with per-container mode + intensity) originates from GameNative #1214, reaching this build via TideGear's port (see below). In 2.9.8, the external-display ("game on TV") concept and the suspend-sink audio-recovery approach (re-establishing the guest's audio output after backgrounding or a mid-game output-route change) were referenced from GameNative and reimplemented clean-room — the TV Options suite and Bannerlator's native pasink libpulse audio client are original work, and the wireless casting feature is entirely Bannerlator's own with no upstream equivalent. |
| TideGear | GameHub-Vibration-Fix — the PC-accurate controller vibration work this build's rumble is built on. TideGear authored both halves: the original vibration feature PR (carrying GameNative #1214 forward) and the preload-free winebus.so rumble-duration patch (PR #91) that drops the libevshim LD_PRELOAD hook and instead byte-patches SDL's rumble duration to never auto-expire — which is what makes sustained rumble actually hold instead of dying after ~1s. Adopted with the author's permission. Bannerlator re-derived the patch patterns per Proton build (9.0 / 10 / 11 aarch64 + Wine 10.0 x86-64) and added a build-agnostic structural fallback. |
| WinNative | WinNative — the reference for Bannerlator's gyroscope (motion aim) support. Its rate-mode gyro implementation is what ours is derived from: the sensor→stick pipeline (deadzone → sensitivity → exponential low-pass → clamp), the axis and sign conventions, and the fractional-remainder accumulator that keeps slow tilts from rounding away to nothing. Bannerlator adapted it to our evdev gamepad-injection path and extended the gyro-mouse mode to also drive the X pointer directly, so motion control works on a Wine container desktop and not only in captured mouse-look games. GPL-3.0, same as this project. |
| win-fg (Bannerlator) | Frame generation is powered by win-fg, Bannerlator's own clean-room Vulkan layer — FSR3 optical flow (MIT, AMD FidelityFX) plus a from-scratch synthesis. No third-party frame-generation code or weights are bundled. |
| PancakeTAS | lsfg-vk — the open-source Vulkan frame-generation layer (a Vulkan-layer reimplementation of Lossless Scaling's frame generation) that Bannerlator's second, user-selectable FG engine is built on. |
| FrankBarretta | lsfg-vk-android — the Android/bionic port of lsfg-vk (AHardwareBuffer path + vkCmdPipelineBarrier2 shim) that runs as Bannerlator's lsfg-vk engine on the Turnip stack. The in-game live multiplier/flow-scale reload uses the conf.toml mtime-watch mechanism from GameNative's lsfg-vk-android fork. No proprietary shaders are bundled — users supply their own Lossless.dll (Lossless Scaling by THS) via the in-app picker. |
| DadSchoorse | vkBasalt (zlib) — the Vulkan post-processing layer that embeds the ReShade FX compiler. Bannerlator's ReShade feature is a continuation of this work: the bundled layer is built from DadSchoorse's source, patched for live on-device toggle and slider control. The bundled / catalog .fx effects are MIT / CC0 shaders by the ReShade (crosire), prod80 (prod80-reshade-repository), luluco250 (FXShaders) and fubax authors, each under their own MIT / CC0 license. |
| leegao (Lee Gao) | Vulkan texture-compression work used for mobile-GPU compatibility and performance — the BCn decompression layer (shader-v3, powering 2.5's "Wrapper + bcn_layer" Mali driver) and the DX12 compat_layer that, alongside it, powers 2.7's new opt-in "Wrapper + compat + bcn" Mali DX12 driver — including the just-landed layer-composition fix — plus real-time ASTC/ETC compute-shader encoders and the bionic-vulkan-wrapper (ETC2-Milestone-2) bundled as the base wrapper for the Mali BCn path. |
| WinterSnowfall | d7vk — the DXVK-lineage Vulkan implementation of DirectX 7 / DirectDraw (Direct3D 3–7) that powers Bannerlator's new D7VK DDraw-wrapper option (new in 2.9.6). Bundled as the default and offered as downloadable nightly catalog builds. |
| WinlatorMali (GunaCharanTeja / Charan) | WinlatorMali — the Wrapper Version Manager (new in 2.7) is modeled on WinlatorMali's graphics-driver manager, introduced in Winlator Mali Bionic 1.1; a number of the downloadable catalog wrappers come from WinlatorMali too (each credited in-app). The feature was requested in #132 by @6ui99uhkllj. |
| BrunoSX | The bundled Windows file manager is Banner File Manager (new in 2.7.1), Bannerlator's fork of BrunoSX's Winlator File Manager (MIT) — rebuilt with native Win32 file operations (sidestepping the Proton 10.0-4 shell32 copy-paste crash), a dual-pane split view, and Open-as-administrator / Open-with. |
| @Tony57319 | Reported / requested the lsfg Performance mode frame-gen toggle new in 2.7.1 (#152). |
| @clintOnSky 🌱 (first-time contributor) | Downstream fixes surfaced in #96, applied to main individually: the Xiaomi/HyperOS libjpeg.so symlink-shadow removal that lets the frame-gen Vulkan layer load; the sign-agnostic battery-wattage fix for Xiaomi/MTK devices that report discharge current as positive; and the WOWBOX64 content-type fix for arm64ec Box64 downloads with live refresh of the component version lists after a download sheet closes. |
| JavaSteam | JavaSteam (in.dragonbra:javasteam) by Longi94 — the Steam connection-manager client the built-in Steam store logs in and talks to Steam with, and — via the javasteam-depotdownloader fork by joshuatam — the entire depot-download engine Bannerlator's Steam store is built on. |
| Goldberg Steam Emu / gbe_fork | Goldberg Steam Emu by Mr_Goldberg, and gbe_fork by Detanup01 — the Steam emulator Bannerlator's Goldberg auto-patch installs (Regular / Experimental / ColdClient tiers) for offline / emulated play of games you own. |
| Pluvia | Pluvia — an Android Steam client whose patterns were referenced alongside GameNative while building the Steam store's login / session handling. |
| The412Banner | Full Jetpack Compose UI migration, in-game overlay rewrite, controller-support restore (SDL2 SoName fix + four event files), Box64 edit-dialog fix, theme system, and CI/release infrastructure. In 2.3, building on JavaSteam / GameNative / Goldberg, the original engineering is Bannerlator's own: the cross-store Download Manager, the four storefront integrations (Steam / Epic / GOG / Amazon), the multi-week Steam session-hardening work, the depot OOM fix, the Goldberg auto-patch integration, the store Material-3 restyle, and the store-log credential redaction (StoreLog.redactUrl). In 2.4, the fullscreen aspect-ratio pipeline (Off/Fit/Stretch/Fill/Integer across all three renderers), the in-app File-Manager import picker replacing SAF (with image thumbnails + percent/ETA import progress), the DLC picker, the true-size depot install fix, per-game persistence of scaling / fullscreen / HUD position, and the container wallpaper picker. In 2.5, the Mali / BCn hardening — wiring leegao's bcn_layer (shader-v3) + ETC2-Milestone-2 wrapper into the "Wrapper + bcn_layer" and experimental "Wrapper-gamenative" drivers, the BCn Layer Settings UI, and the in-game logging overhaul (copy-logs button, selectable log location, co-located DXVK/VKD3D logs, scrollable debug-channels dialog). In 2.5.1, the SurfaceFlinger colour + crash fix and per-container / per-game "Correct SurfaceFlinger colours" toggle (ASurfaceRenderer R/B-swap fix + GPU converter, ported from GameNative #1620 / #1644), the in-game FEX runtime indicator (arm64ec / x86-64 · FEXCore / wowbox64 / Box64 · unixlib / DLL, read live from /proc/<pid>/maps), the FEXCore unixlib (.so) auto-match at launch (per-game version sync + uninstall cleanup), and 18 new Environment Variable presets (DXVK / VKD3D / Wine / Mesa). In 2.5.2, the Community Configs system — the in-app catalog browser, per-uploaded-config cards with live upvotes / downloads / comments, the surgical config-apply engine, and the smart inline installer for DXVK / VKD3D / FEXCore + Turnip drivers — plus two new Proton 11.0-1 x86-64 compatibility layers (SDK 28 / SDK 35) built and published to the downloadable catalog. Also maintains the Nightlies WCP Hub and Banners-Turnip. |
The Wine/translation stack this app bundles or downloads:
| Component | Author |
|---|---|
| Wine | WineHQ |
| Box64 / Box86 | ptitSeb |
| FEXCore | FEX-Emu |
| DXVK | doitsujin / Philip Rebohle |
| DXVK-GPLAsync patch | Ph42oN |
| DXVK-Sarek | pythonlover02 |
VEGAS (Adreno-tuned DXVK / GPLAsync fork — v1.3-vegas) | isygold · FAQ · ❤️ Sponsor |
| D7VK (DirectX 7 / DirectDraw → Vulkan) | WinterSnowfall |
| VKD3D-Proton | Hans-Kristian Arntzen |
| Turnip / Mesa | Freedreno team @ Mesa |
| Proton layers (bionic) | GameNative |
| Steam depot engine | JavaSteam by Longi94 · depotdownloader fork joshuatam |
| Steam emulator (Goldberg auto-patch) | Goldberg Steam Emu (Mr_Goldberg) · gbe_fork (Detanup01) |
| Controller vibration (PC-accurate rumble) | Feature GameNative #1214 · port + preload-free winebus duration patch TideGear (#91) |
| Gyroscope (motion aim) | Rate-mode pipeline + axis conventions from WinNative |
| Frame Generation (win-fg) | Bannerlator (clean-room) |
| Frame Generation (lsfg-vk) | PancakeTAS · Android port FrankBarretta · live-reload fork GameNative · DLL Lossless Scaling (user-supplied) |
| Post-processing (ReShade / vkBasalt) | vkBasalt by DadSchoorse (zlib) · Winlator packaging Pipetto-crypto · effects by crosire · prod80 · luluco250 · fubax (MIT / CC0) |
Much of Bannerlator's polish is driven by the people who file issues and test builds. Recent features came directly from:
DXVK_DISABLE_TIMELINE_SEMAPHORES, VKD3D_SHADER_MODEL).…and everyone in the Discord and on GitHub who tests builds and reports issues. 🙏
Additional credits surfaced in the Star Bionic REVAMPED project (star.bionic-revamp):
If you have contributed and are not listed, open a PR — this list is intended to be complete.
Winlator and its forks are unofficial community projects. They are not affiliated with or endorsed by Microsoft, Wine, the Mesa project, Qualcomm, Valve/Steam, Epic Games, GOG, Amazon, or any game publisher. The built-in store sign-ins are a third-party login system for libraries you already own — see Security Hardening & your store accounts, and use them at your own risk. Compatibility varies by device GPU, Android version, and individual game.
Bannerlator is licensed under GPL-3.0 as a whole, because it incorporates GPL-3.0-licensed components (notably GameNative and lsfg-vk), whose copyleft governs the combined distribution.
The upstream Winlator → cmod → Bionic → Star → Ludashi lineage it builds on is MIT © 2023 BrunoSX (permissive, and GPL-3.0-compatible). That MIT notice — and the license and copyright of every incorporated component (GameNative, lsfg-vk, gbe_fork/Goldberg, vkBasalt, bcn_layer, JavaSteam, Wine/Box64/Mesa/DXVK, FSR/NIS/SGSR, ReShade shaders, …) — is preserved in THIRD-PARTY-LICENSES.md.
See LICENSE for the full GPL-3.0 text and THIRD-PARTY-LICENSES.md for all third-party attributions.
Kotlin
35.2%
C
24.7%
Java
23.1%
C++
10.0%
Rust
5.5%