JavaScript is required


Github has the latest information on releases.


  • Fix scroll bar css (Thanks to @allancoding)
  • Flip the context menu instead of going off the page
  • Add hooks for save files (Thanks to @gantoine)
  • Add class for each virtual gamepad button
  • Add EJS_forceLegacyCores option
  • Add EJS_noAutoFocus (this is only for advanced developers, not likely an option you will use)
  • Added supported Amiga file extensions (Thanks to @michael-j-green)
  • Display the file name of the ROM/disk when using M3U lists (Thanks to @michael-j-green)
  • Added vsync option
  • Added advanced shader configuration support (Thanks to @n-at)

4.0.11 View Tree

  • Added the ability to disable localstorage using EJS_disableLocalStorage. (Thanks to @n-at)
  • Added the ability to trigger EJS_emulator.displayMessage with a duration. (Thanks to @allancoding)
  • EJS_emulator.gameManager.getState now returns a Uint8Array instead of a promise.
  • Fixed broken save states from the 4.0.10 release.

4.0.10 View Tree

  • Fixed bug with duplicate control inputs.
  • Fixed mobile settings menu positioning.
  • Ability to load custom files into the wasm instance.
  • Renamed the mame2003 system to mame.
  • Removed mame disclaimers on mame2003 core.
  • Added VICE cores for C64, C128, VIC20, Plus/4, and PET (Thanks to @michael-j-green)
  • Added a padding between popup body and buttons.
  • Added ability to disabled cached databases.
  • Fixed screenshot for some cores.
  • Fixed game element not being focused after fullscreening.
  • Added missing Famicom controls.
  • Fixed volume slider shadow. (Thanks to @allancoding)

4.0.9 View Tree

  • Repository history rewrite - expect faster cloning times.
  • Prevent Vice64 from creating cue files (Thanks to @michael-j-green)
  • Chinese translation updated (Thanks to @oyepriyansh)
  • Added button to open context menu (Thanks to @andrigamerita)
  • Fixed menu bar text placement for items on the right.
  • Fixed a bug in safari where fullscreen would not resize the game element.
  • Fixed a bug in safari where the bottom menu would be visible on initial page load.
  • Fixed game rom filename showing as "game" when the game name is set.
  • Added legacy nintendo 64 cores for browsers that don't support webgl2.

4.0.8 View Tree

  • Fixed typo in virtual gamepad dpad.
  • Added updated desmume core.
  • Fixed key mapping (Thanks to @allancoding)
  • Fixed adblock message (Thanks to @allancoding)
  • Added EJS_startButtonName option.
  • Re-Added ability to drag and drop save states.
  • Fixed cheats menu.
  • Added popup message for Safari mobile users if game is not running.
  • Added EJS_softLoad option.
  • Added amiga core.
  • Added c64 core.

4.0.7 View Tree

  • Added rewind (Thanks to @n-at)
  • Added slowdown (Thanks to @n-at)
  • Fixed "zone" object in front of settings menu.
  • Fixed virtual gamepad alignment.
  • Add EJS_fullscreenOnLoaded option.
  • Add virtual gamepad toggle to the control menu (for touchscreen devices)
  • Fix gamepad ID showing as "undefined".
  • Added threaded cores.
  • Added joystick translations (Thanks to @allancoding)
  • Fixed fullscreen button tooltip (Thanks to @allancoding)
  • Added TurboGrafx-16, SuperGrafx, PC Engine, neo geo pocket, WonderSwan, PC-FX, and ColecoVision support. (Thanks to @n-at)
  • Fixed cue file loading (Thanks to @n-at)
  • Fixed ability to hide volume slider (Thanks to @n-at)
  • Added new mame2003_plus core (now default mame2003 core)
  • Use keycodes instead of labels (Thanks to @allancoding)

4.0.6 View Tree

  • Fixed n64 on iOS safari
  • virtual gamepads for atari2600, atari7800, lynx, jaguar, vb, 3do (Thanks to @n-at)
  • control buttons for gba, vb, 3do, atari2600, atari7800, lynx, jaguar (Thanks to @n-at)
  • Added EJS_controlScheme (Thanks to @n-at)
  • Added Fast Forward

4.0.5 View Tree

  • Added pcsx_rearmed core
  • Made pcsx_rearmed core the default psx core (better compatibility)
  • Added fbneo core
  • Made fbneo core the default arcade core (better compatibility)
  • Added picodrive core (sega32x)
  • Cleaned up documentation
  • Fixed/updated rar de-compression
  • Added segaMD, segaCD, sega32x button labels and virtual gamepad (Thanks to @n-at)
  • Added ability to use threads (pre compiled cores not yet available)
  • Fixed reversed gamepad button events (down was up, up was down)
  • Fixed Gamepad axis release not triggering
  • Add highly beta psp core - see readme

