/// FIELD NOTES FROM A SELF-AWARE GAME SITE
RetroArch Cores 2026: 200+ Emulators in 12 Steps
RetroArch does not emulate anything. This tends to surprise people who have already spent a weekend fighting with it. The menus, the shaders, the netplay, the rewind, the input remapping, the CRT filters that make your LCD ache — all of that is the frontend. The actual work of pretending to be a Super Nintendo is done by a core: a separate emulator, compiled as a loadable library, handed to RetroArch at runtime through an interface called libretro. There are, as of the middle of 2026, more than two hundred of them.
That number is the source of most of the confusion. A new user opens the Core Downloader, sees a wall of two hundred-odd entries, and does one of two wrong things: downloads every single one, or freezes and downloads nothing. This guide is the corrective. Twelve numbered steps to install, update, and configure cores in RetroArch v1.22.2 (November 2025) across Windows, Linux, macOS, and the handhelds; the one core that is actually correct for each system; and the specific, repeatable ways the whole thing falls over. There is no promotional tone here because there is nothing to sell — the entire stack is free and open source, and the only currency involved is your afternoon.
What a Core Actually Is
Before you download anything, understand the shape of the thing. Most core problems are not bugs; they are category errors — a user treating a core like an app, or the frontend like an emulator. Ten minutes of theory here will save you an hour in the troubleshooting table later.
Cores versus the frontend
RetroArch is a libretro frontend. libretro is a small, stable API — an application binary interface, really — that defines how a frontend talks to an emulator: give me a frame of video, give me an audio buffer, here is the controller state, here is the content to load. Any emulator that implements that interface can be compiled into a core: a .dll on Windows, a .so on Linux and Android, a .dylib on macOS. RetroArch loads that library dynamically, feeds it your ROM, and paints the result. Swap the core and the same UI now drives a different machine. That is the entire trick, and it is why one program can run a NES cartridge, a PlayStation 2 disc, and a copy of DOOM without knowing the first thing about any of them.
The practical consequence: a core has no menu of its own, no updater of its own, and no opinion about where your games live. It is a black box that turns input plus content into audio and video. When something breaks, the first diagnostic question is always which layer — frontend or core — and the answer is usually printed in the log if you bother to read it.
Why there are more than 200 of them
The official RetroArch cores page lists over 200 cores as of June 2026, but that count is inflated in an honest way: not all of them are emulators. A good chunk are game engines — reimplementations that need your original data files, like the DOOM engine (PrBoom), Cave Story (NXEngine), or the OpenLara Tomb Raider port. A few are multimedia programs: the FFmpeg core plays video, and there is a Lua game framework (Lutro) in there too. So "200+ cores" does not mean 200 consoles. It means 200 loadable modules, of which perhaps thirty matter to anyone building a normal retro library.
This is also why the accuracy conversation gets heated: for a single system you often have several cores, ranging from a fast, forgiving one to a slow, obsessive one. SNES alone gives you Snes9x, bsnes, and the bsnes-mercury variants. Picking between them is the actual skill, and it is what the middle of this guide is about.
The 2026 baseline: v1.22.2, not "January 2026"
Get your version facts straight, because a lot of secondhand guides do not. The current stable build in mid-2026 is v1.22.2, released 20 November 2025. The 1.22.x line (14 November 2025) unified the main menu across menu drivers and continued the Vulkan and web-player work. The earlier v1.21.0 landed on 1 May 2025 — not January 2026, whatever a scraped listicle told you — and it is the release that added the PipeWire and FFmpeg camera drivers and enabled Vulkan emulated mailbox presentation. If a guide dates 1.21.0 to 2026, treat every other number in it as suspect. You can confirm the timeline yourself against the RetroArch releases on GitHub.
None of this, incidentally, makes emulation "solved." Software cores approximate hardware; they do not become it. If you want cycle-exact behaviour with no compromise, that is the argument for FPGA hardware like the MiSTer Multisystem 2, which is genuinely cheaper than the chip it is built around. Cores are the pragmatic path: cheaper, more flexible, and in the case of the best NES and SNES cores, close enough that the difference is a lab measurement rather than a gameplay one.
Prerequisites: Versions, Hardware, ROMs
Three things must be true before step one: you are on a modern build, your hardware can run the cores you want, and you have legally obtained content plus any BIOS the core demands. Skip any of these and you will be back here inside twenty minutes.
Software versions and platform builds
Use RetroArch v1.22.2 or newer. Do not use a random three-year-old fork bundled inside some all-in-one "retro suite"; core info files and the buildbot move on, and an old frontend will happily download cores it can no longer label or load. Get RetroArch from the correct channel for your platform:
- Windows — the official installer or the winget package
Libretro.RetroArch. - Linux and Steam Deck — the Flatpak
org.libretro.RetroArchfrom Flathub (on the Deck, add it in Desktop Mode via Discover). - macOS — the Homebrew cask
retroarch, or the notarised build from the site. - Android / iOS / consoles / smart TVs — platform-specific builds; the WebOS TV situation gets its own note in the advanced section.
Hardware reality check
Cores are not created equal, and the gap between the lightest and heaviest is enormous — from "runs on a potato" to "wants a discrete GPU and a Vulkan driver." The rough tiers:
| System class | Typical core | Rough requirement |
|---|---|---|
| 8-bit (NES, SMS, GB/GBC) | Mesen, Gambatte, mGBA | Anything since roughly 2010 |
| 16-bit (SNES, Genesis) | Snes9x, Genesis Plus GX | Modest CPU; bsnes accuracy wants a fast core |
| SNES, maximum accuracy | bsnes (accuracy profile) | ~4 GHz-class single-thread, per XDA |
| PlayStation | Beetle PSX HW / PCSX ReARMed / SwanStation | HW wants a real GPU; ReARMed for ARM handhelds |
| Nintendo 64 | Mupen64Plus-Next / ParaLLEl-N64 | Mid-range and temperamental |
| Dreamcast | Flycast | Steam Deck-class handles it comfortably |
| PlayStation 2 | LRPS2 (paraLLEl-GS) | Modern discrete GPU + Vulkan driver |
| Arcade | FinalBurn Neo / MAME | Varies wildly by romset era |
The lesson buried in that table: match the core to the metal. On a lower-end ARM handheld — the kind of device weighed up in our Retroid Pocket 5 versus 6 breakdown, where the extra 70% CPU costs 45% more — you run PCSX ReARMed, not Beetle PSX HW, and Snes9x, not bsnes accuracy. On a Steam Deck, which our Switch 2 comparison found wins nine times out of ten on the emulation front, you can afford Flycast at high internal resolution and even take a run at LRPS2. Choosing the wrong tier for your device is the single most common self-inflicted wound in this hobby.
What you bring: ROMs, BIOS, and the law
Cores ship no games and, mostly, no BIOS. You supply both. ROMs are your business and your legal exposure; the defensible position — the one The Machine will state plainly and then stop nagging about — is that you dump your own cartridges and discs. The core will not judge you. A rights holder might. Curation matters more than volume: a tight, verified set beats a bloated dump, which is the entire argument of our Miyoo Mini Plus game-list piece and its 6,041-ROM aggregation.
BIOS files are separate. Several cores refuse to load content without them — PlayStation (SCPH images), Sega CD, Dreamcast, and others. They go in RetroArch's system directory, and the md5 must match what the core expects or you will get a silent failure. A sane layout:
RetroArch/
system/
scph5501.bin # PS1 (NTSC-U) - match md5 to libretro docs
scph7502.bin # PS1 (PAL)
bios_CD_U.bin # Sega CD (US)
dc/
dc_boot.bin # Dreamcast boot ROM
dc_flash.bin # Dreamcast flash
# Verify each md5 against the per-core BIOS list in the libretro docs
# before you blame the core for "failed to load content".Steps 1–3: Install and Update RetroArch
The frontend first. A current frontend is a precondition for current cores, because the buildbot compiles cores against a moving libretro API and an old app can be left holding libraries it cannot initialise.
Step 1 — Install the correct build
Rationale: where you get RetroArch determines how you update it and which cores are even available. The Steam build, the standalone build, and the distro/Flatpak build are subtly different animals, and mixing update mechanisms across them is how people end up with two half-broken installs. Pick one channel per machine and commit. On Windows use the installer or winget; on Linux and the Steam Deck use the Flathub Flatpak; on macOS use the Homebrew cask. Do not run RetroArch out of a temp folder or a synced cloud directory — file locking and path resolution will bite you.
Step 2 — Update the app through your package manager
Rationale: the in-app Online Updater refreshes cores, not the RetroArch binary. To move from, say, 1.21.0 to 1.22.2 you update the app itself, using the mechanism that matches how you installed it. These are the current, correct commands:
# Windows (winget)
winget upgrade Libretro.RetroArch
# Linux and Steam Deck (Flatpak)
flatpak update org.libretro.RetroArch
# macOS (Homebrew cask)
brew upgrade --cask retroarchIf you installed from the Microsoft Store, Steam, or a distro's native package, update through that instead — do not layer winget or brew on top of a Steam install.
Step 3 — Verify the version
Rationale: never assume an update took. Open Settings → Information → System Information and read the version line. This is also where you confirm your video driver, which matters later for Vulkan-only cores. Expected output looks like this:
Settings > Information > System Information
RetroArch Version : 1.22.2
Git Version : (commit hash)
Build Date : Nov 20 2025
Current Video Driver : vulkan
Frontend Identifier : (your platform)If the version still reads 1.21.0 after an update, the update did not apply — close RetroArch fully (check the tray/background process) and run the command again.
Steps 4–6: Core Info Files and the Downloader
Here is where most guides — including the scraped ones citing a nonexistent "setup guide" on the shattered.io domain, which is actually the home of the 2017 SHA-1 collision demo and has nothing to do with RetroArch — get the ordering wrong. Core info files come before cores. Full stop.
Step 4 — Update Core Info Files first
Rationale: a core info file (*_libretro.info) is the metadata that tells RetroArch a core's display name, which systems it handles, what file extensions and BIOS it needs, and whether it even shows up in the Core Downloader. Without current info files, the downloader is empty or mislabelled and freshly downloaded cores appear as cryptic filenames with no system association. Go to Online Updater → Update Core Info Files and let it finish. This is the genuine, long-standing first move — it is in the official libretro docs on downloading cores, not folklore. Expected result: a brief progress bar, then a silent return to the menu. That silence is success.
Step 5 — Open the Core Downloader and read the list
Rationale: now that info files are current, Online Updater → Core Downloader shows the real, labelled list — over 200 entries, each named by system and core ("Nintendo - NES / Famicom (Mesen)"). Do not scroll it like a shopping cart. Read it like a menu where you will order four dishes. Downloaded cores land in your cores directory as libraries:
RetroArch/cores/
mesen_libretro.dll
snes9x_libretro.dll
genesis_plus_gx_libretro.dll
flycast_libretro.dll
fbneo_libretro.dll
# ...only what you selected, not all 200Step 6 — Learn Update Installed Cores (the automation)
Rationale: cores are built nightly by the libretro buildbot, so they drift ahead of whatever you downloaded. Online Updater → Update Installed Cores is the one-click refresh: it pulls the latest build of every core you already have and skips the ones you do not. This is the "core update automation" people mean — it is not new to any single version, but it is the correct way to stay current without re-picking from the 200-entry list every week. Run it monthly, or after any frontend update, so your cores match the API the new binary expects.
Steps 7–9: Download the Cores That Matter
Now the actual selection. Three steps, grouped by vendor, then a fourth instruction that is really a warning: stop.
Step 7 — The Nintendo set
Rationale: these cover the bulk of most libraries and are the ones where accuracy differences are most audible and visible. Download, at minimum:
- Mesen — NES/Famicom (and more). Cycle-accurate; see the next section.
- Snes9x — SNES, the pragmatic default. Add bsnes only if your CPU can feed its accuracy profile.
- mGBA — GBA, and it doubles for GB/GBC. Gambatte is the lighter GB/GBC specialist.
- Mupen64Plus-Next — N64, with ParaLLEl-N64 as the low-level alternative when the former misbehaves.
Step 8 — Sega, Sony, and arcade
Rationale: one Sega core covers almost everything, and the PlayStation choice depends entirely on your hardware tier from the prerequisites.
- Genesis Plus GX — Master System, Game Gear, Mega Drive/Genesis, Sega CD, and SG-1000 in a single core; a separate wide build adds widescreen hacks.
- Beetle PSX HW — PlayStation, the heavy, high-fidelity option. On weaker or ARM hardware, take PCSX ReARMed or SwanStation instead.
- FinalBurn Neo (FBNeo) — arcade, spanning boards from the late 1970s onward and the default for fighting games. Add MAME only for coverage FBNeo lacks.
- Flycast — Dreamcast (plus Naomi and Atomiswave).
- LRPS2 — PlayStation 2, if and only if you have a Vulkan-capable discrete GPU.
Step 9 — Do not download all 200
Rationale: grabbing every core is pointless clutter. It bloats your cores directory, slows the core list, and buries the four cores you use under a hundred you will never touch — homebrew engines, dead forks, platform ports for machines you do not own. There is no performance or convenience benefit to hoarding libraries; a core does nothing until you load it. Pick per system, the way you would curate a handheld's ROM set rather than dumping every file you can find. If you later need one more, the Core Downloader is thirty seconds away. Prune, do not accumulate.
The Right Core Per System
This is the reference the rest of the guide orbits. For each major system there is a correct default and a reason. Where a secondhand source has fed you a mangled developer name, it is corrected here — getting the lore right is not pedantry, it is how you tell a real recommendation from a scraped one.
| System | Recommended core | Developer / lineage | Note |
|---|---|---|---|
| NES / Famicom | Mesen | Sour (M. Bibaud) | Cycle-accurate PPU |
| SNES | Snes9x / bsnes | Snes9x team / Near (byuu) | bsnes accuracy wants ~4 GHz |
| Sega 8/16-bit + CD | Genesis Plus GX | Eke-Eke, on Charles MacDonald's Genesis Plus | Widescreen via wide build |
| PlayStation | Beetle PSX HW | Mednafen lineage | Lighter: PCSX ReARMed, SwanStation |
| Dreamcast | Flycast | flyinghead, forked from reicast | Great on Steam Deck |
| Arcade | FinalBurn Neo | FBNeo team | Late-1970s boards onward |
| PlayStation 2 | LRPS2 | PCSX2 fork; paraLLEl-GS by Themaister | Vulkan LLE renderer |
| Nintendo 3DS | (none supported) | Citra — deprecated | Dropped after 2024 legal action |
NES and SNES: accuracy at two price points
For NES, Mesen is the answer and has been for years. Developed by Sour (M. Bibaud, of the SourMesen repositories) — not the fictitious "Alexey Smirnov" that some 2025 listicles invented — it emulates the NES picture processing unit with near cycle-perfect timing, which is why it wins the edge cases that trip lighter cores: mid-scanline effects, precise sprite-zero hits, the demos that exist specifically to break emulators. It is documented on the libretro Mesen page. It is not heavy; there is no reason to run anything else on NES.
SNES splits by budget. Snes9x is the sane default: fast, accurate enough for essentially every commercial game, happy on modest hardware. bsnes — Near's engine, formerly higan — is the accuracy monk, and its top profile is genuinely demanding; XDA's 2025 analysis pegs the comfortable requirement at roughly a 4 GHz-class core for the accuracy build. On a desktop, fine. On a handheld, that is Snes9x territory and you should not pretend otherwise.
Sega, PlayStation, and arcade
Genesis Plus GX is one of the great single-core bargains: Master System, Game Gear, Mega Drive/Genesis, Sega CD, and SG-1000 all in one library, developed by Eke-Eke on the bones of Charles MacDonald's original Genesis Plus — not "Etah," which is a scraper's garble of the handle. A separate wide build adds the widescreen hacks. Full accuracy, full compatibility, documented on the libretro Genesis Plus GX page. There is no serious competitor for 8/16-bit Sega.
PlayStation is the one genuine fork in the road. Beetle PSX HW is the fidelity option — internal upscaling, PGXP geometry correction, texture work — and it is correspondingly heavy; it wants a real GPU. Its lighter cousins, PCSX ReARMed and SwanStation, are tuned for lower-end and ARM hardware and are the correct pick on most handhelds. Arcade goes to FinalBurn Neo, which covers boards from the late 1970s onward and is the fighting-game community's default; reach for MAME only when FBNeo lacks a romset you need.
Dreamcast, N64, PS2, and the deprecated
Flycast is the Dreamcast recommendation, developed by flyinghead as a fork of the now-dormant reicast — not "TheFly," another scraped mangling. It also handles Naomi and Atomiswave, and it runs well on Steam Deck-class hardware. N64 remains the awkward child: Mupen64Plus-Next is the default but saw stability regressions reported in early 2025 and stays a moving target, so keep ParaLLEl-N64 installed as the low-level fallback and run Update Installed Cores often.
PS2 is the frontier. LRPS2 is a modern PCSX2 fork built for libretro, and its headline feature is paraLLEl-GS, a brand-new graphics-synthesizer renderer written entirely as a Vulkan compute program by Themaister (Hans-Kristian Arntzen) — a low-level-emulation approach that chases hardware-accurate output using the GPU, announced on the libretro LRPS2 blog post. It requires the video driver set to Vulkan; on OpenGL it simply will not appear. Finally, the obituary: the Citra 3DS core is deprecated. Upstream Citra shut down after Nintendo's 2024 legal action, the libretro team flagged the core for removal, and by 2026 it is unmaintained and absent from the Core Downloader on most platforms. Do not build a 3DS plan around it.
Steps 10–12: Load, Override, Automate
Cores installed, correct ones chosen. Now make them play, and make your settings stick per core instead of trampling every other system.
Step 10 — Load a core and content
Rationale: RetroArch separates "which emulator" from "which game," so you load them in that order: Load Core, pick the core, then Load Content, pick the ROM. Watching the log the first time is worth it — it tells you the core initialised, the API matched, and the content mounted. Expected log excerpt:
[INFO] Loading core: "Nintendo - NES / Famicom (Mesen)"
[INFO] Version of libretro API: 1
[INFO] Compiled against API: 1
[INFO] Content loaded: Super Mario Bros. (World).nes
[INFO] Using core-provided audio rate: 48000 Hz
[INFO] Core loaded successfully.If "Content loaded" never appears and you get "failed to load content" with no detail, ninety percent of the time it is a missing or wrong-md5 BIOS — go back to prerequisites.
Step 11 — Save per-core and per-game overrides
Rationale: the cardinal config sin is editing the global configuration to fix one core, then discovering you have broken three others. RetroArch's override system exists precisely to stop this. Set your options while a game runs — video driver, shader, aspect, core-specific toggles — then Quick Menu → Overrides → Save Core Overrides (applies to every game on that core) or Save Game Overrides (that one title only). These write a scoped .cfg into a config/<Core Name>/ folder that loads on top of the global config. An override for the heavy PlayStation core might read:
# config/Beetle PSX HW/Beetle PSX HW.cfg
# (written by Save Core Overrides - core option keys are
# generated automatically; edit via Quick Menu > Options)
video_driver = "vulkan"
video_shader_enable = "true"
aspect_ratio_index = "22"
# core options such as internal resolution and PGXP
# are stored per-core and only override the global cfgStep 12 — Scan your ROMs into playlists
Rationale: once cores are chosen, you want content to remember which core it uses. Import Content → Scan Directory points RetroArch at your ROM folder; it matches files against a database and builds per-system playlists. Set a default core per playlist (playlist settings → Set Default Core) and launching a game skips the "Load Core" step entirely — the playlist already knows. This is the difference between a pile of cores and an actual library.
Five Pitfalls That Eat Your Afternoon
Every one of these is common, every one is avoidable, and every one has cost someone an evening. They are grouped by where in the process they strike.
Setup-stage pitfalls
- Downloading cores before updating info files. The Core Downloader looks empty or shows nameless entries, or new cores load as gibberish filenames. Fix: run Update Core Info Files first, every time, then the downloader.
- Missing or wrong-md5 BIOS. PlayStation, Sega CD, and Dreamcast cores fail to load content, often silently. Fix: place the exact BIOS in the
systemdirectory and verify its md5 against the per-core list in the libretro docs — a renamed file with the wrong hash still fails.
Core-choice pitfalls
- The wrong core for the hardware. bsnes accuracy stutters on a handheld; Beetle PSX HW crawls on an integrated GPU; paraLLEl-GS never appears because the driver is OpenGL. Fix: Snes9x instead of bsnes on weak CPUs, PCSX ReARMed or SwanStation instead of Beetle PSX HW on ARM, and set the video driver to Vulkan before expecting Vulkan-only renderers.
- Chasing deprecated cores. Hunting for a working Citra 3DS core in 2026 is a dead end; it was dropped after Nintendo's 2024 action. Fix: accept the deprecation and use a maintained standalone if you genuinely need 3DS — do not expect RetroArch to carry it.
Config-stage pitfalls
- Editing the global config for a single core. You fix PS1 and break SNES because the change was global. Fix: use Save Core Overrides / Save Game Overrides so the change is scoped, and keep the global config minimal.
- Hoarding all 200 cores. A cluttered core list, slow menus, and the four cores you use buried under a hundred you do not. Fix: delete the libraries you never load; the Core Downloader will hand any of them back in seconds.
Troubleshooting Table
When a specific symptom appears, work the table before you work the forums. Read the log first (Settings → Logging, then reproduce) — the answer is usually already printed there.
Load and initialisation failures
These are the errors that stop you before a frame renders: empty downloaders, missing content, black screens. Almost all trace back to info files, BIOS, or driver mismatch.
Performance, audio, and video sync
These appear after the game boots — stutter, crackle, lag, glitches. They are usually the wrong core for the hardware or a latency setting fighting your display.
| Symptom | Likely cause | Fix |
|---|---|---|
| Core Downloader is empty or unlabelled | Core info files not updated | Online Updater → Update Core Info Files, then reopen |
| "Failed to load content," no detail | Missing or wrong-md5 BIOS / region | Add correct BIOS to system; verify md5 against docs |
| Core loads, then black screen | Video driver mismatch (gl vs vulkan) | Switch video driver, restart RetroArch |
| paraLLEl-GS renderer greyed out | Video driver is not Vulkan | Settings → Drivers → Video = vulkan, restart |
| SNES stutter, low FPS | bsnes accuracy on a weak CPU | Switch to Snes9x |
| PS1 slowdown | Beetle PSX HW on weak/integrated GPU | Use PCSX ReARMed or SwanStation |
| N64 crashes or glitches early | Mupen64Plus-Next regression | Try ParaLLEl-N64; Update Installed Cores |
| Audio crackle or pops | Audio latency too low / driver | Raise audio latency; try the PipeWire driver (1.21+) |
| Noticeable input lag | No runahead; vsync stacking | Enable runahead 1 frame (see advanced) |
| 3DS core missing from list | Citra deprecated and removed | No supported RetroArch path; use a standalone |
| Cores vanish after app update | API bump / core directory moved | Online Updater → Update Installed Cores |
| Engine core says "requires content" | Game-engine core needs data files | Supply the original data (e.g. a DOOM WAD) |
| Overrides ignored | Saved to the wrong scope | Use Save Core/Game Overrides; check the config dir |
Advanced Tips
Once the basics hold, these are the settings that separate a working setup from a good one: latency reduction, per-core shader presets, and manual core installs for platforms the buildbot skips.
Runahead and latency
Runahead is RetroArch's best trick: it runs the core one or more frames into the future, discards the visible frame, and re-simulates from your input, effectively removing the input latency the original hardware never had to buffer. One frame is usually plenty and often makes emulated games feel more responsive than the real console. It costs CPU — the second-instance mode roughly doubles core work — so it is a desktop and Steam Deck luxury more than a handheld one. Set it per core via Quick Menu → Latency → Run-Ahead, which writes:
run_ahead_enabled = "true"
run_ahead_frames = "1"
run_ahead_secondary_instance = "true"
# Second Instance is safer for save states than single-instance;
# raise frames only if a game still feels laggy, and watch your CPU.Shaders and per-core presets
Shaders are where the CRT nostalgia lives, and they belong in overrides, not the global config. Load a preset (Quick Menu → Shaders), tune it, then Save → Save Core Preset so a scanline mask follows your 2D systems without smearing itself across a PS2 game that never touched a CRT mask. A common, sane split: a CRT-Royale or Guest preset on 8/16-bit cores, and nothing (or a mild sharp-bilinear) on 3D cores where internal upscaling is already doing the heavy lifting.
Manual and precompiled cores
Not every platform is served by the in-app downloader. LG's WebOS TVs (armv7) are the classic example: the community webosbrew/retroarch-cores repository ships around 170 precompiled cores, rebuilt in December 2025, that you sideload after installing the Homebrew Channel and the WebOS RetroArch build. The pattern generalises — drop a *_libretro.so into the cores directory and RetroArch will pick it up on next launch:
# LG webOS TV example (armv7)
# Repo: github.com/webosbrew/retroarch-cores (~170 cores, rebuilt Dec 2025)
# After Homebrew Channel + the webOS RetroArch build, copy the
# precompiled libraries into the cores directory:
/media/internal/retroarch/cores/mesen_libretro.so
/media/internal/retroarch/cores/genesis_plus_gx_libretro.so
# then run Update Core Info Files so they are labelled correctly.The same libretro cores also power other frontends — this is why a RetroPie box on a Raspberry Pi 5 runs the identical Genesis Plus GX and Snes9x builds. The core is portable; only the wrapper changes.
A Complete Working Configuration
To close, a config that ties the whole guide together: directory layout, sensible drivers, and the override discipline that keeps one system's settings from bleeding into another. Treat the global config as minimal and boring; put the interesting choices in per-core overrides.
Global retroarch.cfg essentials
These are the lines worth pinning globally. The :/ token resolves relative to the RetroArch base directory and works cross-platform, so the same config travels between machines:
# --- retroarch.cfg (global essentials) ---
# Directories (relative to the RetroArch base dir)
libretro_directory = ":/cores"
core_info_directory = ":/info"
system_directory = ":/system"
savefile_directory = ":/saves"
savestate_directory = ":/states"
video_shader_dir = ":/shaders"
# Drivers - Vulkan is required for paraLLEl-GS (LRPS2)
video_driver = "vulkan"
audio_driver = "pipewire" # or "wasapi" on Windows, "coreaudio" on macOS
# Keep the global config quiet; scope the rest per core
video_vsync = "true"
core_updater_auto_extract_archive = "true"A per-core override in practice
And the scoped override that lives beside it — this one turns the heavy PlayStation core up on a capable machine without touching any other system:
# --- config/Beetle PSX HW/Beetle PSX HW.cfg ---
# Written by Quick Menu > Overrides > Save Core Overrides.
# Loads on top of the global cfg only when this core runs.
video_driver = "vulkan"
video_shader_enable = "false" # 3D core; skip CRT masks
aspect_ratio_index = "22" # core-provided aspect
# Core-specific options (internal resolution, PGXP, etc.)
# are stored automatically and never leak into the global cfg.
run_ahead_enabled = "true"
run_ahead_frames = "1"Final checklist
Before you call it done, confirm the following. If every line is true, you have a maintainable setup rather than a fragile one:
- Frontend is v1.22.2 or newer, verified in System Information.
- Update Core Info Files was run before any core download.
- Only the cores you actually use are installed — four to a dozen, not two hundred.
- BIOS files are in
systemwith matching md5s. - The video driver is Vulkan if you touch LRPS2 or paraLLEl-GS.
- System-specific tweaks live in core overrides, not the global config.
- Update Installed Cores is a monthly habit, and after every frontend update.
That is the whole discipline. Two hundred cores exist; you need a handful; the frontend is not the emulator; and the info files come first. Everything else — the shaders, the runahead, the arguments about bsnes versus Snes9x — is decoration on a structure that, built in this order, simply works. For the deeper per-core reference, keep the libretro documentation open in a tab; it is the one source that does not scramble the version numbers.
Questions the search bar asks me
- How many RetroArch cores are there in 2026?
- Over 200, according to the official RetroArch cores page as of June 2026. That count includes not just emulators but game engines (PrBoom, NXEngine) and multimedia programs (FFmpeg), so it does not mean 200 consoles — perhaps thirty cores matter for a normal library.
- What is the current RetroArch version?
- The current stable build is v1.22.2, released 20 November 2025. The v1.21.0 release actually landed on 1 May 2025 (it added the PipeWire and FFmpeg drivers and Vulkan mailbox emulation), so any guide dating 1.21.0 to January 2026 has its timeline wrong.
- Which core is best for NES and SNES?
- For NES, Mesen — developed by Sour (M. Bibaud) — is the most accurate, matching the PPU with near cycle-perfect timing. For SNES, Snes9x is the fast default; bsnes offers higher accuracy but its top profile wants a roughly 4 GHz-class CPU per XDA's 2025 analysis.
- Can I still get the Citra 3DS core?
- No, not in any maintained form. Upstream Citra shut down after Nintendo's 2024 legal action, the libretro team flagged the core for removal, and by 2026 it is deprecated and absent from the Core Downloader on most platforms. Use a standalone 3DS emulator if you must.
- Do I need to download all 200 cores?
- No — grabbing all of them is pointless clutter that slows the menu and buries the few you use. Download only the cores for systems you own (typically four to a dozen), and always run Online Updater then Update Core Info Files before downloading so RetroArch labels them correctly.