Skip to main content

What Is a .SPLAT File? The Lightweight Gaussian Splatting Format Explained

The first widely-adopted web format for 3D Gaussian Splatting, created by Kevin Kwok (antimatter15).

Updated Mar 2026

What Is a .SPLAT File?

Abstract white mesh undulating over dark background, visualizing the splat-based rendering approach
SPLAT format stores Gaussian splat data for real-time photorealistic rendering

The .splat format was born in September 2023 when Kevin Kwok (known as antimatter15) announced the first WebGL-based 3DGS Viewer on X. To let others easily share and load scenes, he designed .splat as the companion file format.

SPLAT's design philosophy is minimalism: rather than compressing PLY, it retains only the minimum data needed for rendering — stripping out view-dependent spherical harmonics (SH) coefficients entirely. This trade-off makes SPLAT about 50% smaller than PLY, but view-dependent color effects (highlights that shift as you orbit the scene) are lost.

As of early 2026, SPLAT remains the most widely supported web 3DGS format — virtually every web-based 3DGS viewer supports it, making it the go-to choice for universal compatibility.

Kevin Kwok's antimatter15 WebGL Viewer quickly gained 2700+ stars on GitHub after its September 2023 release, becoming a foundational open-source project in the Web 3DGS ecosystem. Much like how JPEG became the web standard for images not by being first but by being most widely adopted, .splat became "the first 3DGS format to achieve mass web distribution."

Technical Specifications

Each Gaussian in SPLAT is stored in exactly 32 bytes with a fixed layout and no compression: bytes 0-11 store the position (x, y, z) as 3 float32 values; bytes 12-23 store the anisotropic scale (scale_x, scale_y, scale_z) as 3 float32 values; bytes 24-27 store RGBA color (derived from SH DC component) as 4 uint8 values including transparency; and bytes 28-31 store the rotation quaternion as 4 uint8 values (normalized).

Key technical trade-offs define SPLAT's character: there is no file header — the receiver infers Gaussian count by checking if the file size is divisible by 32. There is no formal specification — SPLAT is a convention, with each tool independently implementing the 32-byte layout. Colors are the zero-order SH component (DC term) converted to RGB values, permanently discarding higher-order SH. Because higher-order SH is removed, SPLAT files cannot distinguish different lighting conditions of the same scene — the color is "the color seen from one fixed angle."

SPLAT vs. Other 3DGS Formats

SPLAT occupies a unique position in the 3DGS format landscape. At about 50% of PLY size, it is a moderate compression — much less aggressive than SPZ (10% of PLY) or KSPLAT (35% of PLY). Its complete lack of spherical harmonics is the main quality trade-off, but this is offset by having the broadest web viewer support of any 3DGS format.

For new projects where SPZ is supported, SPZ is generally the better choice: smaller files and preserved SH. SPLAT's role is shifting from "the web standard" to "the maximum compatibility fallback" — the format you use when you need to reach the broadest possible existing viewer support.

When Should You Use SPLAT?

Sharing with audiences using older viewers: If your 3DGS scene needs to reach people using various web viewers (social media sharing, email attachments, client demos), SPLAT's universal compatibility is its greatest strength. The vast majority of web 3DGS viewers built in 2023-2024 support SPLAT first.

Embedding in third-party platforms: Many 3DGS showcase platforms use SPLAT as their upload format. If you need to upload to such platforms, converting PLY to SPLAT is a necessary step.

Static displays without view-dependent lighting: Product model rotations, portrait scans, museum artifact displays — these scenarios typically don't need view-dependent highlight effects. SPLAT's fixed colors are perfectly adequate, with 50% smaller files than PLY.

