Open-source project
Abdess/retrobios avatar
Abdess/retrobios

Abdess/retrobios: source-verified BIOS packs for RetroArch, Batocera and RetroPie

Source-verified BIOS and firmware packs for RetroArch, Batocera, Recalbox, Lakka, RetroPie, EmuDeck, RetroBat, RetroDECK, RomM, BizHawk, ROCKNIX, and MiSTer FPGA. Platform-native verification, with emulator source code as the deciding authority.

7,250 stars693 forksHTMLNOASSERTION

At a glance

What is it?
RetroBIOS builds per-platform BIOS and firmware packs by reading emulator source code, then verifies each file the way the target platform does. It is a packaging and verification project, not a legal shortcut.
Who is it for?
Adopt RetroBIOS if you run one of the twelve supported platforms and want a checksum-verified BIOS set instead of a folder of files from a forum thread. Do not adopt it if you need files it explicitly lists as unsourceable, such as per-user keys and user-filled slots, or if you expect the pack to satisfy a licence you do not hold.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 16 days ago.
What is it written in?
Mainly HTML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem RetroBIOS solves: BIOS files scattered across forum threads

Emulators do not ship the firmware they load. A PlayStation core needs a BIOS image, a Saturn emulator needs firmware, an arcade set needs its parent ROM. Those files live on the user's disk, and the emulator documentation rarely lists all of them, because the list is buried in the source code that calls the file loader. RetroBIOS exists to close that gap. It reads emulator source, extracts the filenames, sizes and hashes each emulator actually checks, and packages the result per platform.

The audience is narrow and specific. It is people running Batocera, BizHawk, EmuDeck, Lakka, MiSTer FPGA, ROCKNIX, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie or RomM who want the BIOS folder populated without hand-collecting files. The README states the scope plainly: 12 platforms, 450 emulators profiled from source, 470 systems, and 10,375 files with five fingerprints each. The interesting number is the second column of the Coverage table, files its emulators load that the platform's own BIOS list never mentions. On Batocera that is 1,299 against a published list of 353. That ratio is the whole argument for the project.

How the verification works, and why the platform decides the test

The mechanism is a build pipeline, not a runtime tool. The repository holds a bios/ directory, a platforms/ directory, an emulators/ directory, a provenance/ directory, a recipes/ directory and a schemas/ directory, plus database.json at the top level. Build scripts under scripts/ read emulator source and produce the packs and the site. pyproject.toml notes that those scripts use syntax introduced in CPython 3.12, which is the version CI pins, so a contributor needs 3.12 while install.py itself accepts 3.8.

The verification rule is the part worth understanding. Each file is checked the way the target platform checks it, and the Coverage table names that test per platform. Batocera, EmuDeck, ROCKNIX, Recalbox, RetroBat, RetroDECK, MiSTer FPGA and RomM compare an MD5 hash. BizHawk compares SHA1. RetroArch, Lakka and RetroPie only look for the filename, because that is all their code does. Independently, the collection records SHA1, MD5, SHA256, CRC32 and Adler-32 for every file. Where an emulator's source states an expected size or hash, that value is read from source and rechecked.

That distinction matters more than it looks. A pack verified by filename presence will hand you a file that boots the emulator and may still be the wrong dump. RetroBIOS does not hide this: the Coverage table publishes which platforms get the weaker test, and the fraction next to each platform tells you how complete the pack is.

Installing on Linux, macOS, Steam Deck or Windows

The README gives a one-line installer per operating system. On Linux, macOS and the Steam Deck, the command is a curl pipe into sh. The script auto-detects the platform, downloads only missing files, and verifies checksums.

bash
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh

On Windows the equivalent is a PowerShell download-and-execute, which the README shows as irm piped into iex.

bash
irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex

Android runs the same shell script under Termux, after installing Python and setting up storage access with pkg install python and termux-setup-storage. For a handheld whose SD card is mounted on a PC, the README shows the script taking a platform and a destination path, which is how you target one machine rather than the host.

bash
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh -s -- --platform retroarch --dest /path/to/sdcard

If you prefer the ZIP route, download the pack for your platform from the releases page and extract it to the path in the table. Batocera expects /userdata/bios/, RetroArch expects system/, RetroPie expects ~/RetroPie/BIOS/, RomM expects bios/{platform_slug}/. RetroDECK is the exception: its pack already contains a bios/ folder, so it extracts into ~/retrodeck/ instead of into a BIOS directory. Packs over 2 GB arrive split as .zip.001, .zip.002 volumes, which you open with the .001 in 7-Zip or PeaZip, or join first with cat Pack.zip.0* > Pack.zip. Every release ships SHA256SUMS.txt and a detached signature checkable against allowed_signers in the repository.

What the packs cannot contain

The README is unusually direct about its own holes, and they are the reason to read before downloading. Six files that the platforms' emulators load are still to be found, and 21 more cannot be sourced at all. The gap analysis page names them. The unsourceable category is structural: per-user keys, user-filled slots, and dumps nobody has made. No amount of scraping fixes a key that is unique to your console.

