A sparse octree data structure.

Usage no npm install needed!

<script type="module">
  import sparseOctree from '';


Sparse Octree

CI Version Peer dependencies

A sparse, pointer-based octree data structure. For a linear implementation see linear-octree.

Demo · Sandbox · Documentation


This library requires the peer dependency three.

npm install three sparse-octree


import { Vector3 } from "three";
import { PointOctree } from "sparse-octree";

const min = new Vector3(-1, -1, -1);
const max = new Vector3(1, 1, 1);

const octree = new PointOctree(min, max);

const myData = {};
const p1 = new Vector3(0, 0, 0);
const p2 = new Vector3(0, 0, 0.5);

octree.set(p1, myData);
octree.move(p1, p2);
octree.get(p2); // => myData

octree.get(p2); // => null
Custom Octrees
import { Octree, CubicOctant } from "sparse-octree";

export class CubicOctree extends Octree {

    constructor(min, size) {

        this.root = new CubicOctant(min, size);




  • Pointer-based structure
    • Handles octant splitting
    • Supports cubic octrees for reduced memory usage
    • Dynamic depth
  • Adheres to a common octant layout
  • Supports raycasting
  • Supports culling
  • Can be extended to manage any data
  • Provides a point management implementation


Maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.