A lightweight, scalable cloud gaming platform that runs classic console games in Docker containers and streams them to the browser via low-latency WebRTC. Built primarily for PlayStation 1 (DuckStation) with WASM support for SNES and GBA.
- Instant Play: Click a cover art, play in seconds.
- Low Latency: Uses Selkies-GStreamer for sub-frame WebRTC streaming.
- Hardware Acceleration: Auto-detects Intel/AMD GPUs for Vulkan rendering.
- Multi-Tenant: Spawns isolated, ephemeral Docker containers per user.
- Zero Config: Drop your ROMs in a folder and start the engine.
- Linux Host (Ubuntu/Debian recommended)
- Docker & Docker Compose installed
- ROMs: standard PS1 (ZIP, CUE/BIN, ISO, CHD), SNES (.smc, .sfc), GBA (.gba)
- BIOS: PS1 BIOS files required (e.g.
scph5501.bin)
-
Place your files:
- Drop PS1 ROMs into
./userdata/roms/ - Drop PS1 BIOS into
./userdata/bios/ - (Optional) Drop SNES ROMs into
./userdata/snes/ - (Optional) Drop GBA ROMs into
./userdata/gba/
- Drop PS1 ROMs into
-
Start the engine:
./start.sh
The script will automatically generate local SSL certificates and default admin credentials on the first run.
-
Play:
- Open your browser to
https://localhost:12443 - Click a game and start playing!
- Open your browser to
The engine includes a live dashboard for monitoring resources and managing active sessions.
- Admin Dashboard:
https://localhost:12443/admin - Your unique admin password will be printed to the console during
./start.sh. - To reset or change the password later:
htpasswd -nbB admin NEW_PASSWORD > .credentials
For a deep dive into how the backend routing, session management, and extraction pipeline works, read the internal documentation:
- Architecture Guide - Deep dive into system components.
- Project Blueprint - The "DNA" of the codebase.
- TODO Tracker - Known tech debt and future roadmap.
To safely spin down all containers, clear locks, and stop the orchestrator:
./stop.sh