MCPcopy Index your code
hub / github.com/cahilfoley/react-snowfall

github.com/cahilfoley/react-snowfall @v2.4.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.4.0 ↗ · + Follow
85 symbols 191 edges 39 files 22 documented · 26% 1 cross-repo links updated 7mo agov2.4.0 · 2025-12-01★ 6013 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Snowfall Demo

React Snowfall

npm GitHub stars Conventional Commits

A react component that creates a snowfall effect

Installation

With npm

npm i react-snowfall

Or with yarn

yarn add react-snowfall

Usage

Basic usage requires no properties - it will grow to fill the nearest relative positioned parent element.

import React from 'react'
import ReactDOM from 'react-dom'
import Snowfall from 'react-snowfall'

ReactDOM.render(



    <Snowfall />


,
  document.querySelector('#app'),
)

Configuration

Optional properties can be provided to customise the animation.

<Snowfall
  // The color of the snowflake, can be any valid CSS color.
  color="#fff"
  // Applied to the canvas element.
  style={{ background: '#fff' }}
  // Controls the number of snowflakes that are created (defaults to 150).
  snowflakeCount={200}
/>

All available properties are detailed below.

Property Description Default
changeFrequency The frequency in frames that the wind and speed values will update. 200
color The color of the snowflake, can be any valid CSS color. '#dee4fd'
images An array of images that will be rendered as the snowflakes instead of the default circle shapes. undefined
radius The minimum and maximum radius of the snowflake in pixels.

The value for each snowflake will be randomly selected within this range. | [0.5, 3.0] | | rotationSpeed | The minimum and maximum rotation speed of the snowflake (in degrees of rotation per frame).

The rotation speed determines how quickly the snowflake rotates when an image is being rendered.

The value for each snowflake will be randomly selected within this range. | [-1.0, 1.0] | | enable3DRotation| Enable 3D rotation effect (like falling leaves).

When enabled, snowflakes will rotate on X, Y, and Z axes, creating a more realistic 3D tumbling effect.

Works with both images and circles. | false | | snowflakeCount | The number of snowflakes to be rendered. | 150 | | speed | The minimum and maximum speed of the snowflake (in pixels per frame).

The speed determines how quickly the snowflake moves along the y axis (vertical speed).

The value for each snowflake will be randomly selected within this range. | [1.0, 3.0] | | style | Any style properties that will be passed to the canvas element. | undefined | | wind | The minimum and maximum wind of the snowflake (in pixels per frame).

The wind determines how quickly the snowflake moves along the x axis (horizontal speed).

The value for each snowflake will be randomly selected within this range. | [-0.5, 2.0] | | opacity | The minimum and maximum opacity of the snowflake.

The value for each snowflake will be randomly selected within this range. | [1, 1] |

Using Images

Instead of rendering colored circles you can instead pass in an array of image elements that will be randomly selected and used as the snowflake instead.

NOTE: If the images provided are not square they will be stretched into a 1:1 aspect ratio.

const snowflake1 = document.createElement('img')
snowflake1.src = '/assets/snowflake-1.png'
const snowflake2 = document.createElement('img')
snowflake2.src = '/assets/snowflake-2.jpg'

const images = [snowflake1, snowflake2]

const Demo = () => {
  return (
    <Snowfall
      // Applied to the canvas element
      style={{ background: '#fff' }}
      // Controls the number of snowflakes that are created (default 150)
      snowflakeCount={200}
      // Pass in the images to be used
      images={images}
    >
  )
}

Positioning

The snowfall container is absolute positioned and has the following default styles (see the definition):

position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;

If you want the component to cover the entire screen then you can change the position to fixed and using vw/vh units by passing in an overriding styles object:

<Snowfall
  style={{
    position: 'fixed',
    width: '100vw',
    height: '100vh',
  }}
/>

Use Without React

Don't let the package name fool you (I haven't had time to rename everything yet). You can actually use this snowfall animation with any framework or even vanilla JS with the new SnowfallCanvas class, here's an example.

<style>
  html,
  body {
    background: #dedede;
    min-height: 100vh;
    min-width: 100vw;
    padding: 0;
    margin: 0;
  }

  #snowfall {
    pointer-events: none;
    background-color: transparent;
    position: absolute;
    inset: 0;
  }
</style>

<canvas id="snowfall" />
import { SnowfallCanvas } from 'react-snowfall/lib/SnowfallCanvas'

const canvas = document.querySelector('#snowfall')
const snowfall = new SnowfallCanvas(canvas)

Extension points exported contracts — how you extend this code

SnowflakeProps (Interface)
(no doc)
packages/react-snowfall/lib/Snowflake.d.ts
SnowfallSettings (Interface)
(no doc)
packages/demo/src/settings.tsx
SnowfallCanvasConfig (Interface)
(no doc)
packages/react-snowfall/lib/SnowfallCanvas.d.ts
GithubLinkProps (Interface)
(no doc)
packages/demo/src/components/GithubLink/GithubLink.tsx
SnowfallProps (Interface)
(no doc)
packages/react-snowfall/lib/Snowfall.d.ts
SnowfallProps (Interface)
(no doc)
packages/react-snowfall/src/Snowfall.tsx
SnowfallCanvasConfig (Interface)
(no doc)
packages/react-snowfall/src/SnowfallCanvas.ts

Core symbols most depended-on inside this repo

random
called by 50
packages/react-snowfall/lib/utils.js
pause
called by 45
packages/react-snowfall/src/SnowfallCanvas.ts
updateConfig
called by 26
packages/react-snowfall/src/Snowflake.ts
update
called by 19
packages/react-snowfall/src/Snowflake.ts
play
called by 12
packages/react-snowfall/src/SnowfallCanvas.ts
random
called by 12
packages/react-snowfall/src/utils.ts
lerp
called by 12
packages/react-snowfall/src/utils.ts
lerp
called by 10
packages/react-snowfall/lib/utils.js

Shape

Method 39
Function 23
Class 14
Interface 9

Languages

TypeScript100%

Modules by API surface

packages/react-snowfall/src/Snowflake.ts15 symbols
packages/react-snowfall/lib/Snowflake.js13 symbols
packages/react-snowfall/src/SnowfallCanvas.ts11 symbols
packages/react-snowfall/lib/SnowfallCanvas.js10 symbols
packages/react-snowfall/src/utils.ts4 symbols
packages/react-snowfall/src/hooks.ts4 symbols
packages/react-snowfall/lib/utils.js4 symbols
packages/react-snowfall/lib/hooks.js4 symbols
packages/react-snowfall/src/test/setup.ts3 symbols
packages/react-snowfall/lib/Snowflake.d.ts3 symbols
packages/react-snowfall/lib/SnowfallCanvas.d.ts3 symbols
packages/react-snowfall/src/Snowfall.tsx2 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add react-snowfall \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact