/

three.js

three.js

three.js

Social Media Links

Twitter
Github

three.js is the open source JavaScript 3D library for WebGL and WebGPU, and r186 ships a native Gaussian splat renderer in core.

Location

Size

Total raised

Hiring?

Platform

JavaScript library for the browser, with WebGL2 and WebGPU renderers

GPU

None published. three.js runs in the browser, so a WebGL2 capable GPU is the floor and the WebGPU path needs a browser that exposes WebGPU. Splat training happens elsewhere, three.js only renders

Pricing

Free

License

MIT

Best for

Rendering Gaussian splats on the open web

Updated

July 2026

three.js is an open source JavaScript 3D library first released by Ricardo Cabello in 2010 under the MIT license. It renders through WebGL2 and through a newer WebGPU backend, and it is the library a large share of interactive 3D on the open web is built on. The package ships a core alongside an examples directory, examples/jsm, that carries loaders, camera controls, post processing passes and now a Gaussian splat renderer.

Splat rendering in three.js was third party work for its first two years. The GaussianSplats3D library arrived in January 2024 as the first three.js implementation, added spherical harmonics that May and 2D Gaussian splatting support that July. World Labs released Spark v2.0 in April 2026 as a second renderer for the same host. Each option is a separate dependency with its own loader set, its own sorting strategy and its own render path, so a three.js project choosing between them is choosing an architecture, not a feature flag.

Pull request 33950, authored by Ben Houston, moved that capability into the library, and r186 shipped it on 8 September 2026 as npm package three 0.186.0. The renderer is a GaussianSplat object written in TSL, the Three.js Shading Language, so one implementation targets both the WebGL and the WebGPU backend rather than requiring a backend specific shader. GaussianSplatPLYLoader reads splat PLY files, SPZLoader, SPLATLoader and KSPLATLoader cover the other three formats, and GLTFGaussianSplatLoaderExtension reads the KHR_gaussian_splatting extension the Khronos Group introduced in February 2026. GaussianSplatUtils and SortUtils carry the shared math and the depth ordering. Two class names changed between the merge into the development branch and the release, GaussianSplatMesh became GaussianSplat and PLYGaussianSplatLoader became GaussianSplatPLYLoader, so code written against a pre release build needs both renamed.

The shipped renderer is wider than the merge was and narrower than a mature third party option. View dependent color resolves through the glTF loader extension, so higher order spherical harmonics render rather than every splat falling back to a flat base color. Raycasting against splats works, and per mesh bounding boxes drive frustum culling. What is still absent is a level of detail scheme and chunked streaming, so a scene loads whole and its memory and fill cost scale directly with splat count. A scan large enough to need paging is still a job for Spark or for a library built on it.

r186 is published, so a project installing three.js from npm now gets the splat renderer in the box. Version 0.186.0 supersedes r185, which had no splat support of its own. Spark and GaussianSplats3D remain the route for anything the core renderer does not do, and both continue as separate dependencies with their own loaders and their own streaming.

three.js is free, has no paid tier and imposes no commercial licence condition, which is one reason it sits underneath so much shipped splat work rather than alongside it. Gaussian splat viewers, product configurators, WebXR experiences and vendor SDKs including Varjo's Teleport.js all target three.js as their host, and Teleport.js pins three.js 0.180.0 as its floor. Native splat support in core changes what those integrations have to carry themselves.

Frequently Asked Questions

q

a

q

a

q

a

q

a

q

a

Alternatives