Polygon’s recent breakdown of a cheating accusation in competitive Pokemon Emerald sent a lot of people back to their save files, and the rabbit hole that follows usually ends with picking the right emulator. Desktop emulation is the place to do it. The screens are bigger, the inputs more accurate, and the save-state tooling makes shiny hunting and EV training tractable in a way no original hardware ever was.

We tested seven Pokemon emulators across a Windows desktop, an M2 MacBook Air, and a Steam Deck running Arch. Picks span Game Boy through Switch, with notes on which generation each one actually shines on.

What matters in a Pokemon emulator

Quick comparison

EmulatorBest forGenerationsOS supportMaintained
mGBAGame Boy, Game Boy Color, Game Boy AdvanceGen 1 to Gen 3Windows, macOS, LinuxYes
VBA-MOlder Game Boy and GBA hardwareGen 1 to Gen 3Windows, macOS, LinuxYes
DeSmuMENintendo DSGen 4, Gen 5Windows, macOS, LinuxYes
melonDSNintendo DS and DSiGen 4, Gen 5Windows, macOS, LinuxYes
CitraNintendo 3DS via active community forksGen 6, Gen 7Windows, macOS, LinuxForks active after upstream sunset
RetroArchAll older generations via coresGen 1 to Gen 7Windows, macOS, LinuxYes
SkyemuLightweight GB / GBC / GBA / NDSGen 1 to Gen 5Windows, macOS, Linux, webYes

The apps

1. mGBA — Best for Game Boy through GBA

mGBA is the modern default for Pokemon Red, Blue, Yellow, Gold, Silver, Crystal, Ruby, Sapphire, Emerald, FireRed, and LeafGreen. The accuracy is high enough to run battle-tested romhacks (Pokemon Radical Red, Pokemon Unbound) cleanly, and the link-cable simulation handles in-game trades over LAN with another mGBA instance. The savestate slot system is one of the cleanest in any emulator.

Where it falls short: Game Boy Advance only. No DS, no 3DS, no Switch. The default video filter does not preserve the GBA pixel grid; you have to enable the bilinear or LCD shaders by hand.

Pricing:

Platforms: Windows, macOS, Linux

Download: mGBA | Source

Bottom line: Pick this for everything Generation 1 through Generation 3. It is the right answer.

2. VBA-M — Best classic option

VBA-M is the modern fork of VisualBoyAdvance, the emulator nearly every Pokemon player ran during the 2000s. The accuracy on Game Boy and Game Boy Color is solid, the link cable supports IPS and IPC modes that mGBA does not always cover, and it runs on hardware older than what mGBA reliably supports.

Where it falls short: Slightly less accurate than mGBA on edge-case games. Romhack compatibility is uneven on recent releases. The interface still shows its 2000s lineage.

Pricing:

Platforms: Windows, macOS, Linux

Download: VBA-M | Source

Bottom line: Pick this on older hardware or when you need a link-cable mode mGBA does not implement.

3. DeSmuME — Best for the DS era

DeSmuME has run Pokemon Diamond, Pearl, Platinum, HeartGold, SoulSilver, Black, White, Black 2, and White 2 since the games came out. The emulation accuracy is high enough to run the in-game Wi-Fi events offline through tooling, and the rendering options handle the dual-screen layout cleanly.

Where it falls short: Performance can be uneven on lower-end hardware; the JIT recompiler helps but still trails melonDS. Wi-Fi support is read-only. The interface remains DS-era utilitarian.

Pricing:

Platforms: Windows, macOS, Linux

Download: DeSmuME | Source

Bottom line: Pick this for Generation 4 and 5 if accuracy matters more than the fastest performance.

4. melonDS — Best modern DS option

melonDS is the newer, faster, more accurate DS emulator. The JIT recompiler outperforms DeSmuME on most modern hardware, the upscaling is sharper, and the local-wireless emulation actually supports trading between two melonDS instances over the network. The interface is the cleanest of any DS emulator.

Where it falls short: Some long-standing romhacks built against DeSmuME quirks misbehave in melonDS. The DSi emulation, while supported, is newer and rougher than the DS path.

