# 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 `