Most emulation tools install on top of an operating system you already run. Batocera does the opposite: it replaces your boot process entirely, running straight from a USB drive or SD card and shipping nothing but Linux plus more than 200 preconfigured emulator cores. The current stable release, version 43.1 "Glasswing," landed on 30 May 2026, and setting it up correctly — not just booting it, but securing it and organizing your library — takes about 30 minutes if you follow the steps in the right order.

This walkthrough covers picking the right hardware, flashing and verifying the image, hardening SSH before you do anything else, adding ROMs and BIOS files the way Batocera actually expects them, and scripting the whole deployment so it’s repeatable. We’ll also cover what changed in 43.1, the pitfalls that trip up first-timers, and a troubleshooting table for when something doesn’t boot the way it should.

What Is Batocera, and Why 200+ Systems in One Image?

Batocera.linux is a free, open-source Linux distribution built specifically for retro-gaming emulation. Unlike EmuDeck or RetroArch — both of which install as software on top of an OS you already run — Batocera is the OS. It boots directly from removable media, uses EmulationStation as its menu-driven frontend, and wires together RetroArch’s libretro cores alongside standalone emulators like Dolphin (GameCube/Wii), PCSX2 (PS2), Flycast (Dreamcast), RPCS3 (PS3), Cemu (Wii U), and Azahar (3DS) so you get one consistent interface across all of them.

The project advertises support for more than 200 systems out of the box, from the Atari 2600 and NES up through PS2, GameCube, and — on capable hardware — PS3. On GitHub, batocera-linux/batocera.linux carries 3,108 stars and 707 forks as of this writing, with commits pushed daily, which is a reasonable proxy for how actively the project is maintained.

The single biggest practical difference from RetroPie, Recalbox, or a manual RetroArch install is that Batocera’s system partition is read-only. Your ROMs, BIOS files, save states, and configuration all live on a separate writable partition called SHARE. That split means a bad update or a corrupted config can’t easily brick your whole library — you reflash the boot image and your data is untouched. We cover the full three-way breakdown, including GitHub star counts and hardware-support tables side by side, in our Batocera vs RetroPie vs Recalbox comparison.

Because Batocera boots from removable media, it also doesn’t touch your existing Windows or Linux install by default. Plug in the drive, change your boot order (or hit the one-time boot-menu key), and unplug it when you’re done gaming — the machine goes right back to whatever OS lives on its internal disk. For more on our broader gaming hardware coverage, including where Batocera fits next to full desktop Linux gaming distros, see our Bazzite vs SteamOS comparison.

Prerequisites: Hardware, Storage, and Software Versions

Before you start, confirm you actually have what the install needs. This tutorial was tested against Batocera 43.1 "Glasswing," the current stable release; where behavior differs meaningfully from the prior 42 "Papilio" release, we’ve flagged it.

RequirementMinimumRecommended
Batocera version43.043.1 "Glasswing" (30 May 2026 point release)
USB drive / SD card16 GB32 GB or larger — automatic updates require 32 GB+
Target hardwareAny x86_64 PC or Raspberry Pi 4Pi 5, mini-PC, or a dedicated retro rig
Flashing toolbalenaEtcher, Raspberry Pi Imager, or USBImagerSame, plus dd on Linux for scripted installs
Host OS to flash fromWindows 10/11, macOS, or LinuxAny — flashing tools are cross-platform
ControllerAny USB or Bluetooth gamepadXbox- or DualSense-style pad for the cleanest default mapping
NetworkOptionalEthernet or Wi-Fi for scraping box art and SSH access

That storage line deserves emphasis: Batocera’s own installation wiki states plainly that 16 GB is the floor and 32 GB is what you need for full functionality, because the system cannot automatically download updates with only 16 GB available. Buy the bigger drive up front — it’s cheaper than re-flashing later.

Step 1: Pick the Right Hardware Tier for Your Systems

Batocera publishes a different image for every hardware architecture, and the most common first-timer mistake is grabbing the wrong one — an image built for Raspberry Pi won’t boot on an x86_64 mini-PC, and vice versa. Before downloading anything, match your hardware to the systems you actually want to play, since that determines both which image to grab and how much horsepower you’ll need.

