Profile
Back to NewsBack
GitHub Trending 6 min
Reader Mode
danielcopper/romm-tender: Tender — your RomM library, running native in Steam. Decky Loader plugin for the Steam Deck: library sync, ROM downloads, BIOS management and save sync.

danielcopper/romm-tender: Tender — your RomM library, running native in Steam. Decky Loader plugin for the Steam Deck: library sync, ROM downloads, BIOS management and save sync.

5 hours ago

Tender

Your RomM library, running native in Steam

Getting Started · Configuration · Syncing · Managing Games

BIOS & Cores · Save Sync · Troubleshooting

Documentation Release Stars Downloads Requires RomM 5.3.0 or newer

A Decky Loader plugin that syncs your self-hosted RomM library into Steam as non-steam shortcuts. Games appear directly in your Steam library, launch through RetroDECK, and can keep their saves in sync across devices through your RomM server.

_Named after the railway car behind a steam locomotive, or the boat that shuttles out to a ship at anchor._

Pre-1.0 (v0.x). The feature set isn't complete yet. Save sync covers standard cartridge saves; the memory-card
systems — PlayStation, PS2, Dreamcast, GameCube, PSP, 3DS — don't sync their saves yet, and the
support matrix has the per-system
detail.

[!NOTE]
How this is built. The code is written by an AI coding agent working under my direction. The architecture, the
design decisions and the review are mine, and changes are smoke-tested on real hardware before they ship.

Features

  • Library sync — Pulls the platforms and collections you pick from your RomM server into Steam as non-steam
shortcuts with RomM cover art; later runs are incremental and preview what will change before touching anything
  • SteamGridDB artwork — Add a free SteamGridDB key to get hero banners, logos, wide
capsules and custom icons, with a manual picker for games that don't match automatically
  • Save sync — Opt-in save syncing across devices through your RomM server, automatically before launch and after you
quit; identical saves resolve silently, and if both sides genuinely changed you decide which one wins (not every system syncs yet)
  • Save slots & version history — Multiple named save profiles per game, plus per-file version history with restore
  • ROM downloads — Download on demand with progress, pause/resume/cancel, and a managed queue
  • BIOS management — Per-platform BIOS status, download all or only what your active core requires, hash-verified
against a bundled registry, and delete them again when you're done
  • Game detail page — Replaces Steam's page for synced games: RomM metadata, RetroAchievements progress, playtime,
install and BIOS status, save management, and per-game actions
  • Multi-disc & multi-version — Pick the disc for multi-disc games and switch between regions or revisions of the
same game, right from its Steam page
  • Emulator cores — Set the core per system, or override it for a single game
  • Steam Input — Pick a Steam Input mode (Default / Force On / Force Off) and apply it to every shortcut the plugin
created
  • Follows RetroDECK moves — Moved RetroDECK to another drive? The ROMs, BIOS files and saves the plugin manages are
relocated and your shortcuts repointed — nothing needs re-downloading
  • Cleanup tools — Remove shortcuts per platform or all at once, uninstall ROMs, and clear orphaned grid images

Screenshots

| Quick Access panel | Game detail page | | :----------------------------------------------: | :----------------------------------------------------: | | !Quick Access panel | !Game detail page | | BIOS management | Per-game actions | | !BIOS status | !Actions menu |

Requirements

  • Decky Loader on your Steam Deck or Linux HTPC — the plugin lives in Steam's gamepad UI, so it
works in the Deck's Game Mode or in Big Picture Mode on any Linux PC
  • A running RomM server, version 5.3.0 or newer (the plugin stays inert against
older servers)

Installation

Not on the Decky store. The store doesn't accept plugins whose code is written with AI assistance, and Tender's is — see _How this is built_ above. Install it from the URL below.

https://github.com/danielcopper/romm-tender/releases/download/tender-v0.33.0/Tender.zip

Install from URL — the recommended way

Needs Developer mode in Decky Loader (Decky tab › gear icon › General › Other › toggle Developer mode).

  1. Decky settings › Developer tab › Install Plugin from URL
  2. Paste the URL above and install
That URL names one fixed release, tender-v0.33.0 — the last one published with a plugin zip.

Install from ZIP

Also needs Developer mode.

  1. Download the plugin's .zip asset from the releases page
  2. Decky settings › Developer tab › Install Plugin from ZIP File
Full step-by-step instructions, including first-time setup, are in
Getting Started.

Quick start

  1. Open the Quick Access Menu and select Tender
  2. In Settings, enter your RomM server URL and credentials, then hit Test Connection
  3. In Platforms, enable the platforms you want to sync
  4. Open Sync and hit Sync Library — look over the changes it works out, then Apply Sync, and your ROMs
appear as non-steam shortcuts

See the User Guide for syncing details, save sync, and BIOS management.

Contributing

Build from source, run the tests, and read the architecture reference on the documentation site:

into a windowed Big Picture on the Deck, no Game Mode switching CI</a> Quality Gate</a> Coverage</a> Maintainability</a> Reliability</a> Security</a>

Acknowledgments

This plugin stands on the shoulders of some great projects:

  • RomM — the self-hosted ROM manager at the heart of this plugin. RomM provides the
library, metadata, cover art, and save file storage that makes the entire sync experience possible
  • RetroDECK — the all-in-one emulation solution for Steam Deck that bundles ES-DE, RetroArch,
and standalone emulators into a single flatpak. Our entire launch chain runs through RetroDECK
  • Decky Loader — the plugin framework that makes all of this possible
  • @decky/ui — maintained by the Decky project, and how Tender
reaches Steam's own interface components. It is not a component library: most of it is search predicates that find Steam's minified modules and hand them back, and keeping those working as Steam's output changes is real, continuous work that this project gets for free. Tender ships a copy of it — LGPL-2.1, see THIRD-PARTY-NOTICES.md
  • Valve — for the Steam Deck, SteamOS, and an open enough platform to build on
  • Unifideck — inspiration for game detail page injection techniques and gamepad
navigation patterns
  • MetaDeck — inspiration for store patching patterns used in metadata display on
non-Steam shortcuts
  • Argosy — RomM's Android device-sync client. Its baseline-anchored
save-conflict handling — client-side detection layered over RomM's negotiate transport, with a keep-local/keep-remote prompt on genuine divergence — validated the posture this plugin's save sync takes
  • Grout — RomM's Linux handheld client. Its 409-driven upload reconciliation (POST
with overwrite=false, downgrading to a download when the local save is unchanged and surfacing a conflict when it diverged) informed this plugin's negotiate upload and conflict path

License

GPL-3.0. This is an independent project and is not affiliated with, endorsed by, or sponsored by the RomM project or Valve Corporation.

Chat with me