A Three.js renderer for 3D Gaussian Splatting scenes, supporting WebGPU and WebGL2 with streaming LOD for large models.
sparkjsdev/spark
A 3D Gaussian Splatting renderer for THREE.js that lets splat scenes mix with regular meshes in the same scene.
- Stars
- 3,881
- Forks
- 580
- Open issues
- 111
- Last commit
- 19 days ago
What is it?
Spark is a rendering library that brings 3D Gaussian Splatting to THREE.js. It plugs into the THREE.js render pipeline, so splat objects and mesh-based objects can be drawn in the same scene with correct sorting, and multiple splat objects can be rendered together.
The library loads the common splat formats, including PLY (compressed and uncompressed), SPZ, SPLAT, KSPLAT and SOG. It targets WebGL2 and is aimed at running across a wide range of devices, including low-powered mobile hardware. Splats can be transformed individually, recolored, displaced or skeletally animated, and a shader graph allows splats to be created or edited on the GPU.
Spark is installed via npm or loaded from a CDN with an import map. The project also includes examples, asset tooling for compressing PLY files to SPZ, and a documentation site.
Key features
- 01Integrates with the THREE.js pipeline so splats and meshes share one scene
- 02Supports PLY (including compressed), SPZ, SPLAT, KSPLAT and SOG formats
- 03Renders multiple splat objects together with correct sorting
- 04Targets WebGL2 and runs on a wide range of devices, including mobile
- 05Supports per-splat transforms, color editing, displacement and skeletal animation
- 06Includes a GPU shader graph for creating and editing splats
Use cases
- Showing photogrammetry or captured 3D scenes in a web page built with THREE.js
- Combining splat scans with mesh-based props or UI in an interactive 3D experience
- Animating or recoloring captured objects in the browser
- Delivering splat viewers to mobile users through the web
Quick start
- 1
Install the package from npm
npm install @sparkjsdev/spark - 2
Or copy the HTML example from the README into an index.html file and open it in a browser
Things to know
- Building from source requires installing Rust and running a separate WebAssembly build step.
Topics
FAQ
- What is spark?
- A 3D Gaussian Splatting renderer for THREE.js that lets splat scenes mix with regular meshes in the same scene. Spark is a rendering library that brings 3D Gaussian Splatting to THREE.js. It plugs into the THREE.js render pipeline, so splat objects and mesh-based objects can be drawn in the same scene with correct sorting, and multiple splat objects can be rendered together.
- Is spark free to use? What license does it have?
- spark is open source under the MIT license. Check the license terms before using it in commercial products.
- Is spark still maintained?
- Actively maintained. The last commit to spark was on Oct 20, 2026.
- What can I use spark for?
- Showing photogrammetry or captured 3D scenes in a web page built with THREE.js Combining splat scans with mesh-based props or UI in an interactive 3D experience Animating or recoloring captured objects in the browser Delivering splat viewers to mobile users through the web
- How do I install spark?
- Install the package from npm: npm install @sparkjsdev/spark Or copy the HTML example from the README into an index.html file and open it in a browser
- Where can I get spark?
- The source code and installation instructions are on GitHub: https://github.com/sparkjsdev/spark
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A JavaScript toolkit and framework for interactive 3D/WebGL and 2D data visualizations in the browser, built on Three.js.
A React renderer for Three.js that lets you build 3D scenes declaratively with JSX components.
A collection of ready-made React helper components and hooks for building 3D scenes with react-three-fiber.
A post processing library for three.js that chains fullscreen image effects such as bloom, SSAO and color grading on WebGL scenes.
A React wrapper for the postprocessing library that lets react-three-fiber scenes apply post-processing effects declaratively as JSX components.