Declarative motion · Spring physics · Interruptible

Animate with HTML tags

Declarative by default. A JavaScript API when you need it.
Physics-based motion for any framework. Built on Motion.

Quick install npm install motion-components

motion-curvesmoothly looping text with wave animation

How it works

One tag.
Works in .

Drop a tag anywhere. No config, no wrappers, no boilerplate.

  1. 1
    Install

    Run npm install motion-components

  2. 2
    Import once

    import 'motion-components' registers all custom elements globally.

  3. 3
    Wrap anything

    Compose motion-hover, motion-reveal, and friends around your existing markup.

Primitives

Feel the difference.

Composable primitives. Each one is interactive. Try them.

Text Effects

Words in motion.

Components for animated text: split, typewriter, counter, scramble, and ticker.

Why motion-components

Built different.

Spring physics

Every animation uses spring dynamics: naturally interruptible, with no jarring cuts or fixed durations.

Framework-agnostic

Standard web components work anywhere: React, Vue, Svelte, Astro, or raw HTML. No adapter needed.

Composable primitives

Build complex interactions by wrapping: nest motion-hover inside motion-stagger effortlessly.

Zero config

Sensible defaults out of the box. Attributes let you tune, but you never have to.

TypeScript ready

Full type declarations included. Attribute names and values are typed for IDE autocomplete.

Accessible by default

Respects prefers-reduced-motion. Animations skip cleanly: no flashes, no layout shift.

Pick a goal. Find the tag.

Still want more?

Three more areas to explore. Hover to reveal what's inside.

Start shipping motion today.

Drop a tag in your HTML and you're done.