motion

v2026.09.24

Web animations with Motion (formerly Framer Motion) for React -- gestures, scroll effects, spring physics, layout animations, SVG, micro-interactions, loading states. Use when: drag-and-drop, scroll animations, modals, carousels, parallax, page transitions, hover effects, staggered lists, loading spinners, number counters. Troubleshoot: AnimatePresence exit, list performance, Tailwind conflicts, Next.js "use client", layout in scaled containers.

GitHub
Install command
npx skhub add oakoss/motion
Markdown
SKILL.md

Motion

Overview

Motion (package: motion, formerly framer-motion) is the standard React animation library. Import from motion/react. Provides declarative props for gestures, scroll-linked animations, layout transitions, SVG path drawing, and spring physics. Uses a hybrid animation engine (WAAPI for transforms/opacity, ScrollTimeline for scroll-linked effects). Bundle ranges from 2.3 KB (useAnimate mini) to 34 KB (full), optimizable to 4.6 KB with LazyMotion. Compatible with React 18.2+, React 19, Next.js App Router, and Vite.

Do NOT use Motion for simple list add/remove animations (use AutoAnimate instead at 3.28 KB). Do NOT use for 3D (use Three.js / React Three Fiber).

Quick Reference

PatternAPI / Props
Fade in on mountinitial, animate, transition
Exit animationsAnimatePresence + exit prop (unique key required)
Staggered listvariants with staggerChildren
Hover / tap / focuswhileHover, whileTap, whileFocus
Dragdrag, dragConstraints, dragElastic
Scroll-triggeredwhileInView, viewport={{ once: true }}
Scroll-linked/parallaxuseScroll + useTransform
Progress indicatorscrollYProgress + scaleX
Layout animationlayout prop (FLIP technique)
Shared elementlayoutId (same ID across views)
Layout groupLayoutGroup wrapping sibling lists
Page transitionAnimatePresence + key={pathname}
SVG path drawingpathLength on motion.path
Animated counteruseSpring + useTransform
Imperative controluseAnimate hook returns [scope, animate]
Custom componentsmotion.create(Component) wraps any component
Bundle optimizationLazyMotion + domAnimation + m component (4.6 KB)
Reduced motionMotionConfig reducedMotion="user"

Common Mistakes

MistakeCorrect Pattern
AnimatePresence inside a conditionalKeep AnimatePresence mounted; place conditional content inside it
Missing unique key on AnimatePresence childrenAdd unique key to each direct child for exit animations
Tailwind transition-* classes with Motion animate propsRemove Tailwind transition classes to avoid stuttering
Importing from framer-motionUse import { motion } from "motion/react" (renamed late 2024)
Animating 50+ items without virtualizationUse react-window or @tanstack/react-virtual for large lists
Full 34 KB bundle for simple animationsUse LazyMotion + domAnimation (4.6 KB) or useAnimate (2.3 KB)
Missing "use client" in Next.js App RouterAdd directive or use motion/react-client import
Animating width/height directlyUse layout prop or transform: scale for GPU acceleration
No prefers-reduced-motion handlingWrap app in MotionConfig reducedMotion="user"

Delegation

  • Audit animation performance and bundle size: Use Explore agent to find heavy imports, missing LazyMotion, and reflow-triggering properties
  • Build complex multi-step animations: Use Task agent for scroll-linked parallax, shared layout transitions, and staggered sequences
  • Plan animation architecture for a new project: Use Plan agent to evaluate Motion vs AutoAnimate vs CSS-only based on requirements

If the design-system skill is available, delegate animation token definitions and motion design guidelines to it.

References

  • Core Patterns -- Animation patterns: fade, exit, stagger, gestures, modal, accordion, tabs, scroll, layout, drag, SVG, loading
  • Scroll Animations -- useScroll, useTransform, scroll-triggered, parallax, progress indicators, offset configuration
  • Performance -- LazyMotion, useAnimate, hardware acceleration, virtualization, production checklist
  • Next.js Integration -- App Router patterns, motion/react-client, Pages Router, known issues
  • Accessibility & CSS -- prefers-reduced-motion, MotionConfig, useReducedMotion, CSS keyframes, Tailwind animations
  • Library Selection Guide -- Motion vs AutoAnimate decision guide with feature comparison and use-case recommendations
  • Troubleshooting -- AnimatePresence bugs, Tailwind conflicts, layout glitches, React 19 issues, naming migration
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

skills/motion

Default branch

main

Latest commit

85e3a39

Tree SHA

a4c9e7b