Official tsParticles ReactJS component
npm install @tsparticles/reactor
yarn add @tsparticles/reactnpm install @tsparticles/react @tsparticles/engineor
yarn add @tsparticles/react @tsparticles/engine@tsparticles/engine is the core package for tsParticles, it contains useful types like ISourceOptions, Engine or Container.
Starting from version 1.17.0 there are two official create-react-app templates:
cra-template-particles: Simple ReactJS template with full screen particles, using JavaScriptcra-template-particles-typescript: Simple ReactJS template with full screen particles, using TypeScript
You can simply install them using the create-react-app command like this:
$ create-react-app your_app --template particlesor
$ create-react-app your_app --template particles-typescriptExamples:
import{useEffect,useMemo,useState}from"react";importParticles,{initParticlesEngine}from"@tsparticles/react";// import { loadAll } from "@tsparticles/all"; // if you are going to use `loadAll`, install the "@tsparticles/all" package too.// import { loadFull } from "tsparticles"; // if you are going to use `loadFull`, install the "tsparticles" package too.import{loadSlim}from"@tsparticles/slim";// if you are going to use `loadSlim`, install the "@tsparticles/slim" package too.// import { loadBasic } from "@tsparticles/basic"; // if you are going to use `loadBasic`, install the "@tsparticles/basic" package too.constApp=()=>{const[init,setInit]=useState(false);// this should be run only once per application lifetimeuseEffect(()=>{initParticlesEngine(async(engine)=>{// you can initiate the tsParticles instance (engine) here, adding custom shapes or presets// this loads the tsparticles package bundle, it's the easiest method for getting everything ready// starting from v2 you can add only the features you need reducing the bundle size//await loadAll(engine);//await loadFull(engine);awaitloadSlim(engine);//await loadBasic(engine);}).then(()=>{setInit(true);});},[]);constparticlesLoaded=(container)=>{console.log(container);};constoptions=useMemo(()=>({background: {color: {value: "#0d47a1",},},fpsLimit: 120,interactivity: {events: {onClick: {enable: true,mode: "push",},onHover: {enable: true,mode: "repulse",},},modes: {push: {quantity: 4,},repulse: {distance: 200,duration: 0.4,},},},particles: {color: {value: "#ffffff",},links: {color: "#ffffff",distance: 150,enable: true,opacity: 0.5,width: 1,},move: {direction: "none",enable: true,outModes: {default: "bounce",},random: false,speed: 6,straight: false,},number: {density: {enable: true,},value: 80,},opacity: {value: 0.5,},shape: {type: "circle",},size: {value: {min: 1,max: 5},},},detectRetina: true,}),[],);if(init){return(<Particlesid="tsparticles"particlesLoaded={particlesLoaded}options={options}/>);}return<></>;};import{useEffect,useMemo,useState}from"react";importParticles,{initParticlesEngine}from"@tsparticles/react";import{typeContainer,typeISourceOptions,MoveDirection,OutMode,}from"@tsparticles/engine";// import { loadAll } from "@tsparticles/all"; // if you are going to use `loadAll`, install the "@tsparticles/all" package too.// import { loadFull } from "tsparticles"; // if you are going to use `loadFull`, install the "tsparticles" package too.import{loadSlim}from"@tsparticles/slim";// if you are going to use `loadSlim`, install the "@tsparticles/slim" package too.// import { loadBasic } from "@tsparticles/basic"; // if you are going to use `loadBasic`, install the "@tsparticles/basic" package too.constApp=()=>{const[init,setInit]=useState(false);// this should be run only once per application lifetimeuseEffect(()=>{initParticlesEngine(async(engine)=>{// you can initiate the tsParticles instance (engine) here, adding custom shapes or presets// this loads the tsparticles package bundle, it's the easiest method for getting everything ready// starting from v2 you can add only the features you need reducing the bundle size//await loadAll(engine);//await loadFull(engine);awaitloadSlim(engine);//await loadBasic(engine);}).then(()=>{setInit(true);});},[]);constparticlesLoaded=async(container?: Container): Promise<void>=>{console.log(container);};constoptions: ISourceOptions=useMemo(()=>({background: {color: {value: "#0d47a1",},},fpsLimit: 120,interactivity: {events: {onClick: {enable: true,mode: "push",},onHover: {enable: true,mode: "repulse",},},modes: {push: {quantity: 4,},repulse: {distance: 200,duration: 0.4,},},},particles: {color: {value: "#ffffff",},links: {color: "#ffffff",distance: 150,enable: true,opacity: 0.5,width: 1,},move: {direction: MoveDirection.none,enable: true,outModes: {default: OutMode.out,},random: false,speed: 6,straight: false,},number: {density: {enable: true,},value: 80,},opacity: {value: 0.5,},shape: {type: "circle",},size: {value: {min: 1,max: 5},},},detectRetina: true,}),[],);if(init){return(<Particlesid="tsparticles"particlesLoaded={particlesLoaded}options={options}/>);}return<></>;};import{useEffect,useState}from"react";importParticles,{initParticlesEngine}from"@tsparticles/react";// import { loadAll } from "@tsparticles/all"; // if you are going to use `loadAll`, install the "@tsparticles/all" package too.// import { loadFull } from "tsparticles"; // if you are going to use `loadFull`, install the "tsparticles" package too.import{loadSlim}from"@tsparticles/slim";// if you are going to use `loadSlim`, install the "@tsparticles/slim" package too.// import { loadBasic } from "@tsparticles/basic"; // if you are going to use `loadBasic`, install the "@tsparticles/basic" package too.constApp=()=>{const[init,setInit]=useState(false);// this should be run only once per application lifetimeuseEffect(()=>{initParticlesEngine(async(engine)=>{// you can initiate the tsParticles instance (engine) here, adding custom shapes or presets// this loads the tsparticles package bundle, it's the easiest method for getting everything ready// starting from v2 you can add only the features you need reducing the bundle size//await loadAll(engine);//await loadFull(engine);awaitloadSlim(engine);//await loadBasic(engine);}).then(()=>{setInit(true);});},[]);constparticlesLoaded=(container)=>{console.log(container);};if(init){return(<Particlesid="tsparticles"url="http://foo.bar/particles.json"particlesLoaded={particlesLoaded}/>);}return<></>;};import{useEffect,useState}from"react";importParticles,{initParticlesEngine}from"@tsparticles/react";importtype{Container}from"@tsparticles/engine";// import { loadAll } from "@tsparticles/all"; // if you are going to use `loadAll`, install the "@tsparticles/all" package too.// import { loadFull } from "tsparticles"; // if you are going to use `loadFull`, install the "tsparticles" package too.import{loadSlim}from"@tsparticles/slim";// if you are going to use `loadSlim`, install the "@tsparticles/slim" package too.// import { loadBasic } from "@tsparticles/basic"; // if you are going to use `loadBasic`, install the "@tsparticles/basic" package too.constApp=()=>{const[init,setInit]=useState(false);// this should be run only once per application lifetimeuseEffect(()=>{initParticlesEngine(async(engine)=>{// you can initiate the tsParticles instance (engine) here, adding custom shapes or presets// this loads the tsparticles package bundle, it's the easiest method for getting everything ready// starting from v2 you can add only the features you need reducing the bundle size//await loadAll(engine);//await loadFull(engine);awaitloadSlim(engine);//await loadBasic(engine);}).then(()=>{setInit(true);});},[]);constparticlesLoaded=async(container?: Container)=>{console.log(container);};if(init){return(<Particlesid="tsparticles"url="http://foo.bar/particles.json"particlesLoaded={particlesLoaded}/>);}return<></>;};| Prop | Type | Definition |
|---|---|---|
| id | string | The id of the element. |
| width | string | The width of the canvas. |
| height | string | The height of the canvas. |
| options | object | The options of the particles instance. |
| url | string | The remote options url, called using an AJAX request |
| style | object | The style of the canvas element. |
| className | string | The class name of the canvas wrapper. |
Find all configuration options here.
You can find sample configurations here 📖
Preset demos can be found here
There's also a CodePen collection actively maintained and updated here
Report bugs and issues here



