TurboLEPCC

A clean-room, pure-Rust LEPCC codec for I3S / SLPK point-cloud payloads. TurboLEPCC is an independent implementation of Esri’s LEPCC (Limited Error Point Cloud Compression) format used by ArcGIS scene layers and 3D streaming pipelines. It produces and consumes blobs that are byte-exact with the Esri C++ reference on encode and decode across all four LEPCC subsystems (XYZ, RGB, Intensity, FlagBytes), and exposes the same C ABI — so anything that loads lepcc_c_api.h symbols today can link against libturbolepcc.* with zero code changes.

  • Byte-exact parity with the Esri reference on all four subsystems, on every SIMD backend (scalar, AVX2, NEON, WASM128, optional SVE2) — verified on every release via a four-axis test matrix (decode-Esri-blob → ours; encode-ours → Esri-bytes; round-trip encode→decode; round-trip decode→encode).
  • Faster everywhere measured: 10 outright wins + 2 ties vs the Esri C++ reference across the kernel matrix on Windows MSVC x86_64 (AVX2). Bench data shipped with every release.
  • No unsafe outside SIMD intrinsics, no panics on malformed input. The decoder is hardened for adversarial input by construction.
  • 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).
  • Full language bindings: Python (PyO3 wheel), Node.js (napi-rs), browser WASM (wasm-bindgen), Java (JNI), .NET (P/Invoke), and an ArcGIS Pro 3.x .esriAddinX for SLPK re-encoding.

Free to decode, free to integrate

Once you have the library, decoding LEPCC blobs — from any supported language binding — requires no license and no runtime check. Every viewer / streaming workflow runs unrestricted:

  • Decoding XYZ point coordinates, ClusterRGB color blobs, 16-bit intensity blobs, and 8-bit flag-byte streams.
  • Inspecting metadata (lepcc_getBlobInfo, lepcc_getPointCount, etc.) without decoding the payload.
  • Integrating through Cesium, loaders.gl @loaders.gl/i3s, PDAL i3s reader, any custom I3S viewer — by loading libturbolepcc.* in place of Esri’s static-linked lepcc.

Encode — licensed

Producing LEPCC blobs requires a license key from your customer portal account. That covers:

  • Lossy encoding of XYZ at any caller-specified max_x_error / max_y_error / max_z_error.
  • Lossless RGB (None / Lossless / Array3D color modes — full Esri-compatible color-clustering path).
  • Lossy Intensity (16-bit input, automatic upscale-factor detection, BitStuffer2 packing).
  • Lossless FlagBytes (BitStuffer2 ↔ Huffman selection matching Esri’s byte-count predicate).

Drop-in story — honest scope

TurboLEPCC ships both static (.a / .lib) and shared (.so / .dylib / .dll) libraries. The drop-in matrix:

  • PDAL I3S writer — supply -DLEPCC_LIBRARY=libturbolepcc.so at PDAL build time. Prebuilt PDAL plugin (pdal-i3s-turbolepcc-*.tar.gz) ships with every release.
  • Custom I3S generation tools / loaders.gl / Cesium — link the static .a / .lib or load the shared lib; the public symbol set mirrors lepcc_c_api.h byte-for-byte.
  • ArcGIS Pro — Esri statically links lepcc into the closed-source SceneLayerLib.dll, so an in-process swap is not viable. We instead ship a Pro 3.x .esriAddinX add-in that re-encodes exported SLPK files with TurboLEPCC.
  • Anyone who currently builds against Esri’s lepcc source — relink against turbolepcc’s static lib; no source changes needed.

Access

Sign in to the customer portal to download binaries, generate a license, and read the full documentation:

  • Download binaries — prebuilt static and shared libraries for every supported platform, Python wheels, npm prebuilds, the WASM bundle, .NET NuGet, Java JAR, ArcGIS Pro add-in, and PDAL plugin. Signed URLs, 15-minute expiry.
  • Full documentation — install guides, quickstarts in Rust / C / Python / WASM, API reference, integration guides for PDAL i3s, ArcGIS Pro, Cesium, loaders.gl, and performance tuning.
  • License management — generate, view, and rotate license keys.

No account yet? Your Bitruvius contact provisions customer users once your contract is active.