Productivity

framer-motion

mindrally/skills · updated Apr 8, 2026

$npx skills add https://github.com/mindrally/skills --skill framer-motion
summary

You are an expert in Framer Motion (now Motion), React, and TypeScript. Follow these guidelines when creating animations.

skill.md

Framer Motion / Motion Animation Guidelines

You are an expert in Framer Motion (now Motion), React, and TypeScript. Follow these guidelines when creating animations.

Core Principles

Import from the Correct Package

  • Use import { motion } from "motion/react" for React projects (not "framer-motion" - this is outdated)
  • The library was renamed from Framer Motion to Motion
  • Always use the latest Motion API

Performance-First Approach

  • Animate transform properties (x, y, scale, rotate) and opacity for best performance
  • These properties can be hardware-accelerated and don't trigger layout recalculations
  • Avoid animating properties that cause layout shifts like width, height, top, left, margin, padding

Hardware Acceleration

Use will-change Properly

// When animating transforms
<motion.div
  style={{ willChange: "transform" }}
  animate={{ x: 100, y: 50, scale: 1.2 }}
/>

// When animating other GPU-accelerated properties
<motion.div
  style={{ willChange: "opacity, transform" }}
  animate={{ opacity: 0.5, x: 100 }}
/>

Properties to Add to willChange

  • transform - for x, y, scale, rotate, skew
  • opacity - for opacity animations
  • filter - for blur, brightness, etc.
  • clipPath - for clip-path animations
  • backgroundColor - for background color transitions

Animation Best Practices

Use Variants for Complex Animations

const containerVariants = {
  hidden: { opacity: 0 },
  visible: {
    opacity: 1,
    transition: {
      staggerChildren: 0.1
    }
  }
};

const itemVariants = {
  hidden: { y: 20, opacity: 0 },
  visible: { y: 0, opacity: 1 }
};

Use layoutId for Shared Element Transitions

<motion.div layoutId="shared-element" />

Prefer spring Animations

// Springs feel more natural than duration-based animations
<motion.div
  animate={{ x: 100 }}
  transition={{ type: "spring", stiffness: 300, damping: 30 }}
/>

React Integration

Memoization for Performance

// Memoize animation variants
const variants = useMemo(() => ({
  hidden: { opacity: 0 },
  visible: { opacity: 1 }
}), []);

// Memoize callbacks
const handleAnimationComplete = useCallback(() => {
  // handler logic
}, []);

Avoid Inline Style Objects

// Bad - creates new object on every render
<motion.div style={{ willChange: "transform" }} />

// Good - define outside or memoize
const style = { willChange: "transform" };
<motion.div style={style} />

Accessibility

Respect Reduced Motion Preferences

import { useReducedMotion } from "motion/react";

function Component() {
  const shouldReduceMotion = useReducedMotion();

  return (
    <motion.div
      animate={{ x: shouldReduceMotion ? 0 : 100 }}
      transition={{ duration: shouldReduceMotion ? 0 : 0.3 }}
    />
  );
}

Gesture Animations

Use Gesture Props Correctly

<motion.button
  whileHover={{ scale: 1.05 }}
  whileTap={{ scale: 0.95 }}
  transition={{ type: "spring", stiffness: 400, damping: 17 }}
/>

Scroll Animations

Use useScroll for Scroll-Linked Animations

import { useScroll, useTransform, motion } from "motion/react";

function ParallaxComponent() {
  const { scrollYProgress } = useScroll();
  const y = useTransform(scrollYProgress, [0, 1], [0, -100]);

  return <motion.div style={{ y }} />;
}

Exit Animations

Use AnimatePresence for Exit Animations

import { AnimatePresence, motion } from "motion/react";

<AnimatePresence mode="wait">
  {isVisible && (
    <motion.div
      key="modal"
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0 }}
    />
  )}
</AnimatePresence>

Common Patterns

Staggered List Animation

<motion.ul
  initial="hidden"
  animate="visible"
  variants={{
    visible: { transition: { staggerChildren: 0.07 } }
  }}
>
  {items.map((item) => (
    <motion.li
      key={item.id}
      variants={{
        hidden: { opacity: 0, y: 20 },
        visible: { opacity: 1, y: 0 }
      }}
    />
  ))}
</motion.ul>

Page Transitions

const pageTransition = {
  initial: { opacity: 0, x: -20 },
  animate: { opacity: 1, x: 0 },
  exit: { opacity: 0, x: 20 },
  transition: { duration: 0.3 }
};

Performance Debugging

  • Use React DevTools to inspect re-renders
  • Use Chrome DevTools Performance tab to identify animation jank
  • Target 60fps minimum, 120fps on high refresh rate displays
  • Test on actual devices, especially mid-range Android phones
general reviews

Ratings

4.526 reviews
  • Pratham Ware· Dec 4, 2024

    Solid pick for teams standardizing on skills: framer-motion is focused, and the summary matches what you get after install.

  • Zara Haddad· Dec 4, 2024

    framer-motion is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Yash Thakker· Nov 23, 2024

    We added framer-motion from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Dhruvi Jain· Oct 14, 2024

    framer-motion fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Noor Park· Sep 21, 2024

    Registry listing for framer-motion matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Fatima Sanchez· Sep 9, 2024

    framer-motion reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Zaid Desai· Aug 28, 2024

    Registry listing for framer-motion matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Layla Patel· Aug 12, 2024

    framer-motion reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Arjun Okafor· Jul 19, 2024

    Useful defaults in framer-motion — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Arjun Gupta· Jun 10, 2024

    I recommend framer-motion for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

showing 1-10 of 26

1 / 3