Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add dylantarre/animation-principles --skill react-spring -a claude-code
Open on GitHub

What 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-code

2Manually: put the files in place

~/.claude/skills/react-spring/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/react-spring/

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

Similar skills

Everything for Frontend and UI →

From the same set86

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor