Skip to content
Green 9 box version of Roll the Bones
Green 9 box version of Roll the Bones Image by creator:jamesdinardo, via Wikimedia Commons (CC BY-SA 3.0).

bones

NES EMULATOR

bones

BoNES (bones) — an open-source NES emulation library written in Go with a small CLI for utilities. Implements core CPU/PPU functionality but is incomplete (missing APU and limited mapper support); intended for developers who want a Go-native NES core or simple CLI tools rather than a full consumer emulator.

NESPRIMARY SYSTEM
2018PROJECT BEGAN
Open sourcePROJECT MODEL

WHY IT MATTERS

Why this project exists

bones provides a native Go implementation of NES components (CPU, PPU, cartridge/ines handling) so Go projects can embed or experiment with NES emulation without calling C/C++ libraries. It also provides a command-line utility for basic NES-related tasks.

BEST FOR

What it's best for

Embedding NES emulation in Go projects, learning or experimenting with NES internals in Go, or using the provided CLI utilities. Not recommended as a complete end-user NES emulator because sound (APU) is not implemented and mapper support is limited.

The Legend of Zelda gameplay on NES
Gameplay from The Legend of Zelda on NES.

The people behind bones

History and current status

The bones repository (m4ntis/bones) is published on GitHub and described in its README as "A NES emulation library for go." The project has a release (v1.0.0) and activity and documentation in the repo. The README and repository note that most core hardware features are implemented but the APU is missing and that mapper support is sparse; timing issues and limited mapper coverage are explicitly called out. The project is licensed GPL-3.0. The repository contains source folders for cpu, ppu, ines, docs and a web/CLI component. There are issues open in the repo indicating active maintenance requests, but compatibility and completeness are limited compared with mature NES emulators.

What bones supports

  • Nintendo Entertainment System (NES) — core CPU and PPU emulation; limited mapper coverage; APU not implemented
  • Go projects (library usage) — importable Go packages
  • Command-line utilities — small CLI bundled with the project
  • Platforms supported by Go toolchain and available prebuilt binaries (Linux, macOS, Windows) — see releases for platform-specific binaries

Download and availability

OFFICIAL DOWNLOADS

Get bones

Official releases and source are available from the project's GitHub repository releases page. Prebuilt binaries may be present on the releases page; if a binary for your platform is not provided, build from source with Go.

Get bones ↗

DOCUMENTATION

Official documentation

Read the official configuration, compatibility, and troubleshooting material before changing advanced options.

Read official documentation ↗
Broken or missing download? Emulator projects move and official links sometimes change. Please contact Retro Replay so the source can be verified and updated.

bones setup guide

Setup note: This setup guide describes how to obtain bones, build it, and use its CLI or embed the library in a Go project. It focuses on reproducible steps and platform-specific notes reported in the project's README.

  1. 1) Get the source or release: Check the project's GitHub releases page for prebuilt binaries. If a binary for your OS/architecture is available you can download and run that. Otherwise clone the repository to build from source: git clone https://github.com/m4ntis/bones.git
  2. 2) Prerequisites: Install a Go toolchain (the README assumes a modern Go install). On Linux, the README lists development packages required for building the CLI UI components: libgl1-mesa-dev and xorg-dev. Ensure $GOBIN or your Go bin directory is in your PATH after installation.
  3. 3) Build the CLI binary: From the repository root you can build the CLI target referenced in the README. The project recommends: go get -u github.com/m4ntis/bones/bones or use go install with a recent Go: go install github.com/m4ntis/bones/bones@latest This installs the bones CLI into your Go bin directory.
  4. 4) Using the CLI: The README documents a bones CLI. Run bones -h for general usage or bones <command> -h for command-specific help. The CLI provides several NES-related utilities rather than a full GUI emulator. Expect commands for inspecting iNES files, utility tasks, and developer-oriented functions.
  5. 5) Embedding the library in your Go project: Import packages from the module path (for example github.com/m4ntis/bones or subpackages like github.com/m4ntis/bones/cpu) in your Go code. Consult the package documentation (pkg.go.dev) and the repository's docs directory for available APIs and examples. Build and link as a normal Go dependency.
  6. 6) Known limitations and compatibility: Do not expect full compatibility with commercial NES ROMs: the project README explicitly notes the APU is not implemented and mapper support is limited. The repo also mentions timing issues that can make some games crash (README example: Super Mario Bros.). If you need accurate audio or broad compatibility (MMC3 and many proprietary mappers), use a more mature emulator project.
  7. 7) Troubleshooting and where to look: If a build fails on Linux due to missing dev libraries, install libgl1-mesa-dev and xorg-dev. For API questions, consult the docs/ folder in the repository and the Go package documentation. Open issues or search existing issues in the GitHub repository for problems others have reported. Because the project is GPL-3.0 licensed, check compatibility with your project if you plan to redistribute modified binaries.

Software reminder: bones does not include any commercial ROMs, firmware, or BIOS. Compatibility is limited (no APU, limited mappers). Use legally obtained ROMs and follow applicable copyright laws.

Sources and further reading

Detailed guides and tutorials

Explore step-by-step guides for bones as they are published.