mcpField
M
motion

motion

github.com/oakossDesign & UI20147 installsUpdated 11w ago
Repository

About motion

Motion is a React animation library for developers building interactive interfaces. Its declarative APIs cover gestures, scroll effects, layout transitions, SVG drawing, and spring-based animation, with bundle-size optimization options.

Key features

  1. 01Declarative React animations
  2. 02Gesture and drag interactions
  3. 03Scroll-triggered and linked effects
  4. 04Layout and shared-element transitions
  5. 05SVG path animation
  6. 06Bundle-size optimization options

Use cases

  1. 01Animating page and layout transitions
  2. 02Adding scroll-linked effects or parallax
  3. 03Building drag, hover, and tap interactions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/oakoss/agent-skills --skill motion

After installing, type/motionin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
accessibility-css.md
core-patterns.md
library-selection.md
nextjs-integration.md
performance.md
scroll-animations.md
troubleshooting.md

Details

From the project README

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

Comments

Markdown supported