4.0.4 View Tree

  • Fix cheats "x" button
  • Optimize memory usage
  • Added ability to set urls to blob/arraybuffer/uint8array if needed

4.0.3 View Tree

  • Remove RetroArch messages
  • Center video at top

4.0.2 View Tree

  • Add link to RetroArch License on about page
  • Fix gamepad support for legacy browsers

4.0.1 View Tree

Complete application re-write. Everything changed. Although some changes to note are:

  • Optimization for smaller screens.
  • No more dead code.
  • Fix Gamepad for firefox.
  • Store srm in browser.
  • Ability to import/export srm files.
  • No more old cores

And much much more was changed...

3.1.5 View Tree

  • Fixed iOS bug for iPads
  • Added netplay! (only working on old cores)

3.1.0 View Tree

  • Added ability to drag and drop save states.
  • Fixed some "update" and "cancel" and "close" button confustion
  • Removed save state retroarch messages
  • Beta netplay cleanup (not yet working)
  • (Theoretically) fixed a bug that did not allow iOS devices to work

3.0.5 View Tree

  • Fixed screen recording on devices that do not support getUserMedia api.
  • Added C label buttons to nintendo 64 virtual gamepad.
  • Fixed EJS_color bug.
  • Savestates are pulled from the core itself, to always be correct.
  • Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
  • D-pad for virtual gamepad.
  • Updated translation files to include new menu options.
  • Ability to add more than one zone object to virtual gamepads.
  • Added ability to set custom menu options.
  • Virtual gamepad left handed mode.
  • Fixed Screen record svg.
  • Updated svg icons.
  • Cache "clear all" button.
  • Cache button moved to menu bar.
  • Added feature that will display the current downloaded size when the content length is not available.

2.3.9 View Tree

  • Fixed incorrect variable referencing when update bios download data callback.
  • Fixed rom storage size limits.
  • Fixed download percent not showing with some files.

2.3.8 View Tree

  • Remove broken shader.
  • Add download percent message.
  • Fixed UI "saving state" message not going away.

2.3.7 View Tree

  • Add more shaders.
  • Add bold fontsize option to custom virtual gamepad settings.
  • No longer set "normalOptions" from localization file.

2.3.6 View Tree

  • Remove default control mappings for gamepads.
  • Upgraded invalid character regex to catch more characters.

2.3.5 View Tree

  • Use regex to detect and replace invalid characters in filename/gamename settings.

2.3.4 View Tree

  • Add new arcade core.
  • Fix patch file game id set bug.

2.3.4 View Tree

  • Add new arcade core.

2.3.3 View Tree

  • Make version in loader.js reasonable.
  • Created function to return the game id to prevent unnecessary data stored.

2.3.2 View Tree

  • Fix reference error.
  • Fix bug in custom virtual gamepad processor where if value is set to 0 it will see that as the value being missing.

2.3.1 View Tree

  • Use let instead of var.

2.3.0 View Tree

  • Added ability to customize virtual gamepad UI.
  • Fixed bug where shader is not set on start.

2.2.9 View Tree

  • Added feature to save save files to indexeddb every 5 minutes.

2.2.8 View Tree

  • Re-write gamepad handler.

2.2.7 View Tree

  • Removed un-needed FS proxy functions.

2.2.6 View Tree

  • Added fps counter.
  • Fixed gba core aspect.

2.2.5 View Tree

  • Added ability to set custom control mappings.
  • Added ability to set custom default volume value.
  • Fixed gamepad axis as button, gamepad varaible compared to incorrect value.
  • Added ability to hide/show menu/context menu buttons.
  • Added ability to set game url to other data types.

2.2.3 View Tree

  • Fixed rar unarchiving function reference.
  • Updated rar header detection.
  • Removed netplay.

2.2.1 View Tree

  • Added core menu options for new cores.
  • Added new mame2003 core.
  • Added support for debug emscripten setting for new cores.

2.0.1 View Tree

  • Control mapping for beta cores.
  • Updated beta cores.
  • Beta cores now the default option!
  • Added a5200 core.
  • Fixed save state for new n64 core.

1.2.2 View Tree

  • Moved virtual gamepad menu button to the top left as 3 lines.
  • Added screen orientation lock.
  • Added beta n64 core!

1.2.1 View Tree

  • Updated beta core files.

