Show HN: PS2 games statically recompiled to WebAssembly
- ID
- 34740
- Status
- summarized
- Published
- 12 Oct 2026, 2:46 PM
- Fetched
- 13 Oct 2026, 2:21 PM
- Provider
- Hacker News
- Category
- dev-community
- Original URL
- https://github.com/snuri00/ps2-web-recomp
- Source URL
- https://hnrss.org/best
Summary
- Score
- 7.0
- Created
- 13 Oct 2026, 2:22 PM
- Tags
- Audience
- developersvibe_coders
What happened
ps2-web-recomp is a GitHub project (437 stars, 28 forks, MIT) that runs PlayStation 2 games in the browser without an emulator: the Emotion Engine machine code is statically recompiled ahead of time into C++, compiled to WebAssembly, and linked against a reimplementation of the PS2 OS and hardware that draws via WebGPU. Gran Turismo 4 boots through menus and races with music and memory-card saves at a full 50 fps (PAL) in Chrome on a laptop's integrated GPU at twice PS2 resolution; God of War II runs the same scripts with no game-specific code but exposed two bugs the first title never triggered (one in the recompiler, one in vector unit timing) plus missing IOP pieces, and holds 60 fps in heavy combat at native resolution (48-60 at 2x). No game data is bundled - you supply your own disc image and the repo's scripts produce a local web page; it's the sibling of psp-web-recomp and drew 284 points / 147 comments on Hacker News.
Why it matters
This is a concrete, measured datapoint on two things builders can reuse: WebGPU is now fast enough for genuinely demanding browser workloads (50 fps PAL at 2x PS2 resolution on an integrated GPU, from a reimplementation drawing through WebGPU), and ahead-of-time recompilation to C++/WASM is a workable alternative to shipping a runtime interpreter or JIT. The second-title finding is the more actionable part: God of War II required no game-specific code yet still surfaced a recompiler bug and a vector-unit timing bug, so if you maintain a transpiler, codegen path, or bytecode-to-native tool, treat a single passing workload as no evidence and budget for diverse second inputs. Practically, nothing here forces a change to your stack today - there's no package to install, no API, and no game data included - so treat it as a reference implementation to read rather than a dependency.
Discussion angle
When does static recompilation beat a JIT emulator, and what does the GT4-to-God-of-War-II bug sequence tell you about how much testing one passing workload actually proves in a codegen or transpiler pipeline?