koin.js
A batteries-included React component for browser-based retro game emulation. Built on top of Nostalgist.js, adding production-ready features like cloud saves, touch controls, gameplay recording, and RetroAchievements integration.
What You Get
Core Emulation
- [✓]27 Systems — NES to PlayStation, Game Boy to Arcade
- [✓]Automatic Core Selection — Detects system from file extension
- [✓]BIOS Support — Flexible mounting (system or ROM folder)
- [✓]10 CRT Shaders — Lottes, Geom, zFast, LCD Grid, and more
Save System
- [✓]Slot-Based Saves — Multiple save slots with screenshots
- [✓]Auto-Save — Configurable interval with progress indicator
- [✓]Emergency Saves — Automatic save on tab close/hide
- [✓]Save Queue — Prevents corruption from concurrent operations
Controls
- [✓]Touch Controls — GPU-accelerated virtual D-pad and buttons
- [✓]Gamepad Support — Xbox, PlayStation, Switch detection
- [✓]Key Remapping — Per-system keyboard layouts
- [✓]Multi-Touch — Combo inputs (e.g., diagonal + A+B)
Extras
- [✓]Gameplay Recording — VP9 WebM capture at 30fps
- [✓]RetroAchievements — Login, unlock tracking, hardcore mode
- [✓]Rewind — Go back in time (Tier 1 systems)
- [✓]Speed Control — 0.5x to 4x playback speed
Performance Optimization
The player automatically applies optimized RetroArch settings based on system complexity:
Tier 1 — Zero Lag
8-bit/16-bit systems get Run-Ahead enabled, cutting 1 frame (~16ms) of input latency for near-instant response.
NES, SNES, Genesis, GB, GBC, Master System, Game Gear, PC Engine, Atari 2600/7800, Lynx, Neo Geo Pocket, WonderSwan
Tier 2 — Max Smoothness
32-bit+ systems get Threaded Video for smooth, stutter-free gameplay. Rewind is disabled to save memory.
PlayStation, N64, GBA, Saturn, Dreamcast, Nintendo DS, PSP, Arcade, DOS, Neo Geo