React tsParticles logo

React tsParticles

The official React component for creating highly customizable, lightweight particle effects and backgrounds.

npm install react-tsparticles
8.6K31.6K/weekv2.12.2346.04 KBMIT36 issues
Last updated: 2023-08-12
Star history chart for matteobruni/tsparticles

TL;DR

The official React wrapper for tsParticles, enabling you to easily render high-performance particle animations using HTML5 Canvas.

Perfect for adding visual flair to landing pages, hero sections, and interactive backgrounds with minimal performance overhead.

Why React tsParticles?

React tsParticles brings the popular tsParticles library into the React ecosystem. Unlike older libraries that relied on heavy dependencies or outdated rendering methods, tsParticles is built from the ground up for performance and modularity. It allows developers to add "wow" factors to websites without the complexity of a full 3D engine.

  • Extreme Customization: Control every aspect of your particles—shape, size, color, opacity, movement, speed, and interactions.
  • Performance First: Renders on a single HTML5 Canvas element, ensuring your DOM remains clean and your application stays responsive.
  • Modular Architecture: Load only the features you need (e.g., the "slim" bundle) to minimize the impact on your initial bundle size.
  • Interactive: Built-in support for mouse interaction events like hovering, clicking, and repulsing particles creates an immersive user experience.
  • Preset Ecosystem: Access a vast library of ready-made presets (snow, stars, confetti, fireworks) to get started in seconds.

Code Snippet

This example demonstrates a classic "network" effect where particles link together when close. Note the use of loadSlim to keep the bundle size small.

import { useCallback } from "react";
import Particles from "react-tsparticles";
import { loadSlim } from "tsparticles-slim"; 

export default function ParticleBackground() {
  // Initialize the tsparticles engine
  const particlesInit = useCallback(async (engine) => {
    await loadSlim(engine);
  }, []);

  return (
    <Particles
      id="tsparticles"
      init={particlesInit}
      options={{
        background: {
          color: { value: "#0d47a1" },
        },
        fpsLimit: 120,
        particles: {
          color: { value: "#ffffff" },
          links: {
            color: "#ffffff",
            distance: 150,
            enable: true,
            opacity: 0.5,
            width: 1,
          },
          move: {
            enable: true,
            speed: 2,
          },
          number: {
            density: { enable: true, area: 800 },
            value: 80,
          },
          opacity: { value: 0.5 },
          size: { value: { min: 1, max: 5 } },
        },
        interactivity: {
          events: {
            onHover: { enable: true, mode: "repulse" },
          },
          modes: {
            repulse: { distance: 200, duration: 0.4 },
          },
        },
      }}
    />
  );
};

The options prop is where the magic happens. It accepts a deeply nested configuration object that defines the behavior of the simulation. The particlesInit callback is run once to load the necessary engine features.

Pros and Cons

No library is perfect; understanding the trade-offs is key to selecting the right tool.

Pros

  • Visual Impact: Provides an immediate upgrade to the visual quality of a site with relatively low effort.
  • Type Safety: Written in TypeScript, providing excellent autocomplete for the massive configuration object.
  • Maintenance: Actively maintained with frequent updates, ensuring compatibility with the latest React versions and fixing bugs quickly.

Cons

  • Configuration Overload: The configuration object is enormous. Finding the exact combination of settings to achieve a specific look can be daunting without using the online generator.
  • Performance on Mobile: While optimized, heavy particle effects (thousands of nodes) can still drain battery and lower FPS on older mobile devices.
  • Z-Index Wars: Because it uses a canvas covering the screen, you must be careful with CSS z-index to ensure it sits behind your content and doesn't block clicks.

Comparison with Other Visual Libraries

The table below outlines the positioning differences between React tsParticles and other visual tools:

LibraryDesign PhilosophyBest ForPain Points
React tsParticlesConfig-Driven Canvas
2D particle simulations via configuration.
Backgrounds
Hero sections, login screens, and decorative effects.
Config Complexity
The JSON config can become massive and hard to read.
React Three FiberDeclarative 3D
Full 3D engine wrapper for Three.js.
3D Experiences
Complex 3D models, games, and spatial environments.
Overkill
Too heavy and complex if you just want some floating dots.
Framer MotionUI Animation
Declarative animations for DOM elements.
Interface State
Page transitions, modals, and button micro-interactions.
DOM Heavy
Not suitable for rendering hundreds of floating particles (DOM perf).

Verdict: When to Adopt

React tsParticles is the go-to solution when you need decorative, ambient motion. It excels at creating "vibes"—starry nights, digital networks, falling snow—that sit passively in the background.

It is not a replacement for a physics engine or a game engine. If you need particles to interact with complex game logic or 3D models, look at React Three Fiber. If you need to animate UI elements (like a modal sliding in), use Framer Motion. Use tsParticles to make your Landing Page look expensive.