
three.js
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
Recent Headlines
KISS-GS Compresses 3DGS Scenes 228x, From 738 MB to 3.5 MB
KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0
MultiSet AI: Gaussian Splats as Native VPS Map Input
Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22
Splatlight Generates Gaussian Splats From Blender Scenes Without a COLMAP Solve
PCD Splatter Turns E57 Laser Scans Into Gaussian Splats Inside Blender
Olli Huttunen Releases Point Cloud Merger for Blender
luma.gl 9.4.0 Beta Adds a GPU Gaussian Splat Renderer
Xangle Adds Splat Scene Center Controls and Render Cancellation to Camera Server v26.08.20
AirVis Studio 1.0.4 Brings Local 3DGS Training to Windows


