NES EMULATOR
gones
GoNES (gones) — an open-source NES (Nintendo Entertainment System) emulator written in Go with native desktop builds and a WASM/web frontend.

WHY IT MATTERS
Why consider GoNES?
Small, actively developed NES implementation in Go that focuses on correctness of core components (CPU, PPU, APU) and provides both native and web (WASM) frontends, with prebuilt binaries and a Homebrew tap for macOS.
BEST FOR
Best for
Developers, learners, and tinkerers who want a readable Go-based NES implementation, or users who want a lightweight NES desktop app or a web-playable build.
The people behind gones
History & current status
GoNES is an NES emulator project hosted on GitHub (gabe565/gones). The repository contains a full emulator implementation (CPU, PPU, cartridge/mappers, APU and a GUI using Ebiten) and an accompanying web-hosted WASM build. The project lists supported mappers (0, 1, 2, 3, 4, 7, 69, 71) claiming coverage of about 84.34% of official NES cartridges; CPU tests such as nestest.nes are referenced as passing for the CPU implementation. Development is active in the repository (numerous commits and recent releases), and the project publishes automated binaries via GitHub Releases as well as a hosted web build.
What gones supports
- Nintendo Entertainment System (NES / Famicom)
- Desktop (Windows, macOS, Linux) via native binary
- Web (WASM) via hosted instance
- Common NES mappers: 0, 1, 2, 3, 4, 7, 69, 71 (as documented in repo)
Download and availability
OFFICIAL DOWNLOADS
Get gones
Official binaries and release assets are published on the project's GitHub Releases page. Source can be installed via go install or built from source. A macOS Homebrew tap is documented for install as well.
DOCUMENTATION
Official documentation
Read the official configuration, compatibility, and troubleshooting material before changing advanced options.
gones setup guide
Setup note: Practical setup notes and a step-by-step guide to get GoNES running on common platforms. This guide follows the project's own instructions and notes (Ebiten/OpenGL dev libraries are required to build the native GUI). Refer to the official docs for full command-line options and configuration details.
- Option A — Download a prebuilt binary (recommended for most users): 1) Open the project's Releases page and download the appropriate binary for your OS (Windows .zip/.exe, macOS tar.gz, or Linux tar.gz). 2) Unpack the archive and run the executable (on macOS you may need to allow the app in Security settings). 3) Launch the app; the GUI opens a file picker. Choose a valid .nes file to start emulation. Note: commercial games, ROMs, and BIOS/firmware are not included — you must provide your own legally obtained ROM files.
- Option B — Install via Homebrew (macOS): 1) The README documents an official Homebrew tap. On macOS with Homebrew installed run: brew install gabe565/tap/gones –no-quarantine. 2) After installation run gones from Applications or the terminal (gones ROM_FILE).
- Option C — Install via go (from source / latest build): 1) Ensure Go is installed (go.dev) and your environment is set for building Go programs. 2) Install with: go install gabe565.com/gones@latest 3) After installation the gones binary will be placed in your $GOPATH/bin or $GOBIN (or $HOME/go/bin). Run it from a terminal: gones ROM_FILE. When building from source the project requires Ebiten and OpenGL development libraries for rendering; follow Ebiten's platform-specific install steps before building.
- Configuration and first run: 1) On first run GoNES generates a config file in the platform-appropriate config directory (Windows: %AppData%\gones\config.toml; macOS: ~/Library/Application Support/gones/config.toml; Linux: ~/.config/gones/config.toml). 2) You can edit keybindings, paths, and other options in that TOML file or use command-line switches documented in the project's docs. Save files and SRAM handling are managed by the emulator but require your ROMs to use battery-save data; save states are supported via keybinds (default: F1 to save, F5 to load).
- Web (WASM) — try without installing: A web-hosted WASM build is available at the project's site for quick testing in-browser. Performance and available features may differ from the native build; use the native binary for best audio/display and controller support.
- Building from source — developer notes: 1) Clone the repository: git clone https://github.com/gabe565/gones.git 2) Ensure you have Go and the platform-specific OpenGL/Ebiten dev libraries installed. 3) Build or install: go install gabe565.com/gones@latest (or go build ./cmd/gones). 4) Tests and examples are present in the repo; read README and docs for developer-targeted commands. The repo contains internal packages for cartridge handling (FromiNesFile), console, CPU, PPU and more; consult pkg documentation for API details.
- Controller & keybind tips: Default keybinds are listed in the README (Player 1 maps WASD/ M/N keys, Player 2 maps to numpad by default). External controllers are supported when using the native build; mapping configuration is available in the config file. Use the built-in save state keys (F1/F5) and fast-forward (hold F) to improve playtesting sessions.
Software reminder: Do not distribute copyrighted ROMs or BIOS files. The emulator does not include commercial games or firmware; you must supply any ROM files. Follow your local laws regarding ROM ownership.
Sources and further reading
Detailed guides and tutorials
Explore step-by-step guides for gones as they are published.
Retro Replay Retro Gaming History, Reviews & Emulation
