Skip to content

Latest commit

History

2,564 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Bannerlator

Bannerlator

Windows applications and games on Android.

Total DownloadsPlatformLicenseAsk the AI

Support on Ko-fi

Download Latest ReleaseCommunity Config LibraryReport a Mali GPU game issue

ContentsAsk AIDownloadConfig LibraryMali ReportsDiscordTelegramBuildsCredits


📌 Project Notice

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.


🤖 AI Disclaimer

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:

  • Samsung Galaxy Fold 8 Ultra — Snapdragon 8 Elite Gen 5 — not rooted
  • AYANEO Konkr Pocket Fit — Snapdragon G3 Gen 3 — rooted
  • Odin 2 Portal (base) — Snapdragon 8 Gen 2 — rooted
  • Retroid Pocket 5 — Snapdragon 865 — rooted

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.


ℹ️ Information

App labelBannerlator Bionic (standard) · Bannerlator Bionic PuBG (pubg) · Bannerlator Bionic Ludashi (ludashi)
Packagescom.winlator.banner (standard) · com.tencent.ig (pubg) · com.ludashi.benchmark (ludashi)
VersionBannerlator V 3.0.5 — built from Star marcescence (versionName 3.0.5, versionCode 79)
Android SDKcompileSdk 34 · targetSdk 28 · minSdk 26 (Android 8.0+)
LineageWinlator → cmod → Bionic Nightly → Star Bionic → marcescenceBannerlator

🐛 Report a Mali GPU Game Issue

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.

File a Mali reportBrowse all Mali reports

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.


📖 Contents


🆕 What's New in 3.0.2

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

  • 🖥️ Steam Friends & Chat (off by default). A full friends list with live presence (online / in-game / away), unread badges and collapsible sections; per-friend chat with text and images, persisted history that opens at the newest / first-unread message, add-by-code / name-search / quick-invite, an in-app friend profile, a landscape two-pane view, chat notifications with a sound toggle, typing indicators, and instant reconnect after a background drop. The whole feature is a master opt-in that stays dormant until you turn it on. 🙏 Thanks to iamtooshaar (Discord) for helping test and shake out the bugs.
  • 🔐 SteamLite — real Steam (VAC) online. A new launch mode that runs a game through the genuine Steam client for a VAC-eligible, online session — chosen per game in the launch popup (RealSteam / Goldberg / Raw). It watches the game's launcher exe (not the arch-specific …_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.
  • 🏆 Achievements & cloud saves — in both launch modes. Real Steam achievements are seeded from your account into a tabbed detail-page grid, with in-game gold pills as you unlock them — and they unlock and sync whether you play through Goldberg (emulated) or SteamLite (real Steam / VAC), the same pill and the same sync-back either way. Cloud saves keep parity around each play session, and a new one-touch "Sync Now" button on the Save Manager banner syncs every flagged game at once — each in the correct direction (upload what's newer locally, pull what's newer in the cloud) — with a live "Syncing 3/7…" count instead of tapping each game.
  • 💾 Install Steam games to an SD card. A per-game toggle installs a Steam download onto a removable SD card to free internal space; the shortcut resolves through a container drive letter, so secure launch, saves and achievements are unaffected.
  • 🏪 Rebuilt Steam store. The per-game detail screen was redesigned into a cleaner, landscape-aware tabbed layout (overview · achievements grid · DLC) with the store badge, connection state and launch actions in one place — plus a live connection pill, auto-connect on launch, download hardening and full owned-DLC listing.
  • 🎞️ Graphics & frame-gen fixes. A fuller frame-gen pause / teardown / resume reset on level / model / preset change, a swapchain-recreate config reload, an Adreno-840 present-id freeze fix, and in-app frame-gen diagnostics.
  • 🎛️ Containers, launch & file manager.DXVK HUD is now off by default on new containers (still toggleable in the env-var editor), a redesigned source- and orientation-adaptive launch popup, a CUSTOM origin badge for games you add yourself, and file attributes (Read-only / Hidden) shown in the File Manager.

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.

