A Nintendo Entertainment System (NES) emulator for the web
- Save states (CTRL+S to save, CTRL+L to load last)
- Customizable controls
- Full Screen mode
- Working audio
- Auto generated ROM backgrounds in the library
- Save state preview in the saves menu
- Gamepad support
- Supported mappers: NROM (0), MMC1 (1), UNROM (2), MMC3 (4)
Press ESC / Tab to toggle the UI
Use the arrow keys to navigate the menus and press enter to validate
- Support more mappers (3, 66, 118, ...)
- Use an AudioWorkletNode instead of a scriptProcessor
- Support iNes 2.0 roms
- Expose the core's second joypad in frontend controls
- Time travel mode (Save states recorded at regular intervals)
- Replay mode (Replay all inputs from the start)
- Different color palettes
- Better UX
- VR / 3D mode with sprites in front and bg tiles in the background?
- Optimize! (JIT Compiler / frame by frame or scanline by scanline rendering instead of pixel by pixel)
- Wide mode (for scrolling games, visualize the prefilled tiles in advance)
Nessy can easily be embedded on other platforms, see the 3ds/ folder for a 3ds port (no sound and very slow frame rate for now).
Run cargo test --all-targets --locked and node tests/audit_controls.mjs (Node 24+).
The audit fixes and conformance results include the pinned public ROM suite and reproduction commands.
Emulation now advances peripherals on each CPU bus cycle. Direct users of CPU::step() must not also call Bus::advance() for those cycles. The Nes interface handles this automatically.
Save format 1 includes audio, mapper IRQ timing, and complete video state. Older format-0 saves are rejected rather than restored incompletely; create new saves after upgrading. The web frontend still starts if an old automatic save cannot be resumed.












