14 Free Open-Source Web-Based Game Emulators, Libraries, and Tools to Run Retro Games in Your Browser
Retro gaming refers to playing older video games, typically from consoles such as the Nintendo Entertainment System (NES), Sega Genesis, or Sony PlayStation. These games evoke nostalgia and allow players to experience the charm of gaming eras gone by.
To run these games, enthusiasts often rely on emulators—software applications that replicate the original console or computer environment on modern hardware, making it possible to play games from discontinued systems.
Why Retro Gaming in browser is gaining popularity?
The shift toward browser-based emulation is trending for many reasons:
- Accessibility and Convenience: Browser-based platforms, like EmulatorJS or Webmulator, let users play games without needing to download software or worry about compatibility issues. All that's required is an internet connection and a browser, making it easier for people to access games on various devices, including smartphones, tablets, and low-power machines.
- Game Preservation and Flexibility: Browser emulators support not only licensed games but also open-source and homebrew content, helping preserve unique or rare games. Players can even link to game ROMs stored in cloud services like Dropbox or Google Drive for easy access, as seen with platforms like WebRCade.
- Cross-Platform Play: Running games in a browser means they can work across different operating systems—Windows, macOS, Linux, and even mobile platforms—eliminating the need to adapt emulators for each OS individually.
This also helps circumvent hardware limitations found on older or constrained devices
Our list includes many web gaming emulators, libraries, and projects that enable anyone, especially developers, to create retro gaming systems for their users.
Let me know if you need further adjustments or elaboration!
1- EmulatorJS
EmulatorJS allows you to embed many gaming emulators in your website or webapp. It is the core of many online gaming emulators as it is an open-source and free to use for everyone.
It uses RetroArch's library libretro that supports many gaming engines by default.
The emulator comes with an online game editor that enables users create their games by selecting their favorite emulator first then include their games.
The supported systems include:
- 3DO
- Arcade
- Atari 2600, Atari 7800
- Atari Jaguar
- Atari Lynx
- Game Boy Advance
- Gameboy color
- MSX
- NES
- Nintendo DS
- Nintendo 64
- Playstation
- Many Sega systems
- Virtual Boy
2- WebNES
NES emulator in JavaScript using HTML5 canvas. Optimised for Chrome's V8 engine. Due to various performance issues and the lack of real typed arrays in IE, it is entirely not supported.
Features
- Supports all common NES mapper formats, approximately 98% of games should work
- Audio support using the HTML5 WebAudio API
- WebGL support with canvas fallback on platforms which do not support it
- Supports a selection of WebGL shaders used in the higan SNES emulator, such as CRT monitor emulation
- Remappable keyboard keys
- Save state support through quick save / quick load
- Game genie database - If a game is loaded which has known game genie codes, the player can click the star on the toolbar to be able to activate / deactivate GG codes
- Screenshots
- Game pad support
- NTSC / PAL support
- Zip file support to load ROMs
- Game speed can be slowed down / sped up
- Debugging for ROM authors or other emulator authors - Trace logs can be generated for CPU instructions and PPU events
3- SkyEmu
SkyEmu is a low level GameBoy, GameBoy Color, Game Boy Advance, and DS emulator. Its primary focus is to preserve these great systems for future generations while providing a good user experience through a good mixture of tradeoffs of accuracy, performance, features and usability.
Features
- Highly accurate Game Boy Advance emulation
- Game Boy and Game Boy Color Emulation
- DS Emulation (Beta Quality)
- High Quality Upscaling Shaders, Color Correction, and Screen Ghosting
- Cross Platform: Windows, MacOS, Linux, FreeBSD, iOS, Android, and Web
- Game Controller and Rumble Support with configureable keybinds
- 4x Persistent Save State Slots with screenshot preview
- Game fastforward and rewind support (supporting very long rewind times)
- Action Replay Cheat Code Engine
- Localization in Armenian, Chinese, Danish, Dutch, English, German, Greek, Italian, Polish, and Russian
- Support for emulating the Real Time Clock and Solar Sensor
- CPU, MMIO, and Memory Debuggers
- Support for loading official BIOS and Boot ROM dumps
- Support for loading roms compressed in .zip archives
- REST-like API for asynchronous scripting and other automation
4- RetroAssembly
RetroAssembly is personal retro game collection cabinet in your browser by arianrhodsandlot.
Features
- 📁 Import a directory from your local directory or cloud drive, then a game list will appear
- 🖼️ Automatically grab game boxarts.
- 🎮 Joystick friendly, no need to switch between joysticks and mouse while navigating through different games or consoles
- 💾 Save states and sync them to with different devices (if using a cloud disk we support)
- 📱 Virtual controller for mobile devices
- ⌛ Rewind with a controller button combination (select + L2)
- 🍎 Super convenient for iOS and iPadOS, no AltStore or jailbreak required. Either play directly in your browser or add it to home screen.
5- Nostalgist.js
Nostalgist.js is an open-source JavaScript library that allows you to run emulators of retro consoles like NES and Sega Genesis, within web browsers.
Nostalgist.js is built on top of RetroArch Emscripten builds.
6- RomM
RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes, and custom tags, RomM is a must-have for anyone who plays on emulators.
Underhood, RomM uses EmulatorJS library, with is the primary culprit in many online and web-based game emulators.
RomM is an open-source project that is released under the AGPL-3.0.
Features
- Scans your existing games library and enhances it with metadata from IGDB and MobyGames
- Supports a large number of platforms
- Play games directly from the browser using EmulatorJS
- Share your library with friends while limiting access and permissions
- Supports MAME, Nintendo Switch, and Sony Playstation naming schemes
- Detects and groups multifile games (e.g. PS1 games with multiple CDs)
- Can parse tags in filenames (e.g. (E), (USA), (rev v1), etc.)
- View, upload, update, and delete games from any modern web browser
7- RETROCADE
RETROCADE is (going to be) a collection of browser-based emulators capable of playing games from retro consoles and arcade machines, optimized for use both on desktop computers as well as mobile devices. The right tool for all your retro gaming needs!
It is built using React, and TypeScript.
8- NgxRetroarch
This is an open-source RetroArch web component that can be used as an online retro-gaming emulator.
9- Play!.js
This is a port of Play!, a PlayStation2 emulator, running in a web browsers
This is a port of Play!, a PlayStation2 emulator, running in a web browser. This is only an experiment and is not meant to play all games that are currently supported by the emulator on desktop and mobile.
Supported file types: ISO, CSO, CHD, ISZ, BIN, ELF.
No BIOS file required.
Recent version of Chrome or Firefox required for a smoother experience.
10- js-dos
js-dos is a frontend for emulators that provides nice UI and infrastructure to run DOS or Windows programs in browser.
It provides full-featured DOS player that can be easily installed and used to get your DOS program up and running in browser quickly. js-dos provide many advanced features like multiplayer and cloud storage. All available features are enabled for any integration and free.
The simplest API to run DOS/Win 9x programs in browser or node.
Features
- Works in worker or render thread
- Support execution in Node and Browsers
- Multiple backends: DOSBox, DOSBox-X
- Mobile support (v8 - WIP, v7 - production)
- Able to run huge games (like Diablo, etc.)
- Multiplayer support
- Cloud storage
- WebAssembly and pure JS versions
11- Boytacean
This is a Game Boy emulator built using the Rust Programming Language and is running inside this browser with the help of WebAssembly.
Features
- Game Boy (DMG) and Game Boy Color (CGB) emulation
- Simple navigable source-code
- Web, SDL and Libretro front-ends
- Audio, with a pretty accurate APU
- Serial Data Transfer (Link Cable) support
- Game Boy Printer emulation
- Support for multiple MBCs: MBC1, MBC2, MBC3, and MBC5
- Save state support using the BESS Specification for cross-compatibility with other emulators
- Cheat support using Game Genie and GameShark codes
- Variable CPU clock speed
- Accurate PPU - passes dmg-acid2 and cgb-acid2 tests
- Mobile-first experience
- Transparent RAM saving using Web Storage API
- GamePad support using Web Gamepad API
- Unobstructive and effective on-screen GamePad
- Rumble emulation and haptic feedback
- Cool bespoke display palettes built by TheWolfBunny64.
- Fullscreen browser mode
- Debug mode - VRAM and registers
12- Pinky - an NES emulator written in Rust
This is an NES emulator written in Rust completely from scratch purely based on publicly available documentation.
What you see here is its port compiled to WebAssembly using the magic of the stdweb crate and Rust's native WebAssembly backend, without the use of Emscripten.
You can take a peek at the code if you're interested, but first I invite you to take it for a spin and play a few games!
You can chose between a few fun freeware NES games, but if you have the ROMs then games like Super Mario Brothers, Contra, Legend of Zelda, or Final Fantasy will work too!
Controls are Z and X for A and B, Enter and Right Shift for Start and Select, and the arrow keys!
You might also want to check out the version compiled *with* Emscripten to WebAssembly or to asm.js.
13- eNGE
This is a free JavaScript browser based PSX emulator (runs games at full speed) (Source)
14- Tiny Emulators
Based on the same chip- and system-emulator source code as YAKC, but as minimal WASM apps without fluff (source)