Pokémon Ruby, Sapphire, Emerald, FireRed, and LeafGreen still pull in more emulator searches than almost any other Game Boy Advance title, and in 2026 the default answer for how to play them on a PC is mGBA. The project’s stable build, version 0.10.5, has held the top spot in independent emulator roundups for over a year thanks to cycle-accurate timing, a built-in BIOS, and a libretro core that RetroArch users can drop straight into their existing setup. If you’ve been stuck choosing between mGBA, VBA-M, and RetroArch’s mGBA core, or you just want save states and Action Replay codes working correctly on your first try, this walkthrough covers the entire setup from download to a fully configured Pokémon ROM hacking rig.
This guide is built for players who already own their GBA cartridges or have legally dumped ROMs and want a clean, modern emulator that won’t corrupt save files mid-battle. We’ll cover installation on Windows, macOS, and Linux, save state management, cheat code entry, controller mapping, shader options through RetroArch, and the specific settings that matter for Pokémon ROM hacks built on bases like pokeemerald-expansion. Expect roughly 90 minutes end to end if you’re doing this for the first time, less if you’re just migrating from VBA-M.
Don't miss new tech stories on Google
Add Tech Insider once in the Google app and our stories appear in your news suggestions.
Why mGBA Is the 2026 Standard for Pokémon GBA Emulation
mGBA didn’t win the Pokémon emulation community by accident. It was built from scratch specifically to fix the timing inaccuracies and audio desync issues that plagued older tools like VisualBoyAdvance. The official mGBA project page lists 0.10.5, released in March 2025, as the current stable release, and it’s still the version referenced across 2026 emulator guides because the development team has focused recent effort on bugfixes and packaging rather than a version bump.
For Pokémon specifically, three things matter more than raw feature count: save integrity, cheat code compatibility, and ROM hack support. mGBA nails all three. Its save system separates in-game battery saves from save states, so a corrupted save state never touches your actual Pokémon save file, which is the single most common complaint players have with older GBA emulators. It also ships with built-in BIOS emulation, meaning you don’t need to hunt down a separate BIOS dump just to get accurate boot behavior and math coprocessor functions that some Pokémon battle animations rely on.
The ROM hacking scene has effectively standardized on mGBA as the reference emulator for testing. Projects like pokeemerald-expansion, an actively maintained decompilation-based hack base with dozens of tagged releases on GitHub, are developed and QA-tested primarily against mGBA because its accuracy exposes bugs that more forgiving emulators hide. If a hack runs cleanly on mGBA, it’s considered stable.
Prerequisites: What You Need Before You Start
Gather these before starting the install so you’re not pausing halfway through:
- Operating system: Windows 10/11 (64-bit), macOS 12 Monterey or later, or a modern Linux distribution (Ubuntu 22.04+, Fedora 39+, or any distro with Snap/Flatpak support)
- mGBA version 0.10.5 (latest stable as of August 2026) — download only from mgba.io
- A legally obtained GBA ROM dumped from a cartridge you own, or a legitimate digital purchase — this guide assumes you are not downloading copyrighted ROMs from third-party sites
- 500 MB of free disk space minimum, more if you plan to store save states and multiple ROM hack builds
- A USB or Bluetooth game controller (optional but recommended) — Xbox, PlayStation, or any XInput/DirectInput-compatible pad works
- RetroArch 1.19 or later (optional) if you want the libretro mGBA core instead of, or alongside, the standalone app
- A patching tool like Floating IPS or Lunar IPS if you intend to apply ROM hack patches (IPS, UPS, or BPS format)
- Basic familiarity with unzipping files and navigating your OS file browser
Hardware requirements are trivial by 2026 standards. mGBA emulates a 16.78 MHz ARM7TDMI processor, so any laptop or desktop built in the last decade runs it at full speed with room to spare. Even a Raspberry Pi 4 handles mGBA without frame drops.
System Requirements and Expected Performance
One reason mGBA has become the default recommendation for Pokémon emulation is that it simply doesn’t ask much of your hardware. The Game Boy Advance’s ARM7TDMI processor runs at 16.78 MHz, several orders of magnitude slower than anything shipping in a modern laptop, so mGBA spends the vast majority of its CPU budget on accuracy rather than raw throughput. That means the “minimum spec” conversation that dominates PC gaming barely applies here.
| Component | Minimum | Recommended for Multiple Instances |
|---|---|---|
| CPU | Any dual-core x86_64 or ARM64 chip from the last decade | Quad-core, for running two instances simultaneously during link trades |
| RAM | 2 GB system memory | 4 GB or more if running RetroArch alongside other cores |
| GPU | Integrated graphics (Intel UHD, Apple silicon GPU, or equivalent) | No dedicated GPU required; shaders in RetroArch add minor GPU load |
| Storage | 500 MB for the emulator plus ROM library | 2 GB+ if maintaining multiple ROM hack builds and save state histories |
| OS | Windows 10, macOS 12, or a 2022-era Linux distro | Windows 11, macOS 14+, or current-release Linux for best driver support |
In practice, mGBA runs at full, unthrottled speed on hardware as modest as a Raspberry Pi 4 or a five-year-old Chromebook running Linux. The real bottleneck most players hit isn’t CPU or GPU horsepower, it’s display sync and audio buffer settings, which is why Step 6 below spends more time on those than on anything hardware-related. If you’re running mGBA on a handheld gaming PC or a retro handheld with an ARM chip, expect the same full-speed performance you’d get on a desktop, since the emulation workload is trivial by comparison to the device’s other tasks.
Step 1: Download mGBA 0.10.5 for Your Platform
Head to the official mGBA downloads page. This is the only source you should trust — third-party download sites frequently bundle adware with emulator installers. The downloads page auto-detects your OS and surfaces the correct build, but here’s what you’re looking for manually:
| Platform | File Type | Notes |
|---|---|---|
| Windows | .7z portable or .exe installer | Portable build needs no admin rights, ideal for USB drives |
| macOS | .dmg | Universal binary, runs natively on both Intel and Apple Silicon |
| Linux (Snap) | Snap Store package | Stable channel updated January 2026, edge channel updated August 2026 |
| Linux (AppImage) | .appimage | No installation needed, just chmod +x and run |
| Android | .apk via Play Store or F-Droid | Touch controls built in, controller support via Bluetooth |
| Source | GitHub tarball | For custom builds; requires Qt5/Qt6 and CMake |
On Windows, the portable 7z archive is the better choice for most people because it keeps every file, including your configuration and save states, in one folder you fully control. Extract it anywhere you like — Desktop, Documents, or a dedicated Emulators folder on a secondary drive.
On Linux, install via Snap with a single command:
sudo snap install mgba-emulator
mgba-emulator
If you prefer AppImage instead of Snap, the process is just as short:
wget https://github.com/mgba-emu/mgba/releases/download/0.10.5/mGBA-0.10.5-appimage-x64.appimage
chmod +x mGBA-0.10.5-appimage-x64.appimage
./mGBA-0.10.5-appimage-x64.appimage
Check exact filenames against the mGBA GitHub releases page before running the wget command, since asset naming occasionally shifts between point releases.
Step 2: Install and Launch mGBA
Windows installer users just run the .exe and click through the standard wizard — accept the license, pick an install directory, and let it create a Start Menu shortcut. Portable users double-click mGBA.exe directly inside the extracted folder.
On macOS, open the .dmg, drag the mGBA icon into Applications, then launch it from Launchpad. The first time you open it, Gatekeeper will likely flag it as being from an unidentified developer. Right-click the app icon and choose Open instead of double-clicking, then confirm in the dialog that appears — this bypasses the warning without disabling Gatekeeper system-wide.
When mGBA opens for the first time, you’ll see an empty window with a menu bar (File, Edit, Game, Avatar, Audio/Video, Tools, Help on Windows/Linux; the same options live under the mGBA and File menus on macOS). No BIOS setup dialog will interrupt you — this is by design, since mGBA’s built-in BIOS emulation means Pokémon games boot correctly without a separate BIOS file, unlike some competing emulators.
Step 3: Load Your Pokémon ROM
Go to File > Open Game (Ctrl+O on Windows/Linux, Cmd+O on macOS) and navigate to your ROM file. mGBA accepts .gba files directly and also opens .zip archives containing a single ROM without requiring you to extract it first, which keeps your ROM library tidy.
The moment a Pokémon ROM loads, mGBA auto-detects the correct save type (usually Flash 128K for Ruby/Sapphire/Emerald or Flash 1M variants for FireRed/LeafGreen) based on the ROM header. You almost never need to manually set save type for official Pokémon releases. If you’re loading a ROM hack and saves aren’t sticking, that’s the first thing to check — jump to the troubleshooting section below for the fix.
Once the game boots, you’ll land on the familiar Game Freak logo followed by the title screen. If audio crackles or the frame rate stutters on first load, don’t panic — this is almost always a display sync setting, not a hardware limitation, and Step 6 walks through the fix.
Step 4: Configure Save Types and Protect Your Save Data
This is the step most tutorials skip, and it’s the one that causes the most support requests. mGBA maintains two completely separate save systems, and understanding the difference prevents the single most common cause of “I lost my 40-hour save file” complaints.
- Battery saves (.sav files): This mirrors the in-cartridge save chip. It’s created the moment you first save in-game and updates every time you save through the game’s own menu. This is your permanent progress file.
- Save states (.ss0 through .ss9): Instant snapshots of the entire emulator state — RAM, CPU registers, everything — bound to specific save slots. These are convenience tools for quick-saving before a tough battle, not a replacement for your battery save.
Go to File > Save Game and File > Load Game to manage the .sav file directly, or use Game > Save Game State / Load Game State (F1-F9 by default map to slots) for instant snapshots. The critical habit: always let the game auto-write its .sav through an in-game save point periodically, even if you’re leaning on save states for convenience. If mGBA crashes or your save state becomes corrupted, your .sav file is unaffected as long as you’ve saved in-game recently.
To back up your save, close mGBA and copy the .sav file (it sits in the same folder as your ROM by default, or in a dedicated saves folder if you changed that in settings) to a cloud drive or external storage. Do this before applying any ROM hack patch or major emulator update.
Step 5: Set Up Action Replay and GameShark Cheat Codes
mGBA supports the same cheat code formats used by real GBA cheat devices, including Action Replay, CodeBreaker, and GameShark-style codes, which is exactly what most published Pokémon cheat databases use. Here’s how to add one:
- With your ROM loaded, go to Tools > Cheats
- Click the + icon to create a new cheat set, and give it a name like “Master Ball Cheat”
- Select the cheat set, click Add Lines, and paste in your code (formatted as hex pairs, e.g.
82005274 0001) - Check the box next to the cheat set to activate it — codes are toggled on/off individually so you can stack multiple without conflicts
- Codes that need to be entered “while walking” or activated by a specific in-game action will show effects immediately once you meet that condition
mGBA auto-detects whether a pasted code is Action Replay, CodeBreaker, or GameShark format based on its structure, so you rarely need to manually specify the type. One caveat specific to Pokémon: rare candy and item modifier codes that write directly to inventory memory addresses can occasionally desync with ROM hacks that shift memory offsets, so if a cheat does nothing or crashes the game on a hack, it’s a hack compatibility issue rather than an mGBA bug — check the hack’s own documentation or community thread for updated codes.
# Example Action Replay code format for Pokemon Emerald (Master Ball in slot 1)
82005274 0001
# Example GameShark-style code for unlimited Rare Candy
83007CF0 0063
Codes vary by ROM version and region, so always match your code source to your exact ROM (US/EU/JP, and revision number if listed). A code written for the US Emerald ROM will frequently do nothing, or worse, corrupt memory, on the European version.
Step 6: Fix Display, Audio, and Frame Sync Settings
Go to Audio/Video in the menu bar. The three settings that matter most for a smooth Pokémon experience:
- Frame size: Set this to 3x or 4x for a sharp image on modern 1080p+ monitors. mGBA’s integer scaling avoids the blur you get from non-integer stretching.
- Interframe blending: Under Audio/Video > Video, toggle this on if you notice flickering during certain battle animations — some GBA games (including Pokémon’s battle transitions) rely on frame-blending tricks the original hardware’s LCD handled optically, which LCD-less digital displays don’t replicate automatically.
- Sync to video / Sync to audio: Under Audio/Video > Audio and Video submenus, leave both enabled for standard play. If you hear crackling, lower the audio buffer size slightly in Settings > Audio, or disable “Sync to audio” and rely on “Sync to video” alone.
For fullscreen play, press Alt+Enter (Windows/Linux) or the fullscreen toggle in the View menu on macOS. mGBA maintains the GBA’s native 3:2 aspect ratio with black bars rather than stretching to fill a 16:9 screen, which keeps sprites looking correct instead of distorted.
Step 7: Map Your Controller
Go to Settings > Controllers (or Edit > Controller Input on some platform builds). Plug in your controller before opening this menu so mGBA detects it automatically.
Click each GBA button label (A, B, L, R, Start, Select, and the D-pad directions) one at a time, then press the corresponding button on your physical controller. mGBA captures the input and binds it instantly. A sensible Xbox-style layout for Pokémon:
| GBA Button | Suggested Xbox Controller Mapping |
|---|---|
| A | B button |
| B | A button |
| L | Left bumper |
| R | Right bumper |
| Start | Menu/Start button |
| Select | View/Back button |
| D-Pad | D-pad (not left stick) |
That A/B swap looks backwards at first, but it matches how most players’ muscle memory already maps confirm/cancel on modern controllers — feel free to leave it in native orientation if you’d rather keep A-as-A. Keyboard bindings live in the same menu under a separate tab and default to arrow keys plus X/Z for A/B, which works fine if you don’t own a controller.
Step 8: Apply Pokémon ROM Hack Patches Correctly
If you’re playing a ROM hack rather than a vanilla release, you’ll typically download a patch file (.ips, .ups, or .bps format) rather than a complete ROM, since hack communities distribute patches to avoid sharing copyrighted base ROMs directly. Sites like Pokepatched document this workflow clearly: you need a clean base ROM (usually FireRed, Emerald, or Crystal depending on the hack) before applying anything.
- Download a patching tool such as Floating IPS (cross-platform) or Lunar IPS (Windows)
- Open the tool and select “Apply Patch”
- Choose your patch file (.ips/.ups/.bps) first, then your clean base ROM
- Save the output as a new file — never overwrite your clean base ROM, since you may need it again for a different hack
- Load the newly patched ROM into mGBA exactly as you would any other .gba file
Modern hack bases like pokeemerald-expansion, which has shipped dozens of tagged releases including versions in the 1.13.x series through late 2025, sometimes distribute complete pre-built ROMs instead of patches since they’re compiled from decompiled source rather than modified binary data. Either way, load the result into mGBA the same way.
Step 9: mGBA vs VBA-M vs RetroArch’s mGBA Core
You’ll see all three names thrown around in Pokémon emulation threads, and they’re not interchangeable. Here’s the practical breakdown for 2026:
| Emulator | Accuracy | Best For | Trade-off |
|---|---|---|---|
| mGBA (standalone) | High — actively maintained, cycle-accurate timing | Most players; simple setup, built-in BIOS, reliable saves | No built-in shaders or CRT filters |
| VBA-M | Lower — legacy codebase, less accurate timing | Nostalgia for the original VBA interface | Occasional desync issues on Pokémon battle animations and romhacks |
| RetroArch + mGBA core | Identical to standalone mGBA (same core) | Multi-system users who want shaders, netplay, run-ahead, and RetroAchievements | More setup complexity than the standalone app |
The key insight here: RetroArch’s mGBA libretro core uses the exact same emulation engine as the standalone app, so you’re not sacrificing accuracy by choosing RetroArch — you’re just adding a frontend layer with more configuration options. If you already run RetroArch for other systems and want unified save states, controller profiles, and shader presets across your whole retro library, install the mGBA core through RetroArch’s built-in core downloader (Online Updater > Core Downloader > Nintendo – Game Boy Advance (mGBA)) instead of running standalone mGBA.
VBA-M still gets mentioned in older guides and forum threads, largely out of habit from players who started emulating GBA games a decade ago. For Pokémon ROM hacks specifically, where scripting engines and battle systems have been heavily modified from the original code, accuracy differences that don’t matter in vanilla games can cause visible glitches in hacks. That’s the technical reason the hacking community has largely standardized on mGBA as the reference target.
Step 10: Enable Shaders and Filters (RetroArch Route Only)
If you went the RetroArch + mGBA core route in Step 9, you unlock a feature standalone mGBA doesn’t offer natively: shader presets. In RetroArch, go to Quick Menu > Shaders > Load Shader Preset, and browse to the crt or handheld category for GBA-appropriate filters.
- crt-hyllian or crt-royale: Simulates a CRT scanline look, popular for a “retro screen” aesthetic
- lcd-grid-v2: Mimics the actual pixel grid of the original GBA’s reflective LCD panel, which many players find more period-accurate than CRT shaders for a handheld system
- xBRZ or hqx upscalers: Smooths pixel edges for a less blocky look at large display sizes, though purists tend to skip these for sprite-based games like Pokémon
Standalone mGBA users who want a similar effect are limited to basic interpolation toggles (nearest-neighbor vs bilinear) under Audio/Video > Video, without the shader stack RetroArch provides. If shaders matter to you, that’s the single strongest argument for choosing RetroArch’s core over the standalone app.
Step 11: Set Up Link Cable Trading and Multiplayer Emulation
Pokémon trading between two emulated instances is one of the trickier features to configure correctly. mGBA supports local link cable emulation between two instances running on the same machine, or over a local network between two separate computers.
- Launch two separate instances of mGBA, each with its own copy of a Pokémon ROM loaded (they can be the same game or different versions like Ruby and Sapphire)
- In each instance, go to Tools > Multiplayer
- Set one instance as the host; the second instance should automatically detect and connect to it on the same machine, or you’ll enter the host’s local IP address if connecting across a network
- In-game, initiate a trade or link battle exactly as you would with real hardware — walk into the trade center (or Union Room in later games) and follow the same menu prompts
Link emulation is timing-sensitive, so keep both instances running at full, unthrottled speed (avoid fast-forward on either window) during the handshake and trade sequence, or the connection can drop mid-trade. This is one of the areas where mGBA’s accuracy advantage over older emulators shows up most clearly — link cable emulation on less accurate emulators frequently fails or hangs.
Step 12: Organize Save States and ROM Libraries
Once you’re running more than one or two Pokémon titles or hacks, file organization saves real time. Go to Settings > Paths and set dedicated folders for saves, save states, and screenshots rather than leaving everything in the default location next to your ROMs. A structure like this keeps things manageable:
Emulators/
mGBA/
roms/
pokemon-emerald.gba
pokemon-firered.gba
saves/
pokemon-emerald.sav
pokemon-firered.sav
states/
pokemon-emerald.ss0
pokemon-firered.ss0
hacks/
unbound-v2.gba
radical-red-v4.gba
Back up the entire saves and states folders periodically to cloud storage. If you’re testing multiple ROM hacks, keeping each patched ROM’s save file named identically to the ROM (mGBA does this automatically by default) avoids the classic mistake of loading the wrong save into the wrong hack version.
Common Pitfalls When Setting Up mGBA for Pokémon
These are the mistakes that generate the most support threads and Reddit posts about mGBA and Pokémon specifically:
- Downloading mGBA from a third-party site instead of mgba.io. Mirror sites frequently bundle adware installers or distribute outdated, occasionally modified builds. Always use the official downloads page.
- Confusing save states with battery saves. Relying solely on save states without ever letting the game write to its .sav file means a single corrupted state file can wipe your entire progress. Save in-game regularly.
- Using a cheat code written for the wrong region or ROM revision. A US Emerald code pasted into a European Emerald ROM will do nothing at best, or write to the wrong memory address at worst.
- Overwriting a clean base ROM when patching a hack. Always save the patched output as a new file so you retain the clean base for future hacks.
- Running link cable trades with fast-forward enabled. The handshake timing is sensitive; unthrottled real-time speed prevents dropped connections mid-trade.
- Assuming RetroArch’s mGBA core is less accurate than standalone. It’s the identical core — the accuracy is the same, only the frontend differs.
- Skipping the BIOS setting confusion. Unlike some emulators, mGBA doesn’t require a separate BIOS file, so if a guide tells you to hunt one down for basic Pokémon play, that instruction is outdated.
Advanced Tips for Pokémon ROM Hack Testing
If you’re testing ROM hacks rather than just playing vanilla games, a few mGBA features go beyond casual play:
- Use the built-in memory viewer (Tools > Memory Viewer) to inspect RAM addresses directly, useful for verifying that a hack’s custom scripts are writing to the correct offsets.
- Enable the logging console (Tools > View Logs) to catch script errors or illegal memory access that a hack’s debug build might report, which is invaluable when a hack silently crashes without a clear error message.
- Use rewind (a checkbox under Settings > Emulation) to step backward through gameplay a few seconds at a time, handy for isolating the exact frame where a scripted event breaks.
- Run headless via command line for automated testing pipelines — mGBA supports CLI flags for loading a ROM and running for a fixed number of frames, which some hack developers use in CI scripts to catch regressions before releasing a patch.
- Cross-check timing-sensitive hacks against the libretro core if you suspect a standalone-specific bug, since both use the same core but different frontend event loops that can occasionally surface different edge cases.
Complete Working Example: A Full Emerald ROM Hack Setup
Here’s the entire workflow end to end, as a single reference checklist, for setting up a popular Emerald-based ROM hack with cheats and a mapped controller:
- Download and install mGBA 0.10.5 from mgba.io for your platform
- Dump or legally obtain a clean Pokémon Emerald (US) ROM
- Download the ROM hack’s .ips patch file from its official distribution page
- Apply the patch to your clean Emerald ROM using Floating IPS, saving the output as a new file (e.g., emerald-hack-v2.gba)
- Open mGBA, File > Open Game, select the patched ROM
- Let the game boot and confirm the title screen shows the hack’s custom branding
- Go to Settings > Controllers and map your gamepad
- Play until you reach a save point, save in-game to create the .sav file
- Close mGBA, back up the .sav file to cloud storage
- Reopen mGBA, add any cheat codes specific to that hack via Tools > Cheats
- Set up a save state before any major story event as a safety net
- Continue playing with periodic in-game saves as your primary progress record
Following this exact order avoids the two most common failure points: patching over your clean ROM, and relying on save states as your only backup.
Troubleshooting: 10 Common mGBA and Pokémon Issues
Here are the fixes for the issues that come up most often in mGBA support threads and Pokémon emulation communities:
- Game won’t save / progress resets on reload: Check the save type under Tools > Game Overrides. mGBA usually auto-detects correctly for official ROMs, but some ROM hacks need the save type manually forced to match the hack’s actual save chip (Flash 128K, Flash 1M, EEPROM, or SRAM).
- Choppy audio or crackling sound: Lower the audio buffer size under Settings > Audio, or try switching the audio driver (SDL, OpenAL, or the platform default) if one produces artifacts.
- Cheat code has no effect: Confirm the code matches your exact ROM region and revision. Also verify the cheat set checkbox is actually checked — adding a code doesn’t auto-enable it.
- Game runs too fast or too slow: Check that “Sync to video” is enabled and your monitor’s refresh rate isn’t drastically mismatched with the emulator’s target frame rate. Disable any accidental fast-forward key binding.
- Controller not detected: Reopen Settings > Controllers after plugging the controller in; mGBA scans for devices when the menu opens, not continuously in the background.
- ROM hack crashes on a specific event: Check the hack’s own bug tracker or community forum first — this is very often a known issue with the hack itself rather than mGBA, especially for hacks still in beta.
- Black screen after applying a patch: The patch was likely applied to the wrong base ROM version or region. Re-download a clean base ROM matching the exact version the hack specifies (often listed on the hack’s download page).
- Link cable trade won’t connect between two instances: Make sure both instances are unthrottled (no fast-forward), both have Tools > Multiplayer open simultaneously, and any firewall isn’t blocking local network traffic if trading between two separate machines.
- Save states won’t load / “incompatible version” error: Save states are tied to the exact mGBA build and ROM file. A save state made on an older mGBA version or a different ROM revision won’t load cleanly after an update — this is expected behavior, not a bug.
- Screen tearing in fullscreen mode: Enable V-Sync under Audio/Video > Video if your GPU driver doesn’t force it globally.
mGBA Version History and What Changed Recently
Understanding the release cadence helps set expectations if you’re coming from an older build:
| Version | Release Focus |
|---|---|
| 0.10.5 (current stable) | Bugfix release addressing several important stability issues over 0.10.x builds |
| 0.10.0-0.10.4 | Performance improvements, expanded compatibility, refined save handling |
| 0.9.x | Previous stable series, mature feature set, still referenced in some older guides |
| Development builds | Nightly builds available for testing unreleased fixes, not recommended for regular play |
The project’s Linux Snap packaging shows continued maintenance activity into 2026 — the stable channel was refreshed in January 2026 and the edge/testing channel in August 2026 — even though the underlying application version has stayed at 0.10.5 since March 2025. That’s normal for a mature, stable emulator: most of the recent work has gone into packaging reliability and platform builds rather than headline features, which is exactly what you want from software you’re trusting with save files.
When to Choose RetroArch’s mGBA Core Instead
Standalone mGBA is the right default for most Pokémon players. But switch to RetroArch’s mGBA core if any of these apply to you:
- You already emulate other consoles (SNES, N64, PS1) through RetroArch and want one unified interface instead of juggling separate apps
- You want shader presets for a CRT or LCD-grid visual style that standalone mGBA doesn’t offer
- You want RetroAchievements integration to earn achievement-style rewards while playing classic Pokémon titles
- You want netplay to stream a link cable trade or battle to a friend over the internet rather than a local network
- You want run-ahead input latency reduction, a RetroArch-exclusive feature that shaves a few frames of input delay for a snappier feel
If none of those apply, stick with standalone mGBA — it’s simpler to configure, has fewer moving parts to troubleshoot, and delivers identical core accuracy.
Frequently Asked Questions
Is mGBA free to use?
Yes. mGBA is free and open source, distributed under the Mozilla Public License, with no ads, no paywalls, and no in-app purchases.
Do I need a BIOS file to play Pokémon on mGBA?
No. mGBA includes built-in BIOS emulation that handles the boot sequence and math functions Pokémon games use, so you can skip the BIOS-hunting step required by some older emulators.
Can mGBA run Pokémon ROM hacks like Radical Red or Unbound?
Yes, and it’s the emulator most hack developers test against first, since its cycle-accurate timing exposes bugs other emulators mask. Apply the hack’s patch to a clean base ROM using a tool like Floating IPS, then load the resulting file normally.
Is mGBA better than VBA-M for Pokémon?
For accuracy and modern development, yes. VBA-M’s codebase is older and less actively maintained, and it’s more prone to timing desync on battle animations and heavily modified ROM hacks. mGBA is the recommended default in essentially every current emulator comparison.
Does RetroArch’s mGBA core have worse accuracy than standalone mGBA?
No. They use the identical underlying core. The only difference is the frontend — RetroArch adds shaders, netplay, and unified save management, while standalone mGBA keeps things simpler.
Can I trade Pokémon between two mGBA instances?
Yes, through Tools > Multiplayer in each instance, either locally on one machine or across a network. Keep both instances running at full unthrottled speed during the trade handshake to avoid dropped connections.
Will using cheat codes corrupt my save file?
Legitimate Action Replay and GameShark-format codes entered through mGBA’s cheat menu are generally safe for official ROMs. Risk increases with ROM hacks, where a code targeting a shifted memory address can write to the wrong location — always back up your .sav file before testing new codes on a hack.
What’s the difference between a save state and a battery save?
A battery save (.sav) mirrors the cartridge’s permanent save chip and is your real progress file. A save state is an instant snapshot of the entire emulator session, useful for quick-saving before a risky moment, but it should never be your only backup.
Which Pokémon games work with mGBA?
Every Game Boy Advance Pokémon title runs on mGBA, including Ruby, Sapphire, Emerald, FireRed, LeafGreen, and the vast majority of GBA-based ROM hacks built on those games. mGBA does not emulate the Nintendo DS, so Diamond, Pearl, Platinum, HeartGold, or SoulSilver require a different emulator, such as melonDS.
Related Coverage
- How to Set Up melonDS for Pokémon: 13 Steps, 60 Min [2026]
- How to Set Up Azahar for Pokémon: 13 Steps, 60 Min [2026]
- Best Pokémon Emulators: 10 Steps, 80 Min [2026]
- How to Set Up PPSSPP: PSP Emulator in 13 Steps [2026]
- Best N64 Emulator: 5 Tools Ranked as Simple64 Dies [2026]
- Best Android Emulators for PC: 12 Steps, 90 Min [2026]


