TurboSPZ
A pure-Rust, memory-safe SPZ encoder + decoder for 3D Gaussian Splats — byte-identical with Niantic’s libspz v4 reference, SIMD-accelerated, deterministic across architectures, and engineered as a drop-in replacement for libspz on every consumer that links it (Niantic Lightship, Scaniverse, third-party splat viewers).
- Smaller files than libspz: 1.4-1.8% smaller on the upstream
hornedlizard.spz(786k splats) andracoonfamily.spz(933k splats) fixtures, sh_degree=3. - Faster encoder than libspz: 1.67x-2.32x faster on every shipping backend (Mac NEON + Windows AVX2), measured 2026-05-16. Encoder output is byte-identical between AVX2 and NEON — same input, same bytes, regardless of CPU.
- Faster decoder than libspz on our own files (Windows AVX2: 1.28x). Mac NEON ties on our files; libspz-formatted files on Mac are the one remaining gap (0.79x, was 0.42x pre-#20) and live entirely in the upstream
turbo-zstd-rsSH-stream decoder which is under active improvement. - 8 platforms from a single release: Linux (x86_64 gnu/musl, aarch64), macOS (x86_64, aarch64), Windows (x86_64-msvc), WebAssembly (wasm32-unknown, wasm32-wasip1) — with real SIMD128 in WASM for browser-side splat decode.
- Pooled-buffer decode context (
DecodeContext) amortizes the per-callGaussianCloudallocation across decodes — closes libspz’s Windows decoder gap entirely (libspz allocates per call; we re-use). Critical for streaming splat viewers and real-time pipelines.
Drop-in for libspz
TurboSPZ ships a libspz drop-in cdylib with the upstream C++ symbol set:
libspz.so/libspz.dylib/libspz.dll— drop in for Niantic’slibspzand every linking application keeps working unchanged.- Decoder-only variant
libspz_decode.{so,dylib,dll}— keyless, freely redistributable.
The native turbospz.h C ABI and the libspz drop-in shim both ship today, each in full and decoder-only variants.
Memory safety
libspz is C++. It carries the manual-memory-management history of every C/C++ codec — sometimes that’s a buffer-overflow CVE, sometimes it’s a quieter use-after-free that costs a debugging week. TurboSPZ is pure Rust. The consumer-facing API contains zero unsafe. Internal SIMD intrinsic call sites use unsafe blocks (because that’s how std::arch exposes them) but the unsafety is bounded and auditable in one grep. If you parse untrusted SPZ input — splats uploaded from a customer’s phone, content fetched from a CDN, files from a marketplace — TurboSPZ removes a class of vulnerability that the C++ library cannot.
Free to decode, free to integrate
Decoding SPZ v4 files requires no license and no runtime check. The free decoder-only variant ships every release; download it from the public decoder downloads page or from the GitHub Release assets.
Every viewer / preview pipeline runs unrestricted:
- All
turbospz_decode*byte-identical with libspz’s reference output. - Pooled-buffer hot-loop (
turbospz_context_create+turbospz_decode_into) — zero allocations after warmup. - Header-peek (
turbospz_get_header_info) without touching the ZSTD payload. - Drop-in for the libspz
decompressSpz+loadSpzchain.
Encode — licensed
Producing SPZ blobs requires a Bitruvius license. That covers:
- SPZ v4 encode (byte-identical with libspz; 1.7-2.3x faster).
- Configurable position fractional bits (1-15), SH coefficient bit widths (1-8), coordinate frames (RUB / RDF / RUF / LUF / RDB / LDB).
- All 4 production SIMD backends (AVX2, NEON, WASM SIMD128, scalar fallback). AVX-512 + SVE2 opt-in via nightly features (M8).
Access
Sign in to the customer portal to download binaries, generate a license, and read the full documentation:
- Download binaries — prebuilt static + shared libraries for every supported platform, plus the generated
turbospz.hC header. Signed URLs, 15-minute expiry. - Full documentation — install guides, quickstart, drop-in procedures for libspz consumers, API reference, performance benchmarks vs libspz, and license activation.
- License management — generate, view, and rotate license keys.
No account yet? Your Bitruvius contact provisions customer users once your contract is active.