react-spring — Claude Code skill: 12 animation principles
A skill that maps all 12 Disney animation principles onto React Spring's spring physics, with a working example for each one.
npx skills add dylantarre/animation-principles --skill react-spring -a claude-codeWhat react-spring does
The skill walks through the 12 Disney animation principles and pairs each with React Spring code. Squash and stretch, anticipation, staging, follow through, slow in and slow out, arc, exaggeration — all built on useSpring and its config. The examples carry real values for tension and friction, so you can lift the snippet straight into a component.
It goes past useSpring. There's useTrail for staggered list reveals, plus useSprings, useChain and useTransition for mount and unmount. A timing section covers the gentle, stiff, slow and molasses presets along with fast, normal, slow and wobbly configs. The rule it teaches: high tension with low friction snaps, low tension with high friction drifts.
This assumes a React project that already has React Spring installed. Without the library the snippets won't run, so add it first. Cursor and Codex read the file from .cursor/skills/react-spring/SKILL.md and .agents/skills/react-spring/SKILL.md; Claude reads ~/.claude/skills/react-spring/SKILL.md.
What it helps with
- build squash and stretch on springs instead of CSS keyframes
- add a wind-up before a jump with anticipation
- separate a hero element from the background with staging
- stagger a list reveal using useTrail
- pick tension and friction values for the speed you want
Example prompts for the agent
- show me squash and stretch with useSpring
- I need a wind-up before the jump — anticipation example in React Spring
- stagger these cards with useTrail
How to install react-spring
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill react-spring -a claude-code2Manually: put the files in place
~/.claude/skills/react-spring/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/react-spring/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill react-spring -a codex2Manually: put the files in place
.agents/skills/react-spring/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill react-spring -a cursor2Manually: put the files in place
.cursor/skills/react-spring/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles react-spring2Manually: put the files in place
.github/skills/react-spring/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill react-spring -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/09-by-tool-framework/react-springManually: put the files in place
.devin/skills/react-spring/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill react-spring -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about react-spring
How do I install react-spring in Claude?
Run npx skills add dylantarre/animation-principles --skill react-spring -a claude-code. The skill file lands at ~/.claude/skills/react-spring/SKILL.md.
What does the react-spring skill do?
It covers the 12 Disney animation principles and gives React Spring code for each, using useSpring, useTrail and tension/friction configs.
Which React Spring hooks does the skill cover?
useSpring for a single animation, useSprings for several, useTrail for stagger, useChain for sequences and useTransition for mount and unmount.
Source text
SKILL.md · MIT
---
name: react-spring
description: Use when implementing Disney's 12 animation principles with React Spring's physics-based animations
---
# React Spring Animation Principles
Implement all 12 Disney animation principles using React Spring's spring physics system.
## 1. Squash and Stretch
```jsx
const [springs, api] = useSpring(() => ({
scaleX: 1,
scaleY: 1,
config: { tension: 300, friction: 10 }
}));
api.start({ scaleX: 1.2, scaleY: 0.8 });
<animated.div style={springs} />
```
## 2. Anticipation
```jsx
const [props, api] = useSpring(() => ({ y: 0, scaleY: 1 }));
const jump = async () => {
await api.start({ y: 10, scaleY: 0.9 }); // wind up
api.start({ y: -200, config: { tension: 200 } }); // action
};
```
## 3. Staging
```jsx
const bgSpring = useSpring({ filter: 'blur(3px)', opacity: 0.6 });
const heroSpring = useSpring({ scale: 1.1, zIndex: 10 });
```
## 4. Straight Ahead / Pose to Pose
```jsx
const [props] = useSpring(() => ({
from: { x: 0, y: 0 },
to: [
{ x: 100, y: -50 },
{ x: 200, y: 0 },
{ x: 300, y: -30 }
]
}));
```
## 5. Follow Through and Overlapping Action
```jsx
const bodySpring = useSpring({ x: 200 });
const hairSpring = useSpring({ x: 200, delay: 50 });
const capeSpring = useSpring({ x: 200, delay: 100, config: { friction: 15 } });
```
## 6. Slow In and Slow Out
```jsx
const spring = useSpring({
x: 300,
config: {
tension: 170,
friction: 26 // balanced = smooth in/out
}
});
// High tension + low friction = fast
// Low tension + high friction = slow
```
## 7. Arc
```jsx
const [props] = useSpring(() => ({
to: async (next) => {
await next({ x: 100, y: -100 });
await next({ x: 200, y: 0 });
},
config: { tension: 200, friction: 20 }
}));
```
## 8. Secondary Action
```jsx
const buttonSpring = useSpring({ scale: hover ? 1.05 : 1 });
const iconSpring = useSpring({
rotate: hover ? 15 : 0,
delay: 50
});
```
## 9. Timing
```jsx
const configs = {
fast: { tension: 400, friction: 30 },
normal: { tension: 170, friction: 26 },
slow: { tension: 100, friction: 40 },
wobbly: { tension: 180, friction: 12 }
};
// Or use presets: config.gentle, config.stiff, config.slow
```
## 10. Exaggeration
```jsx
const spring = useSpring({
scale: 1.5,
rotate: 720,
config: { tension: 200, friction: 8 } // low friction = overshoot
});
```
## 11. Solid Drawing
```jsx
const spring = useSpring({
transform: 'perspective(1000px) rotateX(45deg) rotateY(30deg)'
});
```
## 12. Appeal
```jsx
const cardSpring = useSpring({
scale: hover ? 1.02 : 1,
boxShadow: hover
? '0 20px 40px rgba(0,0,0,0.2)'
: '0 5px 15px rgba(0,0,0,0.1)',
config: config.gentle
});
```
## useTrail for Stagger
```jsx
const trail = useTrail(items.length, {
opacity: show ? 1 : 0,
y: show ? 0 : 20,
config: { tension: 200, friction: 20 }
});
trail.map((props, i) => <animated.div style={props}>{items[i]}</animated.div>)
```
## Key React Spring Features
- `useSpring` - Single animation
- `useSprings` - Multiple springs
- `useTrail` - Staggered animations
- `useChain` - Sequence animations
- `useTransition` - Mount/unmount animations
- `config` presets - `gentle`, `stiff`, `slow`, `molasses`
- Physics-based: `tension`, `friction`, `mass`, `velocity`
© dylantarre · MIT · dylantarre/animation-principles