Three.quarks is a general purpose particle system / VFX engine for three.js
See the codethree.quarks is a high-performance particle system and visual effects library for three.js, written in TypeScript.
Create stunning real-time VFX for games, interactive experiences, and web applications with an intuitive API and powerful visual editor.

โถ๏ธ Launch Live Demo - See three.quarks in action with interactive examples!
| Resource | Description | |
|---|---|---|
| ๐ | Documentation | Official website and guides |
| ๐จ | Visual Editor | WYSIWYG particle effect creator |
| ๐ฌ | Discord | Community support and discussion |
npm install three.quarks
import * as THREE from 'three';
import {
BatchedRenderer,
ParticleSystem,
ConstantValue,
IntervalValue,
ConstantColor,
PointEmitter,
RenderMode
} from 'three.quarks';
// 1. Create the batch renderer (manages all particle systems)
const batchRenderer = new BatchedRenderer();
scene.add(batchRenderer);
// 2. Define your particle system
const particles = new ParticleSystem({
duration: 2,
looping: true,
startLife: new IntervalValue(1, 2),
startSpeed: new ConstantValue(5),
startSize: new IntervalValue(0.1, 0.3),
startColor: new ConstantColor(new THREE.Vector4(1, 1, 1, 1)),
maxParticle: 100,
emissionOverTime: new ConstantValue(20),
shape: new PointEmitter(),
material: new THREE.MeshBasicMaterial({
map: yourTexture,
transparent: true
}),
renderMode: RenderMode.BillBoard
});
// 3. Add to scene and renderer
scene.add(particles.emitter);
batchRenderer.addSystem(particles);
// 4. Update in your animation loop
function animate() {
const delta = clock.getDelta();
batchRenderer.update(delta);
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
Export effects from the visual editor and load them at runtime:
import { QuarksLoader, QuarksUtil, BatchedRenderer } from 'three.quarks';
const batchRenderer = new BatchedRenderer();
const loader = new QuarksLoader();
loader.load('effects/explosion.json', (effect) => {
QuarksUtil.addToBatchRenderer(effect, batchRenderer);
scene.add(effect);
});
scene.add(batchRenderer);
// Clone and play the effect multiple times
const instance = loadedEffect.clone();
scene.add(instance);
QuarksUtil.addToBatchRenderer(instance, batchRenderer);
QuarksUtil.setAutoDestroy(instance, true); // Auto-cleanup when finished
QuarksUtil.play(instance);
Use the quarks.r3f package for declarative React integration:
npm install quarks.r3f three.quarks
import { Canvas } from '@react-three/fiber'
import { QuarksProvider, ParticleSystem } from 'quarks.r3f'
import { ConeEmitter, SizeOverLife, PiecewiseBezier, Bezier, RenderMode } from 'three.quarks'
function FireEffect() {
const shape = useMemo(() => new ConeEmitter({ angle: 0.3, radius: 0.2 }), [])
const behaviors = useMemo(() => [
new SizeOverLife(new PiecewiseBezier([[new Bezier(1, 0.5, 0.2, 0), 0]]))
], [])
return (
<ParticleSystem
duration={5}
looping
startLife={[1, 2]}
startSpeed={[2, 4]}
startSize={0.5}
startColor={{ r: 1, g: 0.5, b: 0.2, a: 1 }}
emissionOverTime={40}
shape={shape}
renderMode={RenderMode.BillBoard}
behaviors={behaviors}
position={[0, 0, 0]}
autoPlay
/>
)
}
function App() {
return (
<Canvas>
<QuarksProvider>
<FireEffect />
</QuarksProvider>
</Canvas>
)
}
See quarks.r3f documentation for full API reference.
Browse the examples folder or run locally:
npm install
npm run build
npm run examples
This project is a monorepo with modular packages:
| Package | Description |
|---|---|
| three.quarks | ๐ฏ Main package - Three.js particle system with batched rendering, shaders, and full VFX toolkit |
| quarks.core | ๐งฑ Core library - Framework-agnostic math, behaviors, emitter shapes, and functions (zero dependencies) |
| quarks.r3f | โ๏ธ React Three Fiber - Declarative R3F components with hooks, Suspense support, and flexible props API |
| quarks.nodes | ๐ฎ Node system - Experimental node-based VFX with visual programming and WebGPU compute support |
| quarks.examples | ๐ฎ Examples - Interactive demos showcasing particle effects and features |
| quarks.playground | ๐งช Playground - Development sandbox for testing and experimenting with effects |
MIT
Overall
Maintained
Code review
npm
Latest release
Releases this year
1,685 followers ยท starred Feb 2026
25,614 followers ยท starred Sep 2023
73 followers ยท starred May 2026
330 followers ยท starred Sep 2023
Three.quarks is a general purpose particle system / VFX engine for three.js
See the codethree.quarks is a high-performance particle system and visual effects library for three.js, written in TypeScript.
Create stunning real-time VFX for games, interactive experiences, and web applications with an intuitive API and powerful visual editor.

โถ๏ธ Launch Live Demo - See three.quarks in action with interactive examples!
| Resource | Description | |
|---|---|---|
| ๐ | Documentation | Official website and guides |
| ๐จ | Visual Editor | WYSIWYG particle effect creator |
| ๐ฌ | Discord | Community support and discussion |
npm install three.quarks
import * as THREE from 'three';
import {
BatchedRenderer,
ParticleSystem,
ConstantValue,
IntervalValue,
ConstantColor,
PointEmitter,
RenderMode
} from 'three.quarks';
// 1. Create the batch renderer (manages all particle systems)
const batchRenderer = new BatchedRenderer();
scene.add(batchRenderer);
// 2. Define your particle system
const particles = new ParticleSystem({
duration: 2,
looping: true,
startLife: new IntervalValue(1, 2),
startSpeed: new ConstantValue(5),
startSize: new IntervalValue(0.1, 0.3),
startColor: new ConstantColor(new THREE.Vector4(1, 1, 1, 1)),
maxParticle: 100,
emissionOverTime: new ConstantValue(20),
shape: new PointEmitter(),
material: new THREE.MeshBasicMaterial({
map: yourTexture,
transparent: true
}),
renderMode: RenderMode.BillBoard
});
// 3. Add to scene and renderer
scene.add(particles.emitter);
batchRenderer.addSystem(particles);
// 4. Update in your animation loop
function animate() {
const delta = clock.getDelta();
batchRenderer.update(delta);
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
Export effects from the visual editor and load them at runtime:
import { QuarksLoader, QuarksUtil, BatchedRenderer } from 'three.quarks';
const batchRenderer = new BatchedRenderer();
const loader = new QuarksLoader();
loader.load('effects/explosion.json', (effect) => {
QuarksUtil.addToBatchRenderer(effect, batchRenderer);
scene.add(effect);
});
scene.add(batchRenderer);
// Clone and play the effect multiple times
const instance = loadedEffect.clone();
scene.add(instance);
QuarksUtil.addToBatchRenderer(instance, batchRenderer);
QuarksUtil.setAutoDestroy(instance, true); // Auto-cleanup when finished
QuarksUtil.play(instance);
Use the quarks.r3f package for declarative React integration:
npm install quarks.r3f three.quarks
import { Canvas } from '@react-three/fiber'
import { QuarksProvider, ParticleSystem } from 'quarks.r3f'
import { ConeEmitter, SizeOverLife, PiecewiseBezier, Bezier, RenderMode } from 'three.quarks'
function FireEffect() {
const shape = useMemo(() => new ConeEmitter({ angle: 0.3, radius: 0.2 }), [])
const behaviors = useMemo(() => [
new SizeOverLife(new PiecewiseBezier([[new Bezier(1, 0.5, 0.2, 0), 0]]))
], [])
return (
<ParticleSystem
duration={5}
looping
startLife={[1, 2]}
startSpeed={[2, 4]}
startSize={0.5}
startColor={{ r: 1, g: 0.5, b: 0.2, a: 1 }}
emissionOverTime={40}
shape={shape}
renderMode={RenderMode.BillBoard}
behaviors={behaviors}
position={[0, 0, 0]}
autoPlay
/>
)
}
function App() {
return (
<Canvas>
<QuarksProvider>
<FireEffect />
</QuarksProvider>
</Canvas>
)
}
See quarks.r3f documentation for full API reference.
Browse the examples folder or run locally:
npm install
npm run build
npm run examples
This project is a monorepo with modular packages:
| Package | Description |
|---|---|
| three.quarks | ๐ฏ Main package - Three.js particle system with batched rendering, shaders, and full VFX toolkit |
| quarks.core | ๐งฑ Core library - Framework-agnostic math, behaviors, emitter shapes, and functions (zero dependencies) |
| quarks.r3f | โ๏ธ React Three Fiber - Declarative R3F components with hooks, Suspense support, and flexible props API |
| quarks.nodes | ๐ฎ Node system - Experimental node-based VFX with visual programming and WebGPU compute support |
| quarks.examples | ๐ฎ Examples - Interactive demos showcasing particle effects and features |
| quarks.playground | ๐งช Playground - Development sandbox for testing and experimenting with effects |
MIT
Overall
Maintained
Code review
npm
Latest release
Releases this year
1,685 followers ยท starred Feb 2026
25,614 followers ยท starred Sep 2023
73 followers ยท starred May 2026
330 followers ยท starred Sep 2023