NES EMULATOR
nes-web
nes-web is an open-source, browser-focused NES (Nintendo Entertainment System) emulator project that adds a peer-to-peer multiplayer layer (WebRTC) and can be run as a Docker image for self-hosting.

WHY IT MATTERS
What it is
nes-web turns classic NES ROMs into multiplayer online sessions in web browsers using WebRTC for peer-to-peer connections. The project focuses on web deployment and ease of sharing/play via a hosted or self-hosted web server.
BEST FOR
Notable strengths
Runs in modern web browsers, supports gamepad input (and keyboard simulation), fullscreen mode, multiple languages, and provides a ready-made Docker image (nfam/nes-web) to self-host a ROM directory and web UI for multiplayer sessions.
The people behind nes-web
History and status
The project is hosted on GitHub under nfam/nes-web. The repository describes the project as a web NES emulator with multiplayer support via WebRTC and includes a Docker image for deployment. The GitHub repo shows limited activity (small number of commits and contributors). There are no official binary releases published in GitHub Releases at the time of examination; the README supplies a Docker run example for deployment and links to an online demo hosted by the author.
What nes-web supports
- Nintendo Entertainment System (NES) ROMs (.nes file extension required by the Docker image by default)
- Browser-based play (clients connect with a modern web browser)
- Gamepad input
- Keyboard-to-gamepad simulation
- Fullscreen
- Peer-to-peer multiplayer via WebRTC (P2P)
Download and availability
OFFICIAL DOWNLOADS
Get nes-web
Official download / distribution paths: source and build instructions in the GitHub repository; a Docker image available as nfam/nes-web for running a prebuilt server. There are no GitHub Releases containing packaged emulator binaries documented in the repository at the time of review.
Get nes-web ↗DOCUMENTATION
Official documentation
Read the official configuration, compatibility, and troubleshooting material before changing advanced options.
Read official documentation ↗nes-web setup guide
Setup note: Quick self-hosting guide (verified from the project's README Docker example). This focuses on the documented Docker deployment, which is the simplest practical setup for running nes-web as a server for browser clients.
- Prepare a host machine with Docker: Use any machine that can run Docker (Linux, macOS with Docker Desktop, Windows with Docker Desktop). Ensure Docker is installed and you can run docker pull and docker run.
- Create local directories for ROMs and screen images: Create two directories on the host: one to hold NES ROM files and one for optional screen image files. The README documents examples like ~/data/roms and ~/data/screen.
- Place ROM files correctly: Copy legal NES .nes ROM files into the ROM directory. The project README specifies the server requires ROM filenames to end with the .nes extension. Do not include commercial games, BIOS, or firmware in violation of copyright.
- (Optional) Provide screen images: If you want per-ROM preview images, place .png images in the screen directory using the same base filename as the corresponding .nes ROM (README notes same-base-name pairing).
- Run the Docker container (documented example): A documented example from the repository runs the container with host networking and mounts: sudo docker run -d –name nes-web -p 8080:8080 -v ~/data/roms:/data/roms -v ~/data/screen:/data/screen nfam/nes-web. Adjust paths and ports to your environment. The container exposes an HTTP interface (example uses port 8080).
- Access the web interface: Open a modern web browser and navigate to http://<host_address>:8080/ (replace <host_address> with the server IP or hostname). From there, follow the web UI to select ROMs and start or invite peers to multiplayer sessions. The project provides a public demo link in its README for reference.
- Controls and input: Browser clients can use connected gamepads or keyboard-based gamepad simulation as explained by the project. For best results, use a modern browser with Gamepad API support.
- Network and multiplayer notes: Multiplayer uses WebRTC peer-to-peer connections. For public multiplayer across NATs, a working STUN/TURN arrangement may be required depending on the network topology; the repository documents WebRTC usage but does not bundle or guarantee TURN services. If you self-host, ensure appropriate firewall/router ports are open for the webserver and allow WebRTC traffic from clients.
Software reminder: The project does not include any commercial NES ROMs, firmware, or BIOS files. You must provide your own legally obtained .nes ROMs. The Docker image and source are open-source according to the repository license.
Sources and further reading
Detailed guides and tutorials
Explore step-by-step guides for nes-web as they are published.
Retro Replay Retro Gaming History, Reviews & Emulation
