# dotmatter > Interactive particle-field image effects for React. dotmatter turns any image, video, canvas, or headline text into a field of physically simulated particles rendered with WebGL2. Every particle has a home position, velocity, and spring — the cursor pushes (or attracts) them and they bounce back with a fluid overshoot. Ten visual effects (dither, particles, halftone, ascii, led, stitch, scanline, mosaic, rings, contour) share the same physics. Everything renders locally in the browser; nothing is uploaded. This file is complete standalone documentation for AI agents. You do not need to fetch any other page to integrate dotmatter. - Package: `@dotmatter/react` on npm (current: 0.3.x). Peer dep: `react` >= 19. Automatically pulls in `@dotmatter/core` and `@dotmatter/shaders` — install only `@dotmatter/react`. - Repo: https://github.com/Tresnanda/dotmatter - License: MIT - Requires: WebGL2 (all modern browsers). No SSR rendering — the component renders an `` fallback until it mounts, so it is safe in Next.js/Remix as long as it runs as a client component (`"use client"`). ## Install ```bash npm install @dotmatter/react # or: pnpm add / yarn add / bun add @dotmatter/react ``` ## Quick start (copy this) ```tsx "use client" // if using Next.js App Router import { DotMatter } from "@dotmatter/react" import { particleEffect } from "@dotmatter/shaders" export function Hero() { return ( ) } ``` Critical layout rule: the component fills its own box. YOU must give it a size — set `width` + `aspect-ratio` (or explicit height) via `style` or `className`. A zero-height container renders nothing. ## Components ### `` — the main component ```tsx import { DotMatter } from "@dotmatter/react" ``` Props: - `src: string | HTMLCanvasElement` (required) — image URL, video URL (with `video`), or a canvas element used directly as the texture. - `effect: EffectDefinition` (required) — one of the ten effect objects imported from `@dotmatter/shaders` (see Effects below). - `alt: string` (required) — accessible description; the original `` stays in the DOM as fallback. - `video?: boolean` — set true when `src` is a video URL. Renders a muted, looped, autoplaying `