WebGPU in Three.js Is Production-Ready for New Projects, but Legacy Migration Is Still Brutal
WebGPU is the long-term replacement for WebGL in the browser, and Three.js has committed WebGPURenderer as its sole forward-looking renderer. Teams starting greenfield 3D projects today can adopt it immediately and gain access to compute shaders and hardware ray tracing, but anyone maintaining a substantial WebGL codebase faces a rewrite of every custom shader and post-processing effect.
Three.js's official WebGPURenderer has reached a state where it is usable and stable for new projects, especially those leveraging compute shaders, massive particle systems, or hardware ray tracing. Basic PBR rendering, GLTF loading, and standard controls work with an API nearly identical to WebGL. Browser support now covers all modern Chrome, Edge, Firefox, and Safari versions, plus iOS 17+ and recent Android.
However, the renderer introduces a hard break with the WebGL ecosystem. Custom GLSL ShaderMaterial, RawShaderMaterial, and onBeforeCompile hooks are completely unsupported with no automatic transpilation path. All legacy post-processing passes built on EffectComposer are dead; only the new node-based PostProcessing system works. The API is now asynchronous, requiring `await renderer.renderAsync()` and manual `renderer.init()` calls, which forces structural changes to existing render loops.
Performance pitfalls remain. First-frame cold starts can run 5–10× slower than WebGL due to WGSL pipeline compilation, and scenes with thousands of un-instanced small meshes can see higher CPU overhead from bind-group switching. Memory management is less polished, with GPU memory leaks possible under frequent create-destroy cycles. For teams with large WebGL codebases full of custom shaders and third-party plugins, the migration cost is high enough that sticking with WebGLRenderer is the pragmatic choice until the feature gap closes further.
WebGPU's adoption path in Three.js mirrors the OpenGL-to-Vulkan transition in native graphics: a clean break with legacy shader infrastructure that forces a rewrite but unlocks modern GPU features.
The lack of GLSL-to-WGSL transpilation is a deliberate design choice, not an oversight. Early auto-transpilation was removed, signaling that the team sees TSL as the strategic material authoring layer going forward.
The 5–10× first-frame slowdown is a real production concern for interactive applications, not just a benchmark footnote. Any app that dynamically creates many objects will feel this as user-visible jank.
WebGPU's performance advantage only materializes in GPU-bound, highly parallel workloads. For CPU-bound scenes with many draw calls, WebGL's mature driver optimizations still win, which inverts the common assumption that WebGPU is always faster.
The async render API is the most underappreciated migration cost. It doesn't just change a function signature; it forces asynchronous thinking into every part of the application that touches rendering, from loaders to UI feedback loops.