When NOT to use SPLAT: Indoor scenes (strong view-dependent lighting effects become noticeably flat without SH). Archival purposes (use PLY or SPZ instead — SPLAT's SH loss is irreversible). Three.js production apps (use KSPLAT or SPZ for better performance).

Performance Benchmarks: SPLAT File Sizes in Practice

To ground the format comparison in concrete numbers, consider a standardized test scene: a room-scale 3DGS capture containing 1,000,000 Gaussians trained with degree-2 spherical harmonics. SPLAT's fixed 32-byte-per-Gaussian layout produces a perfectly predictable file: exactly 32 MB (32 × 1,000,000 bytes). No headers, no metadata overhead, no variability — the file size is always exactly 32 × Gaussian count.

Cross-format file size comparison for this 1M Gaussian scene: PLY (full float32 with SH) = 236 MB (baseline). SPLAT = 32 MB (14% of PLY). SPZ (full SH, gzip compressed) = 24 MB (10% of PLY). KSPLAT compression level 2, no SH = 72 MB (31% of PLY). SPLAT is the second-smallest format after SPZ, but unlike SPZ, SPLAT sacrifices all spherical harmonics data to achieve this size.

Loading time comparison on a 100 Mbps connection reveals SPLAT's unique trade-off profile: SPLAT downloads in approximately 2.6 seconds and renders immediately — there is zero decode overhead because the 32-byte layout maps directly to GPU-ready data via a typed ArrayBuffer view. SPZ downloads faster (2.0 seconds for 24 MB) but requires a gzip decompression step adding 200-400ms. KSPLAT shows first pixels in 0.5-1.2 seconds via progressive loading despite a larger total file. PLY requires 19+ seconds for the full 236 MB download.

SPLAT's hidden advantage is decode simplicity. The entire "parser" is essentially one line of code: create a Float32Array and Uint8Array view over the downloaded ArrayBuffer. No header parsing, no field extraction, no decompression. This makes SPLAT the most predictable format for performance budgeting — you know exactly how large the file will be and exactly how long decoding takes (effectively zero). For applications where predictability matters more than absolute minimum size, this is a genuine engineering advantage.

Production Deployment Patterns

CDN configuration for SPLAT files: Set Content-Type to application/octet-stream (the standard for binary downloads). Enable gzip or brotli transfer compression on your CDN — SPLAT's binary data contains repetitive byte patterns (adjacent Gaussians often share similar position and color values), allowing 15-25% reduction with gzip and 20-30% with brotli. A 32 MB SPLAT file typically transfers as 24-27 MB with gzip enabled. This is free bandwidth savings with zero client-side cost. Cloudflare Pages, Vercel, and Netlify all enable this by default for binary assets.

Multi-format fallback strategy for maximum compatibility: The recommended production pattern is to generate both SPZ and SPLAT versions of each scene, then implement client-side format negotiation. First, attempt to load the SPZ version (smaller, better quality). If the SPZ decoder fails or the viewer does not support SPZ, fall back to SPLAT. This pattern ensures you serve the best available format while maintaining universal compatibility. Store both versions on your CDN — the storage cost is negligible compared to the UX benefit.

Mobile optimization guidelines: Mobile browsers with integrated GPUs typically handle 500,000-1,000,000 Gaussians (16-32 MB SPLAT) comfortably. Beyond 1M Gaussians, expect WebGL memory allocation failures on most mobile devices. For scenes exceeding this limit, pre-process the PLY to reduce Gaussian count (using decimation or importance-based culling) before converting to SPLAT. Alternatively, split large scenes into spatial regions and load SPLAT files on demand as the user navigates.

Preloading strategy for critical scenes: Use <link rel="prefetch" href="/scenes/hero.splat"> in your HTML head to begin downloading the SPLAT file before the user navigates to the 3D view. For single-page applications, trigger the fetch programmatically when the user shows intent (hovering over a "View in 3D" button, scrolling toward the 3D section). SPLAT's predictable file size makes bandwidth budgeting straightforward — you know exactly how many bytes the prefetch will consume.

SPLAT Format Ecosystem and Future Outlook

SPLAT holds a unique position in 3DGS history as the first format to achieve mass web distribution. Kevin Kwok's antimatter15 viewer was the catalyst that transformed Gaussian Splatting from a research technique into a web technology. The .splat format was not designed by committee or standardized by a consortium — it emerged organically from one developer's pragmatic decision to strip a PLY file down to its rendering essentials. This origin story explains both SPLAT's strengths (extreme simplicity, zero dependencies) and its limitations (no formal spec, no extensibility).

The 2026 ecosystem status: SPLAT remains the most widely supported web 3DGS format by viewer count. Every major web-based 3DGS viewer supports SPLAT — antimatter15's original viewer, Luma AI's viewer, PlayCanvas, gsplat.js, and dozens of community projects. However, new viewer development increasingly targets SPZ as the primary format, with SPLAT as a compatibility fallback. The trend is clear: SPZ is the future standard, SPLAT is the compatibility layer.

Relationship with Khronos glTF 3DGS extension: The Khronos Group's ongoing work to add Gaussian Splatting support to the glTF standard is based on SPZ's design principles (compressed, full SH, standardized). SPLAT is not part of this standardization effort and is unlikely to be — its lack of SH support and absence of a formal specification make it unsuitable for a standards-track format. When the glTF 3DGS extension is finalized (expected late 2026 or 2027), it will further accelerate the shift from SPLAT to standardized formats.

Long-term outlook: SPLAT will not disappear — the installed base of viewers and tools supporting it is too large for a sudden obsolescence. Instead, SPLAT will gradually transition from "the web 3DGS format" to "the universal compatibility fallback." New projects should default to SPZ for web delivery and PLY for archival, using SPLAT only when targeting viewers that do not yet support SPZ. Polyvia3D will continue to support SPLAT viewing and conversion indefinitely, regardless of the format's evolving role in the ecosystem.

SPLAT vs. Other 3DGS Formats

FeaturePLYSPLATKSPLATSPZ
File Size (vs PLY)100% (baseline)~50%~35%~10%
Spherical HarmonicsFull (degree 0-3)NoneOptional (degree 0-2)Full (degree 0-3)
Web Viewer SupportLimited (size)BroadestThree.js ecosystemGrowing
SpecificationPLY standardNo formal specNo formal spec (mkkellogg)MIT, Khronos track
Progressive LoadingNoNoYes (chunked)No
Best ForArchival + editingMax compatibilityThree.js devWeb publishing + quality

Frequently Asked Questions

Kevin Kwok, known as antimatter15, created both the first WebGL-based Gaussian Splatting viewer and the .splat format that goes with it, in September 2023. The project is open source (MIT licensed) and available at github.com/antimatter15/splat. His viewer has since been forked and extended hundreds of times, making .splat the most widely supported format in the early Web 3DGS ecosystem.
Gaussian Splatting is a rendering technique — a method for representing 3D scenes as millions of 3D Gaussians. A .splat file is just one of several file formats that store the output of that technique. Other formats that store the same data include PLY, SPZ, and KSPLAT. Think of it this way: Gaussian Splatting is the "codec," and .splat, PLY, SPZ, KSPLAT are different "container formats" for that codec's output.
No. SPLAT was designed with a strict 32-byte-per-Gaussian layout to maximize simplicity and browser load speed. Spherical harmonics coefficients (which enable view-dependent color effects) are stripped during conversion and cannot be recovered. Each Gaussian is assigned a single base color derived from the zero-order (DC) SH component. The scene looks the same from any viewing direction in terms of color.
Several tools handle this conversion, including Polyvia3D's browser-based PLY to SPLAT converter (no software required), the antimatter15 converter script, SuperSplat, and various Python CLI tools. For browser-based conversion without any installation, Polyvia3D is the simplest path.
SPLAT is not being "replaced" — it has too much existing ecosystem support to disappear quickly. However, for new projects, SPZ is the better choice: it is smaller, preserves spherical harmonics, and is aligned with the Khronos glTF standard. SPLAT's role is shifting from "the web standard" to "the maximum compatibility fallback" — something you use when you need to reach the broadest possible existing viewer support.
No. SPLAT's fixed 32-byte-per-Gaussian layout has no room for spherical harmonics data, and the SH information was permanently discarded during the original PLY-to-SPLAT conversion. The conversion is a one-way lossy operation — there is no algorithm that can reconstruct the lost higher-order SH coefficients from the remaining DC color values. To get view-dependent lighting effects, you must go back to the original PLY training output and convert to SPZ (which preserves full SH) or KSPLAT (which supports optional SH up to degree 2). If you no longer have the original PLY file, the SH data is unrecoverable.
SPLAT files compress moderately well with transfer-level compression because adjacent Gaussians often share similar position and color values, creating byte-level repetition patterns that compression algorithms can exploit. Typical reduction is 15-25% with gzip and 20-30% with brotli. A 32 MB SPLAT file typically transfers as 24-27 MB with gzip enabled on the server. This is a free optimization — just enable compression on your CDN or web server (Cloudflare Pages, Vercel, and Netlify do this by default). Important: this is transfer compression only. The file stored on disk and in the browser's memory remains the full 32 bytes per Gaussian. The decompression happens transparently in the HTTP layer before the JavaScript code sees the data.
The practical limit depends on GPU memory and browser WebGL implementation, not the SPLAT format itself. Most desktop browsers with dedicated GPUs (NVIDIA/AMD with 4+ GB VRAM) handle 2-3 million Gaussians (64-96 MB SPLAT files) comfortably at 30+ FPS. Mobile browsers with integrated GPUs typically max out at 500,000-1,000,000 Gaussians (16-32 MB SPLAT). Beyond 3 million Gaussians on desktop, you will likely encounter WebGL memory allocation failures or severe frame rate drops. For very large scenes, consider three strategies: (1) use KSPLAT's progressive loading to show partial scenes immediately, (2) split the scene into spatial regions and load SPLAT files on demand as the user navigates, or (3) reduce Gaussian count through decimation before conversion.

How-to Guides

Related Guides