TECHNOLOGY
Quake port written in safe Rust runs in the browser, with no GPU needed
A project called quake-srp ports id Software's 1996 Quake to Rust and WebAssembly. The shareware episode plays in a browser with software rendering, and the author says it matches id's original C code pixel for pixel in Classic mode.
Image: Quake
A developer has ported id Software's 1996 game Quake to Rust and compiled it to WebAssembly, a format that lets programs run inside a web browser. The shareware episode is playable on a demo page.
The port is built from the WinQuake C source, which id released under the GPL. It uses only Rust's standard library, has no outside dependencies and contains no unsafe code. Rendering is done in software, so the game does not need a GPU. It covers the single-player game only. There is no multiplayer.
According to the project's page, the port was written by Claude, Anthropic's AI model, working in Claude Code. The user set the rules, played the game and reported problems. Much of the work ran as groups of agents, each on its own git branch, with a "chair" agent that merged a branch only after the full check passed. The user's rules, in order, were zero dependencies, no unsafe code, and that the Classic mode must be id's game, proven for anything touched.
The author's main claim is accuracy. To test it, the project builds id's original C code in a headless form, which it calls the "oracle", and compares the two. With every extra option switched off, the author says the port matches id's C on every pixel of the 3-D view in every view tried. It also reports matches on the mixer's sound output, sample for sample, and on demo playback, frame by frame. The page says a list of known differences remains in a file called AUDIT.md. One command, listed as the "Proof" step, re-runs the Classic checks. We have not run these checks ourselves, and these results are the author's own account.
The port has two presets. Classic keeps id's behaviour: a 4:3 frame, a 72 frames-per-second cap, and the original status bar and field of view. The default, called slop, uses the window's own size and shape in whole pixels, removes the frame-rate cap, widens the view on wide screens, and smooths out monster movement and flickering lights. It also fixes four of id's sound bugs. The picture is still 8-bit, with id's palette and lighting, and textures are never filtered.
In the browser, the game runs as an ordinary Rust program inside a Web Worker, a background thread for web pages. Input goes in through standard input. Frames and sound come back through shared memory. A WebGL2 canvas shows the 8-bit image, with a shader looking up colours in a 256-colour palette, much like a VGA card did. The renderer splits each frame across CPU cores and, the author says, produces the same picture on any number of them. The game needs shared memory and worker threads, and the page says so if the browser will not provide them.
The author lists the tested browsers. It was tested on Linux in Chromium and Firefox, and played in Chrome on macOS and on an Android phone. Safari, iPhone and iPad have not been tested. Firefox has no Keyboard Lock, so there one press of Esc in fullscreen also leaves fullscreen. Controls include WASD and mouse, a gamepad and touch. On a phone, the game plays sideways only.
The demo includes id's shareware episode, taken from the original quake106.zip (9.1 MB). Players who own Quake can drop in their own pak files to play episodes 2 to 4 and the mission packs, along with CD music tracks. The page says these files stay in the browser. The repository includes no game data, and a script fetches the shareware files and checks their hashes. Quake is a trademark of id Software, and the project says it is not affiliated with or endorsed by id Software.