Motion registry · built on motion.dev
One file decides how your whole app moves.
Install cold, wrap anything, ship motion that feels designed — not decorated. Every primitive derives from a single feel object you own.
npx shadcn add https://motion.asmitsah.dev/r/all.json- ease
- 0.22, 0.61
- 0.36, 1
- base
- 0.55s
- rise
- 28px
01Install
Install cold. It just moves.
One command lands the whole engine — tokens, provider, every primitive — into your project. No config, no setup. Mount it once; everything around it stays fast and server-rendered.
npx shadcn add https://motion.asmitsah.dev/r/all.jsonResolves for anyone today — no components.json entry, no prior setup. One command lands the whole engine — the tokens, the provider, and every primitive — into your repo, editable.
npx shadcn add https://motion.asmitsah.dev/r/slide.jsonEvery primitive installs on its own — swap slide for any name. It pulls the shared engine in automatically.
npx shadcn registry add @blaze-motion=https://motion.asmitsah.dev/r/{name}.jsonnpx shadcn add @blaze-motion/allRegister the @blaze-motion namespace once, then add by shorthand across every project.
02Wrap
Wrap it. That's the API.
No keyframes, no per-element setup. Wrap a card, a heading, a button — it becomes your layout element and forwards your styles, so there's no throwaway wrapper. Every panel below is live, running on this page.
Real primitives · running on this page
<Slide direction="up">
<Card />
</Slide><Fade direction="none">
<Stat />
</Fade><Fade direction="up" trigger="inView">
<h3>Tuned once.</h3>
</Fade>03Tune
Change one value. The whole app re-feels.
Duration, ease, rise, stagger — all of it flows from one feel object. Nudge a number and every animation retunes at once. Drag it live below. Per-instance tweaks still win when you want them.
The source lands in your project, yours to edit — not a dependency you can only configure from the outside. Change it, and the update propagates to every primitive at once. Drag it below to watch the whole set re-tune live.
export const feel = {
duration: { fast: 0.2, base: 0.55, slow: 0.8 },
ease: [0.22, 0.61, 0.36, 1],
rise: 28,
inView: 0.3,
stagger: 0.08,
} as const;- Deploy succeeded550ms
- New comment on PR #42550ms
- Build passed — 4 checks green550ms
- Invite accepted550ms
A tuned core that earns its place.
Not a catalog of effects — a small, considered set you wrap around your own markup. Every panel below is a real, running instance.

Mounted once in the root layout.
More effects. Same engine, same feel.
Entrance, hover, stagger, and text — every one tuned from the same feel object. Hover, click, or flip to Code on any panel.

FIG. 07·Settle
scale 1.1 → 1.0 · 0.8s · ease-out
Boring where it counts.
The flashy part is optional. The discipline isn't — here's what's behind it.
- Server-first by design
- One client boundary and that's it. Everything you build around it stays fast and server-rendered — you add motion, not overhead.
- One dependency, that's the deal
- Just the motion.dev package under the hood. Nothing smuggled in behind it.
- Ships light on purpose
- Loads only the animation features it needs, not the whole library. Your bundle barely notices.
- Respects 'reduce motion'
- Honors the OS setting for everyone — motion gracefully becomes a clean fade. No motion sickness.
- Calm is the default
- Subtle out of the box. It reads as designed, not decorated — you turn the dial up, it never shouts first.
- Slots into your layout
- Every primitive becomes your real grid or flex child instead of wrapping one in a throwaway element.
- You own every line
- The source lands right in your project — yours to read, edit, and retune. No black box, no lock-in.
Open source. MIT. Genuinely yours.
No black box, no lock-in — the source lands in your project and stays there. If it saves you an afternoon, drop a star.
Docs, built like the rest of it.
Grouped sidebar, live Preview / Code, and a props table per component — plus a copy-ready format so the AI in your editor reads it as fast as you do.