Wat is EmulatorJS? Een emulatie-engine uitgelegd

EmulatorJS is de open-source JavaScript-wrapper waarmee libretro cores in elke moderne browser kunnen draaien. Hier is wat het doet, waarom het belangrijk is, en wat het wel en niet kan emuleren.

Laatst herzien door Mira Köhler op

Definitie

EmulatorJS is een open-source JavaScript front-end die libretro emulatorcores omhult die naar WebAssembly zijn gecompileerd. Het werd voor het eerst in 2017 uitgebracht en wordt nu onderhouden door een gemeenschap van medewerkers op GitHub. Het biedt een kleine, stabiele API — ROM laden, besturingselementen instellen, spelstatus opslaan, screenshot maken — en verbergt de complexiteit van de onderliggende core .

Hoe het onder de motorkap werkt

libretro is een project dat de interface tussen een emulatorccore (het programma dat de CPU, geheugen en grafische afbeeldingen van een console simuleert) en een front-end (de UI die besturingselementen, audio en een canvas regelt) standaardiseert. EmulatorJS neemt de bestaande libretro cores geschreven in C/C++ — bijvoorbeeld Snes9x voor SNES, FCEUmm voor NES, mGBA voor Game Boy Advance — en compileert ze naar WebAssembly met behulp van Emscripten.

Wanneer je een spel laadt, streamt EmulatorJS de passende core naar een Web Worker, geeft deze de ROM-bytes en stelt een canvas beschikbaar waarin de core 60 keer per seconde wordt weergegeven. Audio wordt gerouteerd via Web Audio's AudioWorklet voor lage latentie afspelen. Input komt van het toetsenbord, de overlay met aanraakbediening of de Gamepad API.

Ondersteunde systemen

EmulatorJS ondersteunt een breed scala aan cartridge-era en vroege disc-era hardware:

  • Nintendo: NES, SNES, Game Boy, Game Boy Color, Game Boy Advance, Nintendo 64
  • Sega: Master System, Genesis/Mega Drive, Sega CD, 32X, Saturn
  • NEC: PC Engine / TurboGrafx-16, PC-FX
  • Atari: 2600, 5200, 7800, Lynx, Jaguar
  • Sony: PlayStation 1
  • SNK: Neo Geo, Neo Geo Pocket / Color
  • Overig: Arcade (MAME), MSX, ColecoVision, Vectrex, WonderSwan

Wat het (nog) niet kan emuleren

EmulatorJS is beperkt door wat comfortabel in een browser draait. PlayStation 2, GameCube, Xbox, Wii en 3DS staan niet op de agenda — ze hebben GPU-stuurprogramma's nodig, JIT-compilatie die browsers uit veiligheidsredenen beperken, en gigabytes RAM. Ze zullen er uiteindelijk wel komen als WebGPU en SharedArrayBuffer rijper worden, maar vanaf medio 2026 blijven ze alleen lokaal beschikbaar.

EmulatorJS vs RetroArch vs aangepaste WASM-ports

RetroArch is de desktop- en mobiele front-end voor libretro — het is de dichtstbijzijnde tegenhanger van EmulatorJS maar draait lokaal in plaats van in een browser. Aangepaste WebAssembly-ports (bijv. een zorgvuldig afgestelde Snes9x-build) verslaan EmulatorJS soms op pure prestaties omdat ze de libretro-abstractielaag inkrimpen, maar ze geven daarvoor brede systeemondersteuning op. EmulatorJS is de praktische standaard voor elke browsersitegebaseerde site die meer dan twee of drie platforms wil ondersteunen.

Veelgestelde vragen

Is EmulatorJS de enige browser-emulator?
Nee, maar het is het meest verspreid ingezette systeem. Er bestaan aangepaste WebAssembly-ports van individuele cores (Snes9x, mGBA, FCEUmm), evenals propriëtaire engines gebouwd door streamingemu services.
Is EmulatorJS open source?
Ja. Het is MIT-gelicentieerd en de broncode vindt je op GitHub. De libretro cores die het omhult zijn afzonderlijk gelicentieerd (de meeste zijn GPL).
Werkt EmulatorJS offline?
Zodra de core en ROM zijn geladen, draait de emulator volledig in je browser zonder netwerkoproepen. Het sluiten en heropenen van het tabblad vereist het opnieuw downloaden van de core, tenzij de hostsite een service worker gebruikt om het in de cache op te slaan.