Steam ROM Manager logo

Steam ROM Manager FrogTheFrog

winget install --id=SteamGridDB.RomManager -e

Steam ROM Manager is a super flexible tool for adding non-Steam games to steam in bulk and managing their artwork assets. Added games could be ROMs for emulators, games from other stores such as Epic or GOG, or even not games at all. Have you always wanted your notes from junior year as a category in steam? If so that's pretty weird! But now it's possible.

README

Steam ROM Manager

Build Status GitHub commit activity GitHub all releases Discord Chocolatey Crowdin

Overview

Steam ROM Manager (SRM) is a super flexible tool for adding non-Steam games to Steam in bulk and managing their artwork assets and controller templates. Added games could be ROMs for emulators, games from other stores such as Epic or GOG, or even not games at all. Have you always wanted your notes from junior year as a category in steam? If so that's pretty weird! But now it's possible.

For an overview of how SRM works see here. There is plenty of documentation available in the app's built in FAQ and documentation, and if you need further help there are expert users to be found on the SGDB discord under the Steam ROM Manager category and the SRM subreddit.

Check out the releases page for compiled downloads for Windows (exe, msi), macOS (dmg), and Linux (AppImage, deb).

The Windows version is also available as a Chocolatey package.

The Linux version is also available as a Flatpak at Flathub/steam-rom-manager. Linux caveats:

If you're on a Steam Deck we recommend setting everything up through EmuDeck, as it will install and automatically configure Steam ROM Manager and whatever emulators you want.

Support SteamGridDB

If you enjoy Steam ROM Manager and want it to continue to be useful consider supporting SteamGridDB's Patreon. SteamGridDB hosts all of the artwork Steam ROM Manager uses to make your Steam library the envy of the town, so we should probably help them keep their lights on.

Parsers

Parsers are the heart and soul of SRM. If Steam is the octopus, then these are its tentacles — reaching into your ROM directories and the databases and manifest files of other game stores and pulling out the games you want.

ROM Parsers

ROM parsers allow one to import shortcuts using search strings, e.g. games/${title}.@(iso|rvz), or in the case of the manual parser by specifying ROM locations directly. |Parsers|Windows|Mac OS|Linux|Description| |---|---|---|---|---| |Glob|✅|✅|✅|Parsing using simple glob style search strings| |Glob-regex|✅|✅|✅|Parsing using reg-ex style search strings| |Manual|✅|✅|✅|Parsing using a JSON file specifying locations|

Platform Parsers

In addition to flexible importing of ROMS, SRM now has several platform parsers for importing from popular game stores:

|Parser|Windows|Mac OS|Linux|Launch Modes| |---|---|---|---|---| |Amazon Games|✅|🟦|🟦|Launch via Amazon GamesLaunch via executable| |EA Desktop|✅|🟦|🟦|Launch via EA DesktopLaunch via executable| |Epic|✅|✅|🟦|Launch via EpicLaunch via executable| |GOG Galaxy|✅|❌|🟦|Launch via GOG GalaxyLaunch via executable| |Itch.io|✅|✅|✅|Launch via executable| |Legendary|✅|✅|✅|Launch via executable| |Ubisoft Connect|✅|❌|🟦|Launch via Ubisoft ConnectLaunch via executable| |UWP/XBox|✅|🟦|🟦|Launch via UWPLaunch via executable| |Battle.net|✅|❌|🟦|Launch via Battle.net|

✅ Implemented ❌ Planned 🟦 Store not present

We are open to suggestions and pull requests if you would like a platform parser added!

Artwork Only Parsers

Artwork only parsers allow you to change the artwork for existing non-SRM games. Put it simply they just change artwork, they don't add shortcuts. |Parser|Windows|Mac OS|Linux|Description| |---|---|---|---|---| |Steam|✅|✅|✅|Manages artwork for Steam Games| |Non-SRM Shortcuts|✅|✅|✅|Manages artwork for Steam Shortcuts not added via SRM|

For developers

Command Line Interface

SRM has a fully featured command line interface, documented in the wiki.

Building SRM

To compile this app, you'll need the latest Node.js and npm. Every script will need to be run from the project directory.

Before running any scripts, dependencies must be installed using:

npm ci

Unfortunately, because of an issue with better-sqlite3 you will most likely also have to run npm ci after building for windows if you want npm run start to work. Otherwise, you will likely see the runtime error better-sqlite3 is not a valid win32 application.

Scripts

All script must be run using npm run command. For example, npm run watch:renderer.

|Script|Function| |---|---| |postinstall|Recompiles native apps to match Electron's NodeJS version if needed| |start|Launches compiled app| |watch:main|Compiles Electron app and watches for changes| |watch:renderer|Compiles a renderer for an Electron app and watches for changes| |build:main|Compiles Electron app in production mode| |build:renderer|Compiles a renderer for an Electron app in production mode| |build:dist|Runs build:main and build:renderer| |build:win|Compiles an executable installer for Windows| |build:linux|Compiles a deb package and AppImage for linux| |build:linuxdir|Builds an unpacked linux x64 version for use with flatpak| |build:flatpak|Builds a flatpak from the unpacked linux version| |build:docker|build:win and build:linux joined together| |build:mac|Compiles a dmg package for MacOS|

Debugging an app

Run watch:main (usually once since one rarely changes anything in the main Electron process) and watch:renderer. Each command creates separate webpack instance which will watch referenced files for changes and will recompile app.

App can be run using start script or npx electron . (if you want to test the CLI use npx electron . [command] [flags]). After every recompile by watch:renderer, app can be refreshed using Ctrl + R, however watch:main requires need a restart.

Ctrl + Shift + I can be used to launch Chrome inspector once the app is running. This works even in the release version.

For Windows

Scripts must be run in this order:

npm run build:dist
npm run build:win

For MacOS

Scripts must be run in this order:

npm run build:dist
npm run build:mac

For linux

Scripts must be run in this order:

npm run build:dist
npm run build:linux

For linux flatpak

Unfortunately electron-builder does not yet competently build flatpaks, and the older approach using electron-packager and electron-installer-flatpak can't handle native modules. A work-around is to use electron-builder for the packaging step and electron-installer-flatpak for the actual flatpak creation.

First you need to run npm install -g @malept/electron-installer-flatpak (this can't be added as dev-dependency since it is not cross-platform and npm doesn't allow optional dev-dependencies).

Then

npm run build:dist
npm run build:linuxdir
npm run build:flatpak

In order for this to work you must have already installed flatpak-builder using your favorite package manager (e.g. sudo pamac install flatpak-builder) and run:

flatpak install flathub org.freedesktop.Platform//19.08;
flatpak install org.freedesktop.Sdk//19.08;
flatpak install org.electronjs.Electron2.BaseApp/x86_64/stable

Updating dependencies

Use npx ncu to list available dependency updates, and npx ncu -u target [target] to update, where [target] is either patch, minor, latest, greatest, or newest.

Versions
2.3.40
2.3.37
Website
License