math is a collection of math helpers for graphics and simulations.
- High performance: allocation-free, monomorphic, benchmarked
- Tiny: mean and lean, tree-shakable, only pay for what you use
- Portable: interops with WebGL, WebGPU, Wasm, your favourite renderer, more.
- Data-oriented: data-in, data-out functions over caller-owned data, without owning the data lifecycle.
> npm install math@canary| Import | Description | Contents |
|---|---|---|
math |
Vectors, quaternions, euler angles & matrices | vec2 vec3 vec4 euler quat quat2 mat2 mat2d mat3 mat4 spherical polar EPSILON round equals fade lerp clamp repeat remap remapClamp DEGREES_TO_RADIANS RADIANS_TO_DEGREES degreesToRadians radiansToDegrees wrapAngle deltaAngle |
math/shapes |
Shape primitives & spatial queries | box2 box3 obb3 plane3 sphere circle segment2 polygon2 triangle2 triangle3 raycast3 frustum |
math/geometry |
Geometric algorithms | circumcircle decomposePolygon2Quick decomposePolygon2Quality triangulatePolygon2 quickhull2 quickhull3 |
math/time |
Easing & spring animation | easing spring spring2 spring3 spring4 |
math/random |
Seeded random number generators | isaac32 isaac64 mulberry32 random |
math/noise |
Perlin, simplex & worley noise, plus fractal helpers | perlin2d perlin3d simplex2d simplex3d simplex4d worley2d worley3d fbm ridged billow domainWarp2 domainWarp3 curl2 curl3 |
math/color |
Color & colorspace utilities | color colorspace hsl |
import { type Vec3, vec3 } from 'math';
// math types are plain arrays — the constructors just return literals:
const a: Vec3 = [1, 2, 3]; // a plain-array literal
const b = vec3.fromValues(1, 2, 3); // the same as `a`
const out = vec3.create(); // returns [0, 0, 0]
// functions write into their first argument, so nothing is allocated:
vec3.add(out, a, b); // out = [2, 4, 6]
vec3.normalize(out, out); // aliasing an argument is fineThe library is grouped by domain behind subpath entrypoints. All APIs are highly tree-shakeable, only pay for what you use:
import { mat4, quat, vec3 } from 'math'; // core: vectors, quats, matrices
import { simplex3d } from 'math/noise'; // perlin / simplex noise
import { mulberry32 } from 'math/random'; // seeded rng
import { easing, spring } from 'math/time'; // easings & springs
// also: math/color, math/geometry, math/shapes — import only what you use- API.md — every export with its signature and a one-line description, grouped by module. Flat and greppable, so it's easy to search or hand to an AI coding assistant.
- Online API docs — the full typedoc reference, with search and cross-links.
- What's inside — jump straight to a module or namespace.
- The vec*, quat*, mat* code started life as a port of mathcat, which started as a TypeScript port of glMatrix (https://glmatrix.net/)
- The simplex noise is adapted from https://github.com/josephg/noisejs
- Thank you @kaleb for the npm package name!















