Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Add RetroDECK Platform Support#36

Merged
Abdess merged 3 commits into
Abdess:mainfrom
monster-penguin:main
Mar 19, 2026
Merged

Add RetroDECK Platform Support#36
Abdess merged 3 commits into
Abdess:mainfrom
monster-penguin:main

Conversation

@monster-penguin
Copy link
Copy Markdown
Contributor

Add RetroDECK platform support

What this PR adds

A new platform configuration for RetroDECK — a Flatpak-based all-in-one retrogaming platform for Steam Deck and Linux desktops. This PR introduces:

  • platforms/retrodeck.yml — BIOS declarations for all RetroDECK components
  • scripts/scraper/retrodeck_scraper.py — automated scraper to regenerate the platform config from upstream
  • A retrodeck entry in platforms/_registry.yml

Source architecture

RetroDECK's BIOS requirements are declared in component_manifest.json files, one per emulator component. These are distributed as individual .tar.gz release assets from the RetroDECK/components repository (a separate repo from the main RetroDECK/RetroDECK application).

The scraper uses GitHub's releases API to enumerate all .tar.gz assets in the latest components release, then streams each tarball to extract only the component_manifest.json — no full downloads required. It also supports a --manifests-dir flag for use against a local RetroDECK install, which is useful for verification and development.

Design decisions

base_destination: bios — Standard. RetroDECK's primary BIOS directory is ~/retrodeck/bios/.

$roms_path entries — A small number of BIOS files (e.g. neogeo.zip) live in RetroDECK's roms/ folder rather than bios/. These are included with a roms/ prefix in their destination field, consistent with Batocera's convention of encoding the real filesystem path in the destination string (e.g. saves/dolphin-emu/Triforce/segaboot.gcm).

$saves_path entries — Excluded. These are empty directory placeholders for memory card locations (Dolphin GC memory cards etc.), not BIOS files.

schedule: monthly — RetroDECK releases components on an approximately monthly cadence, slower than RetroArch or Batocera.

System slug mapping — RetroDECK uses its own system ID scheme. The scraper contains a SYSTEM_SLUG_MAP dict that maps all known RetroDECK IDs to retrobios slugs. Unknown IDs pass through unchanged. Two IDs (wii, atari2600) have no corresponding retrobios slug yet as neither system requires a BIOS file in any existing platform config — if RetroDECK manifests declare BIOS entries for them they will appear with the passthrough ID.

Data directories

RetroDECK uses the same libretro cores as RetroArch for Dolphin, PPSSPP, and blueMSX. The destination paths for their data_directories entries need verification against a live RetroDECK install before being added — it's possible they match the RetroArch destinations exactly (dolphin-emu/Sys, PPSSPP, Databases, Machines), but this should be confirmed. This is noted as a TODO in platforms/retrodeck.yml.

How to update

The platform config regenerates automatically once the scraper is wired into watch.yml. To add it, append the following block to the regeneration step in .github/workflows/watch.yml:

from scraper.retrodeck_scraper import Scraper as RDS
config = RDS().generate_platform_yaml()
with open('platforms/retrodeck.yml', 'w') as f:
    yaml.dump(config, f, default_flow_style=False, allow_unicode=True, sort_keys=False)
print(f'RetroDECK: {len(config["systems"])} systems, version={config["version"]}')

To regenerate manually:

# From upstream (streams component tarballs via GitHub API):
python scripts/scraper/retrodeck_scraper.py --output platforms/retrodeck.yml

# From a local RetroDECK install (no network required):
python scripts/scraper/retrodeck_scraper.py \
  --manifests-dir /var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files/retrodeck/components \
  --output platforms/retrodeck.yml

Verification checklist

  • Platform YAML validates against schemas/platform.schema.json
  • Destination paths confirmed against live RetroDECK install
  • data_directories entries for Dolphin, PPSSPP, blueMSX added and destinations verified
  • roms/ prefixed destinations reviewed — confirm acceptable under project conventions
  • _registry.yml entry added
  • watch.yml updated to include RetroDECK in weekly sync

@Abdess
Copy link
Copy Markdown
Owner

Abdess commented Mar 19, 2026

Really nice work on this. The scraper follows the BaseScraper pattern well, the SYSTEM_SLUG_MAP is thorough, and the dual remote/local mode is a great touch.

I've been doing a lot of refactoring on the pipeline side lately and things are moving fast right now. Rather than have you chase a moving target with rebases, I'll take it from here and adapt it to the new architecture. Mostly small adjustments, the core of your work stays as is.

Thanks again, this is a big plus for the project and it's always a pleasure to get contributions.

@Abdess Abdess merged commit 1fcb948 into Abdess:main Mar 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants