Skip to content

Helix NoiseDivergence-free flow fields you can art-direct

Give anything flowing, liquid-like motion β€” smoke, water, particles, wind. One function call, no FFT, no grid, no simulation.

Install ​

bash
npm install helix-noise
js
import { create } from "helix-noise";

const field = create({ helicity: 0.8, coherence: 0.5 });

const [u, v, w] = field.sample(x, y, z);       // divergence-free velocity, anywhere
const [u2, v2, w2] = field.sample(x, y, z, t); // …the same field, churning in time

Head to the JavaScript API Reference for every function, option, and method in plain language.

The same field in four ecosystems ​

All ports produce the same field for the same seed and options β€” verified against a shared fixture to ~1e-15 (machine precision). Pick your stack:

PlatformInstallReference
JavaScript / TypeScript β€” reference implementation (spectral + atom engines, boundaries, GLSL, WASM batch)npm install helix-noiseJavaScript API β†’
Python (numpy) β€” spectral engine, vectorized sample_manypip install helix-noisePython reference β†’
Rust β€” zero-dependency, WASM-friendly cratecargo add helix-noiseRust reference β†’
Shaders β€” GLSL Β· HLSL Β· WGSL Β· Godot generatorgenerate.py --target glslShaders reference β†’
React β€” react-three-fiber components (CPU + GPU particles)npm install helix-noise-r3fReact (r3f) reference β†’

The native ports scope v0.1 to the spectral engine, the free-slip SDF boundary, and the GLSL emitter; the atom engine (createAtoms) currently lives only in JavaScript and is a documented follow-up for the ports.

Released under the MIT License.