Skip to content

Ease Curves ​

Ease curves are functions of the form (t: number) -> number that map a normalized progress value t (from 0 to 1) to an eased output. They are used by Transitions and Animations to shape how a value moves over time.

luau
const Curves = PeanutUI.Curves

Every curve returns exactly 0 at t = 0 and exactly 1 at t = 1, so animations always start and end on the correct value.

Preview ​

Every curve below is plotted over one cycle, from t = 0 to t = 1.

EaseInQuad
EaseOutQuad
EaseInOutQuad
EaseInCubic
EaseOutCubic
EaseInOutCubic
EaseInQuart
EaseOutQuart
EaseInOutQuart
EaseInQuint
EaseOutQuint
EaseInOutQuint
EaseInSine
EaseOutSine
EaseInOutSine
EaseInExpo
EaseOutExpo
EaseInOutExpo
EaseInCirc
EaseOutCirc
EaseInOutCirc
EaseInBack
EaseOutBack
EaseInOutBack
EaseInElastic
EaseOutElastic
EaseInOutElastic
EaseOutBounce
EaseInBounce
EaseInOutBounce
EaseIn
EaseOut
EaseInOut
Ease
Linear

Using a curve ​

Pass a curve by name to a transition:

luau
Transitions.Ease(0.3, "EaseOutBounce")

Or pass the function directly:

luau
Transitions.Ease(0.3, Curves.EaseOutBounce)

You can also pass a custom function:

luau
Transitions.Ease(0.3, function(t)
    return t * t
end)

Linear ​

CurveDescription
LinearConstant speed. No easing.

Quadratic ​

CurveDescription
EaseInQuadAccelerates from rest.
EaseOutQuadDecelerates to rest.
EaseInOutQuadAccelerates then decelerates.

Cubic ​

CurveDescription
EaseInCubicAccelerates from rest.
EaseOutCubicDecelerates to rest.
EaseInOutCubicAccelerates then decelerates.

Quartic ​

CurveDescription
EaseInQuartAccelerates from rest.
EaseOutQuartDecelerates to rest.
EaseInOutQuartAccelerates then decelerates.

Quintic ​

CurveDescription
EaseInQuintAccelerates from rest.
EaseOutQuintDecelerates to rest.
EaseInOutQuintAccelerates then decelerates.

Sine ​

CurveDescription
EaseInSineGentle acceleration.
EaseOutSineGentle deceleration.
EaseInOutSineGentle acceleration then deceleration.

Exponential ​

CurveDescription
EaseInExpoVery sharp acceleration.
EaseOutExpoVery sharp deceleration.
EaseInOutExpoVery sharp acceleration then deceleration.

Circular ​

CurveDescription
EaseInCircAccelerates along a circular arc.
EaseOutCircDecelerates along a circular arc.
EaseInOutCircAccelerates then decelerates along a circular arc.

Back ​

Overshoots the target slightly before settling.

CurveDescription
EaseInBackPulls back before moving forward.
EaseOutBackOvershoots the target then settles.
EaseInOutBackPulls back, overshoots, then settles.

Elastic ​

Oscillates around the target like a spring.

CurveDescription
EaseInElasticOscillates before moving forward.
EaseOutElasticOscillates as it settles on the target.
EaseInOutElasticOscillates at both ends.

Bounce ​

Bounces against the target like a falling object.

CurveDescription
EaseInBounceBounces before moving forward.
EaseOutBounceBounces as it settles on the target.
EaseInOutBounceBounces at both ends.

Cubic bezier ​

CurveDescription
EaseCSS ease — cubicBezier(0.25, 0.1, 0.25, 1).
EaseInCSS ease-in — cubicBezier(0.42, 0, 1, 1).
EaseOutCSS ease-out — cubicBezier(0, 0, 0.58, 1).
EaseInOutCSS ease-in-out — cubicBezier(0.42, 0, 0.58, 1).

Custom cubic bezier ​

Curves.cubicBezier(x1, y1, x2, y2) builds a custom cubic bezier curve from two control points:

luau
const curve = Curves.cubicBezier(0.25, 0.1, 0.25, 1)
Transitions.Ease(0.4, curve)

This is the same curve used by Transitions.EaseCubicBezier(duration, x1, y1, x2, y2).

Full list ​

All named curves available on Curves:

Linear, EaseInQuad, EaseOutQuad, EaseInOutQuad, EaseInCubic, EaseOutCubic, EaseInOutCubic, EaseInQuart, EaseOutQuart, EaseInOutQuart, EaseInQuint, EaseOutQuint, EaseInOutQuint, EaseInSine, EaseOutSine, EaseInOutSine, EaseInExpo, EaseOutExpo, EaseInOutExpo, EaseInCirc, EaseOutCirc, EaseInOutCirc, EaseInBack, EaseOutBack, EaseInOutBack, EaseInElastic, EaseOutElastic, EaseInOutElastic, EaseInBounce, EaseOutBounce, EaseInOutBounce, Ease, EaseIn, EaseOut, EaseInOut.