Open-source project
dragoonDorise/EmuDeck avatar
dragoonDorise/EmuDeck

EmuDeck: Emulator Autoconfiguration for Steam Deck and Other Linux Systems

Emulator configurator for Steam Deck

3,503 stars259 forksShellGPL-3.0

At a glance

What is it?
EmuDeck is a collection of shell scripts that builds a ROM directory tree, downloads emulators and applies per-emulator configurations. It targets handheld Linux users first, and the repository only partly answers what happens on other platforms.
Who is it for?
Adopt EmuDeck if you run SteamOS or another Linux distribution on a handheld and want emulator configuration handled for you rather than assembled by hand. Do not adopt it if you need documented Windows or macOS support, since the README only points to a SteamOS install guide, or if you want a single front end rather than a set of scripts that hand off to Steam Rom Manager or EmulationStation DE.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Shell, 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

What EmuDeck configures, and who the scripts are written for

EmuDeck is a collection of scripts, in the project's own words, that autoconfigure a Steam Deck or any other Linux distribution. It does three things in one pass: it creates the ROM directory structure, it downloads the emulators, and it writes the per-emulator settings the project considers best. That is the whole product. There is no launcher, no game library UI and no emulator code of its own.

The audience is stated plainly in the contributor guide: EmuDeck is for everybody, tech savvy and especially for regular users new to emulation, and everything has to be properly explained. That explains the repository layout. The top level holds install.sh, uninstall.sh, setup.sh, settings.sh, vars.sh and versions.json, plus per-platform directories for android/, chimeraOS/ and darwin/. A regular user runs one script; the rest is plumbing.

The consequence of that audience choice is that EmuDeck decides for you. Hotkey mappings follow the AmberElec layout, and the contributor guide requires every emulator to ship a Steam Rom Manager profile. If you already have hand-tuned configs, the value proposition is weaker, because the point is to replace your choices with a shared default.

How the scripts, configs and parsers fit together

The mechanism is file generation plus downloads, driven by data checked into the repository. configs/ holds the emulator settings, roms/ and roms_alt_emus/ hold the directory skeletons, and store/ plus versions.json describe what gets fetched. api.sh, export.sh, import.sh and cloudSyncHealth.sh handle the surrounding operations, while rsync.awk suggests rsync is used for at least some file movement.

Steam integration is delegated. EmuDeck does not scrape your library itself; it works with Steam Rom Manager or with EmulationStation DE, per the README. Steam Rom Manager is the piece that reads parser definitions and writes Steam shortcuts. Those parsers are JSON files contributed to the project, and the README specifies their structure in detail: a configTitle in the form COMPANYNAME SYSTEMNAME - EMULATORNAME RETROARCHCORENAME, a steamCategory, and a filename pattern of companyname_systemname-emulatorname-retroarchcore.json, where a RetroArch core replaces the emulator name with ra. So nintendo_wii-dolphin.json and nintendo_gba-ra-mgba.json are the two shapes.

