Skip to content
This repository was archived by the owner on Aug 31, 2026. It is now read-only.

Repository files navigation

matrix-rain-webgpu

Important

This repository has moved and is archived.

matrix-rain-webgpu now lives in the chicio-blog monorepo, at packages/matrix-rain-webgpu. Issues and pull requests belong there.

This repository and its documentation site stay online so existing links keep working. Everything below describes the project as of 2.0.0 and is no longer updated.

npm CI Deploy

A Matrix-style "digital rain" background effect for React, rendered on the GPU with WebGPU via TypeGPU. GPU-driven simulation, signed-distance-field glyphs, depth parallax, bloom, and a CRT post-process.

▶ Live demo & full documentation: https://chicio.github.io/matrix-rain-webgpu/

It powers the animated background on fabrizioduroni.it. Requires a WebGPU-capable browser (recent Chrome / Edge / Safari / Firefox).

Install

npm install matrix-rain-webgpu react react-dom

react/react-dom (v19) are peer dependencies. The TypeGPU packages (typegpu/@typegpu/react/@typegpu/noise) are regular dependencies, exact-pinned to versions this library is tested against — you don't install or track them yourself. The shaders are pre-compiled at publish time, so you do not need any TypeGPU build plugin.

Using TypeGPU directly in your app? Align your typegpu/@typegpu/* versions with the ones this package pins (see its package.json): npm then dedupes to a single instance. Two different copies of typegpu or @typegpu/react in one bundle break the 'use gpu' shader registry and the shared root context.

Module resolution: the published types target bundler-style resolution (moduleResolution: "bundler" / "node"), which is what Vite, Next.js, and most React setups use. Strict "node16"/"nodenext" resolution isn't supported yet.

Usage

The component renders a <canvas> that fills its positioned parent and ignores pointer events:

import { MatrixRainWebGPU } from 'matrix-rain-webgpu';

export function Background() {
  return (
    <div style={{ position: 'relative', width: '100%', height: '100dvh' }}>
      <MatrixRainWebGPU />
    </div>
  );
}

Everything is optional and grouped — omit for defaults, pass an object to tune, or false to disable an effect:

<MatrixRainWebGPU rain={{ fontSize: 24 }} bloom={{ intensity: 2 }} crt={false} />

WebGPU isn't available everywhere; gate on isWebGPUSupported() and render your own fallback when it's missing:

import { MatrixRainWebGPU, isWebGPUSupported } from 'matrix-rain-webgpu';

return isWebGPUSupported() ? <MatrixRainWebGPU /> : <My2DFallback />;

Documentation

Full docs live on the site — including the interactive playground:

Local development

This repo is two packages: the publishable library at the root (src/) and the docs + demo site (docs/, an Astro + Starlight app).

# Library — typecheck + lint/format
npm install
npm run types
npm run check

# Docs + demo site (Astro)
npm --prefix docs install
npm --prefix docs run dev

Author

Built by Fabrizio Duroni. If you enjoy it, a visit to the site is the best way to support the work. Also don't forget ⭐ to star this repository ⭐.

About

A matrix rain effect, built with WebGPU + TypeGPU 🟢

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages