An experimental Nintendo 3DS emulator for Android, built for dual-screen handhelds such as the AYN Thor. Games run as ahead-of-time recompiled native ARM64 code, with a Vulkan renderer, HD texture packs, frame generation and each screen on its own display. Nothing is decompiled: each game's code is recompiled once on a PC with 3dsrecomp.
Download the latest Android release · Setup guide · Report a problem
| A good fit if | Not for you yet if |
|---|---|
| You have a dual-screen handheld like the AYN Thor | You want to install the app and play right away |
| You want HD texture packs at up to 3x, frame generation, and native recompiled game code | You need broad, tested game compatibility |
| You're comfortable building each game's native code on a PC once | You don't want to use a PC at all |
An unofficial community fork, not an official release from the Zakuro developers. Previously named Zakuro Android. Existing installs update in place; the Android package, imported games and save locations are unchanged. Requires 64-bit ARM Android 11+ and Vulkan 1.3. Games need a decrypted ROM and matching Android ABI-5 native code built on a computer (ABI-4 builds still run); the APK does not compile games on your handheld. HD texture packs are optional.
Experimental Android frontend for Zakuro, merged with
upstream v0.2.32 (c856685). It runs legally obtained
decrypted 3DS games with separately built native game code. It includes no games,
firmware, keys or texture packs.
This is a developer preview. Each game needs a native build made on a PC, with Rust and the Android NDK installed; the APK does not make one. Everything here was tested on one device (an AYN Thor), mostly with one game (Pokémon Ultra Moon). See known issues and the security notes: native game code and drivers you import run with the app's access.
Start here: Install, import and play. For an existing import that reports an incompatible native library, use the native-code compatibility and repair guide. An ARM64 file from Pocket Native is not automatically compatible: this host uses upstream 3dsrecomp's ABI 5 (and still runs ABI 4), while the inspected Pocket Native fastmem generator's own ABI 5 needs a fast-memory context this host lacks.
| Need | Canonical page |
|---|---|
| Requirements, game folder, optional textures, controls and saves | Android user guide |
| Build a matching Android game library; repair without recopying a ROM | Native library contract |
| Every audited Pocket Native setting and upstream Zakuro feature | Feature parity matrix |
| Architecture, APK toolchains, developer tests | Development |
| What actually ran, on which source and architecture | Verification record |
| Versioned changes, limitations and integration status | Changelog |
| What is not tested or not working | Known issues |
| What you trust, what the app checks, how to report | Security |
| Controlled performance measurement without claims | Benchmark protocol |
| Desktop Zakuro usage from the pinned upstream baseline | Upstream desktop reference |
The Android app is io.github.zakuro.android, with a native Android library UI,
validate-first game import and the existing Zakuro Vulkan renderer. Per-game
settings control HD texture replacement, display layout/stretch/stereo, compiled
code, supported shader/debug paths, motion, controllers, audio and console mode.
A pause menu provides save/load, restart, screen swap and gyro recalibration.
Dual-display Presentation routing and optional custom Adreno Vulkan driver packs are implemented, with system-driver recovery. The external display uses a readback path; physical Thor routing, sensors and driver compatibility still need device verification. Original ROMs and Pocket Native installations are separate.
Version 0.1.7 presented 60 refreshes per second in Pokémon Ultra Moon at 3× with HD textures on an AYN Thor, while that game draws 30 pictures per second; it also fixed the Ultra Wormhole grey screen and made save restore accept ZIPs re-made on any computer. The 0.1.3 foundation repairs the ABI mismatch through a pinned Android game-code builder and code-only replacement. Texture packs are optional at import and can be attached later without copying a ROM again. In-game saves stay at a stable per-title path. Settings are saved only on confirmation.
The feature matrix maps every audited source setting to its actual consumer or an explicit limitation. Pocket Native's GLES-specific speed hacks are not automatically equivalent to this Vulkan backend; unsupported heuristics are not presented as working controls. This is an experimental test build, with recorded checks and hardware limits. No performance claim is made beyond what the testing record measures.
APKs published up to 0.3.1 are signed with a development certificate, CN=Zakuro Android Windows Test:
5821ce1e0d2c1aa009bc1d269ae3865d50ce1448854d067203ce406dea967228
Releases after 0.3.1 are signed with the release certificate, CN=Zakuroishi Release, O=Zakuroishi:
56d7615f627991436670380ccbb8b061b7bca717044d209607a98d44e4a82b0e
Check it with apksigner verify --print-certs APK. Android only updates an installed app from an
APK whose certificate matches or descends from the installed one. New APKs carry a signed lineage
from the old certificate to the new one (android/signing/lineage.bin), so they install over the
old ones and keep your data. See Development.
From this repository in PowerShell, with the documented tools installed:
./android/scripts/build-windows.ps1
# Or Docker Desktop with a working Linux engine:
./android/scripts/build.ps1These build the emulator APK, not a game's title.so. Both use the lockfile and
write uniquely named signed test APKs. Tool versions, signing identities and the
separate native game-code build are explained in Development
and Native library contract. No publication or installation
on a physical device is performed by these commands. A self-built APK is signed with a
different key than the published ones and does not update over them.
Zakuro and the upstream Pocket Native work are credited in the source-backed matrix source inventory. This repository retains the MIT license. Upstream desktop game reports remain in COMPATIBILITY.md; they are not Android device-test results.
Zakuroishi is free. If you want to support it, you can buy us a coffee on Ko-fi. Donations don't buy features or game support, and are never needed to use the app.