100% Open Source & Copyright Compliant

CRT Play
Where Retro Games Come to Life

100% legal open-source homebrew games. Play in your browser — no emulator, no setup, no risk.

29+ Free Games5 PlatformsPlay in BrowserDeveloper Friendly

Browse by Platform

Select a platform to explore its game library

🎮 0 of 36 Games Explored0%

Latest Field Notes

Game history, creator interviews, and retro culture

View all
The CRT Effect: The Display Technology Your Retro Games Were Designed For
Retro Culture17 min read

The CRT Effect: The Display Technology Your Retro Games Were Designed For

CRT displays weren't just a delivery mechanism — they were the final rendering step in the pixel art pipeline. Scanlines, phosphor bloom, and color bleeding were features, not bugs. This is the physics, history, and engineering behind why retro games look 'wrong' on modern displays.

Read article
How We Picked 31 Games (and Rejected 6 More)
Dev Story14 min read

How We Picked 31 Games (and Rejected 6 More)

Eleven GBA candidates. Two made it. The other nine? Three killed by copyrights. Three killed by technical dead ends. And three... well, we'll get to those. This is how we picked them.

Read article
NES Emulator in 50KB of JavaScript: No WebAssembly Required
Dev Story13 min read

NES Emulator in 50KB of JavaScript: No WebAssembly Required

jsnes is 50KB of pure JavaScript — no WebAssembly, no SharedArrayBuffer, no cross-origin isolation. Ten NES ROMs (1.3MB raw) compress to 660KB with Brotli. The hardest engineering problem we solved was a 44KB Flappy NES crashing at the fifth level because of an unhandled 6502 opcode. This is the story of why NES emulation in the browser is easy — after you've done GBA.

Read article
How We Put a GBA in Your Browser: 256MB SharedArrayBuffer and the Limits of WebAssembly
Dev Story26 min read

How We Put a GBA in Your Browser: 256MB SharedArrayBuffer and the Limits of WebAssembly

NES emulation fits in 50KB of JavaScript with no special headers. GBA emulation needs 1.9MB of WebAssembly, 256MB of shared memory, cross-origin isolation headers, and a Service Worker. We shipped two games and removed six. Cold 4G users wait 65–135 seconds; desktop waits 6–13. This is the story of what we built, what broke, and what we left broken on purpose.

Read article

Share Any Game on Your Site

Every game on CRT Play comes with a free embed code. Add retro gaming to your blog, portfolio, or community — no ads, no tracking, just pure gameplay.