bfirsh/jsnes

A JavaScript NES emulator.

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 24 minutes ago
Added to GitGenius on September 10th, 2026
Created on June 30th, 2009
Open Issues & Pull Requests: 69 (+0)
GitHub issues: Enabled
Number of forks: 857
Total Stargazers: 6,417 (+0)
Total Subscribers: 125 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 21.5 days
Mean response time: 521.1 days
90th percentile: 2037.6 days
Tracked items: 48

How this project is maintained

Around half of the issues opened in the past year never receive a reply. Only 26% of open issues come from outside the core team — the tracker reads mainly as internal planning. Only 6% of issues opened in the past year have been closed. Three people close 100% of everything that gets resolved.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 27
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 232 days
Stale 30+ days: 26
Stale 90+ days: 24

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

  • bug (23)
  • difficulty: easy (14)
  • accuracy (12)
  • good first issue (11)
  • priority: medium (10)
  • component: mapper (7)
  • difficulty: medium (7)
  • priority: low (7)

Most active issues this week

No issue events were indexed in the last 7 days.

Detailed Description

JSNES is a JavaScript NES emulator that runs in both the browser and Node.js.

The tool emulates the Nintendo Entertainment System by implementing the 6502 processor and NES hardware components. It accepts ROM files as input and executes them frame-by-frame, producing pixel buffers and audio samples that can be rendered and played back. The emulator supports save states through serialization and deserialization of its internal state, and handles input from keyboards, gamepads, and the Zapper light gun peripheral.

For browser integration, the project provides a high-level `Browser` class that automatically manages canvas rendering, audio playback, keyboard and gamepad input, and frame timing, requiring only a container element and ROM data to get running. A complete React frontend is also included in the repository. For developers needing lower-level control—such as custom rendering pipelines, audio handling, or Node.js integration—the core `NES` class exposes callbacks for frame buffers, audio samples, and status updates, along with methods to control emulation timing, button input, and state persistence. The tool supports battery-backed SRAM for game save data through a callback mechanism.

The project maintains active development with regular commits addressing bug fixes and feature improvements. Pull requests receive timely review and feedback from maintainers. The codebase shows consistent attention to both core emulation accuracy and user-facing API design, with documentation kept current alongside code changes.