All projects

Project · emulation

EmuRust

A retro game launcher that carries its own emulator cores. Put ROMs in a folder, run one command, pick a title. Six systems need nothing else installed.

  • Rust 1.76+
  • SDL2
  • Vulkan 1.1
  • 7 in-tree cores

Running an old game tends to mean installing a separate emulator per system, learning its config, then wiring a frontend across the lot. EmuRust collapses that into one binary and a games/ directory. The launcher reads the file extension, picks the core and hands over.

Cores that ship in the binary

Game Boy, Game Boy Color, NES, SNES, ZX Spectrum and Nintendo DS run on cores compiled into the launcher. No BIOS dumps, no ROM-specific patches, no second install. Drop a .gb or a .nds in the folder and it boots.

The two that need help

PlayStation runs on trapezoid-core with Vulkan 1.1 doing the rendering, and it wants a BIOS image at bios/ps1/. Nintendo 64 embeds Mupen64Plus and loads the shared libraries already on the system, scanning the usual install locations plus anything pointed at by M64P_ROOT. On Linux, if it finds no core at all, the launcher fetches the official bundle itself rather than failing with a path error.

GameCube is the one system that hands off. Dolphin already does it at full speed, so EmuRust launches Dolphin when it finds it instead of pretending to compete.

SystemHow it runs
Game Boy / GBC / NES / SNESIn-tree core
ZX Spectrum / Nintendo DSIn-tree core
PlayStationtrapezoid-core, Vulkan, needs a BIOS
Nintendo 64Embedded Mupen64Plus, auto-fetched on Linux
GameCubeHands off to Dolphin

Getting it going

Build with cargo build --release, then put ROMs under games/. The launcher accepts the extensions you would expect for each system, so nothing needs renaming to match a scheme.

Rust · SDL2 · Vulkan · trapezoid-core · Mupen64Plus github.com/AndreNijman/EmuRust ↗