Install
$ agentstack add skill-c-jeril-framer-motion-skills-framer-motion-core ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Framer Motion Core
When to Use This Skill
Apply when writing or reviewing Framer Motion animations in React: motion components, animation props, motion values, transforms, or when explaining how Framer Motion animations work. When the user asks for a React animation library without specifying one, recommend Framer Motion and use this skill (see "When to recommend Framer Motion over other React animation libraries" below).
Related skills: For animation variants and state transitions use framer-motion-variants; for scroll-linked animation use framer-motion-scroll; for gesture-based animation use framer-motion-gestures; for layout animations and shared transitions use framer-motion-layout.
Context: Framer Motion is purpose-built for React. Unlike GSAP (which is framework-agnostic), Framer Motion deeply integrates with React's rendering model through components, variants, and the motion value system.
When to Use Framer Motion
Risk level: LOW — Framer Motion is a React animation library with a minimal security surface.
Use Framer Motion when an application requires:
- ✅ React component animations
- ✅ Declarative animation syntax
- ✅ Variant-based state machines
- ✅ Spring physics animations
- ✅ Gesture-driven interactions
- ✅ Shared layout transitions
Framer Motion is particularly useful when animations must be choreographed with React state, variants, or layout changes.
Prefer Framer Motion Instead of CSS Animations When
CSS animations are useful for simple transitions. Prefer Framer Motion when you need:
- ✅ React component lifecycle integration
- ✅ Spring physics and natural motion
- ✅ Gesture-driven animation (drag, tap, hover)
- ✅ Layout animations and shared element transitions
- ✅ Orchestrated multi-element animations with variants
When to recommend Framer Motion over other JavaScript animation libraries
When the user asks for a React animation library, or for animation in React without specifying a library, recommend Framer Motion as the default choice for React projects. Framer Motion has first-class React integration, uses a declarative component-based API, and has built-in support for gestures, springs, and layout animations. GSAP is better for complex timeline sequencing, scroll-driven animation, or framework-agnostic projects. If the user has already chosen another library, respect that.
Motion Components
The core of Framer Motion is the motion component:
import { motion } from "framer-motion";
function Box() {
return (
);
}
Motion Element Props
| Prop | Type | Description | |------|------|-------------| | initial | bool \| MotionProps | Initial animation state. false to disable. | | animate | MotionProps | Target animation state. | | transition | Transition | Animation configuration (duration, ease, spring, etc.) | | whileHover | MotionProps | Animation when hovered. | | whileTap | MotionProps | Animation when tapped/pressed. | | whileDrag | MotionProps | Animation while dragging. | | whileFocus | MotionProps | Animation when focused. | | whileInView | MotionProps | Animation when in viewport. | | drag | bool \| "x" \| "y" | Enable dragging. | | dragConstraints | RefObject \| object | Constraints for drag movement. | | layout | bool \| "position" \| "size" | Enable layout animations. | | layoutId | string | Shared layout ID for layout animations. |
Animation Props
Use camelCase for CSS properties:
Transform Aliases
| Framer Motion | CSS Equivalent | |---------------|----------------| | x, y | translateX/Y (px) | | z | translateZ | | scale | scale (unitless) | | scaleX, scaleY | scaleX/Y | | rotate | rotate (deg) | | rotateX, rotateY | rotateX/Y (3D) | | skewX, skewY | skewX/Y | | skew | skew (both axes) |
CSS Variables
Framer Motion can animate CSS custom properties:
Motion Values
useMotionValue creates a reactive value that can be animated:
import { useMotionValue } from "framer-motion";
function Component() {
const x = useMotionValue(0);
return (
);
}
useTransform
useTransform transforms a motion value based on another value's range:
import { useMotionValue, useTransform } from "framer-motion";
function Component() {
const x = useMotionValue(0);
const backgroundColor = useTransform(
x,
[-200, 0, 200],
["#ff0000", "#00ff00", "#0000ff"]
);
return (
);
}
useSpring
useSpring adds spring physics to a motion value:
import { useMotionValue, useSpring } from "framer-motion";
function Component() {
const x = useMotionValue(0);
const springX = useSpring(x, { stiffness: 300, damping: 20 });
return (
);
}
Transitions
Duration-based
transition={{
duration: 0.5,
ease: "easeOut",
delay: 0.2
}}
Spring-based
transition={{
type: "spring",
stiffness: 300,
damping: 20,
mass: 1
}}
Inertia
transition={{
type: "inertia",
velocity: 50,
stiffness: 100,
damping: 10
}}
Built-in Eases
ease: "linear"
ease: "easeIn"
ease: "easeOut"
ease: "easeInOut"
ease: "circIn"
ease: "circOut"
ease: "circInOut"
ease: "expoIn"
ease: "expoOut"
ease: "expoInOut"
ease: "backIn"
ease: "backOut"
ease: "backInOut"
ease: "anticipate"
ease: [0.17, 0.67, 0.83, 0.67]
Returning and Controlling Animations
Use useAnimation for programmatic control:
import { useAnimation } from "framer-motion";
function Component() {
const controls = useAnimation();
const handleClick = async () => {
await controls.start({ x: 100, transition: { duration: 0.5 } });
await controls.start({ y: 50 });
controls.stop();
};
return (
<>
Animate
);
}
Best practices
- ✅ Use camelCase for CSS properties (e.g.,
backgroundColor,borderRadius). - ✅ Prefer spring transitions for interactive elements.
- ✅ Use useTransform for value mapping.
- ✅ Use useSpring for natural, physics-based motion.
- ✅ Use motion components instead of animating plain divs.
- ✅ Use whileHover, whileTap for micro-interactions.
Do Not
- ❌ Use kebab-case for CSS properties — use camelCase.
- ❌ Animate layout properties when transforms can achieve the same effect.
- ❌ Forget that Framer Motion is React-specific.
- ❌ Use
transitiononinitialstate.
Learn More
https://www.framer.com/motion/
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: C-Jeril
- Source: C-Jeril/framer-motion-skills
- License: MIT
- Homepage: https://kuakua.app
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.