/projects/pixelpocket
PixelPocket
livePlay Game Boy games in your browser. A custom C++ Game Boy emulator compiled to WebAssembly, with a React frontend and a Node.js API.
- c++
- webassembly
- emulator
- react
- nodejs
- docker
case study
problem
Playing Game Boy games usually means installing and configuring a desktop emulator, and save files stay stuck on the machine they were made on. There was no simple way to pick a game from a library, play it in the browser on any device and keep the same progress.
approach
A Game Boy (DMG) emulator written from scratch in C++20 (CPU, graphics, sound, timers and MBC1/MBC3/MBC5 cartridges), compiled to WebAssembly with Emscripten and run inside a React app with Web Audio sound and keyboard, gamepad and touch input. An Express API on MongoDB and MinIO handles accounts, the game library, uploads and battery saves, checking ROM headers and re-encoding cover images before storing them. Docker Compose runs the stack.
outcome
Visitors pick a game and play it right on the page, with no install and no server round-trip during play, and signed-in players' saves follow them to any device. The core passes all 11 of Blargg's cpu_instrs tests and renders dmg-acid2 correctly.
details
- built by
- Omar Mohamed
- maintained by
- Omar Mohamed
- running at
- pixelpocket.project-graphite.com ↗
- source
- project-graphite/pixelpocket ↗
contributions
Omar Mohamed
Built the whole platform: the C++ emulator core and its WebAssembly build, the React frontend, the Express API with its storage, and the Docker Compose deployment.