The naming rules are strict for a reason. Default parsers use a bare steamCategory such as ${Nintendo 64}, and alternative emulators get a suffixed category such as ${Nintendo 64 - Rosalie's Mupen GUI}. Only one parser per system is enabled by default. That convention is what keeps a Steam library from filling with duplicate entries for the same console when several emulators can run it.

Installing EmuDeck and running a first configuration

The README does not inline install steps. It points to the project Wiki, specifically the SteamOS install page, and says the Wiki holds guides, videos and all sorts of content. Treat the Wiki as the install source of truth rather than any command copied from elsewhere.

The repository root is where you confirm which script you are meant to run. These are the install entry points as they appear in the tree:

bash
install.sh
install-beta.sh
install-early.sh
install-unstable.sh
install-arm.sh

The names map to release channels. 2.7EA, published on 2026-09-14, is the most recent release listed, and the install-early.sh and install-unstable.sh scripts are the plausible counterparts for that channel. install-arm.sh is the ARM variant, which is relevant if you are on ARM hardware rather than x86.

After installation, your first real task is not launching a game. It is confirming the ROM tree. The project creates the roms directory structure for you, and the layout is checked into the repository under roms/ and roms_alt_emus/. Put a ROM in the folder matching its system, then let Steam Rom Manager or EmulationStation DE pick it up. For BIOS files, the repository does not ship them; emulators that need BIOS files expect them in the locations the emulator documents, and the README is silent on BIOS handling, so check the Wiki for the system in question.

Uninstalling is a script rather than a manual cleanup:

bash
uninstall.sh

The README does not document rollback, and it does not describe what uninstall.sh removes versus leaves in place, so inspect the script before running it if your ROMs share the install location.

Where EmuDeck is the wrong tool

EmuDeck is a configurator, so it is the wrong tool the moment you want a single application. There is no EmuDeck executable that launches games. If your expectation is a front end, you are looking at the wrong layer, and the README's answer is to pair it with Steam Rom Manager or EmulationStation DE.

The contributor guide rules out a class of solutions too. It states that things using sudo are a big no no, with exceptions, and that contributors should always try to find a way to prevent using sudo. That is a deliberate constraint, and it shapes what EmuDeck can install and where it can place files. Anything requiring system-level package installation or privileged writes falls outside the normal path.

Platform coverage is the other boundary. The repository has directories for android/, chimeraOS/ and darwin/, and the README's install link goes to the SteamOS page. Those two facts do not add up to documented support for every platform those directories suggest. The README never claims Windows or macOS support, and the install guidance it gives is SteamOS-specific. If you are on Windows, the README does not tell you what to do.

Finally, if you already maintain your own emulator configurations, EmuDeck overwrites the thing you spent time on. The project's premise is that its defaults are better for a new user than an empty config file.

EmuDeck versus RetroDeck, and what the difference actually is

The comparison people search for is EmuDeck versus RetroDeck, and the distinction follows from the architecture rather than from a feature list. EmuDeck is a set of scripts that configures emulators installed on your system and then hands library management to Steam Rom Manager or EmulationStation DE. The emulators remain separate programs with their own config files, and Steam is the launcher.

A container-based distribution takes the opposite approach: emulators and their dependencies are packaged together, and the front end is the entry point rather than Steam. The trade-off is control versus isolation. With EmuDeck you can edit any emulator's config directly, replace one emulator without touching the others, and see exactly which files changed, because they are ordinary files in your home directory. You also inherit whatever the upstream emulator does on update. With a packaged distribution you get a consistent environment and less surface for version drift, but you give up per-emulator tinkering and you wait for the package to move.

The repository gives one more signal about EmuDeck's center of gravity: the parser conventions are built around Steam categories, and the contributor rules reference Steam Rom Manager profiles and AmberElec hotkeys. Steam integration is not an add-on here, it is the assumed path.

Maintenance, release cadence and the GPL-3.0 licence

The repository is not archived, and the last push was on 2026-09-23, the same day as the most recent release window. Release history is uneven: 2.1.0 landed on 2023-04-26, 2.3.8 on 2025-01-22, and 2.7EA on 2026-09-14. The EA suffix on the newest release is worth reading literally. If 2.7EA is an early-access build, then the stable line a cautious user wants may still be 2.3.8, and the install script you choose determines which one you get.

Upgrade cost is mostly the cost of change in the emulators themselves. EmuDeck writes configurations; when an upstream emulator renames a setting or moves a config path, the shipped configs have to follow. The repository carries unit-testing.sh and test.sh at the root, which indicates some automated checking exists, but the README does not describe a compatibility matrix or a supported-version policy for individual emulators.

EmuDeck is licensed GPL-3.0. That matters if you plan to redistribute a modified build: the licence carries source-disclosure obligations for derivative works. It does not affect running EmuDeck on your own device. This is a description of the licence identifier in the repository, not legal advice; read LICENSE and consult a lawyer if you intend to redistribute.

Editorial conclusion

Adopt EmuDeck if you run SteamOS or another Linux distribution on a handheld and want emulator configuration handled for you rather than assembled by hand. Do not adopt it if you need documented Windows or macOS support, since the README only points to a SteamOS install guide, or if you want a single front end rather than a set of scripts that hand off to Steam Rom Manager or EmulationStation DE. Before installing, verify which install script matches your branch, since install.sh, install-beta.sh, install-early.sh, install-unstable.sh and install-arm.sh all exist at the repository root, and read the Wiki page the README links to for the platform you actually use.

Frequently asked questions

Is EmuDeck legal?

The repository says nothing about the legality of ROMs or BIOS files, and it does not ship BIOS files. EmuDeck itself is a GPL-3.0 licensed collection of configuration scripts; what you run with it is a separate question the project does not address.

Does EmuDeck still work?

The repository is not archived and the last push was on 2026-09-23, with release 2.7EA published on 2026-09-14. Whether a specific emulator still works after an upstream update is not something the README documents.

Which is better, RetroDeck or EmuDeck?

EmuDeck is a set of scripts that configures emulators already on your system and hands library management to Steam Rom Manager or EmulationStation DE. The README does not compare the two projects, so the choice comes down to whether you want separate, editable emulator configs or a packaged environment.

What consoles does EmuDeck emulate?

EmuDeck does not emulate anything itself; it downloads and configures emulators, and the parser naming conventions in the README reference systems including Amiga, Nintendo Game Boy Color, Nintendo 64, Nintendo Wii, Sony PlayStation, Sony PlayStation 2, Sega Saturn and PlayStation Portable.

How do I install EmuDeck?

The README does not inline install commands. It directs readers to the project Wiki, specifically the SteamOS install page, and the repository root carries install.sh plus channel variants such as install-beta.sh, install-early.sh, install-unstable.sh and install-arm.sh.

How do I use EmuDeck on Steam Deck?

The README's install guide points to the SteamOS page on the EmuDeck Wiki. After configuration, the project expects you to pair it with Steam Rom Manager or EmulationStation DE, since EmuDeck does not provide a launcher of its own.

Official sources

  1. dragoonDorise/EmuDeck on GitHub
  2. Issues
  3. License: GPL-3.0
  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/dragoondorise-emudeck.svg)](https://hysenlabs.com/projects/dragoondorise-emudeck)