HardwareRealistic CeilingNotes
Raspberry Pi 4 (4 GB+)8/16-bit consoles, PS1, N64, DreamcastCheapest entry point; N64 and Dreamcast need per-game tuning
Raspberry Pi 5Adds PSP, Saturn, light GameCubeRoughly double the Pi 4’s GPU throughput
x86_64 mini-PC (Intel N100/N150 class)PS2, GameCube, Wii, most Dreamcast/Saturn titlesBest price-to-system ratio for 3D-era consoles
Desktop with a discrete GPUPS3 (RPCS3), Wii U (Cemu)RPCS3 and Cemu are both CPU-heavy, not just GPU-heavy
Handheld PC (Steam Deck, ROG Ally, etc.)Everything through PS2/GameCube, portableCan coexist with SteamOS on some devices — see our Linux gaming OS comparison

It’s worth noting that the entry cost for this hardware has moved with the rest of the market. Raspberry Pi’s own pricing notices show the 8 GB Pi 5 climbing from $95 in December 2025 to $125 by February 2026, and the 16 GB model jumping from $145 to $205 in the same window — a side effect of the AI-driven memory shortage that has pushed single-board computer prices higher throughout 2026, the same shortage that’s been driving up Steam Deck, Steam Machine, and console prices (see our coverage of the 2026 RAM shortage). If you already own a machine that can run a browser comfortably, it’s almost certainly capable of handling 2D and PS1-era emulation without spending anything new.

Step 2: Download the Correct Batocera 43.1 Image

Head to batocera.org/download and pick the image matching Step 1’s hardware choice. Images follow a consistent naming pattern: batocera-[architecture]-[version]-[date].img.gz — for example, batocera-x86_64-43.1-20260530.img.gz for a 64-bit PC on the 43.1 point release. Raspberry Pi images are split further by board revision (bcm2711 for Pi 4, bcm2712 for Pi 5), so don’t grab a generic "Raspberry Pi" image and assume it covers both boards.

The image is gzip-compressed, and that’s intentional — you don’t need to manually extract it. balenaEtcher and Raspberry Pi Imager both read .img.gz files directly and decompress on the fly during flashing.

If the main download is slow, Batocera also serves images through regional mirrors — the same mirror infrastructure used for updates in Step 11 — linked directly from the download page itself. There’s no need to hunt for third-party mirror links, and you shouldn’t: a Batocera image from anywhere other than batocera.org or its listed mirrors is not something you can verify against the official checksum in Step 3.

Step 3: Verify the Image Before You Flash It

A corrupted download produces a drive that half-boots, panics randomly, or fails partway through partition expansion — all of which are far more annoying to diagnose after the fact than a five-second checksum check up front. Batocera publishes checksums alongside every image on the download page. Verify with:

sha256sum batocera-x86_64-43.1-20260530.img.gz
# compare the output against the checksum listed next to the
# download link on batocera.org/download

On Windows, without a Unix-style shell available, PowerShell’s built-in equivalent works the same way:

Get-FileHash .\batocera-x86_64-43.1-20260530.img.gz -Algorithm SHA256

Either way, if the hash doesn’t match, don’t flash it — re-download instead. A silently-corrupted image is the single most time-consuming failure to diagnose after the fact, because the symptoms (random boot hangs, a scraper that half-works, a system that loads some games and not others) look identical to a dozen other unrelated problems.

Step 4: Flash Batocera to a USB Drive or SD Card

The GUI path is balenaEtcher — cross-platform, handles .img.gz directly, and validates the write afterward. Raspberry Pi Imager works well if you’re targeting a Pi board specifically, and USBImager is a lighter alternative on Linux.

If you’re on Linux and want a command-line path — useful later when we script the whole deployment — identify your device first, then flash:

# identify the correct device FIRST -- writing to the wrong
# device destroys whatever data is on it
lsblk

# flash (replace /dev/sdX with your USB device, NOT a partition
# like /dev/sdX1)
zcat batocera-x86_64-43.1-20260530.img.gz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync

Pointing dd at the wrong device node erases whatever’s there with zero confirmation prompt. Run lsblk immediately before flashing, every time, and double-check the device letter — not a partition number — before you hit enter.

On Windows, if a previously-flashed USB stick appears to "shrink" and Explorer refuses to show its full capacity afterward, that’s expected: Batocera’s partition layout confuses Windows’ disk management. Recover the drive with diskpart‘s clean / create partition primary / format quick sequence before reusing it for something else — the drive isn’t damaged.

Step 5: Boot Batocera for the First Time

