Skip to main content
Android devices run on ARM64 processors, but Windows software is compiled for x86 or x86_64 CPUs. Winlator uses two open-source translators to bridge this gap:
  • Box86 — translates 32-bit (x86) Windows applications. Used for WoW64 mode, where 32-bit game executables run inside a 64-bit Wine process.
  • Box64 — translates 64-bit (x86_64) Windows applications. Most modern games and applications use 64-bit executables.
Both translators use a dynamic recompiler (dynarec) that converts x86 instructions into ARM64 instructions at runtime. The dynarec has several tunable flags that control the trade-off between translation accuracy and execution speed. Rather than exposing raw flags, Winlator provides presets — named combinations of dynarec flags. Each container stores separate presets for Box86 and Box64 via the box86Preset and box64Preset fields.
The default preset for both Box86 and Box64 is COMPATIBILITY.

Presets

The most conservative preset. Every dynarec flag is set to favour correctness over speed.When to use: Games that crash, produce wrong results, or have severe graphical corruption on other presets. Also recommended when debugging an issue.Dynarec flags:
FlagValueEffect
DYNAREC_SAFEFLAGS2Strictest CPU flag handling
DYNAREC_FASTNAN0Correct NaN propagation
DYNAREC_FASTROUND0Correct floating-point rounding
DYNAREC_X87DOUBLE1Uses 64-bit doubles for x87 FPU
DYNAREC_BIGBLOCK0Smallest translation blocks
DYNAREC_STRONGMEM2Strictest memory model
DYNAREC_FORWARD128Short forward branch prediction window
DYNAREC_CALLRET0Conservative call/return handling
DYNAREC_WAIT0Waits for blocks to be fully translated
A balance between correctness and speed. It differs from STABILITY only in memory model strength (STRONGMEM=1 instead of 2) and enables background translation (WAIT=1).When to use: Starting point for any game. Keep this preset unless you have a specific reason to change it.Dynarec flags:
FlagValueEffect
DYNAREC_SAFEFLAGS2Strictest CPU flag handling
DYNAREC_FASTNAN0Correct NaN propagation
DYNAREC_FASTROUND0Correct floating-point rounding
DYNAREC_X87DOUBLE1Uses 64-bit doubles for x87 FPU
DYNAREC_BIGBLOCK0Smallest translation blocks
DYNAREC_STRONGMEM1Relaxed memory model, better throughput
DYNAREC_FORWARD128Short forward branch prediction window
DYNAREC_CALLRET0Conservative call/return handling
DYNAREC_WAIT1Background translation enabled
A middle ground that enables fast NaN handling and larger translation blocks while keeping other safety flags.When to use: Performance is noticeably poor on COMPATIBILITY and the game appears stable. Try this before jumping straight to PERFORMANCE.Dynarec flags:
FlagValueEffect
DYNAREC_SAFEFLAGS2Strictest CPU flag handling
DYNAREC_FASTNAN1Fast NaN (may differ from x86 behaviour)
DYNAREC_FASTROUND0Correct floating-point rounding
DYNAREC_X87DOUBLE1Uses 64-bit doubles for x87 FPU
DYNAREC_BIGBLOCK1Larger translation blocks
DYNAREC_STRONGMEM0Weakest memory model
DYNAREC_FORWARD128Short forward branch prediction window
DYNAREC_CALLRET0Conservative call/return handling
DYNAREC_WAIT1Background translation enabled
Maximum speed. All accuracy flags are relaxed to their fastest values. Translation blocks are as large as possible, the memory model is weakest, and fast floating-point shortcuts are enabled.When to use: CPU-bound games that run too slowly on other presets and appear stable. Not all games tolerate this preset — physics simulations and games with precise floating-point calculations may behave incorrectly.
If you are experiencing performance issues, try changing the Box64 preset to PERFORMANCE first. This often gives a noticeable speed improvement with minimal compatibility impact in well-behaved games.
Dynarec flags:
FlagValueEffect
DYNAREC_SAFEFLAGS1Relaxed CPU flag handling
DYNAREC_FASTNAN1Fast NaN
DYNAREC_FASTROUND1Fast floating-point rounding
DYNAREC_X87DOUBLE0Uses 32-bit floats for x87 FPU
DYNAREC_BIGBLOCK3Maximum translation block size
DYNAREC_STRONGMEM0Weakest memory model
DYNAREC_FORWARD512Long forward branch prediction window
DYNAREC_CALLRET1Optimised call/return handling
DYNAREC_WAIT1Background translation enabled
A user-defined preset with arbitrary dynarec flags. Custom presets are stored in shared preferences under the box86_custom_presets or box64_custom_presets key, encoded as a comma-separated list of id|name|envVars entries.You can create, edit, duplicate, and delete custom presets from the preset manager inside Winlator. Custom preset IDs take the form CUSTOM-N where N is an auto-incrementing integer.When to use: You have identified a specific combination of flags that works for a particular game, or you want to share a working configuration with others.

Changing presets

1

Open container settings

Long-press the container on the main screen and select Edit.
2

Locate the Box86 / Box64 preset fields

Scroll to the Box86 preset and Box64 preset dropdowns. Each can be set independently.
3

Select a preset

Choose the preset that matches your goal. The dropdown shows all built-in presets plus any custom presets you have created.
4

Save and test

Save the container and launch your application. The new dynarec flags take effect immediately on the next launch — no reinstallation is needed.

Troubleshooting guide

SymptomRecommended action
Poor frame rate / slow CPU-bound gameSwitch Box64 preset to PERFORMANCE
Random crashes or freezesSwitch to STABILITY
Graphical corruption or wrong coloursSwitch to STABILITY
Physics or maths glitchesSwitch to COMPATIBILITY or STABILITY
Unity Engine game crashesTry STABILITY, or add -force-gfx-direct to the executable arguments
Game works but is slightly unstable on PERFORMANCETry INTERMEDIATE as a middle ground

Custom presets

You can create a named custom preset with hand-picked dynarec flags:
1

Open the preset manager

In the container settings, tap the preset dropdown and select Manage presets.
2

Create a new preset

Tap Add and give the preset a name. The preset editor shows each BOX64_DYNAREC_* flag as an editable field.
3

Enter flag values

Refer to the flag tables above as a starting point. Each flag accepts a numeric value — higher values generally mean less safe but faster execution.
4

Save and apply

Save the preset. It appears in the Box86 and Box64 preset dropdowns for all containers.
Custom presets are stored per-device in Android shared preferences. They are not exported with the container backup by default. Note down your flag values before resetting the app or migrating to a new device.

Box86 vs Box64: which preset matters more?

Most modern 64-bit games only use Box64. The Box64 preset has the largest impact on performance and compatibility for current titles. Box86 is active for 32-bit executables that run through Wine’s WoW64 subsystem (wow64Mode = true). Some older games and certain game launchers ship 32-bit binaries and will use Box86 even on 64-bit systems. When a game uses both (for example, a 64-bit game engine with a 32-bit launcher), both presets apply to their respective processes.

Build docs developers (and LLMs) love