> ## Documentation Index
> Fetch the complete documentation index at: https://rive.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Reduced Motion

> Make Rive animations more comfortable for users who prefer reduced motion.

Reduced motion preferences let users request less non-essential motion in apps and operating systems.

Rive can’t automatically decide which motion should be reduced because motion may be decorative, functional, or part of the meaning of an interaction. To support reduced motion, pass the user’s motion preference into your Rive file with a data binding property, such as `prefersReducedMotion`. Then use that property to decide how your state machine, timelines, and bound properties should behave.

> [!NOTE]
>
> Reduced motion preferences are usually detected by the app or platform, then passed into the Rive file at runtime. For web, this often starts with the `prefers-reduced-motion` media feature. See [MDN’s `prefers-reduced-motion` documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/%40media/prefers-reduced-motion) for accessibility guidance.

## Common strategies

### Use a separate reduced-motion path

For complex interactions and decorative motion, create separate state machine paths for full motion and reduced motion. Use a `prefersReducedMotion` Boolean property to choose which path runs.

<video src="https://static.rive.app/video/reduced-motion-state-machine.mp4" autoPlay loop muted playsInline />

### Reduce or disable animation speed

For simpler cases, bind transition durations, timeline speeds, or animation speeds to a property that changes when reduced motion is enabled.

For example, full motion might use a normal speed value, while reduced motion uses `0` or a lower value.

> [!TIP]
>
> Use [Converters](https://rive.app/docs/editor/data-binding/converters.md) to convert your `prefersReducedMotion` boolean to a value of 0.
>
> **1. Create a new converter**
>
> Create a new converter group called `BooleanToSpeed`.
>
> ![Add menu in the Data panel showing the Group option in the Converter submenu](https://mintcdn.com/rive/BYsxOSUMW09ls1lA/images/accessibility/reduced-motion/create-converter-group.png?fit=max\&auto=format\&n=BYsxOSUMW09ls1lA\&q=85\&s=4e30d66804692f4abef79024fa9b2116)
>
> **2. Add a Toggle converter**
>
> This will toggle the boolean so that when `prefersReducedMotion` is `true`, the output will be `false`.
>
> ![Add menu in the Converter Group panel showing the Toggle option in the Boolean submenu](https://mintcdn.com/rive/BYsxOSUMW09ls1lA/images/accessibility/reduced-motion/create-toggle-converter.png?fit=max\&auto=format\&n=BYsxOSUMW09ls1lA\&q=85\&s=ed46bc7decdd7dfcdb920fc2a92466ad)
>
> **3. Add a Convert to Number converter**
>
> This transforms a `boolean` to a number where `true = 1` and `false = 0`.
>
> ![Add menu in the Converter Group panel showing the Convert to Number option in the Numeric submenu](https://mintcdn.com/rive/BYsxOSUMW09ls1lA/images/accessibility/reduced-motion/create-convert-to-number.png?fit=max\&auto=format\&n=BYsxOSUMW09ls1lA\&q=85\&s=bfd84088e6823c706a93f0a19f4e09cc)
>
> **4. Data bind the animation speed**
>
> With the nested component selected, data bind the **Speed** value to `prefersReducedMotion` and add the `BooleanToSpeed` converter.
>
> ![Data Bind popover with Property set to prefersReducedMotion and Convert set to the BooleanToSpeed converter](https://mintcdn.com/rive/BYsxOSUMW09ls1lA/images/accessibility/reduced-motion/boolean-to-speed.png?fit=max\&auto=format\&n=BYsxOSUMW09ls1lA\&q=85\&s=25bd08e0f23b5c2272067a2f602f894c)
>
> Now when `prefersReducedMotion` is `true`, the animation speed will be 0.

### Replace motion with non-motion feedback

Reduced motion does not always mean removing feedback. Instead of movement, scale, rotation, or bounce, use changes in opacity, or color.

<video src="https://static.rive.app/video/reduced-motion-non-motion.mp4" autoPlay loop muted playsInline />

### Reduce distance

Large spatial movement can be difficult even when it is slow. Consider reducing the distance an object travels, or replacing large movement with a small offset and fade.

## Runtime setup

At runtime, use [data binding](https://rive.app/docs/runtimes/data-binding) to pass the user’s motion preference into the Rive file.

> [!NOTE]
>
> In the future, runtimes may expose a built-in reduced motion value that can be read directly by the `.riv` file. For now, pass the user’s motion preference into the file yourself.

The Rive file should use that property to control state machine transitions, timeline speeds, or bound animation properties.

> [!NOTE]
>
> Rive does not automatically apply reduced motion. File authors need to decide which motion is essential, which motion is decorative, and what the reduced-motion experience should be.
