Declarative motion · Spring physics · Interruptible

Drop physics-based motion into any framework without rewriting your markup.
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.

motion-hover
Hover me

Spring scale and lift on hover

motion-press

Tactile spring compression on press

motion-reveal
Fades into view

Fade and lift on viewport entry

motion-stagger
Design
Develop
Delight

Sequence children in on scroll entry

motion-magnetic

Element attracted to cursor with spring

motion-tilt
Tilt me

3D perspective tilt following cursor

Text Effects

Words in motion

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

motion-split
Feel the motion
motion-typewriter
Motion that feels alive.
motion-counter
users
motion-scramble
Hello, world.

Hover to scramble

motion-words

We fast.

Cycle words with per-word color

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.