STARESBACK.GG
LV 1
0 XP

/// FIELD NOTES FROM A SELF-AWARE GAME SITE

RetroArch Cores 2026: 200+ in 12 Steps, 30 Min

BY·EDITED BYSAM P.·2026-08-14·9 MIN READ·5,141 WORDS·EDITORIAL PROCESS
RetroArch Cores 2026: 200+ in 12 Steps, 30 Min — STARESBACK.GG blog

There are, by RetroArch's own count, more than 200 cores, and the official site is happy to remind you the list "keeps expanding over time." What no marketing page will tell you is that the number is a catalogue, not an inventory. It is the union of everything libretro has ever compiled for every platform it targets — a Windows tower with a 4 GHz Ryzen, a webOS television, a $60 Arm handheld whose SoC was mid-range in 2016. You will not run all of them. On a given device you'll run maybe a dozen cores well, another dozen adequately, and the rest not at all.

This tutorial closes the gap between that catalogue and the handful of cores you actually want. It covers what a core is, how to install cores without turning your menu into a junk drawer, which core to pick per system in 2026, where BIOS files go, and how to stop RetroArch's four-layer configuration system from silently overwriting your work. Twelve steps, roughly thirty minutes, assuming your internet holds and you read the BIOS section instead of skipping it like everyone does.

One housekeeping note first. The official cores page still cites RetroArch 1.21.0 (released 2025-04-29) even though the page itself was last touched on 2026-06-23, while the current stable build is 1.22.2 from November 2025. That mismatch is a preview of the entire subject: versions drift, docs lag, and the core that was "best" eighteen months ago quietly regressed while you weren't reading the forums. Let's begin.