Insert the drive, power on, and interrupt the boot process to select it as the boot device — the key varies by motherboard, but F10, F11, F12, and Delete are the most common; check your PC’s splash screen if you’re not sure. On a UEFI system that refuses to even list the USB drive as bootable, the fix is almost always Secure Boot: go into firmware settings and disable it, since Batocera’s kernel isn’t signed for Microsoft’s Secure Boot chain.

First boot takes noticeably longer than every boot after it, because Batocera is expanding the SHARE partition to fill the rest of the drive. Expect output conceptually similar to this (illustrative — exact line timing varies by hardware):

[   4.812] batocera-boot: expanding SHARE partition...
[   4.813] batocera-boot: resize2fs running on /dev/sda3
[  11.204] batocera-boot: SHARE partition resized to 29.8G
[  11.401] batocera-boot: starting EmulationStation

On some boards this expansion needs one extra reboot to finish cleanly — if EmulationStation looks stuck or renders oddly on the very first boot, power-cycle once before assuming something’s wrong. After that, you’ll land in EmulationStation’s system wheel and Batocera is technically "installed."

Step 6: Lock Down SSH Before You Do Anything Else

This is the step most retro-gaming tutorials skip, and it shouldn’t be skipped. Batocera enables SSH by default, and the login is root / linux on every single install — that’s not a secret, it’s documented on Batocera’s own SSH access wiki page. That’s a reasonable tradeoff for a hobbyist box sitting on your living-room network, but it becomes a real exposure the moment the machine is reachable from outside your LAN: port-forwarded for remote play, sitting on a shared dorm or office network, or exposed via UPnP by a router you don’t fully control. Batocera’s own security documentation is blunt about this — the project was not designed to be a secure OS by default, so treat that as a known constraint rather than an oversight to report as a bug.

Change it immediately, either over SSH or from the menu:

ssh [email protected]
# password: linux (default -- change this now)

batocera-config setRootPassword "a-long-unique-passphrase"
reboot

Or from EmulationStation: MAIN MENU → SYSTEM SETTINGS → SECURITY → ROOT PASSWORD, and enable "Enforce Security" while you’re there — this also requires credentials for the SMB network share instead of leaving it open to anyone on the same Wi-Fi network.

One quirk worth knowing: if you change your network hardware later — adding or removing a USB Ethernet adapter, for instance — Batocera can regenerate a fresh default password on some builds. Get in the habit of running batocera-config getRootPassword after any hardware change instead of assuming your custom password persisted.

Step 7: Add Your ROMs and BIOS Files

Batocera ships with zero games and zero BIOS files — you’re expected to dump these yourself from media you own (more on the legal side later in this piece).

Content TypePathNotes
ROMs/userdata/roms/[system]/Each folder contains an _info.txt listing exactly which file extensions that core accepts
BIOS/userdata/bios/Some cores expect subfolders, e.g. /userdata/bios/dc/ for Dreamcast’s dc_boot.bin and dc_flash.bin
Config/userdata/system/batocera.confCovered in Step 10

Batocera checks BIOS integrity by MD5 hash for many systems, so a mismatched file shows up as missing even when the filename is exactly right. MENU → GAMES SETTINGS → MISSING BIOS lists precisely what each installed system still needs, including the expected hash. Full path documentation lives on the add games and BIOS wiki page.

Three ways to get files onto those paths, easiest first:

  • Network share — Batocera exposes an SMB share with zero configuration: \\BATOCERA\share on Windows, smb://BATOCERA.local/share on macOS/Linux. If you enabled "Enforce Security" in Step 6, authenticate with root and your new password.
  • USB drive — plug a USB stick with your files into the Batocera machine, open the in-OS file manager with F1, and copy from there.
  • SCP over SSH — the most scriptable option, and the one we build on in Step 12.
