logo svelte /motion v0.4.0
FIG-001 · MASTHEAD
// compare / svelte-motion vs framer-motion

vsframer motion.

Framer Motion is React-only. Svelte Motion is its Svelte 5 counterpart.

FIG-001
SHEET 01 / 07
FIG-002 / OVERVIEW

at a glance.

Framer Motion is the canonical declarative animation library for React. @humanspeak/svelte-motion is the Svelte 5 counterpart — same prop names, same component model (motion.<tag>, AnimatePresence, variants), same gestures, same FLIP layout animation, same spring physics. Different framework underneath.

FIG-003 / FEATURE MATRIX

side-by-side.

Every surface that matters, compared without spin.

feature@humanspeak/svelte-motionFramer Motion
motion.<tag> proxies (HTML + SVG) ~170 tags~170 tags
Tree-shakeable named exports (MotionDiv, …) yesno
AnimatePresence (sync / wait / popLayout) yesyes
Variants with parent → child propagation yesyes
whileHover / whileTap / whileFocus / whileInView yesyes
Drag (constraints, momentum, elastic, snap) yesyes
FLIP layout / layout="position" yesyes
Shared layout via layoutId yesyes
Spring physics yesyes
Scroll-linked motion values yesyes
useAnimate imperative scoped animations yesyes
MotionConfig provider yesyes
useReducedMotion / useReducedMotionConfig yesyes
usePresence / useIsPresent custom exit yesyes
Framework Svelte 5React only
staggerChildren orchestrator on parent variants Svelte Motion expects you to drive the cascade with a per-child transition.delay; the parent-level orchestrator is not yet wired.Per-child delay patternyes
Reactivity model Svelte 5 runes (stores read with $)React hooks
FIG-004 / STRENGTHS

where each shines.

▣ svelte motion 13
  • +Svelte 5 runes-native — built for runes, not retrofitted
  • +Framer Motion-compatible API for component code (props, semantics, AnimatePresence, variants)
  • +~170 motion.<tag> proxy components covering every HTML and SVG element
  • +Full gesture set: whileHover, whileTap, whileFocus, whileInView
  • +Drag gesture with constraints, momentum, elastic, snap-to-origin, axis lock
  • +FLIP layout animation and shared layoutId out of the box
  • +Spring physics, scroll-linked motion values, and reactive useMotionValue / useTransform
  • +SSR-safe by default — initial state renders server-side, hydrates without flicker
  • +Tree-shakeable Motion<Tag> named exports for bundle-size-critical apps
  • +TypeScript-first with full type safety across motion props, drag, variants, and hooks
  • +MIT licensed — no commercial tier, no paid plugin gates
  • +Drop-in API for migrating React component code to Svelte 5
  • +No JSX → Svelte syntax gotchas on the animation props themselves
▢ framer motion 4
  • +The canonical declarative animation library on React — battle-tested at scale
  • +Massive community, plugin ecosystem, and reference content
  • +Parent-level staggerChildren orchestrator handles cascades automatically
  • +Direct integration with Framer (the design tool) for design → code workflows
FIG-005 / LIMITATIONS

where each falls short.

▣ svelte motion 3
  • Requires Svelte 5 + runes (no Svelte 4 / legacy stores support)
  • Newer project — smaller community than the React Framer Motion ecosystem
  • transition.staggerChildren orchestrator not yet wired — drive cascades with per-child delay
▢ framer motion 3
  • React-only — cannot be used in Svelte, Vue, or vanilla JS projects
  • Adds React + ReactDOM as runtime dependencies
  • JSX-based mental model — different from Svelte template syntax
FIG-006 / VERDICT

the honest call.

If you are building in React, use Framer Motion. If you are building in Svelte 5 (or migrating from React + Framer Motion), use @humanspeak/svelte-motion — it is the closest behavioural match on Svelte 5 and the recommended migration target.

FIG-007 / MORE

read more.

Every head-to-head, with the same matrix + pros / cons + verdict format.

SET / JETBRAINS MONO + INTER
HUMANSPEAK · 2026
MIT LICENCE
try
svelte motioninstall in 30 seconds
SHEET 07 / 07
END OF DOCUMENT
↩ ALL COMPARISONS