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!
I’m thrilled to share WePlayDOS, a project I built to bring the magic of classic DOS games to modern browsers. With the power of the js-dos emulator, anyone can relive their favorite retro games without needing downloads or complicated setups.
Features:
1. Host Anywhere: Self-host the project on any platform you like or deploy it easily using services like Vercel.
2. Customizable: Add your own DOS game ROMs to personalize the experience.
Contributions Welcome: If you have ideas for features or improvements, feel free to submit a PR or suggest them!
How to Get Started?
1. Clone the repo: git clone https://github.com/muditjuneja/weplaydos.games
2. Follow the setup instructions in readme to run locally.
3. Add your own game ROMs to the /roms folder and start playing!
Live Version:
If you’d rather just jump in and play, check out the live version at weplaydos.games. It’s ready to go!
Why Open Source?
This project started as a way for me to relive the games I loved growing up. By open-sourcing it, I hope to connect with others who share the same passion for retro gaming and who want to help make it even better.
Support:
If you like the project, consider buying me a coffee on Ko-fi. Every bit helps me maintain and improve the project.
To be honest I haven't figured out anything about the licensing yet. I think most of the games are abondonwares but I can maybe start adding a license field.
Also, in the open source version, you will have to bring your own roms or maybe we can pull from archive.org.
Most games have owner (or it's unclear who own the games). Abandonware doesn't exists on a legal perspective! Find eXoDOS ... or LaunchBox ... there are illegal solutions out!
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!