Declarative motion · Spring physics · Interruptible

Animate your content with HTML tags.
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, 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 .

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