What a Core Actually Is (and What It Isn't)

Before you download anything, understand what you're downloading. The confusion here is responsible for most beginner mistakes, and it takes one section to clear up permanently.

The libretro API, in one honest paragraph

RetroArch is a frontend. It draws menus, reads your controller, pushes video and audio to your screen and speakers, and handles saves, states, netplay, shaders, and rewind. It does not, by itself, emulate anything. The actual work — pretending to be a Super Nintendo, or a PlayStation, or a Game Boy Advance — is done by a core: a shared library (.so on Linux, .dll on Windows, .dylib on macOS) that implements the libretro API. The API is a thin contract. The frontend hands the core a controller state and says "run one frame"; the core hands back a framebuffer and an audio buffer. Because that contract is stable, the same core binary runs under RetroArch, Lakka, or any of a dozen libretro frontends, unchanged.

The practical upshot: "installing an emulator" in RetroArch means dropping a core file into a folder and pointing the frontend at it. There is no installer, no registry entry, no background service. A core is a file. Delete it and it is gone, and the emulator it provided is gone with it. This is either liberating or terrifying depending on your relationship with file management.

"200+ cores" is a catalogue, not an inventory of your device

Return to that headline number. The official cores page counts every core libretro maintains, across every architecture. The in-app Core Downloader on your specific device shows a subset — a 2026 setup walkthrough from shattered.io pegs it at 100+ cores grouped by system, which is closer to what a mainstream x86_64 or Arm64 build actually offers. The gap between "200+" and "100+" is architecture, licensing, and buildbot coverage. A locked-down 32-bit Arm handheld might see eighty. A webOS TV build shipped roughly 170 armv7 cores in late 2025. None of these devices is "missing" cores; they are seeing the slice compiled for them.

Internalize this early, because half the "why is core X not in my list" threads on the forums are people expecting the catalogue and receiving the inventory. The catalogue is aspirational. Your device gets what its buildbot target got, and no amount of refreshing changes that.

Cores vs. standalone emulators: the trade you're making

Every libretro core is a port — or a fork, or a wrapper — of an emulator that usually exists standalone too. mGBA, Snes9x, PCSX2, Flycast, melonDS: all have standalone builds with their own interfaces. The libretro version gives up a native settings screen in exchange for RetroArch's shared feature set: one shader pipeline, one input-remap system, run-ahead latency reduction, rewind, and netplay, consistent across every system you play. The cost is that a core sometimes lags its standalone parent, and a few features — certain debuggers, some standalone-only rendering hacks — don't cross over. For most players the trade is worth it. If you are chasing the last five percent, you keep the standalone around and use RetroArch for everything else. That is a legitimate, common setup, and nobody should shame you for it. Front-end distributions such as Batocera take the opposite bet, preloading a curated core set so you never open a downloader at all.

Prerequisites: Versions, Silicon, and BIOS

Three things determine whether this goes smoothly: the RetroArch build you install, the chip underneath it, and whether you have the BIOS files certain systems demand. Skip any one and you'll be back in an hour.

Software: which RetroArch, and why the cores page lies to you

Install the current stable RetroArch. As of writing that is 1.22.2 (November 2025); the cores page's reference to 1.21.0 is stale metadata, not a recommendation to downgrade. Get it from the official site, Steam, Flatpak, or your platform's store — but know that the source affects your Core Downloader. The libretro docs on installing cores note that some Linux package builds deliberately disable the in-app downloader in favor of package-manager installs. If your Online Updater menu is missing entries, that is why, and it is expected behavior, not a bug.

Whatever the platform, update the frontend before you touch a single core:

# Windows (winget)
winget upgrade Libretro.RetroArch

# Linux (Flatpak — frequently ships WITHOUT the in-app Core Downloader)
flatpak update org.libretro.RetroArch

# Verify from a terminal
retroarch --version

Steam users: let Steam handle updates; that build keeps the downloader. Handheld users on a custom distro: the maintainer chose your update path for you, and it is almost always a package repo rather than the in-app updater.

Hardware tiers: what your CPU can and can't brute-force

Cores are not equal in appetite, and the single biggest mistake new users make is installing an accuracy-first core on hardware that can't feed it. A rough 2026 map:

bsnes, the cycle-accurate SNES core, wants roughly a 4 GHz core to hold full speed with run-ahead engaged. That is not a typo and it is not optional; accuracy is expensive. Match the core to the silicon and most "it runs at 40 fps" complaints evaporate before you file them.

BIOS and the legal fine print

Several systems will not boot without a BIOS (or "system file"): PlayStation, Saturn, Sega CD, Dreamcast, Nintendo DS, PS2, and a handful of others. RetroArch does not ship these. It cannot — they are copyrighted firmware owned by the console makers, and libretro is not in the business of distributing Sony's boot ROM. The libretro documentation lists the exact filenames and checksums each core expects. Legally, the clean path is to dump the BIOS from hardware you own; that is the only path this publication will describe, and what you do afterward is between you and your jurisdiction. Functionally, the file must land in your system/ directory with the exact filename and, ideally, the exact md5 the core wants. Wrong name, wrong checksum, or wrong region and the core fails — often silently, with a black screen and no error dialog at all.

Installing Cores: The 12-Step Path

Twelve steps, in order, with the reasoning for each — because "click Core Downloader and grab everything" is precisely how you end up with six SNES cores and no idea which one your playlist actually launches.

  1. Update the frontend before the cores. A core built against a newer libretro API can misbehave under an older RetroArch. Updating the app first means every core you pull next is guaranteed compatible. Thirty seconds now saves a confusing crash later.
  2. Update Core Info Files before anything else. Go to Online Updater and choose Update Core Info Files. The .info files are the metadata that tell the Core Downloader what exists and tell the scanner which core plays which ROM. If they are stale, the downloader shows an empty or wrong list and the scanner refuses to match games. This is the single most common cause of an "empty downloader," and doing it first, every session, prevents it.
  3. Open the Core Downloader. Online Updater then Core Downloader. You should see a grouped, alphabetized list by manufacturer. Expected output looks like this:
Online Updater > Core Downloader
------------------------------------
Nintendo - NES / Famicom (Mesen)
Nintendo - NES / Famicom (Nestopia UE)
Nintendo - SNES / SFC (Snes9x)
Nintendo - SNES / SFC (bsnes)
Nintendo - Nintendo 64 (Mupen64Plus-Next)
Nintendo - Nintendo 64 (ParaLLEl N64)
Sega - Mega Drive / Genesis (Genesis Plus GX)
Sony - PlayStation (Beetle PSX HW)
... [100+ entries grouped by manufacturer]
  1. Install exactly one core per system you own — to start. Resist the completionist urge. Extra cores don't speed anything up; they clutter the Load Core menu and confuse the scanner, which will happily assign your ROM to whichever matching core it feels like. Pick the recommended core for each system (next section) and add alternates only when you have a specific reason.
  2. Take the accuracy pick only if your hardware clears the bar. bsnes over Snes9x, Beetle over a performance core — these buy fidelity at a real CPU cost. On x86_64, take them. On a mid Arm handheld, don't; you'll trade nothing you can see for framerate you can feel.
  3. Let the downloader fetch the matching info file automatically. The in-app downloader pulls the core and its companion metadata together. If you install cores by hand (next step), you must fetch the .info yourself or the core shows up nameless and the scanner ignores it.
  4. For locked-down or offline builds, pull binaries from the buildbot. When the in-app updater is disabled, the libretro buildbot is the distribution hub, active and updated through 2026. Download the archive, extract into your cores folder, and grab the info file separately:
# x86_64 Linux nightly, for a headless or package-locked build
cd ~/.config/retroarch/cores
wget https://buildbot.libretro.com/nightly/linux/x86_64/latest/mgba_libretro.so.zip
unzip mgba_libretro.so.zip
# Then fetch the matching .info into ~/.config/retroarch/info
# or the core loads but displays no name and won't scan
  1. Verify each core loads with no content. Main Menu, Load Core, pick the core; it should return you to the menu with "Core: [name]" shown at the top. If it errors here, the binary is wrong-arch or corrupt, and no ROM will fix that. Catching it now isolates the problem to the core, not the game.
  2. Set your directories explicitly. Settings, Directory. Point system/, saves/, and states/ somewhere stable — not a temp folder, not inside the app bundle. Explicit paths survive updates and make backups trivial. Defaults are fine on desktop and frequently wrong on handhelds.
  3. Drop BIOS files into system/ and verify checksums. This is the step everyone skips and then troubleshoots for an hour. Copy the files in, confirm the md5s match what the core documents, and only then move on. A black screen after this section is almost always a BIOS problem.
  4. Scan content to build playlists. Import Content, then Scan Directory. RetroArch hashes your ROMs against its database and files them into per-system playlists with the right default core. If a system scans to zero entries, your info files are stale — go back to step 2.
  5. Launch one known-good game per system and confirm full speed. The final proof. From the CLI you can watch the core load in real time:
retroarch -L cores/mgba_libretro.so "roms/gba/Golden Sun.gba" --verbose

# Expected log tail:
# [libretro INFO] [mGBA] Loading game: roms/gba/Golden Sun.gba
# [Core]: Version of libretro API: 1
# [Core]: Geometry: 240x160, Aspect: 1.5000
# [Audio]: Set audio sample rate to 32768 Hz

Full speed, correct audio, correct aspect: the system is done. Repeat step 12 per system and you have a working, minimal, non-cluttered core set — which is the entire goal.

The Best Core Per System in 2026

Recommendations age. These are current for 2026, drawn from the shattered.io and RetroHandheldHQ roundups and cross-checked against what's actually shipping. Where a core regressed, the note says so, because "best" is a moving target and pretending otherwise helps nobody.

Nintendo: NES through DS

For NES/Famicom, the pick is Mesen — the modern accuracy standard, with the best edge-case behavior and cheap enough to run anywhere. For SNES, Snes9x is the sane default; bsnes is the cycle-accurate option if your CPU clears roughly 4 GHz, and older Snes9x 2010/2005 builds exist for genuinely weak hardware. For N64, shattered.io recommends Mupen64Plus-Next, and it remains the default — but be aware Mupen64Plus-Next hit a rough patch of regressions in early 2025, and many users get better per-game results from ParaLLEl N64. Test both; N64 emulation has always been a matter of picking your poison per title. If you'd rather skip the software-core lottery entirely, dedicated FPGA hardware like the Analogue 3D sidesteps it at a price. For Game Boy/Color, use Gambatte; for Game Boy Advance, mGBA, which RetroHandheldHQ calls the best GBA core outright, winning on accuracy, speed, and active development. For Nintendo DS, melonDS is the top pick, with the usual caveat that the second screen and touch input need a moment of setup.

Sega: Master System through Dreamcast

Genesis Plus GX covers Master System, Game Gear, Mega Drive/Genesis, and Sega CD in one accurate, lightweight core — the obvious choice for the whole 8/16-bit Sega stack. Its one gap: no 32X. For the 32X you switch to PicoDrive, which handles it and doubles as a lighter Genesis core for slow hardware. For Saturn, the accuracy pick is Beetle Saturn (Mednafen) — RetroHandheldHQ names it the most accurate Saturn option in RetroArch, which matters more here than almost anywhere because the Saturn is a notoriously hostile machine to emulate. For Dreamcast (and Naomi arcade hardware), the core is Flycast, and the technical detail worth knowing is that RetroHandheldHQ recommends the Vulkan renderer for it; on hardware with a decent Vulkan driver it's smoother and less glitch-prone than the OpenGL path.

Sony and the awkward squad

For PlayStation 1, shattered.io lists Beetle PSX HW, the hardware-accelerated core that upscales, does PGXP geometry correction, and generally makes PS1 games look better than they ever did — at a CPU/GPU cost. On lighter hardware, drop to SwanStation or the very lean PCSX ReARMed, which is the standard on Arm handhelds. For PlayStation 2, the practical core is PCSX2 — shipped in libretro form as LRPS2, x86_64-only, using the ParaLLEl-GS renderer, and demanding on hardware exactly as shattered.io warns. Don't expect it on Arm. For arcade, FBNeo is the modern all-rounder, with MAME cores for coverage FBNeo lacks. And for 3DS: the Citra core is dead upstream, its lineage continuing as Azahar (version 2125.0 line), which is what you want if 3DS matters to you.

SystemRecommended CoreFallback / Low-PowerNotes
NES / FamicomMesenNestopia UE, FCEUmmMesen is the accuracy standard; runs anywhere.
SNESSnes9xbsnes (needs ~4 GHz), Snes9x 2010bsnes only if the CPU clears the bar.
Nintendo 64Mupen64Plus-NextParaLLEl N64Mupen regressed early 2025; test both per game.
Game Boy / ColorGambatteSameBoyGambatte is fast and accurate.
Game Boy AdvancemGBAgpSP (very weak HW only)Best GBA core: accuracy, speed, active dev.
Nintendo DSmelonDSDeSmuMESet up second screen and touch input.
Master System / GenesisGenesis Plus GXPicoDriveGenesis Plus GX has NO 32X — use PicoDrive.
Sega SaturnBeetle SaturnKronos, YabaSanshiroMost accurate Saturn option; BIOS required.
Dreamcast / NaomiFlycast (Vulkan)Flycast (OpenGL)Prefer Vulkan renderer; BIOS required.
PlayStation 1Beetle PSX HWSwanStation, PCSX ReARMedHW core upscales + PGXP; BIOS required.
PlayStation 2LRPS2 (PCSX2)none on Armx86_64-only, demanding; BIOS required.
ArcadeFBNeoMAME (current)FBNeo for the mainline set; MAME for coverage.
3DSAzaharSuccessor to the discontinued Citra core.

BIOS, System Files, and Making the Scanner Behave

Two systems trip up more first-timers than every buggy core combined: the BIOS folder and the content scanner. Both are simple once you see how they think, and both fail silently, which is why they feel like black magic until they don't.

Where BIOS files go and how to verify them

Every BIOS goes in one place: your system/ directory, at the top level unless a core documents a subfolder (Dreamcast's dc/ being the classic exception). Filenames are case-sensitive on Linux and must match exactly. Here's the layout the disc-based systems expect:

~/.config/retroarch/
|-- cores/                 # .so / .dll / .dylib core binaries
|-- info/                  # .info metadata - MUST match core versions
|-- system/                # BIOS lives here
|   |-- scph5501.bin       # PlayStation (US)
|   |-- bios_CD_U.bin      # Sega CD (US)
|   |-- sega_101.bin       # Saturn (JP)
|   |-- dc/dc_boot.bin     # Dreamcast
|   +-- dc/dc_flash.bin    # Dreamcast
|-- saves/
|-- states/
+-- config/                # per-core and per-game overrides

Do not trust the filename alone — verify the checksum. A file named scph5501.bin that is secretly the wrong region or a bad dump will fail exactly like a missing file. The core's documentation lists the md5 it wants:

# PlayStation (Beetle PSX HW) - any one region, correct md5
scph5501.bin   490f666e1afb15b7362b406ed1cea246   # US
scph5500.bin   8dd7d5296a650fac7319bce665a6a53c   # JP
scph7502.bin   32736f17079d0b2b7024407c39bd3050   # EU

# Sega Saturn (Beetle Saturn)
sega_101.bin   85ec9ca47d8f6807718151cbcca8b964   # JP
mpr-17933.bin  3240872c70984b6cbfda1586cab68dbe   # US/EU

RetroArch has a built-in check: Information, then Core Information, lists required and missing firmware for the loaded core, with a present/absent flag on each file. Use it before you assume a game is broken.

The content scanner and why it ignores your ROMs

The scanner does not guess from file extensions. It computes a hash of each ROM and looks it up in RetroArch's database of known-good dumps. Match found, the game files into the right playlist with a proper name and boxart. No match — because the ROM is a bad dump, a hack, a translation, or headered when the database expects headerless — and the scanner walks past it in silence. This is by design, and it is why a folder of forty ROMs can scan to twelve entries. For the unmatched files, use Manual Scan, which files everything in a directory by extension regardless of the database, at the cost of ugly filenames and no automatic boxart. If an entire system scans to zero, the cause is almost never the ROMs — it's stale info files, so return to Update Core Info Files.

Playlists, thumbnails, and the database

A successful scan produces a playlist: a plain-text .lpl file mapping each game to a default core. You can edit which core a playlist uses from the playlist's settings without rescanning, which is how you switch every N64 game from Mupen to ParaLLEl in one action. Thumbnails download from the libretro thumbnail server keyed to those database names — which is the real reason a clean, matched scan is worth chasing. Get the database match and the boxart, title screens, and in-game shots arrive for free. Skip it with Manual Scan and you're on your own for art.

Overrides: Game Beats Directory Beats Core Beats Global

RetroArch's settings feel maddening until you understand that it has four layers of configuration, not one. Once you see the hierarchy, "why did my setting revert" stops being a mystery and becomes a lookup.

The four-layer hierarchy

Settings apply in strict precedence, most specific winning: per-game beats per-directory beats per-core beats global. The global config (retroarch.cfg) is the baseline for everything. A per-core override applies to every game a given core runs. A per-directory override applies to everything in one ROM folder. A per-game override applies to exactly one title. When two layers set the same option, the more specific one wins — always. This is why editing the global config to fix one PS1 game is the wrong move: you've changed the baseline for every system to patch a single title.

Writing a per-core override you won't regret

The correct place for "all my PS1 games should upscale 4x with Vulkan" is a per-core override. Load any game with Beetle PSX HW, set the options you want in Quick Menu, then Overrides, then Save Core Overrides. RetroArch writes a small file under config/ named for the core, containing only the settings that differ from global:

# config/Beetle PSX HW/Beetle PSX HW.cfg
beetle_psx_hw_renderer = "vulkan"
beetle_psx_hw_internal_resolution = "4x"
beetle_psx_hw_pgxp_mode = "memory only"
beetle_psx_hw_pgxp_texture = "enabled"
beetle_psx_hw_dither_mode = "internal resolution"

Keep overrides minimal. A file that stores only the handful of options you actually changed is easy to reason about; one that dumps every setting fights you the moment the global defaults move under it in a future release.

Per-game overrides for the one ROM that misbehaves

Some games need a single tweak — a specific game runs too fast, wants a different aspect ratio, needs a widescreen hack disabled. That's a per-game override: Quick Menu, Overrides, Save Game Overrides, which writes a config named for that exact ROM. It layers on top of the core override, changing only what you set and inheriting the rest. This is the surgical tool. Reach for it when one title out of a hundred is wrong, and leave the other ninety-nine on the clean core-level defaults where they belong.

Common Pitfalls and How to Undo Them

Seven ways people break their own setup, and the fix for each. Every one of these lands in the forums weekly, which is a polite way of saying you are not special and neither was I.

Troubleshooting: Symptoms, Causes, Fixes

Ten failures, mapped to cause and remedy. Work top to bottom; the common cases are first, and most "impossible" problems are one of these wearing a costume.

SymptomLikely CauseFix
Core Downloader is emptyStale info files, or a package build with the updater disabledRun Update Core Info Files; if still empty, install cores via package manager or the buildbot.
Core loads but screen is blackMissing or wrong-md5 BIOS, or wrong video driverVerify BIOS in system/ via Core Information; try switching Vulkan/GL.
"Failed to load content"Wrong core for the ROM, or unsupported format (e.g. compressed disc)Load the correct core; convert discs to a supported format like CHD.
Audio crackle or stutterCore too heavy for the CPU, or audio sync offDrop to a lighter core; enable threaded video; check audio sync is on.
N64 games glitch or crashMupen64Plus-Next regression on a given titleSwitch that game to ParaLLEl N64 (or vice versa) via playlist core.
Saturn won't bootMissing or wrong-region Saturn BIOSAdd the correct md5-verified BIOS; match region to the game.
A core is absent from the listNot built for your architecture (catalogue vs. inventory)Confirm the core exists for your platform on the buildbot; it may simply not.
PS2 core missing or crashingLRPS2 is x86_64-only and demandingUse an x86_64 device; PS2 will not appear on Arm builds.
Shaders tank the framerateGPU-bound by a heavy shader chain or high internal resUse a lighter shader preset or lower the internal resolution.
Save states break after an updateCore version changed its state formatUse in-game SRAM saves for portability; keep the old core build if needed.

Advanced Tips for People Who Read Changelogs

Once the basics work, a few habits separate a setup that ages well from one you rebuild every six months. None of this is required; all of it is why your friend's RetroArch never seems to break.

Nightlies, versioning, and info-file drift

Stable core releases lag the nightlies by weeks or months. If a core you rely on fixed a bug you're hitting, the buildbot nightly likely has it before the stable channel does. The discipline: when you pull a nightly core, pull the matching nightly info file in the same pass. Mismatched versions are the quiet cause of cores that load but won't scan, or that lose an option that "was there yesterday." Treat the core binary and its .info as a pair that must move together, and most version-drift weirdness never happens to you.

Run-ahead, latency, and the accuracy tax

Run-ahead is RetroArch's headline feature for a reason: it internally runs the core one or more frames ahead and hides the emulated hardware's native input lag, making many games feel snappier than they did on a CRT. The cost is CPU — the core runs multiple times per displayed frame — which is why a handheld that plays a system fine at 1x run-ahead chokes at 2x. Combine that with an accuracy core and you've stacked two CPU taxes. Budget for it: on strong hardware, one frame of run-ahead plus an accuracy core is transformative; on Arm, pick one luxury, not both. The libretro forums' cores section — which still showed active Core and Feature Requests threads as of 2026-06-22 — is where the per-core latency tuning gets argued out in public if you want the deep end.

Subsystems, softpatching, and the cores nobody mentions

Two features earn their keep quietly. Softpatching: drop an IPS, BPS, or UPS patch next to a ROM with a matching name and the core applies it in memory at load — no permanently patched files, translations and romhacks stay non-destructive. Subsystems: a few cores support multi-cartridge setups (Super Game Boy, Sufami Turbo, certain link-cable configs) through a subsystem loader most users never find. And don't forget the cores that aren't emulators at all — ScummVM, Cannonball, the various game-engine reimplementations. They implement the same libretro API, so they inherit your shaders, overlays, and input config exactly like an emulator core would, which is a genuinely elegant side effect of that thin contract we started with.

A Complete, Working 2026 Configuration

Here is the whole thing assembled: a directory layout, the global config lines that matter, and the override structure. Adapt paths to your platform and it is a legitimate baseline you can build a library on.

Directory layout

Everything hangs off one config root. Keep it outside the app bundle so updates and backups don't touch your data:

~/.config/retroarch/
|-- cores/          # one core per system, not six
|-- info/           # info files, version-matched to cores/
|-- system/         # BIOS, md5-verified
|-- saves/          # SRAM battery saves
|-- states/         # save states (core-version dependent)
|-- playlists/      # .lpl files from the scanner
|-- thumbnails/     # boxart, titles, in-game shots
|-- config/         # per-core and per-game overrides
+-- retroarch.cfg   # global baseline

The config files

The global retroarch.cfg only needs the paths and a few sane defaults; everything system-specific belongs in overrides:

# ~/.config/retroarch/retroarch.cfg (excerpt)
libretro_directory = "~/.config/retroarch/cores"
libretro_info_path = "~/.config/retroarch/info"
system_directory = "~/.config/retroarch/system"
savefile_directory = "~/.config/retroarch/saves"
savestate_directory = "~/.config/retroarch/states"
core_updater_buildbot_url = "https://buildbot.libretro.com/nightly/"
core_updater_buildbot_assets_url = "https://buildbot.libretro.com/assets/"
core_updater_auto_extract_archive = "true"
video_driver = "vulkan"
menu_driver = "ozone"
video_smooth = "false"

# --- config/Beetle PSX HW/Beetle PSX HW.cfg (per-core) ---
beetle_psx_hw_renderer = "vulkan"
beetle_psx_hw_internal_resolution = "4x"
beetle_psx_hw_pgxp_mode = "memory only"

# --- config/Flycast/Flycast.cfg (per-core) ---
reicast_renderer = "vulkan"
reicast_internal_resolution = "1280x960"

# --- config/Snes9x/Snes9x.cfg (per-core) ---
snes9x_region = "auto"
snes9x_aspect = "4:3"

The final checklist

Before you call it done, confirm all of it: RetroArch is on the current stable; Core Info Files were updated first; exactly one core is installed per system, matched to your hardware tier; BIOS files sit in system/ with verified md5s; your directories are set to a stable location; content scanned into playlists with boxart; and each system launched one known-good game at full speed. Do those eight things and you have what most people never manage: a lean, fast, correctly-configured RetroArch that won't rot the next time a core updates. The catalogue has 200+ cores. You need maybe a dozen. Now you have the right dozen — and the discipline to keep it that way.

Questions the search bar asks me

How many RetroArch cores are there in 2026?
RetroArch's official site counts more than 200 cores across all platforms, and the cores page (last updated 2026-06-23) says the list keeps expanding. But that is a catalogue, not your device's inventory — the in-app Core Downloader typically shows 100+ cores grouped by system, and a locked-down Arm handheld may see far fewer. You run the slice compiled for your architecture.
Which N64 core should I use in RetroArch?
The 2026 shattered.io guide recommends Mupen64Plus-Next as the default, and it's still the standard pick. However, Mupen64Plus-Next hit a run of regressions in early 2025, so many users get better per-game results from ParaLLEl N64. Test both on your problem titles and set the playlist's default core accordingly.
Do I need BIOS files for RetroArch cores?
Yes, for several systems: PlayStation, Saturn, Sega CD, Dreamcast, Nintendo DS, and PS2 all require a BIOS. RetroArch cannot ship these copyrighted firmware files, so you dump them from hardware you own and place them in the system/ folder with the exact filename and md5. Use Core Information to see which firmware is present or missing before assuming a game is broken.
Why is a core missing from my Core Downloader?
Two usual causes. First, you didn't run Update Core Info Files, so RetroArch's list is stale — do that first. Second, the core simply isn't built for your platform: the 200+ figure is a cross-platform catalogue, and cores like LRPS2 (PS2) are x86_64-only and will never appear on an Arm handheld.
What's the best Game Boy Advance core in RetroArch?
mGBA. The 2026 RetroHandheldHQ roundup calls it the best GBA core outright, winning on accuracy, speed, and active development, and the shattered.io guide recommends it as well. Reserve gpSP only for genuinely weak hardware that can't hold full speed under mGBA.
Casey Rourke — Speedrun & TAS Correspondent
Casey Rourke
SPEEDRUN & TAS CORRESPONDENT

Casey writes about speedrunning, tool-assisted runs, and the strange engineering of going fast in old games. Every post under this byline is reviewed pre-publish by Sam P., Editor & Operator — corrections to info@instalinkoteam.com. Published 2026-08-29 · Last updated 2026-08-29. Full bios on the author page.

MORE FIELD NOTES

Retroid Pocket 6 Review (2026): A $244, 8/10 Handheld7 MIN READ · BY BEN ARONOFFBatocera 43.1 Download: 12 Steps, 30 Min, 200+ Systems7 MIN READ · BY BEN ARONOFFMiyoo Mini Plus 2026: 28,000 ROMs Dedupe to 6,04110 MIN READ · BY CASEY ROURKERetroid Pocket 6 vs G2 2026: $244 vs a Dead $21911 MIN READ · BY BEN ARONOFFRetroid Pocket 2026: 6 Models, $139-$244, One Winner9 MIN READ · BY CASEY ROURKERetroid Pocket 6 vs G2 2026: $244 Proven, $199 Gamble13 MIN READ · BY NINA VELASQUEZ