# copy a whole SNES ROM folder to a Batocera box at 192.168.1.50
scp -r ./snes-roms/* [email protected]:/userdata/roms/snes/

# copy Dreamcast BIOS files into their required subfolder
scp dc_boot.bin dc_flash.bin [email protected]:/userdata/bios/dc/

Step 8: Configure Controllers and Input Hotkeys

EmulationStation auto-detects most USB and Bluetooth controllers and walks you through a button-mapping wizard the first time it sees a new pad. Xbox- and DualSense-style controllers get the cleanest default mapping, since most RetroArch cores assume that layout. Bluetooth pairing lives under MAIN MENU → CONTROLLERS.

Hotkey ComboAction
HOTKEY + STARTQuit the current game, return to EmulationStation
HOTKEY + ASave state
HOTKEY + BLoad state
HOTKEY + XOpen the RetroArch quick menu (RGUI)
HOTKEY (held)Modifier button for all of the above, usually mapped to Select/Back

Forgetting which button is mapped to HOTKEY is the single most common "how do I quit a game" support question — it’s whatever you assigned during that first-run wizard. Re-run MENU → CONTROLLERS → CONFIGURE if you need to check or redo it.

Step 9: Scrape Box Art, Metadata, and Videos

Once ROMs are in place, EmulationStation’s default list view is just filenames. MAIN MENU → SCRAPER pulls in box art, descriptions, release dates, and per-game preview videos from ScreenScraper.fr, Batocera’s default source, documented on the scraper wiki page, with TheGamesDB available as an alternative.

Registering a free ScreenScraper account before you scrape raises your rate limit and speeds up large libraries considerably — running unauthenticated against a few thousand ROMs can take a long time and occasionally gets throttled mid-run. You can scrape a single system, a single game, or the whole library in one pass; box art and metadata get written into your SHARE partition alongside the ROMs, so they survive OS updates and reflashes as long as SHARE itself isn’t wiped.

The scraper menu also lets you choose what to pull per pass — box art only, box art plus a synopsis and release metadata, or the full set including per-game preview clips and marquee images (the last of which meaningfully increases both scrape time and the space used on SHARE, worth skipping on a 16–32 GB drive with a large library). If a specific game comes back unmatched or matched to the wrong region’s cover art, MENU → SCRAPER also supports a manual per-game search and override rather than forcing you to re-run the whole library.

Step 10: Fine-Tune Per-System Settings With batocera.conf

Most day-to-day settings — shaders, per-system emulator choice, RetroAchievements — are reachable from menus, but batocera.conf at /userdata/system/batocera.conf gives you direct, scriptable control, which matters once you’re maintaining more than one Batocera box.

# /userdata/system/batocera.conf
# format: system.option=value

ps2.emulator=pcsx2
snes.shaderset=scanlines
global.retroachievements=1
global.retroachievements.hardcore=0
wifi.enabled=1
wifi.ssid=YourNetworkName
wifi.key=YourNetworkPassword

Edit it directly over SSH or SCP, or through the file manager, then reboot for changes to apply. Because this file lives on the writable SHARE partition, it isn’t touched by a standard OS update — see Step 11.

One setting worth flagging: RetroAchievements Hardcore Mode (global.retroachievements.hardcore=1) disables save states entirely. That’s a common surprise for anyone chasing achievements who’s also used to quick-saving mid-level.

Step 11: Update Batocera Without Wiping Your Library

Because ROMs, BIOS files, saves, and batocera.conf all live on SHARE and the OS itself lives on a separate read-only boot partition, updating is safe by design — an update only touches the boot partition.

From the menu: MAIN MENU → UPDATES & DOWNLOADS → START UPDATE. Over SSH:

batocera-upgrade https://mirrors.o2switch.fr/x86_64/stable/last
reboot

Expected output looks conceptually like this (illustrative — exact wording varies by release):

Downloading update... 100%
Verifying image...
Writing boot partition...
Update complete. Reboot to apply.

Even though SHARE is untouched by design, back it up before a major version jump (42 to 43, for instance) anyway. batocera-upgrade is well-tested, but copying /userdata costs a few minutes and removes any risk entirely — the SMB share or scp from Step 7, reversed, both work fine for this.

Step 12: Automate the Whole Deployment (Complete Working Project)

If you’re setting up more than one Batocera box — a home arcade cabinet, a second unit for a kid’s room, or you just want a repeatable process instead of clicking through menus every time — it’s worth scripting Steps 3, 4, and 6 together. The script below has two phases: flash verifies the checksum and writes the image with a confirmation guard against the classic "wrong device" disaster, and harden waits for SSH after you’ve booted the target machine, then rotates the default root password and pushes your batocera.conf.

#!/usr/bin/env bash
# deploy-batocera.sh -- verify, flash, and SSH-harden a Batocera
# image end to end.
#
# Phase 1: ./deploy-batocera.sh flash batocera-x86_64-43.1-20260530.img.gz checksums.sha256 /dev/sdX
# Phase 2 (after first boot): ./deploy-batocera.sh harden 192.168.1.50

set -euo pipefail
MODE="${1:?usage: deploy-batocera.sh  ...}"

case "$MODE" in
  flash)
    IMAGE="$2"; CHECKSUM_FILE="$3"; TARGET_DEV="$4"

    echo "==> Verifying checksum"
    sha256sum -c "$CHECKSUM_FILE" --ignore-missing

    echo "==> This ERASES everything on $TARGET_DEV."
    read -rp "Type the device path again to confirm: " CONFIRM
    [ "$CONFIRM" = "$TARGET_DEV" ] || { echo "Mismatch, aborting."; exit 1; }

    zcat "$IMAGE" | sudo dd of="$TARGET_DEV" bs=4M status=progress conv=fsync
    sync
    echo "==> Flashed. Boot the target from this drive, then run: $0 harden <ip>"
    ;;

  harden)
    HOST="$2"
    NEW_PW="${BATOCERA_ROOT_PASSWORD:?export BATOCERA_ROOT_PASSWORD first}"

    echo "==> Waiting for SSH on $HOST"
    until ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 root@"$HOST" true 2>/dev/null; do
      sleep 5
    done

    echo "==> Rotating the default root password"
    ssh root@"$HOST" "batocera-config setRootPassword '$NEW_PW'"

    if [ -f ./batocera.conf ]; then
      echo "==> Pushing batocera.conf"
      scp ./batocera.conf root@"$HOST":/userdata/system/batocera.conf
    fi

    ssh root@"$HOST" reboot
    echo "==> Done. Confirm with: ssh root@$HOST"
    ;;

  *)
    echo "unknown mode: $MODE" >&2; exit 1
    ;;
esac

The password is read from an environment variable rather than hardcoded, and the flash phase requires you to retype the device path before it touches anything — both are small guards, but they’re the two mistakes that actually cause data loss in practice. Save it, adjust the paths, and you have a repeatable Batocera deployment instead of a one-off manual process.

What’s New in Batocera 43.1 "Glasswing"

Batocera’s version numbers are simple increments rather than a year-based scheme — 43 followed by point release 43.1, with the prior major release being 42 "Papilio" on 12 October 2025. Version 43 shipped 8 May 2026, and 43.1 followed on 30 May 2026 as a bug-fix pass. Here’s what actually changed, according to the official changelog:

ChangeDetails
custom.sh deprecatedExisting custom.sh scripts auto-convert to services on first boot after the upgrade; write new customizations as services going forward
Azahar replaces Azahar Plus3DS emulation core switched to the upstream Azahar project; encrypted CIA/CCI files are no longer supported — 3DS ROMs must be decrypted before use
Legacy Nvidia drivers dropped340.xx and 390.xx driver support removed; only 470.xx, 580.xx, and 590.xx continue to be supported
ROM folder renamesSeveral folders (including odyssey2, megadrive-msu, and halflife) renamed to match system naming conventions instead of emulator names
RPCS3 shutdown fix (43.1)Fixed a bug where RPCS3 sometimes blocked a clean game exit
Updated emulator coresCemu bumped to its April 2026 build, Amiberry to March 2026, BigPEmu to v121

The ability to use a custom.sh script is deprecated in this version. If you already used such a script, then it will be one-time transformed into a service.

Batocera official changelog, batocera.org/changelog

If you’re upgrading an existing Batocera install rather than setting one up fresh, the custom.sh and 3DS decryption changes are the two most likely to actually break something you were relying on — check MENU → SYSTEM SETTINGS → SERVICES after upgrading if you had any custom scripts in place.

6 Common Pitfalls When Setting Up Batocera

  • Flashing the wrong architecture image. A Raspberry Pi image on a PC (or vice versa) produces a drive that either won’t boot or boot-loops with no useful error message.
  • Leaving the default root/linux SSH credentials in place on a network you don’t fully control, including anything port-forwarded for remote access.
  • Buying a 16 GB drive and then wondering why automatic updates fail. 32 GB is the real functional minimum, not the documented floor.
  • Assuming a correctly-named BIOS file is enough. Many cores MD5-check BIOS content, so a renamed-but-wrong dump still shows as missing.
  • Expecting RetroAchievements Hardcore Mode and save states to coexist. Hardcore Mode disables save states entirely, not just during tracked sessions.
  • Treating a "shrunk" USB drive after flashing as dead. It isn’t — reformat it with diskpart (Windows) or GParted (Linux/macOS) and it’s reusable.

Troubleshooting Batocera: 9 Issues and Fixes

SymptomLikely CauseFix
Machine won’t boot from the drive at allWrong architecture image, or Secure Boot enabledRe-download the correct per-architecture image; disable Secure Boot in UEFI firmware
Boots to a black screen after the splashGPU driver mismatch, common on very new or very old GPUsCheck the release notes for your GPU; legacy Nvidia 340.xx/390.xx are unsupported as of v43
First boot hangs during partition expansionSome boards need one extra reboot to finish resizing SHAREPower-cycle once; if it repeats, try a different USB port
Can’t reach the network share from WindowsEnforce Security is on and you’re not authenticating, or hostname resolution is failingTry the IP address instead of the hostname; supply root credentials if prompted
A ROM doesn’t show up, or shows in the wrong systemFile extension isn’t in that system’s accepted listCheck _info.txt inside that system’s ROM folder for accepted formats
BIOS-dependent system says BIOS is missing despite the file being presentMD5 mismatch — wrong dump or revisionUse MENU → GAMES SETTINGS → MISSING BIOS to see the exact hash expected
Scraper is extremely slow or keeps timing outUnauthenticated ScreenScraper requests are rate-limitedRegister a free ScreenScraper account and enter it under MENU → SCRAPER
Root password appears to reset itselfAdding or removing a network adapter can regenerate the default password on some buildsRe-run batocera-config setRootPassword after any hardware change; verify with getRootPassword
Update fails partway throughInterrupted connection or a stale mirror URLRe-run batocera-upgrade with a fresh mirror from batocera.org/download; SHARE data is untouched even after a failed attempt
A custom.sh script stopped working after upgrading to 43custom.sh support was deprecated in v43Check MENU → SYSTEM SETTINGS → SERVICES — it was auto-converted on first boot; adjust from there

If none of the above matches what you’re seeing, run batocera-support over SSH before asking for help anywhere — it bundles the relevant logs into one file, which is what most community troubleshooting threads will ask for first.

Advanced Tips: Netplay, RetroAchievements, Kodi, and Shaders

Netplay. RetroArch’s built-in netplay works across Batocera boxes on any core that supports it. Host a session from the in-game RetroArch quick menu (HOTKEY + X), share the room code, and play classic multiplayer titles with a friend running a separate Batocera install over the internet — no additional software needed.

RetroAchievements. Toggle globally with the global.retroachievements key in batocera.conf, or per-system from the in-game menu. Remember that Hardcore Mode trades away save states, as covered in Step 10 — decide per-library whether that tradeoff is worth it before you turn it on for everything.

Kodi. Bundled as a switchable app from the main system wheel, turning the same box into a general media center without a second install or a dual-boot setup.

Shaders, bezels, and themes. MENU → CONTENT DOWNLOADER pulls community themes, CRT-style shaders, and system-accurate bezels directly onto the box. Per-system default shaders are set with the [system].shaderset= key in batocera.conf, as shown in Step 10 — useful if you want scanline filters on every console from the SNES era without configuring each system individually through menus.

Ports. Engine ports like DOOM, OpenBOR, and ScummVM-based adventure games run as a "Ports" system alongside the console emulation. They’re not console emulation in the strict sense — you’re running the original game engine’s open-source reimplementation against your own game data — but Batocera bundles and launches them the same way.

Building a Dedicated Living-Room or Arcade Box With Batocera

A meaningful share of Batocera installs never touch a general-purpose computer at all — they live permanently in a mini-PC tucked behind a TV, or inside an actual arcade cabinet with a coin door and a CRT-style monitor. Because the whole OS lives on the boot drive rather than an internal-disk install, the same mini-PC from Step 1 can boot Batocera exclusively without you ever touching a partition table: plug in the drive, set it as the sole boot device in firmware, and skip the boot-menu key entirely on future power-ons.

For a cabinet build specifically, the practical checklist looks a little different from a desktop install. Prioritize a fanless or low-noise mini-PC, since cabinets sit in living rooms rather than server racks. Wire the cabinet’s arcade buttons and joystick through a USB encoder board so they present to EmulationStation as a standard controller, then run the mapping wizard from Step 8 using the cabinet’s actual controls rather than a gamepad. If the cabinet has its own speakers, confirm the correct audio output is selected under MENU → SYSTEM SETTINGS → AUDIO before you close everything up — a five-second check that saves reopening a bolted cabinet later.

For a living-room box shared with a TV, Kodi turns the same hardware into a media center when nobody’s gaming, and the SMB share from Step 7 means new ROMs can be dropped onto the box from a laptop on the same Wi-Fi network without ever plugging in a keyboard or reopening the case.

Batocera itself ships zero games and zero BIOS files — it’s emulation tooling, not a piracy distribution, and every core it bundles is open source. The legal question that actually matters is where your ROMs and BIOS dumps come from. Dumping games and firmware from hardware and media you personally own is the position that keeps you clearly on the right side of copyright law in most jurisdictions; downloading ROMs for games you don’t own is not, regardless of how easy that is to do.

The emulation scene has watched this play out at real scale recently: Nintendo’s lawsuit against the Switch emulator Yuzu ended in a $2.4 million settlement and the project’s shutdown, and it set the tone for how aggressively rightsholders are willing to pursue emulator distribution even when the emulator’s own code is clean. We cover that precedent in more detail in our EmuDeck and RetroArch setup guides. Batocera as a distribution hasn’t been targeted the way single-emulator projects have, precisely because it doesn’t distribute copyrighted material — keep your own install that way.

Batocera vs RetroPie vs EmuDeck vs Bazzite: Which Should You Actually Use?

Batocera replaces your OS and offers the broadest hardware support of the group — x86_64 PCs, Pi 4/5, Odroid boards, and a growing list of handhelds — making it the strongest choice for a dedicated retro box or arcade cabinet. RetroPie is a Debian script layer rather than a full OS swap, with its last official pre-built image dated March 2022 even though the setup script itself is still updated; we break down the full hardware and GitHub-star comparison in our Batocera vs RetroPie vs Recalbox piece. EmuDeck installs on top of SteamOS, Windows, or macOS, which makes more sense if the machine already does other things — see our EmuDeck on Steam Deck guide. RetroArch alone is the frontend and core engine underneath both Batocera and EmuDeck; install it directly if you want fine-grained control without any OS-level tooling, covered in our RetroArch setup guide. And if you want one box that handles native Steam gaming and emulation equally well, a general-purpose Linux gaming OS is a different tool for a different job — see our Bazzite vs SteamOS comparison.

Frequently Asked Questions

What is Batocera, and how is it different from RetroPie?

Batocera is a full Linux distribution that boots from removable media and replaces your OS while it’s running. RetroPie is a setup script that installs emulation tools on top of Raspberry Pi OS. Batocera also supports far more non-Pi hardware out of the box. See our full Batocera vs RetroPie vs Recalbox comparison for hardware-support and GitHub-star breakdowns.

Is Batocera free?

Yes. Batocera is free and open source, distributed at no cost from batocera.org. It ships no games or BIOS files; you’re responsible for supplying those yourself from media you own.

How much storage do I need for Batocera?

16 GB is the documented minimum, but 32 GB is the real functional minimum — Batocera can’t download automatic updates on a 16 GB drive. Budget more if you’re planning a large PS2 or GameCube collection, since those go on the same drive by default unless you point Batocera at network storage.

Does installing Batocera erase my Windows or Linux install?

No, as long as you boot it from a USB drive or SD card rather than choosing the "install to internal disk" option. Batocera runs from removable media and leaves your machine’s internal drive untouched; unplug it and the PC boots normally into whatever was already there.

What’s the default password, and do I need to change it?

The default SSH login is root / linux on every Batocera install, and yes — change it in Step 6 before doing anything else, especially if the machine will ever be reachable outside your home network. Batocera’s own wiki describes the project as not designed to be a secure OS by default.

Can Batocera play PS2 or GameCube games?

Yes, via PCSX2 for PS2 and Dolphin for GameCube/Wii, but both need meaningfully more power than 8/16-bit or PS1 emulation — realistically an x86_64 mini-PC or better, not a Raspberry Pi 4.

Dumping ROMs and BIOS files from games and hardware you personally own is generally defensible; downloading copies of games you don’t own is not, and that distinction is exactly what recent lawsuits against emulator projects like Yuzu have turned on.

How do I update Batocera without losing my ROM library?

Run an update from MAIN MENU → UPDATES & DOWNLOADS, or batocera-upgrade over SSH. Updates only touch the read-only boot partition — your ROMs, BIOS, saves, and batocera.conf live on the separate SHARE partition and aren’t affected. Back SHARE up before a major version jump anyway, just in case.