Pricing:

Platforms: Windows, macOS, Linux

Download: melonDS | Source

Bottom line: Pick this for Generation 4 and 5 when you want speed, accuracy, and online trading.

5. Citra — Best surviving option for 3DS

Citra as an upstream project was sunset in 2024, but actively maintained community forks (Citra Enhanced, Lime3DS, Azahar) keep Generation 6 and 7 Pokemon running on desktop. Pokemon X, Y, Omega Ruby, Alpha Sapphire, Sun, Moon, Ultra Sun, and Ultra Moon all play well, with internal-resolution scaling that makes the 240p original look closer to native HD.

Where it falls short: No single canonical build. The fork landscape shifts; the right answer this month may be the wrong one in six. Performance varies widely between forks and against the 3DS games’ uneven optimization. Citra-the-name has legal weight; pick a fork that adapted accordingly.

Pricing:

Platforms: Windows, macOS, Linux

Download: Lime3DS (a community-maintained Citra fork) | Azahar (another Citra fork)

Bottom line: Pick a community fork for Generation 6 and 7. Check fork activity before committing your save data to one.

6. RetroArch — Best all-in-one

RetroArch is a frontend that runs emulator cores. The mGBA core, the DeSmuME core, the melonDS core, and others are all available, and a single interface plus shared shaders, save-state slots, and controller profiles cover every Pokemon generation from Red through Black 2. Useful when you want one application instead of seven.

Where it falls short: First-time setup is involved. The interface is keyboard- and controller-first; mouse navigation feels like an afterthought. Some cores lag the standalone emulators by a release or two.

Pricing:

Platforms: Windows, macOS, Linux, plus many more

Download: RetroArch | Source

Bottom line: Pick this when you want one interface that covers every classic Pokemon generation.

7. Skyemu — Best for lightweight setups

Skyemu is the newer entrant that packs Game Boy, Game Boy Color, Game Boy Advance, and Nintendo DS support into a single tiny binary that also runs in a browser. The accuracy is good enough for Pokemon, the interface is modern, and the savestate system works the same way across systems. The web build is handy for quick savestate inspection without installing anything.

Where it falls short: Younger project, so a few edge-case romhacks still hit issues that DeSmuME or melonDS handle. No 3DS or Switch support. Documentation lags the code.

Pricing:

Platforms: Windows, macOS, Linux, web

Download: Skyemu | Source

Bottom line: Pick this when you want one small emulator that covers Generation 1 through Generation 5 and runs anywhere.

How to pick the right one

Pokemon Sword, Shield, Brilliant Diamond, Shining Pearl, Legends Arceus, Scarlet, Violet, and Legends Z-A run on Switch emulators that sit outside this list and carry their own legal and performance caveats.

FAQ

Owning an emulator is legal. Distributing or downloading copyrighted ROMs is not. The clean path is dumping ROMs from cartridges or game cards you own.

Can I trade Pokemon between emulators?

Yes, within the same generation and on emulators that emulate the link cable or local wireless. mGBA supports GBA link, DeSmuME and melonDS support DS wireless, and several emulators offer trade between two running instances over the network.

What is the most accurate Pokemon emulator?

mGBA for the Game Boy through GBA era. melonDS for the DS era. The 3DS scene is fork-driven; pick whichever community fork is the most active at the time you install.

Can I migrate a save file from a real cartridge?

Yes. Tools like GBxCart RW dump cartridge save files into the standard .sav format that mGBA, VBA-M, DeSmuME, melonDS, and others all read. The cartridge plays normally afterward.

Do these emulators run on a Steam Deck?

Yes. RetroArch is the easiest path because it auto-detects the Deck’s controller. mGBA, melonDS, and DeSmuME all have native Linux builds that install cleanly. Mapping the Deck’s grips to L3, R3, and savestate hotkeys is the only setup step.

Which emulator handles romhacks like Pokemon Radical Red?

mGBA for GBA-base romhacks. Most modern Pokemon romhacks target the GBA Generation 3 codebase and run cleanly on a current mGBA build with no special configuration.