Splat.Report

Splats in three.js, Babylon and beyond

Working4 min readUpdated 2026-09-27Verified 2026-09-27

Outside PlayCanvas and Babylon.js, browser splat rendering was a third-party library ecosystem until three.js added its own renderer in September 2026, and that ecosystem consolidated hard through 2025: the two libraries most tutorials still point at are frozen, and both now redirect readers to the same successor. Knowing which projects are actually alive in 2026 matters more here than in most tooling choices, because a splat renderer sits close enough to the engine internals that an abandoned one decays quickly.

The two pioneers, now frozen

antimatter15/splat (MIT) is the original standalone WebGL viewer from 2023, the project that established the CPU-sort-in-a-worker architecture everything else copied. Its last commit, in November 2025, exists to add a README recommendation to use Spark instead. mkkellogg/GaussianSplats3D (MIT) was the standard three.js splat library for roughly two years, with a WASM-accelerated sort worker and support for .ply, .splat and its own .ksplat format; its last release, v0.4.7, shipped in January 2025, and its README now states the project is no longer in active development and also points to Spark. Both still work for what they already do, but neither is going to track three.js releases or fix what breaks next.

Spark: where the three.js ecosystem landed

Spark (sparkjsdev/spark, MIT, maintained under the World Labs organisation) is an advanced Gaussian splatA single anisotropic 3D Gaussian, an ellipsoid with position, covariance, opacity and view-dependent colour, used as the basic rendering primitive of a splat scene. Millions of these together, optimised against training images, make up the scene. renderer built for three.js, and it is unambiguously alive: v2.1.0 shipped in May 2026 and commits continue into July. It is not an official three.js package, and that’s worth being clear-eyed about, since its future depends on one company’s continued interest rather than the three.js project itself; but with both pioneer libraries explicitly deferring to it, it is the de facto default for new three.js splat work in 2026. For a react-three-fiber project that means wiring Spark in directly; drei does ship a <Splat> component, but it wraps the antimatter15-lineage renderer internally, which makes it fine for a quick demo and a poor representation of the current state of the art.

three.js r186: a built-in renderer

three.js r186, released on 24 September 2026, ships the project’s own splat renderer as an addon: a TSL implementation that runs on both WebGPU and WebGL, with loaders for .ply, .splat, .spz (including SPZ version 4) and .ksplat, plus glTF import through the KHR_gaussian_splatting extension with view-dependent colour from spherical harmonics. The same release added per-mesh bounding boxes, frustum culling and raycasting, and renamed the class from GaussianSplatMesh to GaussianSplat, so code written against the pre-release examples needs updating. There is no SOG loader, so a scene prepared for PlayCanvas delivery needs an SPZ or glTF export to load here. The addon has no streaming or LOD, which is still where Spark is ahead.

Babylon.js: the strongest first-party alternative

Babylon.js is the one engine besides PlayCanvas with genuine first-party splat support, and it has been shipping steadily: GaussianSplattingMesh arrived as native scene geometry in v7 (2024), v8 in March 2025 added SPZNiantic's open, MIT-licensed compressed splat format: roughly a tenth the size of the equivalent raw PLY through per-attribute quantisation and parallel entropy coding, while keeping full spherical-harmonics detail per Gaussian rather than collapsing it into a shared palette. and compressed PLY loading, and v9 in March 2026 added SOG support. The engine is Apache-2.0, releases land roughly weekly (v9.15.0 on 2 July 2026), and splat features appear in mainline release notes rather than a satellite repo, which is the healthiest possible signal a feature can send. A team already on Babylon has no reason to look elsewhere: it reads the same delivery formats this pipeline produces, SOG included, so a scene prepared for PlayCanvas delivery loads there without a conversion step.

The rest of the field

gsplat.js (huggingface/gsplat.js, MIT) is an engine-agnostic splat library with its own worker-based sorting; its last release, v1.2.9, shipped in July 2025, with only occasional commits since. Not dead, but dormant, and not where new work should start. Luma AI’s web library (@lumaai/luma-web, the LumaSplatsThree renderer) is effectively abandoned: its examples repository was archived in April 2025 and the library itself has had no substantive updates since early 2024. It mattered historically as the first polished commercial three.js integration; it is not a 2026 option.

In practice

Starting a three.js or react-three-fiber splat project today, the answer now depends on scene size. For a single embed that loads whole, the built-in r186 addon avoids a third-party dependency and follows three.js releases by definition. For large scenes that need streaming or LOD, Spark remains the choice, and the two libraries a 2024-era tutorial will recommend both point there themselves. A Babylon shop should use the native support and nothing else. And the general habit worth keeping: check the commit history of any splat library before adopting it, because this corner of the ecosystem turned over almost completely between 2024 and 2026, and the search results have not caught up.

Changelog

  • 2026-09-27 — Added three.js r186's built-in Gaussian splat renderer and loaders, and revised the three.js recommendation to split between the built-in addon and Spark. (2026-W39)

Related papers

3D Gaussian Splatting for Real-Time Radiance Field Rendering

Kerbl, Kopanas, Leimkühler, Drettakis · 2023

The founding paper: real-time radiance fields via rasterised anisotropic Gaussians instead of ray-marched MLPs.