A modern open-source Android emulator built around mGBA, focused on a polished Game Boy Advance experience.
Download Retra v1.0.4 · Changelog · Troubleshooting · Contributing
Retra is an open-source Android retro emulator built around the mGBA core, with feature development primarily focused on Game Boy Advance gameplay.
It combines emulation with a mobile-first interface, persistent game data, customizable controls, backup and restore tools, save states, cheats, artwork, display customization, and local or remote GBA link features.
Important
Retra does not include commercial ROMs, BIOS files, or copyrighted game assets. Use only content you are legally permitted to use.
- GB, GBC, and GBA emulation through the mGBA integration.
- Fast-forward and slow-motion speed controls.
- Adaptive high-refresh interface presentation, with gameplay using a stable cadence-compatible 60/120 Hz presentation path while emulation timing remains independent from display refresh rate.
- BIOS support, ROM patches, cheats, statistics, and per-ROM configuration.
- Optional GLSL shaders and gameplay Color Style presets.
- Four-buffer latest-frame mailbox with dedicated producer, pending, rendering, and spare roles.
- Allocation-free producer and GL-consumer result holders during normal gameplay.
- Stale turbo frames are dropped instead of queued, so high-speed emulation does not create a visual catch-up backlog.
- Fractional
TurboSlicePlannerscheduling keeps 2×/4×/8×/16× timing smooth against the GBA's ~59.73 Hz base cadence. - Hitch-safe cumulative turbo timing re-anchors after substantial Android/GC stalls instead of paying the delay back as a burst.
- Native speed-aware FIR audio keeps high-speed PCM work out of the Kotlin/JNI hot path, with deterministic reset when the speed multiplier changes.
- VSync scheduling reuses callback Runnables, coalesces real mailbox generations, and resets generation state for each new gameplay session.
- Battery saves, save states, and automatic resume.
- Gameplay Import save accepts both
.savand.srmbattery-save files with per-ROM filename and save-size safety checks. - Persistent ROM identity based on SHA-256 content hashes.
- Compatible saves and metadata can reconnect after a ROM is moved, renamed, removed, or re-imported.
- Portable Create Backup and Restore Backup using
.retrafiles. - Android Auto Backup/device transfer support.
- Reinstall continuity through Android's Keep app data flow.
- Screen Editor with independent portrait and landscape layouts.
- Draggable and resizable on-screen controls.
- Emulator-screen resizing and edge-aware layout editing.
- Controller opacity controls.
- Optional light controller tap sound and smooth haptics under Sound.
- Automatic artwork with persistent manual cover and background overrides.
- Lightweight gameplay color presets: Classic, Vivid, Warm, and Muted.
- GBA Local Link on one Android device.
- Wi-Fi Remote Link between supported devices.
- Bluetooth Remote Link between supported Android devices.
- Google Drive sync with conflict-safe behavior.
- Android Storage Access Framework folder fallback.
- Automatic GitHub Releases update checks on each fresh app process, so newly published versions are discovered on the next launch.
- Manual Check for updates action in About.
- Modular Android architecture.
- Release validation, regression tests, lint checks, and CI quality gates.
The latest stable APK and release notes are available from:
Current stable release: Retra v1.0.4
| Item | Current status |
|---|---|
| Version | v1.0.4 |
| Release channel | Stable |
| Minimum Android | API 26 / Android 8.0+ |
| License | Mozilla Public License 2.0 |
| Maintainer | Zense |
| Emulator core | mGBA |
| Version | Summary |
|---|---|
| v1.0.0 | Official release |
| v1.0.1 | Added Create Backup and Restore Backup |
| v1.0.2 | Added in-app update checking and Android reinstall-recovery hardening |
| v1.0.3 | Added persistent ROM title editing plus controller, rewind, save-import, and Google Drive restore polish |
| v1.0.4 | SmoothTurbo hardening: four-buffer latest-frame handoff, allocation-free gameplay hot paths, safer VSync/session recovery, and cleaner turbo audio transitions |
Public release numbering follows Semantic Versioning. Earlier project work is organized in docs/DEVELOPMENT_HISTORY.md.
Retra includes lightweight gameplay color presets that affect only the rendered game image. The Retra interface itself remains unchanged.
Available presets: Classic · Vivid · Warm · Muted
Retra v1.0.4 supports normal GBA Link Cable-style multiplayer and two-player Local Single-Pak/Multiboot through:
- Local Link on one Android device.
- Single-Pak / Multiboot on one Android device using a user-provided 16 KiB GBA BIOS for the cartridge-less receiver.
- Wi-Fi Remote Link between supported devices.
- Bluetooth Remote Link between supported Android devices.
Remote Link includes connection health metrics, heartbeat/timeouts, state-hash validation, jitter-aware input delay, host-authoritative recovery, bounded recovery retries, and deterministic input reseeding.
Retra separates replaceable ROM files from persistent user data.
ROM content -> SHA-256 -> permanent romId
|
+-- Saves
+-- Save states
+-- Cheats
+-- Layouts
+-- Covers/backgrounds
+-- Categories/favourites
+-- Statistics
Structured ROM metadata is stored with Room, application-wide settings use Preferences DataStore, and save commits use verified temporary files, per-ROM locking, and rotating backups.
Import recovery uses a durable journal so interrupted imports can be recovered safely.
For the full storage design, see docs/PERSISTENT_STORAGE_ARCHITECTURE.md.
- Android Studio with the Android SDK required by the Gradle project.
- The JDK/toolchain required by the included Android Gradle Plugin.
- Android NDK r28.
- CMake 3.22.1.
- The exact locked mGBA source revision used by Retra.
Retra is pinned to mGBA commit:
543a197582c30364584d773a974d7f991892fa43
The revision is recorded in third_party/mgba.lock.
python3 tools/prepare_mgba.pyThis prepares third_party/mgba/ at the exact locked commit.
CMake also accepts the legacy sibling ../mgba/ location or an explicit RETRA_MGBA_SOURCE_DIR, but verifies that the source matches the clean locked revision before configuring the native build.
versionName = 1.0.4
versionCode = 451
minSdk = 26
versionCode 451 upgrades cleanly over v1.0.3 (450), v1.0.2 (449), v1.0.1 (448), and v1.0.0 (447).
- Clone or extract the Retra repository.
- Run
python3 tools/prepare_mgba.py. - Open the repository root in Android Studio.
- Allow Gradle to sync and install the requested SDK, NDK, and CMake components.
- Build and run on an Android device.
Windows
gradlew.bat :app:compileDebugKotlin :app:testDebugUnitTest :app:lintDebugmacOS / Linux
./gradlew :app:compileDebugKotlin :app:testDebugUnitTest :app:lintDebugA full APK/AAB build requires the exact mGBA revision recorded in third_party/mgba.lock. CMake rejects a different or dirty tracked checkout.
Retra/
├─ app/ Android application
│ └─ src/main/
│ ├─ assets/retra/ WebView UI modules, styles, and branding
│ ├─ cpp/ Native mGBA bridge and native build config
│ └─ java/.../emulator/ Android controllers, repositories, and runtime
├─ docs/ Release, architecture, and engineering docs
│ └─ history/ Archived implementation/build notes
├─ tests/ Dependency-light regression tests
├─ third_party/ Preferred project-local mGBA location
├─ tools/ Release validation scripts
├─ CHANGELOG.md Public release and development history
├─ TROUBLESHOOTING.md User troubleshooting and bug-reporting guide
├─ CONTRIBUTING.md Contribution guide
├─ SECURITY.md Security policy
├─ THIRD_PARTY_NOTICES.md Third-party licensing notices
└─ LICENSE MPL-2.0
See docs/README.md for the documentation index and docs/ARCHITECTURE.md for the current architecture.
Run the dependency-light release gate before publishing changes:
python3 tools/release_gate.pyIt validates JavaScript syntax, regression tests, release structure, and release metadata that do not require the Android SDK/NDK or mGBA.
For Android-specific validation, also run the Gradle compile/test/lint tasks above.
Before publishing an APK/AAB, complete the physical-device checks in:
CHANGELOG.md— public release and development history.TROUBLESHOOTING.md— installation, ROM loading, performance, audio, controls, saves, backups, BIOS, multiplayer, sync, and crash-reporting help.CONTRIBUTING.md— contribution requirements.SECURITY.md— vulnerability reporting and security boundaries.docs/DEVELOPMENT_HISTORY.md— organized pre-v1.0 development history.docs/ARCHITECTURE.md— current Android/runtime architecture and module boundaries.docs/CONTROLLER_FEEDBACK.md— controller sound/haptic behavior and design constraints.docs/PERSISTENT_STORAGE_ARCHITECTURE.md— persistent storage design.
Retra source code is released under the Mozilla Public License 2.0 (MPL-2.0). See LICENSE.
Retra integrates with the separately maintained mGBA emulator core. mGBA is not owned by Retra and retains its own copyright and MPL-2.0 notices.
See THIRD_PARTY_NOTICES.md and the license files included with the exact mGBA revision used for your build.
ROMs, BIOS files, game artwork, trademarks, and game content are not distributed with Retra and remain the property of their respective rights holders.
Retra · Android retro emulation powered by mGBA
