
Winlator looks like one app. Under the hood it's a stack of open-source projects working together: Wine translates Windows calls, Box64 translates CPU instructions, DXVK translates graphics calls, and a GPU driver draws the result. The short version of this entire guide: on a Snapdragon phone, use the newest Turnip driver with DXVK for DirectX 9–11 games. That combination is right for the large majority of games people actually run.
The rest of this guide explains every layer in plain language (new to Winlator? start with the main overview), compares the DX wrappers side by side, tells you which graphics driver fits your phone's GPU, and covers installing the runtime components — .NET Framework, DirectX redistributables — that games and installers ask for. When something breaks, knowing which layer is responsible turns hours of guessing into a five-minute fix.
What does Wine actually do in Winlator?
Wine is the heart of Winlator. It isn't an emulator in the classic sense — it doesn't pretend to be a whole computer. Instead, it's a compatibility layer: when a Windows program says "draw a window" or "open this file," Wine translates that request into the equivalent call on the host system. On a desktop Linux PC, that's the Linux kernel. Inside Winlator, it's Android.
This is why Winlator can run Windows software without a copy of Windows and without the heavy cost of full hardware virtualization. Wine handles the Windows API — the thousands of functions programs expect — while other components handle the CPU instructions and the graphics.
Winlator containers let you pick which Wine build the container uses. Newer Wine versions support more programs and fix long-standing bugs; now and then a specific game prefers an older build. Start with the default and only change it when you have a reason — "the game crashes on launch and everything else is correct" is a reason; curiosity isn't.
What are Wine Mono and Wine Gecko?
Two Wine sub-components come up constantly:
- Wine Mono is Wine's replacement for Microsoft's .NET Framework. When a program needs .NET to run — many launchers, mod managers, and indie games do — Wine Mono provides it. Winlator's container setup installs it as part of the standard components, so most users never touch it directly.
- Wine Gecko is Wine's replacement for Internet Explorer's rendering engine (MSHTML). Programs that embed web pages — some installers, launchers, and older game clients — need it. Same story: it arrives with the standard container components.
If a program installer complains about missing .NET or fails on an embedded web page, the usual cause is a container created with a minimal startup selection. The fix is to recreate the container with the fuller component installation rather than hunting down individual pieces. More on installing components below.
What are Box86, Box64, and the CPU translation layer?
Here's the part people misunderstand most. Wine translates Windows API calls, but your phone's processor speaks a different language than a Windows PC's processor. PCs use x86/x86-64 instructions; Android phones use ARM. Something has to translate the program's machine code, and that something is the CPU translation layer.
- Box86 translates 32-bit x86 instructions to ARM. Older games and 32-bit programs go through this path.
- Box64 translates 64-bit x86-64 instructions to ARM. Modern games and 64-bit programs go through this path.
Winlator bundles these, and for most users they're invisible — you pick a game, and the right translator handles it. You don't configure Box86/Box64 directly in stock Winlator. They're worth understanding because they explain the performance cost: every CPU instruction in the game gets translated on the fly, which is why Winlator needs a genuinely fast phone CPU and why some CPU-heavy games struggle even when the graphics look fine.
What is FEXCore, and do you need it?
You'll see FEXCore mentioned in the community, especially around Winlator forks and mods. FEXCore is an alternative x86-64 emulator — a different engine for the same job Box64 does. Some forks and community builds experiment with it, and discussion threads compare the two on specific games. In stock Winlator, Box64 is the translation layer; FEX is a fork/mod topic. If you're curious about the builds that use it, the forks guide covers the mod landscape.
Turnip vs VirGL: which driver is for your phone?
After Wine and the CPU layer, the graphics driver is the next link in the chain — and it's the one users actually choose in container settings. Winlator offers drivers in two families:
Turnip: which phones should use it?
Turnip is an open-source Vulkan driver for Adreno GPUs, built on the freedreno project inside Mesa. On phones with Snapdragon chips — which means Adreno graphics — Turnip is the right choice, and it's not close. It's faster and more compatible than the generic fallback, because it's a real driver written for exactly your GPU hardware.
Winlator typically ships several Turnip builds (newer and older versions). Start with the newest. If a specific game shows graphical corruption or crashes at a particular point, try an older Turnip — driver regressions happen, and the community usually identifies which build works per game.
VirGL: when is the fallback the right choice?
VirGL is the driver for everyone else: Mali GPUs (Samsung Exynos, Google Tensor, most MediaTek), and any Adreno situation where Turnip misbehaves. It's a virtualized graphics path — functional, but slower and less compatible than Turnip on Adreno hardware.
Be honest with yourself here: on a Mali GPU, Winlator works, but the driver situation is the limiting factor. Older and lighter games still run; heavier ones struggle in ways no setting fully fixes. That's a hardware reality, not a configuration failure — the device guide goes deeper on what different chips can actually do.
The decision in one line
Snapdragon/Adreno → Turnip (newest first, older if a game misbehaves). Anything else → VirGL. That's it. Everything else on this page is refinement.
Which DX wrapper should you use: DXVK vs VKD3D vs WineD3D?
The DX wrapper sits between the game and the GPU driver, translating DirectX calls into something the phone can render. Winlator gives you three choices per container. Here's how they compare:
| DXVK | VKD3D | WineD3D | |
|---|---|---|---|
| Translates | DirectX 9, 10, 11 → Vulkan | DirectX 12 → Vulkan | DirectX → OpenGL |
| Best for | The vast majority of games (roughly 2007–2016 era and many newer DX11 titles) | Games that specifically require DirectX 12 | Troubleshooting graphical glitches; older/odd cases |
| Speed | Fastest for DX9–11 | Varies; DX12 is heavy on phones regardless | Usually slower than DXVK for the same game |
| When to use | Default for almost everything | Only when the game needs DX12 | When DXVK shows a specific graphical bug |
| Notes | Community builds sometimes include variants (async shader options) — treat these as experiments, not defaults | Most DX12 games stay too heavy for phones; a few lighter ones are playable | Can fix odd rendering issues at the cost of performance |
The most common mistake is mismatching the wrapper to the game: running a DirectX 9 game on VKD3D, or a DirectX 11 game on WineD3D "because someone said it's faster." Match the wrapper to the game's graphics API. If you don't know a game's API, a quick search for the game plus "DirectX" settles it — or just start with DXVK, since it covers the most games.
Within DXVK, you may see community discussion of variants and options (async shader compilation and similar). These are real tweaks with real trade-offs — async shaders can reduce stuttering but risk visual glitches while shaders compile. Treat them as per-game experiments: enable, test with the FPS overlay on, keep only if it helps. The baseline DXVK behavior is the safe default.
Which wrapper + driver pairing fits your game era? The cheat sheet
| Game era | Graphics API | DX wrapper | Driver on Adreno | Driver on Mali/other |
|---|---|---|---|---|
| Early 2000s (DX8/9) | DirectX 8/9 | DXVK | Turnip | VirGL |
| 2007–2016 golden age | DirectX 9/10/11 | DXVK | Turnip | VirGL |
| 2016+ (DX12-required) | DirectX 12 | VKD3D-Proton | Turnip | VirGL |
| OpenGL / indie / older | OpenGL | DXVK first, WineD3D if glitchy | Turnip | VirGL |
| Graphical corruption on DXVK | — | WineD3D (diagnostic) | Same driver | Same driver |
Read it as a flowchart: find your game's era, set the wrapper, set the driver for your GPU, done. Only deviate when you have a symptom — corruption, a black screen, a crash at the same spot — and then change one cell of the table, not all of them.
Which three myths should you ignore?
"Newer DXVK is always faster." Newer usually means more compatible, not faster. If a game runs well, leave the wrapper alone — chasing wrapper updates for games that already work is how working setups break.
"You need to install DirectX separately." No. The DX wrapper is Winlator's DirectX. When an installer offers its DirectX step, letting it run is harmless, but hunting down a special "mobile DirectX" is a wild-goose chase — it doesn't exist.
"Turnip works on any phone if you try hard enough." Turnip is written for Qualcomm Adreno GPUs, full stop. On Mali hardware there is no Turnip build to switch on and no setting that turns one on — VirGL is the path, and the device guide is honest about what that means.
How do you install .NET Framework, DirectX, and other components?
Games and installers routinely ask for runtime components: .NET Framework, DirectX 9/11 redistributables, Visual C++ runtimes, sometimes specific fonts. Here's how that works inside Winlator:
The easy path: let the container install them. Winlator's container setup includes a "Startup Selection" option. The fuller/aggressive selection installs the standard component set — Wine Mono (the .NET replacement), Wine Gecko (the browser-engine replacement), core fonts, and similar plumbing — when the container is created. For gaming containers, this is the practical choice. Most "missing component" errors never happen if the container was created with the full selection.
The manual path: run the installer inside the container. If a specific game needs a specific redistributable — say, a particular Visual C++ runtime or a DirectX 9 component — download the official installer (the same .exe you'd use on a PC), launch the container, and run it like you would on Windows. It installs into the container's fake Windows environment. This works because the container really is a working Windows-like environment, not a locked box.
What about "winetricks"? On desktop Wine, winetricks is the standard tool for installing components. In Winlator, the container's component installation covers the common cases, and manual installer .exes cover the rest. You don't need a separate winetricks workflow for normal use.
DirectX specifically: you generally don't install "DirectX" the way you would on a PC — the DX wrapper (DXVK/VKD3D/WineD3D) is the DirectX implementation in Winlator. When a game installer tries to install DirectX, it's usually fine to let it run; the wrapper handles the actual rendering. If an installer fails on its DirectX step, that's a troubleshooting case, not a sign you need to find a special mobile DirectX.
Java: a few tools and Minecraft-adjacent programs ask for Java. Same approach — run the Windows Java installer inside the container. It's uncommon enough that you should only do it when something specifically asks.
What if a component install fails?
First, confirm the container was created with the full startup selection — a minimal container missing Mono/Gecko/fonts causes a whole family of failures that look like individual component problems. Second, try running the installer with the container's Windows version set to 10, since some installers check the OS version. Third, check the troubleshooting guide for the specific error — installer failures have recognizable patterns.
Which environment variables are worth knowing?
The container settings include an environment-variables section. Two entries come up often enough to mention:
- Locale variables (like
LC_ALL) control the language/region environment programs see. Relevant for Japanese and Chinese games that expect a matching system locale — covered in the settings guide. - Mouse warp override relates to pointer behavior in first-person games — covered in the controls guide.
Beyond those, treat environment variables as a scalpel, not a hammer. They're for specific, diagnosed problems — not a list to copy from a comment section hoping for free FPS.
How do you put the stack together? A practical example
Say you want to run a DirectX 11 game from 2014 on a Snapdragon phone. The sane stack is: Box64 translating the 64-bit game code (automatic), Wine translating the Windows API calls (automatic), DXVK translating DirectX 11 to Vulkan (your choice in container settings), and the newest Turnip driver talking to the Adreno GPU (your choice). Container created with the full startup selection so Mono, Gecko, and fonts are present. Windows version 10. That's the whole recipe — every layer matched to the game and the hardware, nothing exotic.
When the game fails, walk the stack: does it crash immediately, even on simple programs (CPU translation)? Throw installer errors or missing-component messages (Wine)? Show graphics corruption or a black screen with sound (wrapper)? Work on VirGL but not Turnip, or vice versa (driver)? Each layer has its own signature, and the troubleshooting guide maps symptoms to layers.
Frequently Asked Questions
What is the difference between DXVK and VKD3D in Winlator?
DXVK translates DirectX 9/10/11 to Vulkan; VKD3D translates DirectX 12 to Vulkan. Use DXVK for the vast majority of games and VKD3D only when a game specifically requires DirectX 12.
Which graphics driver should I use in Winlator?
Turnip if your phone has a Qualcomm Adreno GPU (any Snapdragon phone). VirGL for everything else, including Mali GPUs. Start with the newest Turnip and step back to an older build only if a specific game misbehaves.
Do I need to install DirectX in Winlator?
No — the DX wrapper you select in container settings is Winlator's DirectX implementation. Let game installers run their DirectX steps normally; the wrapper handles rendering.
How do I install .NET Framework in Winlator?
Create the container with the full startup selection so Wine Mono (Wine's .NET replacement) is installed. If a specific app needs Microsoft's actual .NET Framework, run its official installer .exe inside the container.
What are Wine Mono and Wine Gecko?
Wine's built-in replacements for .NET Framework (Mono) and Internet Explorer's rendering engine (Gecko). Programs that need .NET or embedded web pages use them automatically when the container includes the standard components.
What is Box64 in Winlator?
The component that translates 64-bit Windows (x86-64) program code to run on your phone's ARM processor. It works automatically — you don't configure it directly.
What is FEXCore and do I need it?
FEXCore is an alternative CPU-translation engine you'll see discussed around Winlator forks and mods. Stock Winlator uses Box86/Box64; FEX is a community-build topic, not something regular users need to think about.
Can I use Turnip on a MediaTek, Exynos, or Tensor phone?
No. Turnip is a driver for Qualcomm Adreno GPUs specifically — on Mali graphics (which is what those chips use) there is no Turnip option, and no setting turns one on. Use VirGL and choose lighter games.
Where do the Turnip drivers come from? Are they safe?
The builds Winlator offers come bundled with the app's releases, and Turnip itself is part of the open-source Mesa graphics project. As long as your Winlator APK comes from the official source — see the download guide — the drivers it ships are the legitimate ones.
Should I update DXVK separately from Winlator?
For most users, no — use the wrapper versions your Winlator build ships. Community mods and forks experiment with newer or patched builds, but mixing and matching components by hand is a troubleshooting rabbit hole, not an upgrade path.
Why does WineD3D still exist if DXVK is faster?
Because "faster" and "renders correctly" aren't the same thing. WineD3D's older DirectX-to-OpenGL path renders some games correctly that DXVK glitches on. It's a diagnostic fallback, not a daily driver — switch to it to identify a wrapper bug, then switch back once confirmed.
Do I need Winetricks in Winlator?
No. On desktop Wine, Winetricks installs components; in Winlator, the container's full startup selection plus running official installer .exes inside the container covers the same ground. It's one tool you can leave behind.