Composable primitives for visual computing.
Headless, tree-shakable, framework-agnostic. You compose them to build whatever you're building. Zero runtime dependencies, TypeScript-native, SSR-safe at import.
Transitions
60 WebGL2 shaders, defined as plain data. Tree-shakable to the byte. Endpoint-correct by construction. Zero runtime dependencies.
- 60 transitions
- ~5 KB gzipped
- 0 runtime deps
- SSR-safe at import
Effects
30 WebGL2 filter primitives — blur, bloom, glow, color grade, sharpen, halftone, tilt-shift, scanlines, lens distortion, oil paint, wave, swirl, motion blur, VHS, datamosh, ASCII, dither, gradient map and more. One Runner, one source, one render call. Multi-pass effects auto-allocate HDR ping-pong targets.
- 30 effects
- ~9 KB gzipped (full)
- 0 runtime deps
- tree-shakable import what you ship
Easings
A curated catalog of easings, parametric builders (spring, bezier, rough, wiggle, smooth, gravity, breathe), and modifiers (reverse, mirror, yoyo). CSS export via toCSSLinear. Pure math, zero platform assumptions.
- 22 families
- ~2 KB gzipped
- 0 runtime deps
- CSS export linear() built-in
Text
Multi-property choreographed text animation. splitText (grapheme-safe via Intl.Segmenter) + animateText (single master clock, back-fill, repeat). 229 generated + 14 curated presets across enter, exit, and emphasis.
- 243 presets
- ~3 KB gzipped
- Intl.Segmenter grapheme-safe split
- tree-shakable import what you ship
Scroll
Three primitives that bind scroll progress to the rest of the ecosystem: createScrollProgress (raw 0–1 emitter), createScrollTransition (drives any @vysmo/transitions render), createScrollEffect (drives any @vysmo/effects params). One shared rAF-throttled observer underneath.
- 3 primitives
- ~1 KB gzipped
- 1 rAF shared observer
- headless you own the canvas