NES EMULATOR
binjnes
binjnes is an open-source, cycle-aware NES (Nintendo Entertainment System) emulator written in C that can be built as a native binary or compiled to WebAssembly for running in a browser.

WHY IT MATTERS
Why use binjnes?
Small, focused NES implementation with cycle-accurate timing goals, wide mapper support, save/load state and battery backup support, and the ability to build as a native program or a WebAssembly module for browser play. The project includes test harnesses and published test results to demonstrate correctness on many timing/APU tests.
BEST FOR
Best for
Developers, researchers, or hobbyists who want a compact, test-oriented NES core they can build locally or run in a browser; also useful for running headless tests against ROMs because of its Python test harness and hash-based validation.
The people behind binjnes
History and status
binjnes is maintained on GitHub (binji/binjnes). The repository contains many commits and active project files (source, docs, tests, submodules) and describes the emulator as a "simple NES emulator" implemented in C with WebAssembly build support. The project documents its features, a long list of supported mappers and a Python-based test harness. The repository shows ongoing activity (commits and tests) at the time of inspection, but no single explicit founding year is stated in the repository README.
What binjnes supports
- Native Linux (build from source)
- Native macOS (build from source)
- Native Windows (build from source via CMake/Make or equivalent)
- Web (WebAssembly build via Emscripten)
Download and availability
OFFICIAL DOWNLOADS
Get binjnes
Official source and any release assets are provided from the project's GitHub repository. Use the repository homepage to clone or the project's Releases page to obtain published release archives or binaries if available.
Get binjnes ↗DOCUMENTATION
Official documentation
Read the official configuration, compatibility, and troubleshooting material before changing advanced options.
Read official documentation ↗binjnes setup guide
Setup note: This guide describes how to obtain binjnes, build it natively and as WebAssembly, and run it. It follows the project's documented steps and relies on tools listed in the repository (CMake, sokol, optional Emscripten for wasm). The guide assumes you will supply your own NES ROM files and any legally required firmware; commercial games and firmware are not included with the project.
- Clone the repository (including submodules): Use a recursive clone so submodules (third-party libraries used by the project) are included: git clone –recursive https://github.com/binji/binjnes If you already cloned without submodules, run: git submodule update –init
- Prerequisites: Install CMake and a C toolchain for your platform. The README also references the sokol headers/libraries as a dependency (the project uses sokol). For building WebAssembly, install an Emscripten toolchain (the project expects an emscripten directory or a symlink pointing to your Emscripten installation).
- Build natively (Linux / macOS / Windows via CMake): From the repository root you can run make which will invoke CMake and place outputs in bin/. Alternatively: mkdir build && cd build && cmake .. && make The produced native executable is typically bin/binjnes. Run it from the command line as: bin/binjnes <path-to-rom.nes>
- Build WebAssembly (browser) with Emscripten: Provide a symlink or path named emscripten pointing to your Emscripten installation, then run: ln -s ${PATH_TO_EMSCRIPTEN} emscripten make wasm Or set EMSCRIPTEN_CMAKE on the make command line: make wasm EMSCRIPTEN_CMAKE="/path/to/Emscripten.cmake" The repository contains a docs/ and an example web UI used when running the wasm build.
- Run and control the emulator: Native: bin/binjnes <filename> The README documents keyboard controls for players, save/load state keys, rewind, pause, stepping one frame, and reset. When running in a browser, the included web UI supports file upload, input configuration, save download/upload, scaling and pause controls as documented on the project's site.
- Testing and validation: The repo includes a Python test harness (scripts/tester.py) and a test_results.md file. Use the provided scripts to run selected test categories (for example: scripts/tester.py apu). The project uses hash-based checks to validate test outputs.
- Changing build configuration or updating submodules: If you change submodules or build options, remove generated output directories before rebuilding to force CMake to reconfigure (the README suggests removing out/ or rerunning CMake).
Software reminder: binjnes does not include commercial game ROMs, BIOS/firmware, or license keys. You must provide legally obtained ROM images and any required files yourself. Follow local law when acquiring game files.
Sources and further reading
Detailed guides and tutorials
Explore step-by-step guides for binjnes as they are published.
Retro Replay Retro Gaming History, Reviews & Emulation
