tsParticles confetti bundle to create confetti effects with a single API.
Included Packages
flowchart TD
subgraph b [Bundle]
bc[tsparticles/confetti]
bb[tsparticles/basic]
end
subgraph c [Core]
ce[tsparticles/engine]
end
subgraph p [Plugins]
pe[tsparticles/plugin-emitters]
pm[tsparticles/plugin-motion]
end
subgraph s [Shapes]
sca[tsparticles/shape-cards]
se[tsparticles/shape-emoji]
sh[tsparticles/shape-heart]
si[tsparticles/shape-image]
sp[tsparticles/shape-polygon]
ss[tsparticles/shape-square]
sst[tsparticles/shape-star]
end
subgraph u [Updaters]
ul[tsparticles/updater-life]
ur[tsparticles/updater-roll]
uro[tsparticles/updater-rotate]
ut[tsparticles/updater-tilt]
uw[tsparticles/updater-wobble]
end
bc --> bb
bc --> ce
bc --> p
bc --> s
bc --> u
The package API is centered on confetti.
import { confetti } from "@tsparticles/confetti";
// Main API
await confetti(options);
await confetti("canvas-id", options);
// Extra helpers
await confetti.init();
const fireOnCanvas = await confetti.create(canvas, defaultOptions);
await fireOnCanvas(options);
console.log(confetti.version);
@tsparticles/confetti does not expose tsParticles from its main entrypoint.
If you need direct engine APIs, import them from @tsparticles/engine.
pnpm add @tsparticles/confetti
import { confetti } from "@tsparticles/confetti";
await confetti({
count: 80,
spread: 60,
position: { x: 50, y: 50 },
colors: ["#ffffff", "#ff0000"],
});
With explicit canvas id:
import { confetti } from "@tsparticles/confetti";
await confetti("tsparticles", {
count: 50,
angle: 90,
spread: 45,
});
confetti.createimport { confetti } from "@tsparticles/confetti";
const canvas = document.getElementById("my-canvas") as HTMLCanvasElement;
const localConfetti = await confetti.create(canvas, { count: 30 });
await localConfetti({ spread: 70 });
The CDN/Vanilla JS version has two files:
confetti API, where dependencies must be loaded manuallyAfter loading the bundle, confetti is available on globalThis.
Use the bundle when you want a single script with all required dependencies.
This installation requires more work since all dependencies must be included in the page. Some lines above are all specified in the Included Packages section.
confetti({ count: 60 });
(async () => {
await confetti({ count: 60, spread: 55 });
})();
confetti("tsparticles", {
count: 50,
position: {
x: 50,
y: 50,
},
});
The confetti API accepts:
confetti(options)confetti(id, options)Main options:
count Integer (default: 50)angle Number (default: 90)spread Number (default: 45)startVelocity Number (default: 45)decay Number (default: 0.9)flat Boolean (default: false)gravity Number (default: 1)drift Number (default: 0)ticks Number (default: 200)position Object (x/y, default 50/50)colors Array<String>shapes Array<String>shapeOptions Record<string, unknown>scalar Number (default: 1)zIndex Integer (default: 100)disableForReducedMotion Boolean (default: true)Deprecated aliases still accepted:
particleCount (use count)origin (use position)confetti before scripts are loaded in CDN usagetsParticles is exported by @tsparticles/confetti main entrypointconfetti(options) or confetti(id, options))