react-confetti vs canvas-confetti vs vue-confetti
Confetti Animation Libraries
react-confetticanvas-confettivue-confettiSimilar Packages:
Confetti Animation Libraries

Confetti animation libraries in JavaScript provide developers with tools to create celebratory visual effects on web pages. These libraries simulate the falling of colorful confetti particles, adding a festive touch to user interactions, such as completing a task, winning a game, or reaching a milestone. They are easy to integrate and can be customized in terms of colors, shapes, sizes, and animation behaviors. These libraries enhance user experience by making web applications more engaging and visually appealing. canvas-confetti is a lightweight, framework-agnostic library that uses the HTML5 Canvas API to create high-performance confetti animations. It is highly customizable and can be used in any JavaScript project. react-confetti is a React-specific library that provides a simple way to add confetti animations to React applications. It leverages React's component-based architecture and offers easy-to-use props for customization. vue-confetti is a Vue.js plugin that integrates confetti animations into Vue applications. It provides a directive and a component for triggering confetti effects, making it easy to use within the Vue ecosystem.

Npm Package Weekly Downloads Trend
3 Years
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
react-confetti1,956,7851,676220 kB59 months agoMIT
canvas-confetti1,254,53312,20392.4 kB40a month agoISC
vue-confetti19,02223849.5 kB20-MIT
Feature Comparison: react-confetti vs canvas-confetti vs vue-confetti

Framework Compatibility

  • react-confetti:

    react-confetti is designed specifically for React applications. It leverages React's component model, making it easy to integrate and use within React projects. However, it is not suitable for non-React environments.

  • canvas-confetti:

    canvas-confetti is framework-agnostic, meaning it can be used with any JavaScript framework or even in plain JavaScript projects. This makes it highly versatile and suitable for a wide range of applications.

  • vue-confetti:

    vue-confetti is tailored for Vue.js applications. It provides a Vue-friendly API, including a directive and a component, making it easy to use within the Vue ecosystem. It is not designed for use outside of Vue.

Customization

  • react-confetti:

    react-confetti allows customization through props, such as the number of pieces, colors, and dimensions. While it is customizable, it may not offer as much flexibility as canvas-confetti for more complex animations.

  • canvas-confetti:

    canvas-confetti offers extensive customization options, including colors, shapes, sizes, and animation parameters. Developers can fine-tune the confetti effect to match their application's design and branding.

  • vue-confetti:

    vue-confetti provides basic customization options for colors and animation duration. It is designed to be simple and easy to use, but may not offer as many advanced customization features as canvas-confetti.

Performance

  • react-confetti:

    react-confetti performance depends on how it is implemented within the React application. While it is generally efficient, excessive use or improper handling of state can lead to performance issues in React apps.

  • canvas-confetti:

    canvas-confetti is optimized for performance, using the HTML5 Canvas API to render animations efficiently. It is lightweight and designed to handle multiple confetti bursts without significant impact on page performance.

  • vue-confetti:

    vue-confetti is designed to be lightweight and performant within Vue applications. However, like any animation, performance can be affected by how it is used and the complexity of the application.

Ease of Use

  • react-confetti:

    react-confetti is straightforward to use within React applications. Its component-based nature makes it easy to add and control confetti effects using React's standard practices.

  • canvas-confetti:

    canvas-confetti is easy to use with a simple API for triggering confetti animations. It requires minimal setup and can be integrated quickly into any project.

  • vue-confetti:

    vue-confetti is user-friendly for Vue developers, offering both a directive and a component for triggering confetti. This flexibility makes it easy to use in various ways within Vue templates.

Code Examples

  • react-confetti:

    react-confetti Example

    import React from 'react';
    import Confetti from 'react-confetti';
    
    const MyComponent = () => {
      return <Confetti width={window.innerWidth} height={window.innerHeight} />;
    };
    
  • canvas-confetti:

    canvas-confetti Example

    import confetti from 'canvas-confetti';
    confetti({
      particleCount: 100,
      spread: 70,
      origin: { y: 0.6 }
    });
    
  • vue-confetti:

    vue-confetti Example

    <template>
      <div>
        <button @click="launchConfetti">Celebrate</button>
        <vue-confetti ref="confetti" />
      </div>
    </template>
    
    <script>
    import VueConfetti from 'vue-confetti';
    
    export default {
      components: { VueConfetti },
      methods: {
        launchConfetti() {
          this.$refs.confetti.launch();
        }
      }
    };
    </script>
    