🆕 Earlier — 3.0.0 (the big 3.0 stable)

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.

  • 🔊 New three-engine audio stack (the headline). The ground-up audio rebuild that was "coming soon" in 2.9.9 has landed: a new adaptive PulseAudio engine (grows its buffer on crackle/underruns, re-opens cleanly when your output changes), a second adaptive ALSA engine, and an experimental third DirectAudio driver — each with an Audio cog in the container editor, per-game shortcut settings and the in-game side-menu, presets + fine-tune rows, a per-row "?" explanation, and a latency slider that really drives the buffer. Strict per-engine / per-scope settings mean changing one never rewrites another.
  • 🛒 Storefronts + automatic cloud saves across GOG, Epic & Steam. GOG gets a major overhaul — automatic cloud saves (auto-path, upload-on-exit / download-on-launch, content-hash skip), MD5 verify + repair, redistributable auto-install, per-DLC installs, faster parallel downloads, and a Save Manager tab with cover art. Epic / EOS adds cloud saves, real launch-time sign-in + EOS game IDs, EPIC/EOS badges, Denuvo & offline support, and a robust cancelable downloader. Steam adds one-tap Lossless Scaling "Detect from store", beta-branch selection, and non-game apps in your library.
  • 🎮 Games & shortcuts. The internal-storage intro-movie hang fix — add a game from Drive C and Copy game to Drive C (moves a game onto the container's fast C: drive and re-points the shortcut), plus Change executable, a file picker that opens at your storage root with a working Back button, responsive shortcut settings, per-DLL toggles, per-game graphics persistence, and an opt-in Big Picture games wall.
  • 🖥️ Graphics & performance. Hardened Native Rendering with a per-container / per-game backend picker, clean-room win-fg frame generation (replaces bionic-fg, adapts AMD FidelityFX FSR3), Samsung Galaxy no-root power control, a live Performance dashboard, an upgraded Fusion HUD (battery temp, accurate DXVK/VKD3D label), and a new Contents hub for browsing/installing/removing GPU drivers & components. Plus a wrapper + Adreno Vulkan fix (#403) — DXVK/games start again on wrapper drivers and low-tier Adreno (e.g. 610).
  • 🐛 Stability. Rootless native crash-capture with real backtraces, a background-pause fix for games with very long executable names, malformed-environment-variable resilience, and assorted X-server leak/crash fixes.

🎞️ Frame Generation & Present Modes

Frame generation inserts 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, and there are two engines:

EngineWhere it runsNeeds
win-fginside the game (Wine side)nothing — Bannerlator's own, weightless
LSFG Nativeinside Bannerlator's compositor (Android side)your own Lossless.dll

(The older lsfg-vk engine, which ran the same shaders as a layer inside the game, is retired: its generated frames were routinely lost on the way to the screen. LSFG Native uses the same DLL and replaces it; containers still set to lsfg-vk run LSFG Native.)

LSFG Native is the one to reach for on a game you've capped: lock the game at 30, pick , and the panel gets 120 — with the game itself untouched, the device cooler than running it uncapped, and the in-game HUD showing 30→120. It works best at or under panel ÷ 4 (36 fps on a 144 Hz screen fills every refresh).

Present mode decides how finished frames are handed to your screen:

ModeWhat 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.
Immediate"Vsync off" — lowest input lag, but can tear.

Bannerlator handles the present mode for you. LSFG Native forces FIFO while it's generating — it queues the real and generated frames together and needs FIFO to show them one per refresh; under Mailbox the display would keep only the newest and discard the rest. Your chosen mode is restored the moment frame generation turns off. While LSFG Native is generating it also locks the FPS limiter on and Auto refresh (VRR) off — that's the configuration it was proven in, and both controls come back as you had them when it stops. 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.

Why is my FPS reading different from another emulator?

With frame generation on, two apps' FPS numbers can look very different — because they count frames at different points in the pipeline:

  • An app that reads the game's raw output shows a clean 2× / 3× / 4× — impressive, but it counts frames your screen never actually displays.
  • Bannerlator's HUD counts the frames the game delivers. With LSFG Native the generated frames are added after that point, so every HUD style shows both numbers — 30→120 — the game's rate and what actually reaches the panel. With win-fg the same arrow appears only if frames are being lost between the game and the panel (e.g. 70→35), which is a problem rather than a feature.

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.


✨ Full Features

Everything Bannerlator offers, at a glance. No PC and no root required — it runs Windows apps and games directly on your Android device.

🍷 Windows compatibility
  • Wine Windows compatibility layer — run native Win32/Win64 applications and games.
  • Box64 / Box86 x86 & x86-64 → ARM translation, with selectable performance presets.
  • WOWBox64 for arm64ec containers (correctly labelled per container).
  • FEXCore as an alternative x86/x64 emulation backend — with automatic unixlib (.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.
  • arm64ec and x64 container support.
🎨 Graphics & translation layers

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

  • DXVK — DirectX 8 / 9 / 10 / 11 → Vulkan (with GPLAsync and Sarek variants).
  • VKD3D-Proton — DirectX 12 → Vulkan.
  • WineD3D / DirectDraw OpenGL fallback paths for older titles.
  • D7VK — DirectX 7 / DirectDraw (Direct3D 3–7) → Vulkan for old 2D/3D titles that otherwise take the slow OpenGL path (WinterSnowfall's DXVK-lineage Vulkan implementation). Selectable in the DDraw Wrapper picker per container and per game; ships bundled as the default and is catalog-backed — a "D7VK Version" dropdown lets you download and switch between nightly d7vk builds.
  • Proton bionic translation layers (via GameNative) — including Proton 11.0-1 in arm64ec and x86-64 builds, packaged per Android SDK (SDK 28 for Android 9-era, SDK 35 for Android 15) and downloadable from the Compatibility Layers menu.
  • VEGAS — Adreno-optimized DXVK for reduced stutter and real-time upscaling on mobile GPUs.
    • 📖 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 →

  • Turnip / Mesa open-source Adreno Vulkan drivers, with Timeline Semaphore patches for newer DXVK; bundled and downloadable driver options.
  • Driver-source management — add, toggle and remove your own adrenotools GPU-driver feeds (a custom JSON URL or a GitHub 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.)
  • BCn transcoding for Mali / Xclipse — a "Wrapper + bcn_layer" graphics driver (leegao's bcn_layer, shader-v3) that decodes BC textures on the GPU, so BCn games run on GPUs without hardware BC support — with a BCn Layer Settings panel (force-decode, ETC2 / ASTC transcode, image-view mode, debug logging). An experimental "Wrapper-gamenative" driver (BCn baked into the wrapper, Adreno-only) is also selectable. (Device-proven on Mali-G57.)
  • Wrapper Version Manager — bring your own graphics wrapper: import / update / delete any .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? →
  • Mali DX12 (experimental) — a new opt-in 6th graphics driver, "Wrapper + compat + bcn", pairing leegao's BCn transcode layer with a DX12 compat layer and a "Use GameNative engine (DX12)" toggle, for Valhall-class Mali GPUs. Inert unless selected and unaffected on Qualcomm / Adreno; DX12 on Mali is still being proven on hardware — treat it as a test path and report back with logs.
🖥️ Renderers
  • Multiple host renderers — Vulkan, OpenGL, SurfaceFlinger, and VirGL.
  • SurfaceFlinger renderer colour fix — the SurfaceFlinger (ASurfaceRenderer) host renderer got a crash + colour-accuracy fix (red/blue channel swap corrected, GPU-side format converter, proper fencing), with a "Correct SurfaceFlinger colours" toggle available per container and per game (shown inline under the Renderer picker when SurfaceFlinger is selected, on by default). (Ported from GameNative #1620 / #1644.)
  • ℹ️ The Vulkan host renderer uses the rendering path from StevenMXZ (Winlator-Ludashi); its AHardwareBuffer present path — what makes Vulkan / DXVK / VKD3D content actually display correctly — was ported from / cross-examined against GameNative. See Credits.

  • Native Rendering (Low-Latency Mode) — low-latency direct-scanout presentation on both the Vulkan and OpenGL renderers, skipping the compositor blit to cut input lag (mutually exclusive with that renderer's post-processing effects / scaling, since it bypasses the compositor).
  • Spatial upscalers on both the Vulkan and OpenGL renderersSGSR (Snapdragon GSR 1.0) and FSR / FSR-Fit (AMD FidelityFX Super Resolution 1.0), plus NIS (NVIDIA Image Scaling, Vulkan), a Sharpen (RCAS) mode and Linear / Nearest, all switchable live in the in-game drawer. On Vulkan it engages when a game renders below display resolution; on OpenGL it renders the scene at a reduced internal resolution and reconstructs it back up. Every sharpness slider runs 0 (off) → 100 (max). Your chosen scaling mode is now remembered per game across relaunch.
  • Fullscreen aspect-ratio modes — control how a game fills the screen, per container and per game: Off (windowed, letterboxed), Fit (fullscreen, aspect preserved), Stretch (fills, ignores aspect), Fill (fills with aspect kept, cropping the overflow — no bars, no distortion) and Integer (largest whole-number scale, pixel-perfect and centered). A five-button selector in the in-game drawer switches modes live without closing the drawer, on all three host renderers. Your choice is saved per game.
  • Supersampling (Render scale) — render above display resolution (1.25× / 1.5× / 2×) and downsample with a Lanczos-2 filter for DSR / OGSSAA-style anti-aliasing; set per container / per shortcut.
  • Screen effects on both the OpenGL and Vulkan renderers — FXAA, Toon, CRT, NTSC, Color grading, CAS sharpening, and fake-HDR (the Vulkan path runs them through a new post-processing pipeline; previously they were OpenGL-only).
  • Debanding (Vulkan) — an optional terminal dither pass that removes the visible banding from smooth gradients, skies, and dark scenes on 8-bit output, with an adjustable strength.
  • ReShade post-processing — run real ReShade .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.

  • Match refresh rate to FPS (VRR) — the display's refresh rate can follow your frame rate: an Auto (match FPS) toggle or a manual 60 / 90 / 120 / 144 Hz slider, on all three host renderers, auto-disabled on displays that don't support variable refresh.
  • Adjustable resolution and frame-rate limit.
🎞️ Frame generation & pacing
  • Two selectable frame-generation engines — pick Off / win-fg / lsfg-vk per container; the running engine is shown as a badge in the in-game drawer.
    • win-fg — Bannerlator's own clean-room Vulkan frame-generation layer (FSR3 optical flow + from-scratch synthesis, no proprietary weights), bundled and ready to use out of the box.
    • lsfg-vk — powered by the lsfg-vk Vulkan layer (Android port by FrankBarretta).
  • ℹ️ 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 its Lossless.dll via Settings → Frame Generation (lsfg-vk) → pick DLL. The DLL is copied into app storage and serves all containers. Until you import a valid Lossless.dll, the lsfg-vk option stays greyed out; win-fg needs no DLL and works without it.

  • Live in-game controls for whichever engine the container runs: switch between Off / 2× / 3× / 4× and adjust the flow-scale slider right from the in-game Graphics drawer, hot-reloaded with no restart.
  • FPS Limiter — a standalone, engine-independent live frame cap. It paces the X11 Present extension by delaying the 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).
  • lsfg Performance mode — a lighter frame-gen model for weaker GPUs, selectable per container and live in the in-game drawer, with no root or read-only file hacks; defaults off. (Requested by @Tony57319#152.)
  • Confirmed on both the OpenGL and Vulkan host renderers.
⚡ Performance & thermal controls

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.

  • No root requiredSustained Performance Mode (steadies clock speeds over long sessions), Thread Priority Boost (raises the guest CPU-worker threads for more CPU time, never downgrading an already-hot thread), and Prefer Big Cores (pins the running game to the fastest CPU cluster instead of the efficiency cores).
  • Opt-in root tier (Magisk / KernelSU / APatch) — behind a Grant Root gate and a scroll-to-accept "USE AT YOUR OWN RISK" disclaimer: CPU governor → performance, lock CPU frequency to max, keep all cores online, lock GPU to max clock, disable thermal throttling, fan to maximum, and a one-shot "Free memory now" action. Entirely optional — nothing writes to your system files unless you grant root and accept the warning.
  • Always-on snapshot-revert — the first time a setting is touched its exact prior value is captured, and everything is restored to precisely that value on game-exit, app-background or crash. The snapshot is persisted to disk, so even a hard kill is repaired on next launch. It never guesses defaults and can't be disabled.
  • Temperature Watchdog — anchored to your device's own thermal trip points, it polls the hottest CPU/GPU zone and force-reverts all performance state before the device overheats. Presets Conservative / Balanced / Aggressive / Manual, on by default (turning it off needs the same scroll-to-accept disclaimer).
  • In-app help — a "?" explainer on every toggle, an "Explain toggles" overview, a watchdog "What's this?", and live CPU / GPU temps plus your device's own thermal limits shown inline. (Device-verified on an AYANEO Pocket FIT / Adreno.)
📦 Containers
  • Create and manage multiple isolated Wine containers.
  • Redesigned container cards — a clean spec-chip layout (renderer · DXVK on top, driver · VKD3D · backend beneath) that matches the game cards.
  • Auto-close on game exit — the session closes itself once the launched game quits (per-container "Close when game exits" toggle, on by default), so you're not left at a black Wine desktop.
  • Import / export containers to move or back up setups.
  • Per-container control of Wine version, graphics driver, DXVK / VKD3D version, Box64 preset, drive mappings, Z-drive selector, and environment variables — the Add Environment Variable picker includes a large set of presets (DXVK / VKD3D / Wine / Mesa) with typed value editors, so common tuning vars are one tap away.
  • Desktop wallpaper picker — set an image as a container's Wine desktop wallpaper from the container editor, and choose whether it applies to just this container or globally to all of them.
  • Compatibility Layers download menu — a cloud button on each component (Wine/Proton, DXVK, VKD3D, Box64/WOWBox64, FEXCore) opens a downloader to browse, install or remove versions, with Wine/Proton tabs, an "in use" marker, install-from-file, and byte-accurate download + install progress bars.
  • In-game refresh-rate unlock — a per-container / per-game toggle that lets a game pick a refresh rate above 60 Hz from its own display menu (requires a "Refreshed" Proton 10.0-4 / 11.0-1 layer; stays off on older layers by design). Distinct from the display's Match refresh rate to FPS (VRR).
  • Custom startup-services mode — alongside Normal / Essential / Aggressive, a Custom startup option starts with every Wine service off so you enable only the ones you need. (Requested in #168.)
  • DXVK HUD off by default (new in 3.0.2) — new containers no longer show the DXVK overlay on top of the game. The 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.
🕹️ Games, shortcuts & input
  • Game library with grid or list layout, sorting, and installed/updated filters.
  • Redesigned game cards — primary chips (renderer · DXVK · frame-gen) over a muted driver · VKD3D · backend line, with the resolution in the subtitle; long component names no longer blank the game title.
  • Add shortcuts from external storage — a single .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).
  • Smart import — importing an .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.
  • Recommended components — a game's bundled redistributables are detected and surfaced as one-tap install chips.
  • Back up & restore game saves as GameHub-compatible zips, with per-game save discovery and a confirm checklist before anything is overwritten.
  • SteamGridDB cover-art scraping.
  • Per-game settings including display language / locale.
  • Virtual Controller Pro on-screen controls — a Compose-rebuilt controls editor with an in-game live editor, control types Button / D-Pad / Range / Stick / Trackpad plus Dynamic Stick, Mouse Area, Button Grid (with optional multitouch and QWERTY / F-row / NumPad quick-fill) and Expandable Buttons (radial or list fly-outs). Includes control groups (show/hide a whole set), key combos, per-element dead zones, a Hold key, custom control icons (import, tint or use as the whole button), a category-filtered binding picker, an editor reference image, and a control scale up to 300%. Profiles export as ICpx (or best-effort legacy ICP). Overlays follow your app theme or take a per-game custom colour set in the Controls editor. (PR #156 by arro000.)Swipeable controls (new in 3.0.1) — a per-element slide-to-press toggle plus live per-category swipe gates (Buttons / D-Pad / Sticks), mirrored to a dedicated Swipe tab in the in-game drawer so you can slide across buttons instead of tapping each one.
  • Physical controller support (SDL2), plus touchpad / mouse emulation with adjustable cursor speed. The external controller-binding screen lists each input as a card with readable labels, and buttons you press while binding appear instantly.
  • Controller vibrationPC-accurate dual-motor rumble (strong/weak driven independently) with a per-container vibration mode and intensity, backed by a winebus duration patch so sustained rumble doesn't auto-expire mid-effect (Proton 10/11, arm64ec + x86-64). Plus per-slot rumble toggles and a master switch (in the in-game Vibration section) that silences all rumble regardless of slot, saved globally.
  • Gyroscope — motion aim — tilt to aim, driving the right stick, left stick or the mouse, in either Rate mode (how fast you turn) or Tilt to Aim orientation mode (the angle you hold), with a choice of activator button (L1 / L2 / R1 / R3 / always-on), Hold or Toggle activation, adjustable sensitivity / deadzone / smoothing / invert, device-level drift calibration, and settings saved per container and per game. 📖 Full guide →
🌐 Community Configs

Browse community-shared, per-game / per-device tuning configs in-app and apply a known-good setup in one tap.

  • Catalog browser (globe button in the Games header) with search, Steam / Title filters, sort by upvotes / name / device count, and a "Matches my device" filter that narrows to configs shared from hardware like yours.
  • Per-config cards showing ★ upvotes and ↓ downloads (best-rated first), the source device / SoC and the date, aggregated across every folder a game is known by.
  • One-tap Apply that surgically merges just the config's settings — DXVK / VKD3D / Turnip driver / FEX preset / renderer / resolution / launch args / environment variables — into your shortcut, preserving everything else you've set. Applies to any shortcut, warning you if it doesn't match the game.
  • Smart install of a config's missing DXVK / VKD3D / FEXCore build or Turnip GPU driver: an exact match installs with one confirm, otherwise pick from the closest versions (or browse all), and the config auto-applies afterward. FEX date builds match by their YYMM monthly tag; components you already have are recognised, not re-installed.
  • Config detail page — provenance (source device / SoC / app / date), a plain-language list of what the config sets in Bannerlator's own component terms, and a before-you-apply diff against your shortcut, plus the config's live description, upvotes, downloads and comments — you can upvote and comment yourself.
  • Read-only for your setup — nothing changes unless you tap Apply; your containers, imagefs and existing settings are never touched.
  • Share your own setups — export a game's working settings and upload them for the community in a couple of taps. The export captures the full recipe (graphics translator + all its options, driver, renderer, resolution, launch args, env vars and the rest) plus your device / graphics chip — but never your files, store logins, or device-specific driver tuning. Sharing is anonymous by default and Bannerlator keeps its configs in its own space, separate from other apps' libraries. My uploads lets you edit a description inline or delete an upload any time.
  • Optional account (no email needed) — you never need one, but a username + password account makes your uploads follow you to a new device, puts your name and picture on configs you share, and is recovered with a one-time recovery key instead of an email reset. Everything — browse, apply, share, manage, upvote, comment — works fully anonymously without it.
  • 📖 Read the full plain-English guide → for a friendly, non-technical walkthrough of browsing, applying, sharing, and the optional account/recovery-key system.
🛒 Built-in stores & cross-store Download Manager

Sign in to your existing storefronts and play from libraries you already own — Bannerlator does not sell, bundle or circumvent any game or DRM.

  • Steam — sign in with username / password or QR code, browse your owned library, and download + install games through a built-in depot engine (built on JavaSteam). Includes a 4-tier download-speed picker (Slow / Medium / Fast / Blazing), session hardening that recovers from Steam's ~1-hour connection-manager logoff so long installs finish, a connection / login status pill, and a depot-download OOM fix.
    • DLC picker — a "Choose DLC" sheet lets you opt out of owned DLC before downloading, with the download size updating live as you check and uncheck, plus an "Includes DLC" line and a size breakdown (footprint / download / catalog / free space) and download ETA + speed on the detail page. A true-size install fix fetches real depot-manifest sizes so fully-downloaded games are no longer wrongly flagged "incomplete."
    • Optional Goldberg auto-patch on a game's detail page — a Goldberg / gbe_fork Steam-emulator patch for offline / emulated play, in Regular / Experimental / ColdClient tiers, installed automatically and cleanly reverted on switch-back. (Modifies a game's shipped files — use at your own risk, for games you own.)
    • Real-Steam (VAC) online — "SteamLite" launch mode — a per-game launch option (RealSteam / Goldberg / Raw) that runs the game through the genuine Steam client driven by a clean-room headless agent, for a VAC-eligible online session with real friends, matchmaking and achievements. It stages the game so Steam sees it installed (secure 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.
    • Steam Friends & Chat(off by default) — a master-opt-in friends list with live presence (online / in-game / away), unread badges and collapsible sections; per-friend chat with text and images, persisted history, add-by-code / name-search / quick-invite, an in-app friend profile, a landscape two-pane layout, notifications with a sound toggle, typing indicators, and instant reconnect after a background drop.
    • Steam achievements — seeded from your account into a tabbed detail-page grid, with in-game gold unlock pills — working and syncing in both launch modes: unlocks fire and sync back whether you play through Goldberg (emulated) or SteamLite (real Steam / VAC).
    • Steam cloud saves + Save Manager "Sync Now" — automatic cloud-save parity around each play session, plus a one-touch "Sync Now" button on the Save Manager banner that syncs every flagged game at once, each in the correct direction (upload what's newer locally, pull what's newer in the cloud), with a live "Syncing 3/7…" count.
    • Install to an SD card — a per-game toggle installs a Steam download onto a removable SD card to free internal space; the shortcut resolves through a container drive letter, so secure launch, saves and achievements are unaffected.
    • Rebuilt game detail pages — a redesigned, landscape-aware tabbed per-game screen (overview · achievements grid · DLC) with the store badge, connection state and launch actions together in one place.
  • Epic Games — sign in, browse your library, and download / install / launch your titles (including Epic free games).
  • Amazon Games — sign in, browse your library, and download / install / launch your titles.
  • GOG — sign in and browse your owned library; download and install your DRM-free games with cloud-save sync and one-tap launch into a container.
  • ⬇ Cross-store Download Manager — one unified manager across all four stores: see every active download and your whole installed library in one place, with live two-bar download/install progress, background downloads + notification-shade support (a foreground service keeps them running when you leave the app), and launch / verified uninstall for any installed game. Install state, cover art and update-available status stay in sync across a game's detail page, its download card and the store list.
  • 🔒 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).

🔒 Security Hardening & your store accounts

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.

  • Use at your own risk. You are logging your real store account into a community app. That's a normal trade-off for this kind of tool — but it's your account and your call.
  • Steam save sync & achievements — use at your own risk. Steam cloud-save sync and achievements run through third-party systems (Valve's Steam and Goldberg), exactly like the store sign-ins. They depend on your connection — an unstable or dropped internet connection or network, while downloading (syncing saves, achievements or games) or uploading, can leave data un-synced, incomplete or out of date. It is your responsibility to ensure a proper, stable connection and to complete the sync/download/upload when required; verify it finished before relying on it across devices.
  • Your credentials are redacted from logs. This release strips sensitive values out of everything the stores write, to logcat and the shareable diagnostic files, via a new 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.
  • Still be careful sharing logs. Even with redaction, a log or debug file can contain other diagnostic detail — so only share one publicly if you're comfortable doing so.
🧰 Bundled Start-menu utilities
  • New containers ship with handy Windows tools in the Start menu — Banner File Manager (our own file manager — see below), AIO Graphics Test, and Game Controller Test.
  • .lnk working-directory ("Start in") support so shortcuts for apps that only run from their own folder launch correctly.
📁 Banner File Manager

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.

  • Dual-pane split view (View ▸ Split View) — two independent panes, active one highlighted, copy between them.
  • File actions — Open as administrator, Open with ▸ (registered apps + choose another program), Properties.
  • Native Win32 copy / move / delete instead of shell32 SHFileOperation — sidesteps the Wine shell32 copy-paste crash on Proton 10.0-4.
  • Quality of life — keyboard shortcuts (F2 / Del / F5 / F6 / Backspace / Enter / Ctrl+C·X·V·A), Show Hidden Files, byte-accurate copy progress bar with cancel, status-bar total size.
  • Theme-aware (light + dark, follows the container theme; owner-drawn header / status bar / search to match) and universal x86-64 (Box64 / wowbox64 / FEXCore).

Source, releases & issues: github.com/The412Banner/banner-file-manager.

🎛️ Interface & in-game overlay
  • Modern Jetpack Compose user interface with a redesigned, icon-led navigation drawer.
  • Theme-aware everywhere — your selected preset / accent recolours the whole app and the in-game side drawer, including dialogs, chips, sliders and overlays.
  • Customizable themes16 presets (AMOLED default, Classic Dark, Ocean, Forest, Sunset, Rose, Steel, plus Midnight Cobalt, Phosphor, Carbon & Ember, Amethyst, Crimson, Synthwave, Royal Gold, Frost and Monochrome) plus an HSV custom-accent picker.
  • Big Picture mode — a Compose-built couch launcher for TV / handheld use: full D-pad navigation, direct rails to your games, settings and features, and per-game spec chips showing what each title is actually set to.
  • In-game overlay drawer for settings, input, and quick toggles, with a Task Manager that lists processes as cards and can launch new tasks on any renderer. The Controls tab is split into Touch / Mouse / Vibration / Gyro sub-tabs, with a uniform 3-across grid of toggle chips.
  • In-game Task Manager — a full control panel. Beyond the process cards it now offers Windows-style per-process Processor Affinity ("Set affinity" on a process's ⋮ menu — pin it to specific CPU cores live, mid-game, applied through the guest's real affinity path with no relaunch), a live telemetry header (CPU & GPU usage and temperatures, GPU clock, FPS + minimum, RAM, swap, battery level / watts / temperature / charging, and a per-core clock strip), and a collapsible container info panel (Wine/Proton, DX wrapper, renderer, driver, resolution, device).
  • Built-in File Manager with Favorites — bookmark folders and jump to them from a dedicated list, each labelled by storage source (Internal / SD card / a container's Drive C: or Z:) and full path. Image files show real thumbnails, and the File Manager doubles as the app's file picker for every import (WCP / ICP / wallpaper / drivers / assets) — reliable on OEM skins where Android's system picker fails, with the system picker still available as a secondary option. It also handles multi-select bulk operations, archive extraction (zip / 7z / tar / tar.gz / xz / bz2 / zst, Zip-Slip-guarded with progress and cancel), and search / sort / hidden-file toggle / free-space display.
  • Performance HUD — FPS, frame time, CPU/GPU temperature, and RAM, in vertical or horizontal layout, with its on-screen position saved per game. Four switchable overlay styles — Classic, GameHub, a GameNative-style HUD with live graphs, and the new Fusion HUD (MangoHud-style: size modes Full / Tiles / Pill / Minimal / Mega, VRAM, GPU model, 1% / 0.1% lows and a frametime graph) — with long-press to lock any HUD in place.
  • FEX runtime indicator — a live badge in the Graphics tab shows what's actually translating the running game: arm64ec vs x86-64, the translator (FEXCore / wowbox64 / Box64), and — for FEXCore — whether the native unixlib (.so) or the classic DLL path is active. Read straight from the running process, so it reflects reality, not just the setting.
📥 Builds & distribution
  • Three build flavors with distinct package IDs — standard, PuBG, and Ludashi.
  • Optimized release builds (not debug) for a smoother Compose UI, AOSP-testkey signed so updates install over previous installs.
  • In-app updaterSettings → Updates checks GitHub for a newer release and installs the correct flavor APK for you, with notify-on-update and an opt-in include-prereleases (beta channel) toggle.
  • Continuous GitHub Actions action builds and tagged stable releases.

🎨 Adding your own ReShade effects

Show / hide

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: PuBGAndroid/data/com.tencent.ig/files/ReShade/ · LudashiAndroid/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:

  • the effect's .fx file (required),
  • any .fxh files it #includes (very common — e.g. ReShade.fxh, ReShadeUI.fxh),
  • any image / texture files the effect uses.
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 shortcutReShade 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 .fx file (a loose .fx sitting directly in ReShade/ is ignored).
  • Effect selected but no change in-game? Most often a missing #include — open the .fx in a text editor, find any #include "Something.fxh" lines, and make sure each of those .fxh files 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 open Android/data, or copy the effect folder over from a PC via a USB cable, then drop it in.

🎮 Frontends Workaround

Show / hide

Bannerlator does not work by itself on frontends out of the box. See the frontends workaround guide to get it running.


🛠️ Building

This project is built via GitHub Actions only — local builds are not supported.

  • Action builds — every fix is compiled and published as a downloadable workflow artifact.
  • Releases — tagged stable builds are published as GitHub Releases.

🤖 Ask Me Anything

Show / hide

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.

Ask a Question

It's three steps:

  1. Open an issue (you'll need a free GitHub account).
  2. Type your question — be specific, and name a feature, setting, or file.
  3. Submit. The AI replies in a comment on your issue, usually within 1–2 minutes.

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:

  • "How does the FPS limiter work?"
  • "Where is the GOG store integration implemented?"
  • "What values does the scaling mode picker accept?"
  • "How are release builds signed and distributed?"

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.

Prefer the command line?

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
Maintainers / forks — one-time setup

The bot runs on the opencode/big-pickle model via your opencode credentials (not a separate API key). To enable it on a fork:

  1. Locally run cat ~/.local/share/opencode/auth.json and copy the whole JSON.
  2. Add it as a repository secret named OPENCODE_AUTH under Settings → Secrets and variables → Actions.
  3. Make sure the 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.


🙏 Credits

Show / hide

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:

ContributorContribution
brunodev85Original 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/
coffincolorscmod Winlator fork — package com.winlator.cmod and the customization layer this codebase is built on.
Pipetto-cryptoWinlator 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.
jacojayyMaintainer of the Star line. Timeline Semaphore patches in the bundled Turnip driver for newer DXVK compatibility. Official site developer and maintainer.
Star / Frost dev teamThe 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 →
vivsiController support contributions.
arro000Virtual 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%.
StevenMXZWinlator-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.
GameNativeGameNative 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.
TideGearGameHub-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 libevshimLD_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.
WinNativeWinNative — 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.
PancakeTASlsfg-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.
FrankBarrettalsfg-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'slsfg-vk-android fork. No proprietary shaders are bundled — users supply their own Lossless.dll (Lossless Scaling by THS) via the in-app picker.
DadSchoorsevkBasalt (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.
WinterSnowfalld7vk — 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.
BrunoSXThe 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.
@Tony57319Reported / 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.
JavaSteamJavaSteam (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_forkGoldberg 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.
PluviaPluvia — an Android Steam client whose patterns were referenced alongside GameNative while building the Steam store's login / session handling.
The412BannerFull 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.

Upstream stack

The Wine/translation stack this app bundles or downloads:

ComponentAuthor
WineWineHQ
Box64 / Box86ptitSeb
FEXCoreFEX-Emu
DXVKdoitsujin / Philip Rebohle
DXVK-GPLAsync patchPh42oN
DXVK-Sarekpythonlover02
VEGAS (Adreno-tuned DXVK / GPLAsync fork — v1.3-vegas)isygold · FAQ · ❤️ Sponsor
D7VK (DirectX 7 / DirectDraw → Vulkan)WinterSnowfall
VKD3D-ProtonHans-Kristian Arntzen
Turnip / MesaFreedreno team @ Mesa
Proton layers (bionic)GameNative
Steam depot engineJavaSteam 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)

Community reports & requests

Much of Bannerlator's polish is driven by the people who file issues and test builds. Recent features came directly from:

  • Angel — requested the environment-variable presets that seeded 2.5.1's new preset set (DXVK_DISABLE_TIMELINE_SEMAPHORES, VKD3D_SHADER_MODEL).
  • @kylinzang — the driving force behind 2.5's Mali / BCn support (#70, originally #54 / #53): the original request, the env-var spec, the in-game logging overhaul, and iterative on-device testing on Mali-G57 through a full sign-off. Also fullscreen aspect-ratio modes (#71) and the in-app File-Manager import picker (#73).
  • @rizky2-crypto — Mali-G610 BCn testing (#30).
  • @SombraShadow — the container wallpaper picker (#66).
  • @abdogm — magnifier cursor-follow & no-dim fixes (#44).
  • @Devaspe — the Steam install-blocker report that drove the true-size depot install fix.
  • iamtooshaar (Discord) — testing and bug-hunting on Steam Friends & Chat (3.0.2), helping shake out the presence, history and image-send issues on real hardware.

…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):

  • @The412Banner — Converting the UI to Jetpack Compose and rewriting the controller implementation.
  • @jacojayy — Timeline Semaphore patches in Turnip.

If you have contributed and are not listed, open a PR — this list is intended to be complete.


⚖️ Disclaimer

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.


📄 License

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.

About

Bannerlator — run Windows PC games and apps on Android (Wine + Box64/86). A personal, community-driven continuation of the discontinued Winlator Star Bionic project. GitHub Actions builds + releases.

Resources

Stars

247 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages