WebAssembly for games in 2026

For games, WebAssembly has quietly become an everyday tool. Studios ship browser builds alongside their desktop versions, old games return as browser ports, and a growing number of new games are made for the web from the start. Much of what held web games back a few years ago has been solved, and what remains is better understood.

A more capable format

The biggest change to the format itself came with WebAssembly 3.0, announced in September 2025 and now supported by the current versions of the major browsers. Its 64-bit memory lifts the old 4 GB ceiling on a module’s address space. Browsers still set their own limits well below what the format allows, but large worlds and asset sets are no longer ruled out by design. Built-in garbage collection lets languages with managed memory, such as Java, Kotlin and Dart, rely on the browser’s collector instead of shipping their own, which makes their builds smaller. Native exception handling means C++ code that throws no longer pays for a slow workaround. Fixed-width SIMD has been in every major browser for years, and engines are now turning it on by default for physics, audio and animation.

Graphics catch up

WebGL 2 is still the common ground. It runs everywhere, and every engine that exports to the web targets it. The real change is WebGPU. Chrome and Edge shipped it in 2023, Safari 26 brought it to macOS, iOS and iPadOS in 2025, and Firefox followed on Windows and then on Apple Silicon Macs, with Linux and Android still in progress. WebGPU looks much more like Vulkan, Metal and Direct3D 12 than WebGL ever did, and it brings compute shaders with it. For now most engines offer it next to WebGL 2 rather than instead of it, because not every player’s browser and device can run it yet.

The engines

Unity remains the most common choice for browser builds. Unity 6 added an experimental WebGPU backend, a larger heap, SIMD and native exceptions, while keeping WebGL 2 as the default. Godot exports to the web through its Compatibility renderer, and since Godot 4.3 games can be exported without threads, so they no longer need special server headers and can be hosted almost anywhere. Unreal Engine has had no official web export since Unreal Engine 4, and the browser builds that exist come from third-party tools. Rust engines such as Bevy compile to WebAssembly directly and support both WebGL 2 and WebGPU, and Emscripten remains the usual way to bring C and C++ code, from small SDL games to whole engines, into the browser.

Where people play

Browser games no longer live only on game portals. Discord Activities, YouTube Playables and the mini games built into messaging apps all run on web technology, and many of them use WebAssembly underneath. A game that opens inside a chat window has a few seconds to start, not a minute, so small builds and quick first loads matter more than they used to.

What is still hard

Threads are the most stubborn problem. WebAssembly threads depend on SharedArrayBuffer, which browsers only allow on cross-origin isolated pages, and isolation blocks third-party content that doesn’t opt in, including most ads and embeds. Many games are therefore still built single-threaded, or ship two builds and pick one at load time.

Desktop code also tends to run a main loop that never returns, while a browser needs control back after every frame. Emscripten’s Asyncify can rewrite such code so it pauses and resumes, at a cost in size and speed. JavaScript Promise Integration, or JSPI, does the same job inside the browser. Chrome and Edge have shipped it and the other browsers are working on it, and once it is everywhere, porting gets noticeably simpler.

Phones bring their own limits. Mobile browsers, and iOS Safari in particular, give a tab far less memory than a desktop does, and a tab that asks for too much is reloaded without warning, so large games still need a lighter build for phones. Sound can only start after the player touches the page and stops when it goes to the background, and pointer lock and full screen behave differently from one browser to the next. Download size runs through all of this: a desktop game can ask for gigabytes, but a web page can’t, so streaming assets, caching them in a service worker and keeping the first load small are now simply part of making a web game.

Looking ahead

Most of the pieces that were missing for years are now in place: 64-bit memory, garbage collection, SIMD and a modern graphics API. What comes next is wider support for JSPI and WebGPU, and a way to use threads without giving up the rest of the web. For anyone starting a game today, the safest path is a language or engine that builds to WebAssembly without a heavy runtime, WebGL 2 with WebGPU as an option, a small first download, and early testing on a phone.

All posts