Library — your collection at a glance |
Game details — covers, descriptions, playtime |
Playing a game — straight in the browser |
Admin panel — full control over your library |
RetroX runs in a Docker container. Just one command to get started:
docker run -d \
--name retrox \
--restart unless-stopped \
-p 8080:8080 \
-v $(pwd)/data:/data \
poliuscorp/retroxOpen http://localhost:8080 and sign in with admin / admin.
A
data/folder will be created in your current directory to hold your games, saves, and database. If the folder already exists (for example, from a previous installation), RetroX will reuse it — your existing data is preserved.
Prefer Docker Compose?
services:
retrox:
image: poliuscorp/retrox
container_name: retrox
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./data:/datadocker compose up -d| Lightweight | <150 MB image, minimal CPU and RAM. Runs on a Pi, NAS, or cheap VPS. |
| Cross-device sync | Saves follow you across devices — phone, laptop, and TV — automatically. |
| Full controller support | Control the entire app with a gamepad — menus, search, saves, and more. |
| Local multi-player | Two-player support on N64 and PSX — connect a second gamepad and start playing. |
| Phone as gamepad | While playing a game, scan a QR with your phone and use it as a wireless gamepad. |
| Fast-forward & rewind | Skip the grind or undo a mistake on the fly — available on supported cores. |
| Multi-disc games | Full support for multi-disc games such as PSX. |
| Save states | 5 slots per game. Export backups, import from other emulators. |
| Multi-user accounts | Per-user saves and favorites. Optional two-factor authentication. |
| QR code login | Sign in on a TV by scanning a code with your phone. |
| Collections | Organize games into custom groups like Pokémon or Mario. |
| Playtime tracking | Tracked per game and per save slot. |
| Game metadata | Covers, descriptions, release dates — editable from the admin panel. |
| Responsive UI | Looks right on phones, laptops, and TVs. |
| Admin panel | Manage users, rescan the library, configure emulators, monitor saves. |
Saves don't live on one device. RetroX continuously mirrors the cartridge's save memory to the server while you play — every few seconds, in the background, with no input from you. Close the tab, switch laptops, lose power: your progress is safe and you'll pick up exactly where you left off on any device.
A pill in the top-right corner of the player surfaces the current state. Click it for the full story.
Don't have a gamepad on the device you're playing on? Use your phone instead. RetroX turns any phone into a wireless gamepad for the game currently running on your laptop or TV — no app to install, no Bluetooth pairing. Just scan a QR code and you're good to go.
How to use it:
- Play any game and click the Phone pill in the top-right corner.
- A dialog appears with a QR and a 6-character pairing code.
- On your phone, scan the QR code or enter the code manually.
- Done! You can now use your phone as a gamepad.
Drop ROMs into data/roms/, organized by system folder:
data/roms/gb/tetris.gb
data/roms/gba/pokemon-emerald.gba
data/roms/n64/mario-kart.z64
Then click Admin → Library → Rescan.
Use one folder per game. Discs are loaded in filename order:
data/roms/psx/Final Fantasy IX/
├── disc1.cue
├── disc1.bin
├── disc2.cue
├── disc2.bin
├── disc3.cue
├── disc3.bin
├── disc4.cue
└── disc4.bin
| System | Folder | Extensions |
|---|---|---|
| Game Boy | gb |
.gb |
| Game Boy Color | gbc |
.gbc |
| Game Boy Advance | gba |
.gba |
| Nintendo 64 | n64 |
.n64 .z64 .v64 |
| PlayStation | psx |
.bin .cue .iso .img .chd .pbp .ecm |
Any ROM file can also be gzipped with a .gz extension (e.g. mario-kart.z64.gz) — RetroX decompresses on the fly.
RetroX uses EmulatorJS cores. To add support for a new system (e.g., NES, Master System, PC Engine):
- Download the core's
.datafile from EmulatorJS releases. The filename should follow the pattern<corename>-wasm.data(e.g.,fceumm-wasm.datafor NES,genesis_plus_gx-wasm.datafor Mega Drive). - Drop the file into
data/cores/. - Open Admin → Emulators → Add Emulator and register the system: choose the core file, set the system folder name (e.g.,
nes), and list the file extensions (e.g.,.nes,.zip). - Drop ROMs into
data/roms/<system>/and click Library → Rescan.
Legacy variants (-legacy-wasm.data) are used as a fallback for older devices.
The whole app is gamepad-first — browse the library, search, manage saves, and launch ROMs without ever needing a keyboard or mouse.
App navigation (gamepad)
| Button | Action |
|---|---|
| D-pad / Stick | Navigate |
| A / ✕ | Select |
| B / ○ | Back |
| X / □ | Search |
| Y / △ | Favorite |
| L1 / R1 | Cycle filters |
| Start | Play |
In-game — both keyboard and controller bindings are fully rebindable. Open the Controls pill while playing, or visit Profile → Controls. Changes save instantly and sync across devices. No gamepad? Use your phone as one.
| Shortcut | Gamepad | Keyboard |
|---|---|---|
| Save state | Select + L1 | F2 |
| Load state | Select + R1 | F4 |
| Fast forward* | R2 | Space |
| Rewind* | L2 | Backspace |
| Exit game | Select + Start | Esc |
* Available on supported cores (toggle per system in Admin → Emulators).
Edit metadata in AdSmin → Library → Edit game.
A great source of cover art and game info: LaunchBox Games Database.
Pull the latest image and recreate the container:
docker pull poliuscorp/retrox
docker stop retrox && docker rm retrox
docker run -d \
--name retrox \
--restart unless-stopped \
-p 8080:8080 \
-v $(pwd)/data:/data \
poliuscorp/retroxYour data/ folder is untouched — games, saves, and database carry over.
Using Docker Compose?
docker compose pull
docker compose up -dPowered by EmulatorJS.
Ships with demo ROMs Tobu Tobu Girl and Tobu Tobu Girl Deluxe by Tangram Games — a delightful open-source platformer and its enhanced color edition, both released under MIT (code) / CC-BY (assets).
You are responsible for ensuring that you have the legal right to use any ROMs in your library.












