Qu'est-ce qu'EmulatorJS ? Un moteur d'émulation expliqué

EmulatorJS est l'enveloppe JavaScript open-source qui permet aux cœurs libretro de fonctionner dans n'importe quel navigateur moderne. Voici ce qu'il fait, pourquoi cela importe, et ce qu'il peut et ne peut pas émuler.

Dernière révision par Mira Köhler le

Définition

EmulatorJS est un frontal JavaScript open-source qui encapsule les cœurs d'émulateur libretro compilés en WebAssembly. Il a été publié pour la première fois en 2017 et est désormais maintenu par une communauté de contributeurs sur GitHub. Il expose une petite API stable — charger une ROM , configurer les contrôles, sauvegarder l'état, prendre une capture d'écran — et masque la complexité du cœur sous-jacent.

Comment cela fonctionne sous le capot

libretro est un projet qui standardise l'interface entre un cœur d'émulateur (le programme qui simule le CPU, la mémoire et les graphismes d'une console) et un frontal (l'interface utilisateur qui configure les contrôles, l'audio et un canevas). EmulatorJS prend les cœurs libretro existants écrits en C/C++ — par exemple, Snes9x pour SNES, FCEUmm pour NES, mGBA pour Game Boy Advance — et les compile en WebAssembly en utilisant Emscripten.

Quand vous chargez un jeu, EmulatorJS diffuse le cœur approprié dans un Web Worker, lui transmet les octets de la ROM, et expose un canevas dans lequel le cœur dessine 60 fois par seconde. L'audio passe par l'AudioWorklet de Web Audio pour une lecture à faible latence. L'entrée provient du clavier, d'une surimpression tactile à l'écran, ou de l'API Gamepad.

Systèmes supportés

EmulatorJS prend en charge un large éventail de matériel de l'ère des cartouches et du début de l'ère des disques :

  • 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
  • Autres : Arcade (MAME), MSX, ColecoVision, Vectrex, WonderSwan

Ce qu'il ne peut pas émuler (pour l'instant)

EmulatorJS est limité par ce qui fonctionne confortablement dans un navigateur. PlayStation 2, GameCube, Xbox, Wii et 3DS ne sont pas disponibles — ils nécessitent des pilotes GPU, une compilation JIT que les navigateurs restreignent pour des raisons de sécurité, et des gigaoctets de RAM. Cela viendra peut-être quand WebGPU et SharedArrayBuffer mûriront, mais en mi-2026 ils restent réservés aux environnements natifs.

EmulatorJS vs RetroArch vs portages WASM personnalisés

RetroArch est le frontal pour bureaux et mobiles de libretro — c'est l'équivalent le plus proche d'EmulatorJS mais il fonctionne nativement plutôt que dans un navigateur. Les portages WebAssembly personnalisés (par ex., une compilation Snes9x finement ajustée) dépassent parfois EmulatorJS en performances brutes car ils élaguent la couche d'abstraction libretro, mais ils sacrifient la couverture de systèmes large. EmulatorJS est le choix pratique par défaut pour tout site basé navigateur qui souhaite supporter plus de deux ou trois plates-formes.

Foire aux questions

EmulatorJS est-il le seul émulateur navigateur ?
Non, mais c'est le plus largement déployé. Il existe des portages WebAssembly personnalisés de cœurs individuels (Snes9x, mGBA, FCEUmm), ainsi que des moteurs propriétaires construits par des services d'émulation en streaming.
EmulatorJS est-il open source ?
Oui. Il est sous licence MIT et les sources se trouvent sur GitHub. Les cœurs libretro qu'il encapsule sont individuellement licenciés (la plupart sont sous GPL).
EmulatorJS fonctionne-t-il hors ligne ?
Une fois le cœur et la ROM chargés, l'émulateur s'exécute entièrement dans votre navigateur sans appels réseau. Fermer et rouvrir l'onglet nécessitera de re-télécharger le cœur à moins que le site hôte n'utilise un service worker pour le mettre en cache.