How to Choose: react-confetti vs canvas-confetti vs vue-confetti
  • react-confetti:

    Choose react-confetti if you are working within a React application and want a simple, declarative way to add confetti animations. It is perfect for React developers who prefer a component-based approach.

  • canvas-confetti:

    Choose canvas-confetti if you need a lightweight, versatile solution that can be used across different frameworks and vanilla JavaScript projects. It is ideal for projects where performance and customization are key.

  • vue-confetti:

    Choose vue-confetti if you are developing a Vue.js application and want a seamless integration of confetti animations. It is designed specifically for Vue and offers both directive and component-based implementations.

README for react-confetti

react-confetti

Confetti without the cleanup. Demo

Build Status npm npm bundle size npm type definitions

Based on a pen by @Gthibaud: https://codepen.io/Gthibaud/pen/ENzXbp

demogif

Install

npm install react-confetti

Use

width and height props are recommended. They will default to the initial window dimensions, but will not respond to resize events. It is recommended to provide the dimensions yourself. Here is an example using a hook:

import React from 'react'
import { useWindowSize } from 'react-use'
import Confetti from 'react-confetti'

export default () => {
  const { width, height } = useWindowSize()
  return (
    <Confetti
      width={width}
      height={height}
    />
  )
}

Props

PropertyTypeDefaultDescription
widthNumberwindow.innerWidth || 300Width of the <canvas> element.
heightNumberwindow.innerHeight || 200Height of the <canvas> element.
numberOfPiecesNumber200Number of confetti pieces at one time.
confettiSource{ x: Number, y: Number, w: Number, h: Number }{x: 0, y: 0, w: canvas.width, h:0}Rectangle where the confetti should spawn. Default is across the top.
frictionNumber0.99
windNumber0
gravityNumber0.1
initialVelocityXNumber | { min: Number, max: Number }4Range of values between which confetti is emitted horizontally, positive numbers being rightward, and negative numbers being leftward. Giving a number x is equivalent to giving a range { min: -x, max: x }.
initialVelocityYNumber | { min: Number, max: Number }10Range of values between which confetti is emitted vertically, positive numbers being downward, and negative numbers being upward. Giving a number y is equivalent to giving a range { min: -y, max: 0 }.
colorsString[]['#f44336'
'#e91e63'
'#9c27b0'
'#673ab7'
'#3f51b5'
'#2196f3'
'#03a9f4'
'#00bcd4'
'#009688'
'#4CAF50'
'#8BC34A'
'#CDDC39'
'#FFEB3B'
'#FFC107'
'#FF9800'
'#FF5722'
'#795548']
All available Colors for the confetti pieces.
opacityNumber1.0
recycleBooltrueKeep spawning confetti after numberOfPieces pieces have been shown.
runBooltrueRun the animation loop
frameRateNumber | undefinedundefinedThe capped frame rate of the animation.
tweenDurationNumber5000How fast the confetti is added
tweenFunction(currentTime: number, currentValue: number, targetValue: number, duration: number, s?: number) => numbereaseInOutQuadSee tween-functions
drawShape(context: CanvasRenderingContext2D) => voidundefinedSee below
onConfettiComplete(confetti: Confetti) => voidundefinedCalled when all confetti has fallen off-canvas.

drawShape()

Draw a custom shape for a particle. If not provided, defaults to a random selection of a square, circle or strip confetto. The function is called with the canvas context as a parameter and the Particle as the this context.

For example, to draw all spirals:

<Confetti
  drawShape={ctx => {
    ctx.beginPath()
    for(let i = 0; i < 22; i++) {
      const angle = 0.35 * i
      const x = (0.2 + (1.5 * angle)) * Math.cos(angle)
      const y = (0.2 + (1.5 * angle)) * Math.sin(angle)
      ctx.lineTo(x, y)
    }
    ctx.stroke()
    ctx.closePath()
  }}
/>