The Coverage fractions show the same thing per platform. EmuDeck sits at 427/427 on files its emulators load, but 166/168 on its own BIOS list. Lakka and RetroArch both sit at 1,206/1,224, with 530/530 on the published list. ROCKNIX is the widest gap at 1,636/1,654. A short fraction is not a bug report; it is the project telling you which files you will still have to find yourself.

There is a second caveat the README states outright. The count of files emulators load is a floor, not a ceiling, because an emulator that accepts any file handed to it names none in its code, so nothing there can be counted. Treat the coverage numbers as a lower bound on what a platform needs, not a guarantee of completeness.

Licence status is the third limit. The repository's LICENSE file exists, but the metadata reports the licence as NOASSERTION, which means GitHub could not classify it. Nothing in the README asserts a right to redistribute any particular BIOS image. The project packages and verifies files; it does not resolve the legal position of the dumps themselves.

RetroBIOS against scraping a BIOS list yourself

The obvious alternative is doing what most people do: find a platform's published BIOS list, download the files from wherever they are offered, and drop them in the folder. That approach is faster for a single missing file and requires no tooling. It also fails in a specific way that RetroBIOS was built to address.

The published list is incomplete by construction. It is maintained by hand and covers the files someone remembered to add. The Coverage table's second column exists because the real requirement lives in emulator source: on Batocera, 1,299 files against a list of 353. A user following the published list alone will have a working setup for the common cores and silent failures for the rest, and silent is the operative word, because a missing file often produces a core that will not start rather than an error naming the file.

The second difference is the verification test. A hand-collected folder has no checksums at all. RetroBIOS records five fingerprints per file and applies the platform's own test, whether that is MD5, SHA1 or filename presence. If your platform is RetroArch, Lakka or RetroPie, be aware that the pack's verification is no stronger than the emulator's own, which is filename presence only. The five recorded fingerprints are still there for you to check manually, but the automatic test is the weak one.

The third difference is update mechanics. The installer downloads only missing files and verifies checksums, so re-running it after a release is cheap. A hand-maintained folder has no such path.

Maintenance status, release cadence and what a contributor needs

The repository is not archived, and the last push was on 2026-09-14. The most recent release is v2026.09.04, dated 2026-09-04, with a separate large-files release from 2026-03-17 for firmware over 100 MB. That cadence matters for the upgrade cost: re-running the installer picks up only missing files, so the marginal cost of staying current is a checksum pass over your existing BIOS folder rather than a fresh download of several gigabytes.

The RetroPie row carries an asterisk worth reading. The README marks it archived in the sense that the configuration is kept and packs are still built, but upstream is no longer scraped on a schedule. If RetroPie is your platform, its coverage numbers will drift from upstream over time while the pack continues to build.

For anyone modifying the project rather than consuming it, pyproject.toml splits the dependencies cleanly. Runtime needs pyyaml only. The dev extra pulls jsonschema for the schema validation scripts and the CI contract check. The docs extra pins mkdocs-material to a range and adds pymdown-extensions, because the site build was previously an undeclared requirement of deploy-site.yml. The Python floor is 3.8 for install.py, but the build scripts under scripts/ require 3.12, which is what CI pins and what a contributor needs to run the pipeline or the test suite.

Editorial conclusion

Adopt RetroBIOS if you run one of the twelve supported platforms and want a checksum-verified BIOS set instead of a folder of files from a forum thread. Do not adopt it if you need files it explicitly lists as unsourceable, such as per-user keys and user-filled slots, or if you expect the pack to satisfy a licence you do not hold. Before extracting anything, read the Coverage table for your platform and the gap analysis page, because a fraction like 1,206/1,224 on Lakka tells you exactly how many files its emulators load are still missing.

Frequently asked questions

Do I need a BIOS for RetroArch?

It depends on the core. RetroBIOS documents that its RetroArch pack covers 530/530 files on RetroArch's own BIOS list and 1,206/1,224 files its emulators load, so some cores need a file and some do not. The Coverage table shows RetroArch checks files by filename presence only.

Where can I get RetroArch BIOS files?

The README points to the releases page, where each platform has a pack that extracts to the platform's BIOS path. For RetroArch that path is system/. The installer script does the same file by file and downloads only what is missing.

How do I use RetroBIOS?

Either run the one-line installer for your operating system, which auto-detects the platform and verifies checksums, or download the ZIP for your platform from the releases page and extract it to the path listed in the README's platform table. The handheld case takes --platform and --dest arguments to target an SD card.

Is RetroBIOS safe?

Every release ships SHA256SUMS.txt and a detached signature checkable against allowed_signers in the repository, and the installer verifies checksums. The project's own coverage data still lists six files that are to be found and 21 that cannot be sourced at all, which is a completeness limit rather than a safety one.

Where are RetroArch BIOS files located on iOS?

The README does not document an iOS path or an iOS installation route. It lists Linux, macOS, Steam Deck, Windows, Android under Termux, and handhelds with an SD card mounted on a PC.

Official sources

  1. Abdess/retrobios on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/abdess-retrobios.svg)](https://hysenlabs.com/projects/abdess-retrobios)