overview@webemu

Retro gaming,
in your browser.

WebEmu runs classic console ROMs directly in the browser with no plugins and no installs. Drop a ROM file or paste a URL, and your collection can sync through PocketBase when you want it to.

10 Systems
Open source Made for flavortown.hackclub.com
100% Browser-based
How it's built
Nostalgist.js
Powers the classic systems: NES, SNES, Game Boy, Game Gear, Genesis, and Game & Watch. Wraps libretro cores compiled to WebAssembly and manages ROM loading, rendering, input, and audio routing.
EmulatorJS
Handles the heavier systems: PlayStation, PSP, Nintendo 64, and Nintendo DS. Each core is loaded dynamically from CDN at launch so the page stays lightweight until you actually need it.
libretro cores
Every system runs on a dedicated libretro core: fceumm, snes9x, mGBA, genesis_plus_gx, gw, pcsx_rearmed, PPSSPP, mupen64plus, and melonDS. All compiled to WASM via Emscripten.
Web Audio API
A GainNode is patched onto the AudioContext before launch, intercepting all connect() calls. This gives real-time volume control over emulator audio without touching the core itself.
libretro-thumbnails
Cover art is fetched via HEAD requests from the libretro-thumbnails CDN on jsDelivr, matched to the ROM filename. Region tags like (USA) and (EUR) are stripped automatically as a fallback.
Vanilla JS + CSS
No frameworks, just plain JS and CSS. I am still learning the bigger stuff so keeping each page self-contained made more sense for now. Everything from save states to the overlay is hand-written.
localStorage + IndexedDB
Theme preference is persisted via localStorage and applied before first paint to prevent a flash. ROMs in the collection are stored in IndexedDB locally on your device and never leave it.