1.1.6 View Tree

  • Replaced axios module with custom script.
  • Added pause/play for beta cores.
  • Sepperated css into its own file.
  • Renamed emu-min.js to emulator.min.js.

1.1.5 View Tree

  • Cleaned up fetch error function.
  • Cleaned up virtual gamepad event listeners.
  • Add code of conduct.

1.1.2 View Tree

  • Fixed error where mame files were misnamed.
  • Fixed bug where variable referenced was not defined in loader.js.
  • Added .gitignore
  • Added nodejs script to minify js files.
  • Added audio to screen recording.
  • Removed lots of dead code from emulator.js file.
  • Update axios module.
  • Added CORS error message
  • Update nodejs buffer module.

1.1.0 View Tree

  • Added minify feature.
  • Added emulatorjs logo.
  • Added beta nds and gb core.
  • Fixed bug where when wasm was supported on the beta cores and not the old cores, a network error would appear if not using beta.
  • Added volume setting and cheats to beta cores.

1.0 View Tree

  • Official release of the beta cores.
  • Ability to use beta cores in production.
  • Ability to use the old emulatorjs netplay server.
  • Set screen recording out file name to gamename if present.
  • Set screenshot out file name to gamename if present.
  • Fixed virtual gamepad bug where a function was referenced to as an array.

0.4.26 View Tree

  • Sepperated emulator.js file into 2 files.
  • Added support for a custom netplay server.
  • Fixed netplay room password input bug.
  • Fixed bug on iOS where virtual gamepad zone was un-responsive.
  • Added save state location feature.
  • Added mame core setting.
  • Added beta cores!
  • Added localization.
  • Re-wrote virtual gamepad code.
  • Added EJS_terminate function.
  • Exposed simulate_input function to window.
  • Update webrtc adapter.

0.4.25 View Tree

  • Moved load state on start from loader.js file to emulator.js file.
  • Moved data path function from loader.js file to emulator.js file.
  • Added ability to set custom path to data through EJS_pathtodata variable.
  • Added support for custom paths.
  • Expose the module and loader to window.
  • Added EJS_startOnLoaded to start the emulator on load.
  • Added quick save state slots.
  • Added save state message.
  • Only show save state slot in settings when save states are supported.
  • Added ds pointer lock.
  • Added menu button to virtual gamepad. Menu will only open when clicked on mobile.
  • Created licenese
  • Created official emulatorjs website.

0.4.24 View Tree

  • Deobsfocuted emulator.js and loader.js files to the most of my extent.
  • Added quick save/load hotkeys.
  • Added ability to use gamepad axis as button.
  • Fixed typo in controls title.
  • Only show needed inputs per system in control settings.
  • Re-write the loader.js file.
  • Exposed some variables to window.
  • Cleaned up context menu code.
  • Cleaned up some syntax in emulator.js file.
  • Declared EJS_AdUrl through loader.js file.
  • Fixed bug where mapping an axis as a button didn't work.
  • Added missing legacy n64 core.
  • Updated n64 core.

0.4.23-07 View Tree

  • Removed not needed code.
  • Added reset button to control settings.
  • Added clear button to control settings.
  • Added EJS_AdUrl option, the ability to add an ad to the emulator.
  • Cleaned up some file fetching.
  • Fixed RAR unarchiving.

0.4.23-05 View Tree

  • No longer cache games with the protocols of file:, and chrome-extension:.
  • Changed default keymappings.
  • Added screen recording button.

0.4.23-04 View Tree

  • Added mame2003, snes2002, snes2005, snes2010, and vbanext cores.
  • Added asmjs for all supported cores.

0.4.23-03 View Tree

  • Start loader.js deobsfocuting.
  • Deobsfocute extractzip.js.
  • Added EJS_gameName, the ability to change the file name of save states.

0.4.23-02 View Tree

  • Start emulator.js deobsfocuting.

0.4.23-01 View Tree

  • Added support for loading "blob:" urls.
  • Added support for loading state on game start.

0.4.23 View Tree

  • Added update available message.
  • Fixed a bug where the 'x' from the ad iframe was still visible on game start.
  • Added a2600 and mame cores.
  • Remove visible 'x'
  • Add rar extraction support.

0.4.19 View Tree

  • Added support for 32x, 3do, a7800, arcade, bluemsx, jaguar, lynx, ngp, pce, saturn, sega, segacd, and ws cores.

Initial release View Tree

  • Support for unzipping zip files.
  • Support for unzipping 7zip files.
  • Support for vb, snes, psx, nes, nds, n64, gba, and gb systems. Only support for WASM.