RetroDisc is an open game media standard for portable Windows games on Linux.
RetroDisc brings back the simplicity of classic game consoles.
A RetroDisc game behaves like a physical game release:
- 💿 Connect a disc, USB drive, SSD, HDD, microSD card or other storage device.
▶️ Launch the included RetroDisc launcher.- 🎮 Play the game.
A RetroDisc release contains the game files together with the information required to launch the game on a compatible Linux system:
- Game launcher
- Game manifest
- Runtime configuration
- Compatibility configuration
- Original game files
- Optional bundled Wine prefix
RetroDisc does not replace Wine or Proton.
Instead, RetroDisc provides a standardized way to package and launch Windows games while keeping the original game release separate from writable user data.
| Feature | Description |
|---|---|
| 🎮 Plug & Play | Launch games directly from portable storage |
| 💾 Portable Releases | Games can be moved between drives and systems |
| 🔒 Game Preservation | Original game files remain untouched |
| 🐧 Linux Focus | Built around Wine and Proton |
| 📂 Standard Layout | Every RetroDisc title follows the same basic structure |
| 💾 Persistent Saves | Writable game data is stored outside the original release |
| 🔧 Writable Separation | Game modifications and runtime changes are separated from the original files |
| 🧪 Temporary Runtime | A temporary writable game filesystem is created during execution |
| 📦 Bundled Prefix | A release can include a preconfigured Wine prefix |
RetroDisc is built around four simple ideas.
A RetroDisc game is designed to be played directly from portable storage.
Whether the game is stored on a USB drive, external SSD, HDD, optical media or another supported filesystem, the launcher prepares the required runtime environment before starting the game.
The original game release does not need to be modified in order to play the game.
RetroDisc separates the original game release from writable data whenever possible.
The original game files are used as the read-only base of a temporary filesystem.
Changes made while the game is running are written to the writable game-data layer instead of directly modifying the original release.
This allows the original release to remain preserved while the user can still use saves, configuration files and other writable data.
A RetroDisc title contains the files required to identify and launch the game.
The release can be copied or moved between compatible storage devices without requiring the original game files to be installed into a traditional system-wide location.
Persistent writable data is stored locally on the user's Linux system.
This means that the original game media can remain portable and unchanged while user data follows the local machine.
RetroDisc defines a consistent structure for games and their launch configuration.
Each RetroDisc title contains a manifest.json file describing the game itself.
Example:
{
"game": {
"id": "example-game",
"name": "Example Game",
"executable": "gamedata/Game.exe"
},
"runtime": "wine"
}Game-specific runtime settings are stored separately in:
~/.config/RetroDisc/games/<gameId>/config.json
This configuration can define:
- Wine or Proton
- launch arguments
- environment variables
- Proton version
- Proton path
- Windows version
- graphics settings
- synchronization settings
- display settings
- virtual desktop settings
- DLL overrides
Because the game metadata and runtime configuration follow a consistent structure, applications can discover and launch RetroDisc titles without requiring game-specific launcher implementations.
RetroDisc is designed to be storage independent.
- Internal SSDs
- External SSDs
- USB flash drives
- Internal HDDs
- External HDDs
- microSD cards
- NAS storage
- DVD-ROM
- Blu-ray
- ISO images
- CD-ROM
Loading times depend primarily on the performance of the underlying storage device and filesystem.
The impact varies between games. Some games frequently access many small files, while others primarily load a smaller number of large files. Therefore, total game size alone does not determine loading performance.
A RetroDisc release follows this basic structure:
RetroDisc Game/
├── RetroDisc
├── manifest.json
├── gamedata/
└── pfx/
The RetroDisc launcher.
It reads the manifest and configuration, prepares the filesystem and compatibility environment, launches the game and performs cleanup afterwards.
Contains the basic game metadata:
Game ID
Game name
Executable
Default runtime
Contains the original game files.
RetroDisc treats this directory as the original game release and does not directly write changes into it during normal execution.
An optional bundled Wine prefix.
If a bundled prefix is present and no persistent prefix exists for the game, RetroDisc copies it to the user's local RetroDisc data directory.
The bundled prefix is never modified directly.
Writable data is stored outside the original RetroDisc release.
The persistent directory is:
~/Games/RetroDisc/<gameId>/
A typical installation looks like:
~/Games/RetroDisc/
└── <gameId>/
├── gamedata/
└── pfx/
The Wine/Proton prefix is stored at:
~/Games/RetroDisc/<gameId>/pfx/
The prefix is persistent and is not recreated on every launch.
If a complete persistent prefix already exists, RetroDisc reuses it.
If no persistent prefix exists, RetroDisc can copy a bundled pfx/ from the RetroDisc release.
RetroDisc separates the original game files from writable runtime data.
Conceptually:
RetroDisc Release
│
│ read-only base
▼
gamedata/
│
│ fuse-overlayfs
▼
Temporary Runtime
│
├── game changes
├── temporary files
└── runtime modifications
│
▼
Persistent Game Data
~/Games/RetroDisc/<gameId>/
The game is launched through a temporary fuse-overlayfs filesystem.
The original gamedata/ directory remains untouched.
The writable upper layer is stored in:
~/Games/RetroDisc/<gameId>/gamedata/
Temporary overlay directories are created under /tmp and removed after the game exits.
RetroDisc keeps the persistent Wine profile independent from the Linux user's actual username.
The persistent Wine user is:
RetroDisc
At runtime, RetroDisc determines the current Linux/Steam user and creates a temporary symbolic link inside the Wine prefix:
drive_c/users/<runtime-user>
└──> RetroDisc
This allows Windows applications to see their expected runtime username while the actual persistent data remains inside the RetroDisc profile.
The temporary user link is removed after the game exits.
RetroDisc itself is designed to require only a small number of runtime dependencies.
- Wine or Proton, depending on the game
fuse-overlayfsfuse3/fusermount3findmntfromutil-linux
On Arch Linux, the required system packages are typically:
sudo pacman -S --needed fuse-overlayfs fuse3 util-linuxFor Wine games:
sudo pacman -S --needed wineFor Proton games:
sudo pacman -S --needed steamThe RetroDisc launcher itself does not require CMake, GCC or the nlohmann-json development package at runtime.
Depending on the individual game:
- Proton
- Vulkan drivers
- DXVK
- Gamescope
- Discord
Not every RetroDisc title requires every optional component.
Discord integration is optional. If Discord is unavailable, RetroDisc continues launching the game normally.
When a RetroDisc game is launched, RetroDisc performs the following steps:
- Determines the RetroDisc release directory.
- Loads
manifest.json. - Loads the user's game configuration.
- Determines the selected Wine or Proton runtime.
- Creates or reuses the persistent game directory.
- Creates a temporary
fuse-overlayfsfilesystem forgamedata/. - Verifies that the configured executable is available through the overlay.
- Creates the temporary runtime Wine user link.
- Applies environment variables and compatibility settings.
- Launches the game using Wine or Proton.
- Removes the temporary runtime user link.
- Unmounts the temporary filesystem.
- Removes temporary files.
The original game release remains unchanged throughout the process.
RetroDisc intentionally separates persistent data from temporary runtime data.
Stored under:
~/Games/RetroDisc/<gameId>/
Includes:
- Wine/Proton prefix
- Registry changes
- Windows user profile
- Save data
- Configuration data
- Persistent game modifications
Stored under /tmp during execution:
/tmp/RetroDisc_<pid>/
/tmp/RetroDiscWork_<pid>/
Includes:
- Temporary overlay mount
- Overlay work directory
- Temporary runtime user link
Temporary data is removed after the game exits whenever cleanup succeeds.
RetroDisc supports both Wine and Proton.
For:
{
"runtime": "wine"
}RetroDisc launches the configured executable using Wine and the persistent game prefix.
For:
{
"runtime": "proton"
}RetroDisc locates the configured Proton version through the user's Steam installation and uses the same persistent game prefix.
A specific Proton installation can also be selected through the configuration.
A minimal game configuration can look like:
{
"runtime": "wine",
"launch": {
"arguments": [
"-fullscreen"
]
},
"environment": {
"DXVK_HUD": "0"
},
"wine": {
"windowsVersion": "win10",
"graphics": {
"renderer": "vulkan",
"videoMemory": 4096,
"strictDrawOrdering": false
},
"sync": {
"esync": true,
"fsync": true,
"ntsync": false
}
}
}The configuration is game-specific and can be extended without modifying the original game files.
RetroDisc is designed around the principle that the original game release should remain untouched.
The launcher therefore:
- does not use the original game directory as a writable Wine prefix
- does not directly modify the original
gamedata/ - creates a temporary writable overlay
- stores the persistent Wine/Proton prefix separately
- reuses existing persistent prefixes instead of overwriting them
- refuses to overwrite an incomplete persistent prefix automatically
This makes the original RetroDisc release suitable for archival and redistribution.
RetroDisc is licensed under the GNU General Public License v3.0 (GPL-3.0).
Everyone is free to use, study, modify and redistribute RetroDisc under the terms of the GPL.