GoNES vs JSNES
GoNES
github.comJSNES
github.comSide by side
| Figure | GoNES | JSNES |
|---|---|---|
| Price from | Free | Free |
| Free plan | Yes | Yes |
| Free trial | — | — |
| Open source | — | — |
| Web | Yes | Yes |
| Windows | Yes | — |
| macOS | Yes | — |
| Linux | Yes | Yes |
| Plans published | 1 | 1 |
| Spec score · NES Emulators | 8.7 (#1) | 8.3 (#3) |
| Installation | The README documents installation through Homebrew on macOS, release binaries, the browser version, and Go source installation. | The README documents installation with npm install jsnes and browser use through an unpkg script. |
| License | The repository identifies its license as Apache-2.0. | The repository identifies its license as Apache-2.0. |
| Purpose | GoNES is an NES emulator written in Go. | JSNES is a JavaScript NES emulator library that works in browsers and Node.js. |
| ROM loading | The app opens a file picker for a .nes file and can also be launched from a terminal with a ROM file argument. | The library can load ROM data from a URL or from a string, Uint8Array, or ArrayBuffer. |
| Save states | The README lists keyboard shortcuts for saving, loading, and undoing save states. | The API can serialize emulator state with toJSON() and restore it with fromJSON(). |
Plans
In their own words
GoNES
GoNES is a free, open-source NES emulator written in Go. It runs on Windows, macOS, Linux and web browsers; the browser version compiles to WebAssembly, and the project links to a hosted instance. At startup, the app opens a file picker for selecting a .nes ROM, and it can also be launched from a terminal with a ROM file argument. The project lists support for mappers 0, 1, 2, 3, 4, 7, 69 and 71, which it says cover 84.34% of official NES games. Keyboard controls for two players are configurable. Save-state, load-state and undo bindings are listed. GoNES creates a configuration file on first run, with its location documented for each desktop platform. Release downloads are provided, and macOS installation through Homebrew is documented. Source installation is also documented. Building requires OpenGL development libraries because rendering uses Ebitengine. The project says its GUI renders, but menu options still need to be added.
JSNES
JSNES is a free JavaScript library for emulating NES games in browsers and Node.js. Its Browser helper handles canvas rendering, audio, keyboard and gamepad input, and frame timing; the lower-level NES class allows custom rendering and audio handling in Node.js. ROM data can be loaded from a URL or from a string, Uint8Array, or ArrayBuffer. The API runs frames, accepts controller input for either player, resets, adjusts frame rate, and includes methods for moving and triggering the Zapper. Applications can serialize and restore emulator state with `toJSON()` and `fromJSON()`. The `onBatteryRamWrite` callback lets an application capture battery-backed SRAM writes for persistent game saves. Sound emulation is enabled by default, with a default sample rate of 48000 Hz, and an audio callback is available. The README provides npm installation for Node.js or Webpack and an unpkg script for browser use, as well as a React embedding example. JSNES is licensed under Apache-2.0; its GitHub Issues tracker accepts bug reports and feature requests.