I'm a solo dev who spent the last few weeks obsessively trying to solve the "last mile" problem of browser emulation: making it actually feel good to play.
While the core tech (Libretro/WASM) is solid, wrapping it in a UI that feels "native" is a deep rabbit hole. I built Koin Deck Player to solve the glue-code headaches, and I've open-sourced it as a drop-in React component.
It handles the tricky engineering bits so you don't have to:
- Latency Tiers: Automatically enables "Run-Ahead" (calculating frames in advance) for 8/16-bit systems to get sub-frame latency.
- Performance: Detects SharedArrayBuffer support to switch N64/PS1 emulation to threaded video rendering, preventing UI freezes.
- Mobile Controls: A custom GPU-accelerated virtual controller that uses heuristic multi-touch (sliding finger between buttons works) and haptics.
- Audio: Handles the notorious auto-play/resume AudioContext quirks across browsers.
I built this because I believe preservation shouldn't just be about archiving file, it should be about making the experience delightful.
Repo is MIT licensed. I'd love to hear your feedback on the input latency!
beingmudit•2mo ago
I'm a solo dev who spent the last few weeks obsessively trying to solve the "last mile" problem of browser emulation: making it actually feel good to play.
While the core tech (Libretro/WASM) is solid, wrapping it in a UI that feels "native" is a deep rabbit hole. I built Koin Deck Player to solve the glue-code headaches, and I've open-sourced it as a drop-in React component.
It handles the tricky engineering bits so you don't have to:
- Latency Tiers: Automatically enables "Run-Ahead" (calculating frames in advance) for 8/16-bit systems to get sub-frame latency. - Performance: Detects SharedArrayBuffer support to switch N64/PS1 emulation to threaded video rendering, preventing UI freezes. - Mobile Controls: A custom GPU-accelerated virtual controller that uses heuristic multi-touch (sliding finger between buttons works) and haptics. - Audio: Handles the notorious auto-play/resume AudioContext quirks across browsers.
I built this because I believe preservation shouldn't just be about archiving file, it should be about making the experience delightful.
Repo is MIT licensed. I'd love to hear your feedback on the input latency!