by koenkivits

koenkivits / nesnes

New EcmaScript NES emulator

127 Stars 21 Forks Last release: Not found MIT License 58 Commits 9 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


NESNES (New EcmaScript NES) is a pure JS NES emulator. Try the demo!

NESNES screenshot


NESNES can be installed through npm:

npm install nesnes

Getting started

NESNES can be used as follows:

var NesNes = require("nesnes");

var emulator = new NesNes( canvas ); emulator.load( pathToRom, callback );

These are the parameters being used: *

: a <canvas> DOM object to which the video output will be rendered. Not required (though nothing will be rendered if no canvas is given). *
: the path to an INES rom file (most ROMs found on the internet are in this format) *
: function to be executed once the ROM has been loaded and initialized. If
is passed instead of a function the ROM will automatically start playing once it has been loaded.

Build standalone

If you're running NESNES in the browser and don't want to use Browserify for your page, you can build a standalone version:

npm install

This will create

, which exposes a global NesNes object when included in your web page. Note that this file also comes packaged with the npm module.


Default configuration (keyboard and gamepad input) can be found in

. Input can also be configured programmatically:
// configure the first player controller to use the gamepad
emulator.input.configure(0, "gamepad", {
    "buttons": {
        "0": "b",
        "1": "a",
        "8": "select",
        "9": "start"
    "axes": {
        "0": "horizontal", // map axis 0 to left/right
        "1": "vertical", // map axis 1 to up/down


for an example configuration.

Note that multiple input types can be enabled for a single controller. For example, a single controller can listen to both the keyboard and a gamepad.


NESNES includes a basic test server. You can run it by executing:


from a directory containing NES ROMs. This starts up an HTTP server at localhost, serving only a simple page containing a NESNES instance and a ROM selection input to be able to test games. NESNES is recompiled on every page load to make it easy to see how your changes affect the emulator.

A lot of third party test ROMs are included in the

directory to debug specific parts of the emulator.

My game doesn't work!

Please file an issue or send a pull request. :)

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.