/

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 its r186 line adds a native Gaussian splat renderer to 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, moves that capability into the library. It adds a GaussianSplatMesh object written in TSL, the Three.js Shading Language, so a single implementation runs on both the WebGL and the WebGPU renderer rather than requiring a backend specific shader. Loaders cover PLY, SPLAT, SPZ and KSPLAT, and glTF import reads the KHR_gaussian_splatting extension the Khronos Group introduced in February 2026. A CountingSort compute class handles the back to front depth ordering that splat rasterization requires, which is the part every third party renderer has had to solve independently.

The first implementation is deliberately narrow. It resolves SH0 only, so the flat base color of each splat renders and the view dependent terms carried by higher spherical harmonic degrees do not. There is no level of detail scheme and no 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.

The work is milestoned r186 and is not in a tagged release. r185 is the current published version, so a project installing three.js from npm today gets a library with no splat renderer in it and still depends on Spark or GaussianSplats3D. That gap closes when r186 ships.

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

Does three.js support Gaussian splatting natively?

three.js supports Gaussian splatting natively on the r186 development line, where the GaussianSplatMesh object and its loaders sit in examples/jsm inside the core repository. Releases up to and including r185 have no splat support of their own and need a third party library.

What splat formats can three.js load?

three.js loads PLY, SPLAT, SPZ and KSPLAT directly, and reads Gaussian splats out of glTF files through the KHR_gaussian_splatting extension.

Does the three.js splat renderer support spherical harmonics?

The three.js splat renderer handles SH0 only, so it reconstructs the flat base color of each splat and does not render the view dependent terms carried by higher spherical harmonic degrees.

Can three.js stream large splat scenes?

three.js has no level of detail scheme and no chunked streaming in its native splat renderer, so a scene loads in full and rendering cost scales with total splat count. Projects that need paged loading layer Spark or Varjo's Teleport.js on top.

Is three.js free?

three.js is free and open source under the MIT license, with no paid tier and no separate commercial licence.

Alternatives