Files
libretro/platforms/_registry.yml
T
Abdessamad Derraz 01ca625378 feat: rescrape retrobat at its pinned commit
The scraper read emulatorLauncher master on every run, so an extractor
change was diffed together with upstream's commits since the pin. It now
rereads the commit platforms/retrobat.yml pins. --revision master moves
it, and check_freshness and refresh_stale pass that through the
registry's rescrape_args.

The extractors also read master (f681f435): Kronos and YabaSanshiro
fall back to sega_101.bin then mpr-17933.bin when the chosen BIOS is
absent, Ymir writes a forced BIOS only under its override flag, and a
folder created below bios (Ymir's cdb) is a passes_path record. At the
pin the 187 records are unchanged.
2026-11-11 11:40:05 +01:00

1178 lines
47 KiB
YAML

# Shared by every platform below: same files, same destinations.
_standalone_copies: &standalone_copies
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.var/app/dev.eden_emu.eden/data/eden/keys
- $HOME/.config/Ryujinx/system
- $HOME/.var/app/io.github.ryubing.Ryujinx/config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.var/app/dev.eden_emu.eden/data/eden/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar-emu/sysdata
- $HOME/.var/app/org.azahar_emu.Azahar/data/azahar-emu/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# common_paths.h:36,61 (azahar 987f1840).
darwin:
- $HOME/Library/Application Support/Azahar/sysdata
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar-emu/sysdata
- $HOME/.var/app/org.azahar_emu.Azahar/data/azahar-emu/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# common_paths.h:36,61 (azahar 987f1840).
darwin:
- $HOME/Library/Application Support/Azahar/sysdata
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
- $HOME/.var/app/org.duckstation.DuckStation/config/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
emulator: pcsx2
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
- $HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
emulator: dolphin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
- $HOME/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
emulator: dolphin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
- $HOME/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
emulator: dolphin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
- $HOME/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
# User/GC, then Sys/GC (DSPLLE.cpp:106-113, libretro/dolphin 3aac3f05).
- file: dsp_rom.bin
emulator: dolphin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC
- $HOME/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC
windows:
- '%APPDATA%\Dolphin Emulator\GC'
darwin:
- $HOME/Library/Application Support/Dolphin/GC
# User/GC, then Sys/GC (DSPLLE.cpp:106-113, libretro/dolphin 3aac3f05).
- file: dsp_coef.bin
emulator: dolphin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC
- $HOME/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC
windows:
- '%APPDATA%\Dolphin Emulator\GC'
darwin:
- $HOME/Library/Application Support/Dolphin/GC
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
- $HOME/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
# Linux reads the data folder itself (core/linux-dist/main.cpp:74-97,
# core/stdclass.cpp:95-107, flycast e88b0ced). Windows reads data\ beside
# flycast.exe (core/windows/winmain.cpp:56-77), a folder no rule can name.
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast
- $HOME/.var/app/org.flycast.Flycast/data/flycast
# shell/apple/emulator-osx/emulator-osx/osx-main.mm:83-101 (flycast 6bb0fc3e).
darwin:
- $HOME/Library/Application Support/Flycast/data
# <home>/data/ (shell/android-studio/flycast/src/main/jni/src/Android.cpp:
# 143-159, flycast a9bd1c74), writable from Termux up to Android 10.
android:
- $EXTERNAL_STORAGE/Android/data/com.flycast.emulator/files/data
# Linux reads the data folder itself (core/linux-dist/main.cpp:74-97,
# core/stdclass.cpp:95-107, flycast e88b0ced). Windows reads data\ beside
# flycast.exe (core/windows/winmain.cpp:56-77), a folder no rule can name.
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast
- $HOME/.var/app/org.flycast.Flycast/data/flycast
# shell/apple/emulator-osx/emulator-osx/osx-main.mm:83-101 (flycast 6bb0fc3e).
darwin:
- $HOME/Library/Application Support/Flycast/data
# <home>/data/ (shell/android-studio/flycast/src/main/jni/src/Android.cpp:
# 143-159, flycast a9bd1c74), writable from Termux up to Android 10.
android:
- $EXTERNAL_STORAGE/Android/data/com.flycast.emulator/files/data
# release_pack: true marks the platforms a release publishes a ZIP for, the
# ones most people download (download_count of v2026.10.10, part 1 of each
# pack). Every other platform is served by the installer, whose manifest is
# written for all of them. wiki/release-process.md says how to revisit it.
platforms:
retroarch:
config: retroarch.yml
release_pack: true
device_group: computer
extract_to: system/
logo: https://raw.githubusercontent.com/libretro/RetroArch/master/media/retroarch-vector_invader-only.svg
scraper: libretro
source_url: https://raw.githubusercontent.com/libretro/libretro-database/master/dat/System.dat
source_format: clrmamepro_dat
hash_type: sha1
verification_mode: existence
base_destination: system
# The directory RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY returns
# (runloop.c:2699-2700, libretro/RetroArch a81e450c): savefile_directory,
# saves/ beside system/ by default (platform_unix.c:3364-3365,
# platform_win32.c:1343, platform_darwin.m:456), with the core's
# library_name appended since sort_savefiles_enable defaults to true
# (config.def.h:1099, runloop.c:11285-11293).
save_directory:
folder: saves
by_core: true
case_insensitive_fs: true
schedule: weekly
cores: all_libretro
target_scraper: retroarch_targets
target_source: https://buildbot.libretro.com/nightly/
install:
detect:
- os: linux
method: config_file
config: $HOME/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg
parse_key: system_directory
- os: linux
method: config_file
config: $HOME/snap/retroarch/current/.config/retroarch/retroarch.cfg
parse_key: system_directory
# Native: $XDG_CONFIG_HOME/retroarch when the variable is set, else
# $HOME/.config/retroarch, then $HOME/.retroarch.cfg when that file is
# missing (file_path_special.c fill_pathname_application_data,
# configuration.c open_default_config_file). A value left at default
# is the system folder of the first of the two folders.
- os: linux
method: config_file
config: $XDG_CONFIG_HOME/retroarch/retroarch.cfg
parse_key: system_directory
- os: linux
method: config_file
config: $HOME/.config/retroarch/retroarch.cfg
parse_key: system_directory
- os: linux
method: config_file
config: $HOME/.retroarch.cfg
parse_key: system_directory
# configuration.c reads <Application Support>/RetroArch/config, and a value
# left at default is ~/Documents/RetroArch/system (platform_darwin.m).
# Older builds kept the file one level up.
- os: darwin
method: config_file
config: $HOME/Library/Application Support/RetroArch/config/retroarch.cfg
parse_key: system_directory
bios_path: $HOME/Documents/RetroArch/system
- os: darwin
method: config_file
config: $HOME/Library/Application Support/RetroArch/retroarch.cfg
parse_key: system_directory
bios_path: $HOME/Documents/RetroArch/system
# Beside retroarch.exe first, then %APPDATA%; default <exe folder>\system.
# The folders its installers, Steam and ES-DE put it in.
- os: windows
method: config_file
config: 'C:\RetroArch-Win64\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: 'C:\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles%\RetroArch-Win64\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles%\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles%\ES-DE\Emulators\RetroArch-Win64\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles%\ES-DE\Emulators\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles(x86)%\RetroArch-Win64\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles(x86)%\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles(x86)%\ES-DE\Emulators\RetroArch-Win64\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles(x86)%\ES-DE\Emulators\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%APPDATA%\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles(x86)%\Steam\steamapps\common\RetroArch\retroarch.cfg'
parse_key: system_directory
- os: windows
method: config_file
config: '%ProgramFiles%\Steam\steamapps\common\RetroArch\retroarch.cfg'
parse_key: system_directory
# Handheld systems that run RetroArch as their frontend, each found by
# what its own build writes. A system built on another (derives_from)
# matches both and is the one meant.
# muOS: MustardOS/internal f41f4a89: retroarch.sh:8-20, bind.sh:4,116-150,
# retroarch.default.cfg:2806,3151. /mnt/mmc/MUOS is the older layout.
- os: linux
name: muOS
method: file_exists
file: /opt/muos
bios_path: /run/muos/storage/bios
config: [/opt/muos/share/info/config/retroarch.cfg, /opt/muos/share/emulator/retroarch/retroarch.default.cfg]
- os: linux
name: muOS
method: file_exists
file: /mnt/mmc/MUOS
bios_path: /mnt/mmc/MUOS/bios
# JELOS: JustEnoughLinuxOS/distribution 7b2e116c scripts/image:118-120,
# options:17, runemu.sh:37, RK3566/retroarch.cfg:716.
- os: linux
name: JELOS
method: os_release
match: [OS_NAME=JELOS]
bios_path: /storage/roms/bios
config: [/storage/.config/retroarch/retroarch.cfg]
home: /storage
# KOLOS: AnonLinuxOS/KOLOS 7daf5950: OS_NAME=JELOS kept, jelos-ready.service
# ("KOLOS system ready script") installed by scripts/install:100-102.
- os: linux
name: KOLOS
method: file_exists
file: /usr/lib/systemd/system/jelos-ready.service
bios_path: /storage/roms/bios
config: [/storage/.config/retroarch/retroarch.cfg]
home: /storage
derives_from: JELOS
# UnofficialOS: RetroGFX/UnofficialOS 22635796 scripts/image:119-120, options:17,
# packages/unofficialos/sources/scripts/runemu.sh:37.
- os: linux
name: UnofficialOS
method: os_release
match: [OS_NAME=UnofficialOS]
bios_path: /storage/roms/bios
config: [/storage/.config/retroarch/retroarch.cfg]
home: /storage
# ArchR: archr-linux/Arch-R dbd45d45 scripts/image:164-177, options:17,
# factoryreset:9-10, RK3326/retroarch.cfg:718.
- os: linux
name: ArchR
method: os_release
match: [OS_NAME=ArchR]
bios_path: /storage/roms/bios
config: [/storage/.config/retroarch/retroarch.cfg]
home: /storage
# ArkOS: christianhaitian/arkos dedf4278 Update-RGB10.sh:76 (splash title).
# Both configs move to /roms2 with "Switch to SD2 for Roms" (darkos
# daecf488, scripts/Switch to SD2 for Roms.sh:91-92).
- os: linux
name: ArkOS
method: file_exists
file: [/home/ark, /opt/system]
bios_path: /roms/bios
config: [/home/ark/.config/retroarch/retroarch.cfg, /home/ark/.config/retroarch32/retroarch.cfg]
- os: linux
name: ArkOS
method: file_matches
file: /usr/share/plymouth/themes/text.plymouth
pattern: '^title=\s*ArkOS\b'
bios_path: /roms/bios
config: [/home/ark/.config/retroarch/retroarch.cfg, /home/ark/.config/retroarch32/retroarch.cfg]
# dArkOS: christianhaitian/darkos daecf488 finishing_touches.sh:359-361,
# retroarch.cfg.rgb10:3043. The dArkOSRE, dArkOSen and ArkOS4Clone overlays
# keep the title.
- os: linux
name: dArkOS
method: file_matches
file: /usr/share/plymouth/themes/text.plymouth
pattern: '^title=\s*dArkOS'
bios_path: /roms/bios
config: [/home/ark/.config/retroarch/retroarch.cfg, /home/ark/.config/retroarch32/retroarch.cfg]
derives_from: ArkOS
# RetroOZ: RetroOZ 0.60 image: splash title, /opt/.retrooz/version,
# retroarch32/retroarch.cfg:3046. /etc/retrooz_version is the file PortMaster
# reads (PortMaster-GUI ccea6b74, PortMaster/device_info.txt:95).
- os: linux
name: RetroOZ
method: file_matches
file: /usr/share/plymouth/themes/text.plymouth
pattern: '^title=\s*RetroOZ'
bios_path: /roms/bios
config: [/home/odroid/.config/retroarch/retroarch.cfg, /home/odroid/.config/retroarch32/retroarch.cfg]
- os: linux
name: RetroOZ
method: file_exists
file: /opt/.retrooz
bios_path: /roms/bios
config: [/home/odroid/.config/retroarch/retroarch.cfg, /home/odroid/.config/retroarch32/retroarch.cfg]
- os: linux
name: RetroOZ
method: file_exists
file: /etc/retrooz_version
bios_path: /roms/bios
config: [/home/odroid/.config/retroarch/retroarch.cfg, /home/odroid/.config/retroarch32/retroarch.cfg]
# spruceOS: spruceOS 824b1aae spruce/scripts/helperFunctions.sh:157-165,
# RetroArch/platform/retroarch-Brick.cfg.bak:3279.
- os: linux
name: spruceOS
method: file_exists
file: /mnt/SDCARD/spruce
bios_path: /mnt/SDCARD/BIOS
config: ['/mnt/SDCARD/Saves/ra-configs/retroarch-*.cfg']
derives_from: TrimUI
# CrossMix-OS: cizia64/CrossMix-OS 206d612f System/usr/trimui/scripts/
# update_common.sh:20, patch_ra_cfg.sh:5, RetroArch/retroarch.cfg:3202.
- os: linux
name: CrossMix-OS
method: file_exists
file: /mnt/SDCARD/System/usr/trimui/crossmix-version.txt
bios_path: /mnt/SDCARD/BIOS
config: [/mnt/SDCARD/RetroArch/retroarch.cfg]
derives_from: TrimUI
# Onion: OnionUI/Onion 07505ea5 Makefile:75-76,
# .tmp_update/script/patch_ra_cfg.sh:6, retroarch.cfg:3009.
- os: linux
name: Onion
method: file_exists
file: /mnt/SDCARD/.tmp_update/onionVersion/version.txt
bios_path: /mnt/SDCARD/BIOS
config: [/mnt/SDCARD/RetroArch/.retroarch/retroarch.cfg]
# Allium: goweiwen/Allium ee0dda97 crates/common/src/constants.rs:19-34,
# launch_without_savestate_auto_load.sh:2-7. Its RetroArch patch makes
# $ROOT/BIOS the default system folder.
- os: linux
name: Allium
method: file_exists
file: /mnt/SDCARD/.allium
bios_path: /mnt/SDCARD/BIOS
config: [/mnt/SDCARD/RetroArch/.retroarch/retroarch.cfg]
# Koriki: Rparadise-Team/Koriki 8513071c src/systemInfo/main.c:106,
# .tmp_update/runtime.sh:271, RetroArch/.retroarch/retroarch.cfg:3191.
- os: linux
name: Koriki
method: file_exists
file: /mnt/SDCARD/Koriki/version.txt
bios_path: /mnt/SDCARD/BIOS
config: [/mnt/SDCARD/RetroArch/.retroarch/retroarch.cfg]
# MiyooCFW: MiyooCFW buildroot d5912eeb board/miyoo/rootfs/etc/main:4 (HOME),
# package/miyoo/miyoo-ctl/miyoo-ctl.mk:12. DINGUX RetroArch defaults to
# $HOME/.retroarch/system.
- os: linux
name: MiyooCFW
method: file_exists
file: [/etc/main, /usr/bin/miyooctl]
bios_path: /mnt/.retroarch/system
config: [/mnt/.retroarch/retroarch.cfg]
home: /mnt
# plumOS: game-de-it/plumOS-pixel2_v2 dec872c0 rootfs/pixel2/etc/os-release:2,
# sbin/init:29, plumos-retroarch-launch:342. Other plumOS builds append a
# folder of their own at launch (plumOS-MF 0095017c,
# plumos-retroarch-launch:15): found, not installed to.
- os: linux
name: plumOS
method: file_exists
file: /mnt/plumos-user
bios_path: /mnt/plumos-user/bios
- os: linux
name: plumOS
method: os_release
match: [ID=plumos]
# TrimUI: the stock firmware publishes no source naming its BIOS folder.
# /usr/trimui is where PortMaster finds its libraries
# (trimui/launch_hooks.txt:37). Found so that what runs on it is told
# apart, never installed to.
- os: linux
name: TrimUI
method: file_exists
file: /usr/trimui
installs: false
# MinUI: MinUI dbf89435 workspace/all/common/defines.h:14-16, minarch.c:2942.
# One Bios/<tag>/ folder per core, not written by the installer.
- os: linux
name: MinUI
method: file_exists
file: /mnt/SDCARD/.system/res
installs: false
derives_from: TrimUI
- os: linux
name: MinUI
method: file_exists
file: /mnt/sdcard/.system/res
installs: false
derives_from: TrimUI
# Anbernic stock firmware: the stock Linux of Anbernic devices.
- os: linux
name: 'Anbernic stock firmware'
method: file_exists
file: /mnt/vendor/bin/dmenu.bin
bios_path: /mnt/mmc/bios
standalone_copies: *standalone_copies
batocera:
config: batocera.yml
release_pack: true
device_group: gaming-os
extract_to: /userdata/bios/
logo: https://raw.githubusercontent.com/batocera-linux/batocera-emulationstation/master/resources/splash_batocera.svg
scraper: batocera
source_url: https://raw.githubusercontent.com/batocera-linux/batocera.linux/master/package/batocera/core/batocera-scripts/scripts/batocera-systems
source_format: python_dict
hash_type: md5
# configgen hands each libretro core /userdata/saves/<system> at every
# launch, with sort_savefiles_enable off (package/batocera/core/
# batocera-configgen/configgen/configgen/generators/libretro/
# libretroConfig.py:225-228 and batoceraPaths.py:22 at batocera-43.1).
# <system> is the ES system name (Emulator.py:119, args.system), so a
# file is placed once below each system es_systems.yml offers the core
# for (libretro_systems in batocera.yml). The pack keeps them in
# userdata-saves/: batocera-systems lists bios/saves/dolphin-emu/
# Triforce/segaboot.gcm, so saves/ already belongs to the BIOS tree.
save_directory:
folder: saves
by_core: false
by_system: true
pack_folder: userdata-saves
schedule: weekly
target_scraper: batocera_targets
target_source: https://github.com/batocera-linux/batocera.linux
install:
detect:
# batocera.linux 38845725, package/batocera/core/batocera-system/
# batocera-system.mk:21-22 writes batocera.arch and batocera.version.
- os: linux
name: Batocera
method: file_exists
file: /usr/share/batocera/batocera.version
bios_path: /userdata/bios
standalone_copies: *standalone_copies
recalbox:
config: recalbox.yml
device_group: gaming-os
extract_to: /recalbox/share/bios/
logo: https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main/svg/recalbox.svg
scraper: recalbox
source_url: https://gitlab.com/recalbox/recalbox/-/raw/master/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/es_bios.xml
source_format: xml
hash_type: md5
# Bios.cpp:64-68 hashes a .zip with Zip::Md5Composite, never its bytes
zip_digest: composite
# configgen hands each libretro core /recalbox/share/saves/<system> at
# every launch, with sort_savefiles_enable off (projects/configgen/
# configgen/generators/libretro/libretroRetroarch.py:338, 347-348 and
# 419-420, recalboxFiles.py:84 at 10.1.1). <system> is the name the
# system.ini gives, so a file is placed once below each system offering
# the core (libretro_systems in recalbox.yml).
save_directory:
folder: saves
by_core: false
by_system: true
schedule: monthly
target_scraper: recalbox_targets
target_source: https://gitlab.com/recalbox/recalbox/-/tree/master/configs
install:
detect:
- os: linux
name: Recalbox
method: file_exists
file: /recalbox/recalbox.version
bios_path: /recalbox/share/bios
- os: linux
name: Recalbox
method: file_exists
file: /usr/bin/recalbox-settings
bios_path: /recalbox/share/bios
standalone_copies: *standalone_copies
retrobat:
config: retrobat.yml
release_pack: true
device_group: computer
extract_to: bios/
logo: https://raw.githubusercontent.com/RetroBat-Official/retrobat/main/system/resources/retrobat_logo_notext.png
scraper: retrobat
# The scraper rereads the emulatorLauncher commit retrobat.yml pins;
# check_freshness and refresh_stale move it to the branch head.
rescrape_args: ["--revision", "master"]
source_url: https://raw.githubusercontent.com/RetroBat-Official/emulatorlauncher/master/batocera-systems/Resources/batocera-systems.json
source_format: json
hash_type: md5
# Windows: names differing only by case land on one file.
case_insensitive_fs: true
# A generator takes an emulator folder from AppConfig.GetFullPath(key):
# the key in emulatorLauncher.cfg, else the first existing of
# emulationstation/<key>, emulators/<key>, system/emulators/<key> and
# system/<key> below the RetroBat folder (EmulatorLauncher.Common/
# FileFormats/ConfigFile.cs:126-180 at ca486005). emulatorLauncher runs
# from emulationstation/, its LocalPath (emulatorLauncher/Program.cs:536-537),
# beside bios/.
emulators_directory:
launcher_spelling: '<AppConfig.GetFullPath("{key}")>'
bios_folder: bios
searched:
- "emulationstation/{key}"
- "emulators/{key}"
- "system/emulators/{key}"
- "system/{key}"
default: "emulators/{key}"
config: emulationstation/emulatorLauncher.cfg
# emulatorLauncher hands each libretro core saves\<system> at every
# launch, saves\ beside bios\ (emulatorLauncher.cfg in retrobat 8.3.1),
# and sorts saves by core for dolphin alone (CoreSaveSort)
# (emulatorLauncher/Generators/LibRetro.Generator.cs:1128-1132, 1304-1315
# and 2707 at 48cdc616). <system> is the ES system name, so a file is
# placed once below each system es_systems.cfg offers the core for
# (libretro_systems in retrobat.yml). mame (saves\) and amiberry
# (saves\<system>\LR-amiberry) differ, and neither profile has a file
# read below the save directory.
save_directory:
folder: saves
by_core: false
by_system: true
by_core_for: [dolphin]
schedule: weekly
target_scraper: null
target_source: null
install:
detect:
# RetroBat.exe writes its own folder there on every start, wherever it
# was installed (retrobat-executable 702da66a,
# RetroBat/RetroBat/Program.cs:57 and 99, RegistryTools.cs:15-50).
- os: windows
method: registry
key: 'HKCU\SOFTWARE\RetroBat'
value: LatestKnownInstallPath
bios_subdir: bios
# installer.iss: DefaultDirName=C:\RetroBat, the first place to look.
- os: windows
method: path_exists
path: 'C:\RetroBat\bios'
- os: windows
method: path_exists
path: '%USERPROFILE%\RetroBat\bios'
standalone_copies: *standalone_copies
emudeck:
config: emudeck.yml
release_pack: true
device_group: computer
extract_to: ~/Emulation/bios/
logo: https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/icons/EmuDeck.png
scraper: emudeck
source_url: https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/functions/checkBIOS.sh
source_wiki: https://raw.githubusercontent.com/EmuDeck/emudeck.github.io/main/docs/tables/
source_format: bash_script+csv
hash_type: md5
# Windows: names differing only by case land on one file.
case_insensitive_fs: true
# RetroArch_setupSaves points savefile_directory at
# $savesPath/retroarch/saves (functions/EmuScripts/emuDeckRetroArch.sh:236
# at dddb3022), savesPath ~/Emulation/saves beside biosPath
# ~/Emulation/bios (functions/helperFunctions.sh:347-348). The shipped
# retroarch.cfg turns savefiles_in_content_dir and both sort options off
# (configs/org.libretro.RetroArch/config/retroarch/retroarch.cfg:3135,
# 3176-3177): one folder for every core.
save_directory:
folder: saves/retroarch/saves
by_core: false
schedule: weekly
target_scraper: emudeck_targets
target_source: https://github.com/dragoonDorise/EmuDeck
install:
detect:
- os: linux
method: config_file
config: $HOME/.config/EmuDeck/settings.sh
parse_key: emulationPath
bios_subdir: bios
- os: linux
method: path_exists
path: $HOME/Emulation/bios
# functions/all.sh:3-4,24 and vars.sh:2 (EmuDeck dddb3022): the macOS
# build reads the same settings.sh, emulationPath=~/Emulation by
# default (settings.sh:79).
- os: darwin
method: config_file
config: $HOME/.config/EmuDeck/settings.sh
parse_key: emulationPath
bios_subdir: bios
- os: darwin
method: path_exists
path: $HOME/Emulation/bios
# functions/all.ps1:4-14 (emudeck-we 037460ef): the APPDATA settings,
# else the profile ones, and C:\Emulation when neither names a folder.
- os: windows
method: config_file
config: '%APPDATA%\EmuDeck\settings.ps1'
parse_key: $emulationPath
bios_subdir: bios
- os: windows
method: config_file
config: '%USERPROFILE%\EmuDeck\settings.ps1'
parse_key: $emulationPath
bios_subdir: bios
standalone_copies: *standalone_copies
lakka:
config: lakka.yml
device_group: gaming-os
extract_to: /storage/system/
logo: https://raw.githubusercontent.com/libretro/retroarch-assets/master/src/xmb/flatui/lakka.svg
scraper: libretro
inherits_from: retroarch
cores: all_libretro
# Lakka's retroarch.cfg sets savefile_directory to /storage/savefiles,
# beside /storage/system, and sorts saves by core
# (packages/lakka/retroarch_base/retroarch/config/retroarch.cfg:3164-3165
# and 3206-3207, libretro/Lakka-LibreELEC cc3bf85d).
save_directory:
folder: savefiles
by_core: true
# Lakka is a Linux distribution: two names that differ by case are two
# files there, not the one RetroArch's Windows and macOS builds see.
case_insensitive_fs: false
schedule: weekly
# Lakka builds its cores per device image: libretro_cores/package.mk
# excludes cores by PROJECT, DEVICE and OpenGL ES.
target_scraper: lakka_targets
target_source: https://github.com/libretro/Lakka-LibreELEC/blob/master/packages/lakka/libretro_cores/package.mk
install:
detect:
- os: linux
name: Lakka
method: os_release
match: [ID=lakka]
bios_path: /storage/system
retrodeck:
config: retrodeck.yml
device_group: computer
extract_to: ~/retrodeck/
logo: https://raw.githubusercontent.com/RetroDECK/RetroDECK/main/res/icon.svg
scraper: retrodeck
source_url: https://github.com/RetroDECK/components
source_format: github_component_manifests
hash_type: md5
# savefile_directory is $saves_path, ~/retrodeck/saves beside
# ~/retrodeck/bios (retroarch/component_prepare.sh:27 and 44 at
# components fcd0d729), and RetroArch sorts saves by content, not by
# core (retroarch/rd_assets/rd_config/retroarch.cfg:3233-3234 and
# 3275-3276). RetroArch 1.22.2 appends the name of the folder holding
# the ROM (runloop.c:8205-8209 and 8249-8258 at 69a4f0ea): saves/<ROM
# folder> for a ROM at the top of its system folder, the folder of each
# system whose ES-DE command loads the core (libretro_systems in
# retrodeck.yml, from RetroDECK/ES-DE resources/systems/linux/
# es_systems.xml at 15e1b236, the release RetroDECK takes as latest).
save_directory:
folder: saves
by_core: false
by_system: true
schedule: monthly
contributed_by:
- username: monster-penguin
contribution: platform support
pr: 36
target_scraper: null
target_source: null
install:
detect:
# retrodeck.json since the cfg-to-json migration (global.sh:149-153),
# retrodeck.cfg before it. A home moved to an SD card lives only there.
- os: linux
method: config_file
config: $HOME/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.json
parse_key: paths.rd_home_path
bios_path: $HOME/retrodeck
- os: linux
method: config_file
config: $HOME/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg
parse_key: rdhome
bios_path: $HOME/retrodeck
- os: linux
method: path_exists
path: $HOME/.var/app/net.retrodeck.retrodeck
bios_path: $HOME/retrodeck
standalone_copies: *standalone_copies
romm:
config: romm.yml
release_pack: true
device_group: server
extract_to: library/bios/
logo: https://avatars.githubusercontent.com/u/164058018
scraper: romm
source_url: https://raw.githubusercontent.com/rommapp/romm/master/backend/models/fixtures/known_bios_files.json
source_format: json
hash_type: sha1
# Cores run in the browser through EmulatorJS: the save file lives in
# the Emscripten filesystem and goes through RomM's save API
# (frontend/src/views/Player/EmulatorJS/utils.ts:409-426 at 5.4.0).
# Nothing a user installs reaches it.
save_directory: null
schedule: monthly
contributed_by:
- username: PixNyb
contribution: platform support
pr: 37
inherits_from: emulatorjs
# RomM lists a firmware folder without descending into it
# (backend/handler/filesystem/base_handler.py:1002, recursive=False), and
# EmulatorJS writes the chosen file, or each member of a zip, under its
# bare name (data/src/emulator.js:713-722). A file below the platform
# folder never reaches a core.
firmware_folder_flat: true
target_scraper: null
target_source: null
install:
detect:
- os: linux
method: path_exists
path: /romm/library/bios
# RomM 5.4 places firmware by filesystem.structure.firmware in this
# file, relative to /romm/library (rommapp/romm 5.4.0,
# backend/config/config_manager.py:58,101-109,264-265,564-568): a
# {platform}/bios library has no library/bios to find.
- os: linux
method: path_exists
path: /romm/config/config.yml
bios_path: /romm/library/bios
cores:
- atari800
- clk
- directxbox
- dolphin
- dolphin_launcher
- ecwolf
- ep128emu
- ep128emu_core
- freej2me
- hatari
- ishiiruka
- lrps2
- minivmac
- nekop2
- np2kai
- o2em
- pcsx2
- play
- pokemini
- primehack
- px68k
- scummvm
- squirreljme
- x1
- xemu
rocknix:
config: rocknix.yml
device_group: handheld
extract_to: /storage/roms/bios/
logo: https://avatars.githubusercontent.com/u/163176886
scraper: rocknix
# Every device's retroarch.cfg sets savefiles_in_content_dir (for
# instance projects/ROCKNIX/packages/emulators/libretro/retroarch/
# sources/RK3566/retroarch.cfg:664-665 at 20261001) and setsettings.sh
# leaves it: saves sit beside each game, no single place.
save_directory: null
schedule: weekly
target_scraper: rocknix_targets
target_source: https://github.com/ROCKNIX/distribution/blob/next/projects/ROCKNIX/packages/virtual/emulators/package.mk
install:
detect:
- os: linux
name: ROCKNIX
method: os_release
match: [OS_NAME=rocknix, ID=rocknix]
bios_path: /storage/roms/bios
# AmberELEC's checker (batocera-systems) md5s each file under /storage/roms,
# where its list also names neogeo/neogeo.zip and neogeo/aes.zip: the pack
# is extracted there, not into bios/. EmulationStation's BIOS screen runs
# it (ApiSystem.cpp:603-613 at e3846751). The launch-failure check in
# 99-distribution.conf:320 passes --strictfilter, an argument the script
# does not handle, so that path reports nothing. No release since
# 20230203: the scraper reads the commit of the newest prerelease.
amberelec:
config: amberelec.yml
device_group: handheld
extract_to: /storage/roms/
logo: https://avatars.githubusercontent.com/u/102820909
scraper: amberelec
source_url: https://github.com/AmberELEC/AmberELEC/blob/dev/packages/amberelec/sources/scripts/batocera-systems
source_format: python_dict
hash_type: md5
# retroarch.cfg sets savefiles_in_content_dir (packages/games/tools/
# retroarch/sources/retroarch.cfg:567-568 at a21975bf) and
# setsettings.py leaves it: saves sit beside each game, no single place.
save_directory: null
schedule: monthly
target_scraper: amberelec_targets
target_source: https://github.com/AmberELEC/AmberELEC/blob/dev/packages/amberelec/package.mk
install:
detect:
# AmberELEC 5a3882cb scripts/image:150-152, options:17. CHAos
# (tech4bot/AmberELEC c0a4b0c6) writes the same name. Its list is
# written against /storage/roms (bios/, ports/, neogeo/ side by side).
- os: linux
name: AmberELEC
method: os_release
match: [NAME=AmberELEC]
bios_path: /storage/roms
# PAN4ELEC: Kegg1701/P4ELEC 9c19bfb2, AmberELEC/usr/bin/batocera-info:101.
- os: linux
name: PAN4ELEC
method: file_matches
file: /usr/bin/batocera-info
pattern: 'OPERATING SYSTEM: PAN4ELEC'
bios_path: /storage/roms
derives_from: AmberELEC
# EmuELEC's checker md5s each file under /storage/roms and never reads
# zippedFile: its FM Towns entries hash the whole archive against a
# member's md5 and report UNTESTED whatever the archive holds. Run by
# EmulationStation's BIOS screen and by ee_check_bios after a failed
# launch (99-emuelec.conf:261). naomi and Dinothawr are written twice in
# the dict and the later entry is the one Python keeps. One image per
# device the release publishes, its cores read by emuelec_targets_scraper.
emuelec:
config: emuelec.yml
device_group: handheld
extract_to: /storage/roms/
logo: https://avatars.githubusercontent.com/u/57574835
scraper: emuelec
source_url: https://github.com/EmuELEC/EmuELEC/blob/master/packages/sx05re/emuelec/bin/batocera/batocera-systems
source_format: python_dict
hash_type: md5
# savefile_directory stays commented out (packages/sx05re/libretro_base/
# retroarch/package.mk:115 at v4.8) and setsettings.sh never sets it, so
# RetroArch saves beside each game: no single place.
save_directory: null
# root's home, which every launcher script gets from /etc/profile
# (packages/sysutils/busybox/package.mk:168 and
# packages/sysutils/busybox/profile.d/98-busybox.conf:4 at v4.8).
home_directory: /storage
schedule: monthly
target_scraper: emuelec_targets
target_source: https://github.com/EmuELEC/EmuELEC/blob/dev/packages/sx05re/emuelec/package.mk
install:
detect:
# EmuELEC d4c7b2f1 scripts/image:172-176, options:4.
- os: linux
name: EmuELEC
method: os_release
match: [NAME=EmuELEC]
bios_path: /storage/roms
# KNULLI's knulli-systems is its own fork of Batocera's list, checked the
# same way (md5, checkInsideZip, emulator/core gates) by its
# EmulationStation (knulli-cfw/batocera-emulationstation 10834d00,
# ApiSystem.cpp:764-774). Arch R (archr-linux/Arch-R dbd45d45) ships the
# same dict as archr-systems: lines 1-870 are identical, only the prefix
# (/storage/roms instead of /userdata) and the es_systems.cfg path differ.
# Boards follow Batocera's Kconfig model (configs/knulli-*.board set
# BR2_PACKAGE_BATOCERA_TARGET_*), read by knulli_targets_scraper.
knulli:
config: knulli.yml
device_group: handheld
extract_to: /userdata/bios/
logo: https://avatars.githubusercontent.com/u/166268572
scraper: knulli
source_url: https://github.com/knulli-cfw/knulli-linux/blob/knulli-main/package/system/knulli-scripts/scripts/knulli-systems
source_format: python_dict
hash_type: md5
# configgen hands each libretro core /userdata/saves/<system> at every
# launch, with sort_savefiles_enable off (package/system/knulli-configgen/
# configgen/configgen/generators/libretro/libretroConfig.py:240-243 and
# batoceraPaths.py:22 at 20260511), as Batocera's does: a file is placed
# once below each system es_systems.yml offers the core for
# (libretro_systems in knulli.yml).
save_directory:
folder: saves
by_core: false
by_system: true
schedule: monthly
target_scraper: knulli_targets
target_source: https://github.com/knulli-cfw/knulli-linux/tree/knulli-main/configs
install:
detect:
# knulli-linux 57afa662: OS_NAME in os-release
# (board/scripts/post-build-script.sh:233-236) and knulli.version
# (package/system/knulli-system/knulli-system.mk:98-102).
- os: linux
name: KNULLI
method: os_release
match: [OS_NAME=knulli]
bios_path: /userdata/bios
derives_from: Batocera
- os: linux
name: KNULLI
method: file_exists
file: /usr/share/knulli/knulli.version
bios_path: /userdata/bios
derives_from: Batocera
retropie:
config: retropie.yml
device_group: gaming-os
extract_to: ~/RetroPie/BIOS/
logo: https://avatars.githubusercontent.com/u/11378204
scraper: retropie
source: https://github.com/RetroPie/RetroPie-Setup
# No cores here: the registry overrides the config, and RetroPie's own
# scriptmodules are what say which packages it ships.
# RetroPie runs on Linux, where case tells two files apart.
case_insensitive_fs: false
# Not RetroArch's: RetroPie sets no savefile_directory and turns
# sort_savefiles_enable off (scriptmodules/emulators/retroarch.sh:289-290,
# RetroPie-Setup 46128cd2), and its RetroArch (retropie-v1.19.0) has no
# default save directory on Linux (frontend/drivers/platform_unix.c sets
# DEFAULT_DIR_SRAM only at 1624-1626, for Android). The save directory is
# then the folder of the loaded content (runloop.c runloop_path_set_redirect),
# one per game: a file read below it has no single place.
save_directory: null
schedule: null
target_scraper: retropie_targets
target_source: https://retropie.org.uk/stats/pkgflags/
install:
detect:
- os: linux
method: path_exists
path: $HOME/RetroPie/BIOS
bizhawk:
config: bizhawk.yml
device_group: computer
extract_to: Firmware/
# EmuHawk's application icon (<ApplicationIcon> in BizHawk.Client.EmuHawk.csproj).
logo: https://raw.githubusercontent.com/TASEmulators/BizHawk/master/src/BizHawk.Client.EmuHawk/images/logo.ico
scraper: bizhawk
source_url: https://raw.githubusercontent.com/TASEmulators/BizHawk/master/src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs
source_format: csharp_firmware_database
hash_type: sha1
# Windows: names differing only by case land on one file.
case_insensitive_fs: true
schedule: monthly
# EmuHawk finds firmware by SHA1 against FirmwareDatabase.FirmwareRecords
# and its cores are its own builds (CoreNames.cs): no libretro profile
# describes what it reads, so the database alone decides, as MiSTer's
# BiosDB does. emulators/bizhawk.yml also documents the options the scan
# never takes, so it is not listed here, and --region, --one-per-slot
# and --no-game-data are refused for this platform.
cores: []
target_scraper: null
target_source: null
install:
detect:
# A portable archive reading <EmuHawk folder>/Firmware wherever it was
# extracted (PathExtensions.cs DataDirectoryPath): found by its
# executable in the home folder or one level down, the newest first.
- os: windows
method: path_exists
path: '%USERPROFILE%\BizHawk\Firmware'
- os: linux
method: executable
file: [$HOME/BizHawk*/EmuHawkMono.sh, $HOME/*/BizHawk*/EmuHawkMono.sh]
bios_subdir: Firmware
- os: windows
method: executable
file: ['%USERPROFILE%\BizHawk*\EmuHawk.exe', '%USERPROFILE%\*\BizHawk*\EmuHawk.exe']
bios_subdir: Firmware
misterfpga:
config: misterfpga.yml
release_pack: true
device_group: fpga
extract_to: /media/fat/games/
logo: https://avatars.githubusercontent.com/u/29345272
scraper: misterfpga
source_url: https://raw.githubusercontent.com/ajgowans/BiosDB_MiSTer/db/bios_db.json.zip
source_format: mister_downloader_db
hash_type: md5
schedule: weekly
cores: []
target_scraper: null
target_source: null
contributed_by:
- username: Takiiiiiiii
contribution: platform support
pr: 50
install:
detect:
# Main_MiSTer mounts the SD card at /media/fat (file_io.cpp:1150-1156)
# and reads game data from GAMES_DIR (file_io.h:168)
- os: linux
method: path_exists
path: /media/fat/MiSTer
bios_path: /media/fat/games
minui:
config: minui.yml
device_group: handheld
# The card root: minarch hands each core SDCARD_PATH/Bios/<TAG>
# (workspace/all/minarch/minarch.c:2943).
extract_to: <SD card>/
# The boot logo MinUI writes to the m17's screen, rows stored bottom up.
logo: https://raw.githubusercontent.com/shauninman/MinUI/7c8b818e869302780c4083b8a9d6309b6d4a9ccd/skeleton/EXTRAS/Tools/m17/Bootlogo.pak/logo.bmp
logo_flip: true
logo_trim: true
scraper: minui
# minarch hands each core a folder and names no file (workspace/all/minarch/minarch.c:2943):
# there is no BIOS list of its own to export corrected.
native_list: none
source_url: https://github.com/shauninman/MinUI
source_format: pak_launch_scripts
hash_type: sha1
# The primary card is formatted FAT32 (skeleton/BASE/README.txt:15).
case_insensitive_fs: true
schedule: null
target_scraper: null
target_source: null
install:
detect:
# The release zip holds the build's SYSTEM tree as .system/ at the card
# root with version.txt, whose first line is the release name
# (makefile:22-24, 152-157). The installer runs on the computer the
# card is mounted on and reads it from --dest.
- os: any
method: card_marker
file: .system/version.txt
first_line_prefix: MinUI-
nextui:
config: nextui.yml
device_group: handheld
# minarch hands each core SDCARD_PATH/Bios/<TAG>
# (workspace/all/minarch/ma_core.c:76).
extract_to: <SD card>/
logo: https://avatars.githubusercontent.com/u/202386615
scraper: nextui
# minarch hands each core a folder and names no file (workspace/all/minarch/ma_core.c:76):
# there is no BIOS list of its own to export corrected.
native_list: none
source_url: https://github.com/LoveRetro/NextUI
source_format: pak_launch_scripts
hash_type: sha1
# The primary card is formatted FAT32 (skeleton/BASE/README.txt:17).
case_insensitive_fs: true
schedule: null
target_scraper: null
target_source: null
install:
detect:
# makefile:33-35 and 249: version.txt in .system/, first line the
# release name.
- os: any
method: card_marker
file: .system/version.txt
first_line_prefix: NextUI-
myminui:
config: myminui.yml
device_group: handheld
# minarch hands each core SDCARD_PATH/Bios/<TAG>
# (workspace/all/minarch/minarch.c:3532).
extract_to: <SD card>/
# The boot screen MyMinUI shows on H700 handhelds.
logo: https://raw.githubusercontent.com/Turro75/MyMinUI/d5ab4f9f83280f4316cb070c529299cb81ccc473/workspace/h700/boot/bootlogo.png
logo_trim: true
scraper: myminui
# minarch hands each core a folder and names no file (workspace/all/minarch/minarch.c:3532):
# there is no BIOS list of its own to export corrected.
native_list: none
source_url: https://github.com/Turro75/MyMinUI
source_format: pak_launch_scripts
hash_type: sha1
# The card is formatted FAT32 (MANUAL.md:13).
case_insensitive_fs: true
schedule: null
target_scraper: null
target_source: null
install:
detect:
# makefile:16-19 and 124: version.txt in .system/, first line the
# release name.
- os: any
method: card_marker
file: .system/version.txt
first_line_prefix: MyMinUI-