Alchemist0823/three.quarks

Three.quarks is a general purpose particle system / VFX engine for three.js

TypeScript

1,053

363 commits

updated May 21, 2026

See the code

README

three.quarks โœจ

npm npm-downloads build-size github discord

three.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.

landing image

๐ŸŽฎ Try the Demo

โ–ถ๏ธ Launch Live Demo - See three.quarks in action with interactive examples!

ResourceDescription
๐Ÿ“–DocumentationOfficial website and guides
๐ŸŽจVisual EditorWYSIWYG particle effect creator
๐Ÿ’ฌDiscordCommunity support and discussion

๐Ÿš€ Why three.quarks?

  • โšก High Performance - Optimized batch rendering minimizes draw calls
  • ๐ŸŽฎ Unity Compatible - Import particle systems from Unity's Shuriken system
  • ๐ŸŽจ Visual Editor - Design effects visually with three.quarks-editor
  • ๐Ÿ”ง Flexible - Extensible plugin system for custom behaviors and emitters
  • โœ… Production Ready - Used in games and interactive applications

๐Ÿ“ฆ Installation

npm install three.quarks

โšก Quick Start

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);
}

๐Ÿ“‚ Loading VFX from JSON

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);

Playing Multiple Instances

// 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);

โš›๏ธ React Three Fiber

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.

โœจ Features

๐ŸŽฌ Renderers

  • Billboard - Camera-facing sprites
  • Stretched Billboard - Velocity-aligned sprites
  • Mesh - 3D geometry particles
  • Trail - Ribbon trails behind particles

๐Ÿ“ Emitter Shapes

  • Point, Sphere, Hemisphere, Cone, Circle
  • Mesh Surface - Emit from 3D model surfaces
  • Grid - Structured emission patterns

๐ŸŽญ Behaviors

  • Color over lifetime
  • Size over lifetime
  • Rotation over lifetime
  • Force fields
  • Orbital motion
  • Texture animation
  • Sub-emitters
  • Custom behaviors via plugin system

๐ŸŽจ Materials

  • MeshBasicMaterial (unlit)
  • MeshStandardMaterial (PBR)
  • Configurable blending modes
  • Texture atlas support

๐Ÿงช Examples

Browse the examples folder or run locally:

npm install
npm run build
npm run examples

๐Ÿ“ฆ Packages

This project is a monorepo with modular packages:

PackageDescription
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

๐Ÿ› ๏ธ Editor

  • three.quarks-editor - Visual editor for creating and previewing particle effects with real-time preview and JSON export

๐Ÿ“š Resources

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿ”ฒ WebGPU rendering support
  • ๐Ÿ”ฒ WebAssembly particle simulation
  • ๐Ÿ”ฒ Node-based scriptable particle systems
  • ๐Ÿ”ฒ Cross-platform native plugins

๐Ÿ“„ License

MIT

animation
devtools
particles
threejs
webgl

Alchemist0823/three.quarks

Three.quarks is a general purpose particle system / VFX engine for three.js

TypeScript

1,053

363 commits

updated May 21, 2026

See the code

README

three.quarks โœจ

npm npm-downloads build-size github discord

three.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.

landing image

๐ŸŽฎ Try the Demo

โ–ถ๏ธ Launch Live Demo - See three.quarks in action with interactive examples!

ResourceDescription
๐Ÿ“–DocumentationOfficial website and guides
๐ŸŽจVisual EditorWYSIWYG particle effect creator
๐Ÿ’ฌDiscordCommunity support and discussion

๐Ÿš€ Why three.quarks?

  • โšก High Performance - Optimized batch rendering minimizes draw calls
  • ๐ŸŽฎ Unity Compatible - Import particle systems from Unity's Shuriken system
  • ๐ŸŽจ Visual Editor - Design effects visually with three.quarks-editor
  • ๐Ÿ”ง Flexible - Extensible plugin system for custom behaviors and emitters
  • โœ… Production Ready - Used in games and interactive applications

๐Ÿ“ฆ Installation

npm install three.quarks

โšก Quick Start

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);
}

๐Ÿ“‚ Loading VFX from JSON

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);

Playing Multiple Instances

// 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);

โš›๏ธ React Three Fiber

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.

โœจ Features

๐ŸŽฌ Renderers

  • Billboard - Camera-facing sprites
  • Stretched Billboard - Velocity-aligned sprites
  • Mesh - 3D geometry particles
  • Trail - Ribbon trails behind particles

๐Ÿ“ Emitter Shapes

  • Point, Sphere, Hemisphere, Cone, Circle
  • Mesh Surface - Emit from 3D model surfaces
  • Grid - Structured emission patterns

๐ŸŽญ Behaviors

  • Color over lifetime
  • Size over lifetime
  • Rotation over lifetime
  • Force fields
  • Orbital motion
  • Texture animation
  • Sub-emitters
  • Custom behaviors via plugin system

๐ŸŽจ Materials

  • MeshBasicMaterial (unlit)
  • MeshStandardMaterial (PBR)
  • Configurable blending modes
  • Texture atlas support

๐Ÿงช Examples

Browse the examples folder or run locally:

npm install
npm run build
npm run examples

๐Ÿ“ฆ Packages

This project is a monorepo with modular packages:

PackageDescription
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

๐Ÿ› ๏ธ Editor

  • three.quarks-editor - Visual editor for creating and previewing particle effects with real-time preview and JSON export

๐Ÿ“š Resources

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿ”ฒ WebGPU rendering support
  • ๐Ÿ”ฒ WebAssembly particle simulation
  • ๐Ÿ”ฒ Node-based scriptable particle systems
  • ๐Ÿ”ฒ Cross-platform native plugins

๐Ÿ“„ License

MIT

animation
devtools
particles
threejs
webgl

Project health

Overall

3.2/10

Maintained

0/10

Code review

0/10
OpenSSF Scorecard

Latest release

0.17.1 ยท May 21, 2026

Releases this year

2

Significant stargazers

Neko

1,685 followers ยท starred Feb 2026

mrdoob

25,614 followers ยท starred Sep 2023

Evan Jones

73 followers ยท starred May 2026

ShrekShao

330 followers ยท starred Sep 2023