Easing and springs
Every curve and spring preset in EaseKit with its exact values, and how duration, bounce and physics relate.
Every keyframe has a curve that shapes the segment leading into it. EaseKit has two families: tweens (cubic Bézier curves with a fixed duration) and springs (physical motion described by a duration and a bounce). This page lists every preset with its values, so you can match them in code.
Named curves
| Curve | Label in the app | Value | Use for |
|---|---|---|---|
easeOut | Ease-out (strong) | cubic-bezier(0.23, 1, 0.32, 1) | Entrances and exits; the default |
easeInOut | Ease-in-out (strong) | cubic-bezier(0.77, 0, 0.175, 1) | Movement on screen |
easeIn | Ease-in | cubic-bezier(0.55, 0.055, 0.675, 0.19) | Leaving with intent; rarely right for UI |
ease | Ease | cubic-bezier(0.25, 0.1, 0.25, 1) | Hover and color changes (CSS ease) |
drawer | Drawer | cubic-bezier(0.32, 0.72, 0, 1) | iOS-like sheets and drawers |
linear | Linear | cubic-bezier(0, 0, 1, 1) | Loops, rotation, dash flow |
hold | Hold | No interpolation | Jumps to the value at the keyframe |
cubicBezier | cubic-bezier(…) | Any four values | Your own curve |
Springs
A spring is described by a perceptual duration in seconds and a bounce: 0 is critically damped (no overshoot), up to about 0.5 is playful. Springs land exactly on the keyframe; their curve is stretched when you stretch a clip. The AI's range: bounce up to 0.3 for UI, up to 0.5 for teasers and social clips.
| Where | Preset | Duration | Bounce |
|---|---|---|---|
| Curve editor | Smooth | 0.45 s | 0 |
| Curve editor | Snappy | 0.35 s | 0.1 |
| Curve editor | Lively | 0.4 s | 0.2 |
| Curve editor | Playful | 0.5 s | 0.35 |
| Keyframe menu | Spring | 0.5 s | 0 |
| Keyframe menu | Spring with Bounce | 0.55 s | 0.25 |
| Layers tab | Spring smooth | 0.45 s | 0 |
| Layers tab | Spring lively | 0.4 s | 0.15 |
| Layers tab | Spring playful | 0.5 s | 0.3 |
| State transitions | Spring · calm | 0.35 s | 0.1 |
| State transitions | Spring · snappy | 0.25 s | 0.15 |
| State transitions | Spring · playful | 0.4 s | 0.3 |
| Names the AI understands | spring / bouncy | 0.5 s | 0.15 / 0.3 |
| Names the AI understands | snappy / smooth | 0.35 s / 0.5 s | 0.1 / 0 |
The curve editor
| Mode | Controls | Range | Default |
|---|---|---|---|
| Tween | Two draggable control points; presets Ease-out, In-out, Drawer, Ease, Linear, Ease-in; copy button for the cubic-bezier(…) value | ||
| Spring · Time | Duration | 0.1–1.5 s | 0.5 s |
| Spring · Time | Bounce | 0–0.8 | 0 |
| Spring · Physics | Stiffness | 10–1,000 | 100 |
| Spring · Physics | Damping | 1–100 | 10 |
| Spring · Physics | Mass | 0.1–5 | 1 |
Switching from Tween to Spring starts at 0.45 s with bounce 0.1. Physics values convert to duration and bounce, so both views describe the same spring. Under the controls, a line reads for example “Overshoot 12% · settles after 0.62 s”.
State transitions
The default transition into a state is a spring of 0.3 s with bounce 0.1 (lasting 0.25 s). The menu also has Spring · calm, Spring · snappy, Spring · playful, Ease out · 150 ms, Ease out · 250 ms, Ease in-out · 300 ms and Instant. A trigger can carry its own transition, which wins over the state's (set by the AI or over MCP). A released drag springs back with 0.35 s and bounce 0.25 unless its trigger has a transition.
Variant transitions
Variant switches use the first transition that's set: the switch's or trigger's own, the instance's Transition, the variant set's Transition: …, then the default Short spring (0.3 s, bounce 0.1).
| Preset | Curve |
|---|---|
| Short spring | Spring 0.3 s, bounce 0.1 (the default) |
| Quick ease | Ease out, 0.15 s |
| Smooth spring | Spring 0.45 s, bounce 0 |
| Bouncy spring | Spring 0.5 s, bounce 0.3 |
| Instant | No tween |
Colors in a variant switch blend with a critically damped version of a spring, so a color never overshoots.
Style presets
| Style | Enter | Exit | Move | Spring |
|---|---|---|---|---|
| Calm Interface | Ease-out (strong) | Ease-out (strong) | Ease-in-out (strong) | 0.4 s · 0.1 |
| Fluid (Apple-like) | Spring 0.45 s · 0.12 | Ease-out (strong) | Spring 0.5 s · 0 | 0.45 s · 0.15 |
| Punchy Social | Spring 0.5 s · 0.3 | Ease-in | Ease-in-out (strong) | 0.5 s · 0.3 |
In exports
| Export | Béziers | Springs |
|---|---|---|
| Motion (React) | Exact | An exact JS port of EaseKit's spring curve |
| Lottie | Exact | Baked into dense keyframes |
| HTML, Web Animations | Sampled | Sampled (60 fps for Web Animations) |
| CSS | Exact per segment | linear() approximations |
| SwiftUI | keyframeAnimator curves | Spring keyframes |
// The default curve in CSS and Motion
transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1);
<motion.div transition={{ ease: [0.23, 1, 0.32, 1] }} />