Need for Speed: Underground 2 Runs Free in Your Browser at 120 FPS With WebGPU and Multiplayer Free Roam

Twenty-two years after EA Black Box originally unleashed it in November 2004, and two decades after Electronic Arts shut down its official online servers in 2006, Need for Speed: Underground 2 has received an extraordinary second life on PC and mobile devices. Known on GitHub as nfsu2-web (and widely shared through its Underground 2 Revived showcase at nfsu2.xyz), this open-source project built by developer th0mk runs the entire open-world street racing classic natively inside Google Chrome and Firefox without heavy emulators or traditional installations.
Ahead-of-Time WebAssembly Recompilation and 120 FPS WebGPU Rendering
Unlike conventional browser emulators that struggle to maintain steady frame pacing, nfsu2-web relies on static Ahead-of-Time (AOT) binary recompilation. Building upon Talha Müderrisoğlu's static recompilation of the game for Apple Silicon (which follows the methodology pioneered by N64: Recompiled and XenonRecomp) and developed with the assistance of Claude Code, a Python lifter powered by Capstone translates every x86 function of the original North American v1.2 PC executable (SPEED2.EXE, exactly 4,800,512 bytes) into clean C code. That C code is then compiled into WebAssembly (nfsu2.wasm) using wasi-sdk 34, running across worker threads with up to 4 GB of shared memory. This breakthrough follows the exact same technological wave as the recent WebGPU browser port of Resident Evil Outbreak File #1 and #2.

Play Need for Speed: Underground 2 in Your Browser (nfsu2.xyz)→
Under the hood, the original Direct3D 9 graphics calls are reimplemented on top of the modern WebGPU API, while DirectSound audio streams through a low-latency Web Audio AudioWorklet. The port unlocks frame rates up to 120 FPS in online races (and up to 240 Hz in single-player on supported monitors) with corrected physics logic. Tested on an Apple M4 Pro MacBook Pro with a 120 Hz ProMotion display, both the menus and street races run between 118.6 and 120 FPS, achieving a 99th-percentile frame time of just 8.6 milliseconds.
Several quality-of-life upgrades are also built directly into the browser interface:
- 4x Upscaled HUD Texture Pack: Created by modder LunicAura106 (around 5 MB to download), this optional setting redraws the menus, tachometer, fonts, and manufacturer logos at four times their original size for crisp visuals on modern 1440p and 4K monitors.
- 15 Supported Languages: All 13 original languages (including localized voice acting and FMV cutscenes streamed on demand) plus community-made Brazilian Portuguese and Polish translations.
- Unlocked European Exclusive Cars: Both the Peugeot 106 and the Vauxhall Corsa 1.8, which were originally locked to the European release despite having their files hidden inside the North American executable, are unlocked in the car lot and driven by AI opponents.
Because Electronic Arts has never released an official remaster of its PlayStation 2 era street-racing classics on Steam or modern digital storefronts, players looking for an official modern entry in the franchise on PC and current-gen consoles have to look toward Criterion's latest release:
5,000-Player Multiplayer Free Roam in Bayview With Weight-Based Collision Physics
The standout achievement of nfsu2-web lies in its custom networking backend written in Rust (server-rs). Whereas the 2004 release restricted online play to isolated race lobbies, this server acts as a virtual LAN switch capable of hosting up to 5,000 concurrent players on a modest Linux VPS (2 vCPUs and 4 GB of RAM behind Caddy HTTPS, or 128 players by default on a manually started instance). Anyone connected to the same server address can toggle Free roam with others and immediately cruise through the open streets of Bayview together.
To keep bandwidth usage and frame rates optimal, the server dynamically pairs each driver with the 32 nearest players, rendering all 32 custom-tuned vehicles simultaneously on screen. Player names appear above cars within 100 meters, accompanied by minimap arrows and world map markers (via the M key). Beyond 300 meters, position updates scale down from 20 ticks per second to 5 ticks per second (and 2 ticks per second past one kilometer), while allowing drivers to initiate head-to-head Outrun duels or honk using the newly added horn on the N key.
Even more impressively, free-roam player collisions are calculated using each vehicle model's actual curb weight, ranging from 0.96 tons for the Peugeot 106 up to 2.9 tons for the Hummer H2. Ramming a stationary Hummer in a lighter Nissan 240SX leaves you with only a quarter of your speed, while the cinematic slow-motion crash camera only triggers above a 155 km/h closing speed between equal-weight cars. To prevent griefing and roadblocks, players can toggle Ghost mode on the fly via the F9 menu. Furthermore, any car that is paused, stationary for over a minute, within 20 meters of a shop or garage entrance, or parked across the airport parking lot exit for 20 seconds after taking four hits automatically turns into a ghost so traffic can pass right through.
Logitech Steering Wheels, Android Touch Controls, Offline Mode, and Legal Setup
Beyond standard keyboard and mouse controls, the browser port offers extensive peripheral and mobile support. Xbox and PlayStation DualSense controllers work out of the box, complete with crash and wall-scrape vibration (Rumble) support in Google Chrome. The page also includes native axis mapping for Logitech G29, G920, G923, G25, G27, and Driving Force GT steering wheels with a 270-degree lock-to-lock turning angle, gas and brake pedals, and paddle shifters (only motorized force feedback is absent, as web browsers cannot drive wheel motors).
On smartphones and tablets running Chrome for Android, the interface provides context-sensitive touch controls where sliding a thumb transitions smoothly from gas to brake, alongside virtual thumbstick or gyroscope tilt steering. Mobile rendering starts at a 75% resolution scale in full screen and automatically upgrades to 100% native resolution on the next session once the device proves it can hold its target frame rate with GPU headroom to spare.
Data and save management are equally well thought out. After an initial download of roughly 7 MB for the WebAssembly module, assets stream on demand into the browser's Origin Private File System (OPFS). Clicking Preload the game data downloads the full 2 GB dataset (around 1.4 GB compressed over the network, excluding movies), enabling a complete Offline mode that runs even when the server is unreachable. Players can import their original PC career profiles from %LOCALAPPDATA%NFS Underground 2 or enable zero-account Cloud saves, which encrypt profile data client-side using an eight-word keyphrase before syncing to the server. Much like the recent community effort that got Forza Horizon 2 running on PC at 4K and 60 FPS, the MIT-licensed th0mk/nfsu2-web GitHub repository contains zero proprietary Electronic Arts code or assets: to compile the module or self-host a private server for friends, players must supply their own legal PC installation of Need for Speed: Underground 2.
My Take
What impresses me most about th0mk's work on nfsu2-web goes far beyond the pure nostalgia of taking Rachel Teller's green Nissan 350Z out for a spin to the sound of Riders on the Storm inside a Chrome tab. It is the remarkable engineering precision across every layer of the stack. Translating SPEED2.EXE ahead of time into WebAssembly and mapping Direct3D 9 to WebGPU at a locked 120 FPS is already a technical feat, but pairing it with a Rust backend that supports 5,000-player Bayview free roam takes it to another level entirely. From weight-accurate collisions between a Peugeot 106 and a Hummer H2 to automatic anti-griefing ghost zones outside garage doors and client-side encrypted cloud saves, this project proves that static binary recompilation has become the gold standard for PC game preservation.



















