Changelog

Releases across Motion, Motion+, Motion UI, Motion AI Kit, and Motion Studio.

  1. Motionmajor14.0.0

    Changed

    • Removed internal APIs restored in 13.5.1 for compatibility with framer-motion 13.0–13.4. Future removed internal APIs won't cause cross-compatibility issues since pinning internal framer-motion, motion-dom and motion-utils dependencies.
  2. Motionpatch13.5.1

    Changed

    • <motion>: Fall back to the attribute in readSVGValue when computed style is empty.
    • <motion>: Internal changes to animateChanges for size reductions.

    Fixed

    • scroll: Temporarily reverted removal of internal observeTimeline API to fix compatibility with previous 13.x APIs. Moving to pinned dependencies before removing in 14.x.
    • styleEffect: Cleaning up an earlier value no longer removes a value that was bound to the same key after it.
    • svgEffect: No longer writes transforms and origins as attributes.
    • <motion>: inherit={false} now correctly not inheriting parent animations.
    • <motion>: Fix sortNodePosition throwing when a sibling hasn't mounted
  3. Motionminor13.5.0

    Added

    • spring: Now accepts negative bounce (0--1) to define overdamped springs.

    Changed

    • <m>: 20% smaller.
    • useSpring: 10% smaller.
    • scroll/useScroll: Use main thread for all offset animations.

    Fixed

    • Ensure warning and error messages are cleaned from production build.
    • Ensure values are never rendered before they've been resolved.
  4. Motion Studiominor2.2.0

    Added

    • Reduced motion mode. A new switch in the Studio panel makes CSS, matchMedia() and useReducedMotion() act as if your system asks for reduced motion. While the panel is open, the page follows the switch, even when your system setting is different. The Studio panel still follows your real setting.
    • Edit a reduced motion version of a single animation or a component. With reduced motion mode on, your edits change only what users who ask for reduced motion see. The full motion animation stays as it is. Sequences, scroll and value animations, and Vue components do not have reduced motion versions yet.
    • Edit existing useReducedMotion() and matchMedia("(prefers-reduced-motion: reduce)") conditions. Studio reads them as reduced motion versions, and Apply writes your edits into the condition that is already there.
    • Disable or enable a track in full motion mode with "Disable animation" and "Enable animation" in its right-click menu. A disabled track goes straight to its end state with no motion, and its row shows at half opacity.
    • In reduced motion mode, "Remove track" and "Delete animation" turn off only the reduced motion version. The full motion animation stays. "Delete animation" removes an animation that runs only for reduced motion. On a sequence or a Vue component, both refuse and change nothing.
    • Copy a reduced motion version into the full motion animation with "Apply to base animation" in the right-click menu. "Reset override" removes the reduced motion version.
    • Create reduced motion versions in one step. In reduced motion mode, when the selection has no reduced motion versions yet, the first chat suggestion, "Adapt for reduced motion", converts every animation in it. The other suggestions in reduced motion mode only remove or shorten motion. Entrances and exits become a short opacity fade (0.3 seconds or less), and an entrance still ends where the full motion animation leaves it. Other movement, such as a hover or a loop, turns off. Opacity, colour, filter and shadow changes stay, and so do delays and staggers. The result arrives as one chat reply, so one undo reverts it and Apply writes the code. On a component, it converts the selected pose. Sequences, scroll and value animations, and Vue components stay as they are.
    • Use "Add animation" in reduced motion mode to make an animation that runs only for reduced motion.
    • With reduced motion mode on, ask Ultramotion or your coding agent for "no motion when reduced". In reduced motion mode, chat edits change only the reduced motion version. With reduced motion mode off, ask it to turn an animation off or on.
    • See a notice once per session when Studio starts in reduced motion mode because your system asks for reduced motion.

    Improved

    • Update the Studio panel to React 19.3.0.
    • Edit each branch of a condition such as open ? { opacity: 1 } : { scale: 0 }, even when the branches animate different properties.

    Fixed

    • Fix a crash that blanked the page when a zero-duration animate() call ran again while the panel was open.
  5. Motionpatch13.4.7

    Changed

    • scroll/useScroll: More offsets are now hardware accelerated via ViewTimeline.

    Fixed

    • animate: Reduced size of Motion Studio introspection call.
    • useTransform: Accelerated values now correctly clamp.
    • scroll/useScroll: Ensure offsets work the same across the JS main thread and ViewTimeline.
    • scroll/useScroll: Remove ScrollTimeline/ViewTimeline observer in favour of main-thread scroll tracking.
  6. Motionpatch13.4.6

    Fixed

    • AnimatePresence: mode="wait" no longer drops new children if exit completes during a React transition.
  7. Motion+major3.0.0

    Changed

    • Requires motion@^13.0.0.
    • motion is now a peer dependency of motion-plus and motion-plus-dom, so it must be explicitly installed alongside them.
  8. Motionpatch13.4.5

    Fixed

    • layout: Fix relative child jumping when parent interrupts layout animation.
    • AnimatePresence: Can no longer drop a child added while another exit animation completes.
    • Reorder: Only clear Reorder.Group's reorder guard when values change.
    • spring/useSpring: 5% smaller.
  9. Motion Studiominor2.1.0

    Added

    • Unlock free Ultramotion allowance for all members.
    • Allow undo/redo via Ultramotion.
  10. Motionpatch13.4.4

    Changed

    • scroll: 44% smaller.
    • useScroll: 33% smaller.
    • Scroll callbacks: 50% faster.
    • Removed ScrollTimeline support for JS callbacks as benchmarked no improvement over scrollInfo.

    Fixed

    • useDragControls: Fixed snapToCursor origin drift on repeated calls.
    • drag: Improved pointerend timing.
    • spring: Check invalid spring values before applying.
    • AnimatePresence: Ensure children don't stick during reentry.
  11. Motionpatch13.4.3

    Fixed

    • <motion>: Ensure animations replay when Suspense reveals memoized content.
  12. Motionpatch13.4.2

    Fixed

    • Reorder: Don't scale position of elements at origin 0 when dragConstraints changes.
    • Unrecognised easing names no longer throw.
  13. Motionpatch13.4.1

    Fixed

    • animate: CSS variable writes on SVGs apply to style attribute.
  14. Motion Studiomajor2.0.0

    Added

    • First release.
  15. Motionminor13.4.0

    Added

    • AnimateView: View transitions for React 19.3, built on React's ViewTransition.
  16. Motionminor13.3.0

    Added

    • Hooks for Motion Editor.

    Changed

    • springValue/useSpring: 80% reduction in time when retargeting.
    • animate: 10% smaller.
    • animate: 20% reduction in startup time.
    • animate: 10% reduction in per-frame JS.
    • frame: Frame scheduling 10% faster.

    Fixed

    • animate: Fixed path drawing calculations.
  17. Motionminor13.2.0

    Added

    • animate.addEffect() for registering effects that lets animate drive non-DOM subjects alongside DOM elements.
    • threeEffect (motion/three) supporting Three.js objects, materials, shader uniforms, TSL uniform nodes and more.
    • vgpuEffect (motion/vgpu) supporting shared uniforms, Effect/Draw/Compute bindings ("params.time"), scene nodes, cameras, lights, materials, orbit controls, CSS colors and vector components.
    • createEffect now accepts test, read and step options and exposes bound motion values via effect.get().

    Changed

    • Reduced filesize and improved performance of spring.
    • MotionValueState no longer caches values in latest; effect renders read their motion values directly. set() drops its useDefaultValueType argument.
  18. Motionpatch13.1.1

    Fixed

    • Guard animation window access in non-browser runtimes.
    • AnimatePresence: Improved compat with React 19 strict mode.
  19. Motion UIpatch0.0.2

    Added

    • Toast stack: overlay notifications that fan into a scaled pile on a shared spring.
  20. Motionminor13.1.0

    Added

    • Reorder: Multidimensional reorder.
    • Reorder: Automatic axis detection.
    • Reorder: RTL support.
  21. Motionmajor13.0.0

    Changed

    • Removed optional @emotion/is-prop-valid dependency in favour of explicit <MotionConfig isValidProp={isPropValid}>.

    Fixed

    • Hardware-accelerated SVG elements correctly apply final style on animation complete.
    • AnimatePresence: Ensure nodes are marked as safe to remove when rendering propagate with no motion children.
  22. Motionminor12.43.0

    Added

    • Hardware acceleration for backgroundColor in supported browsers.
    • Hardware acceleration for SVG elements.

    Fixed

    • AnimatePresence: Exiting children no longer interleave with entering children, which could reorder and remount children present in both renders.
    • motion: Throw error when passing a custom motion component an incorrect ref type.
  23. Motion AI Kitminor6.2.0

    Added

    • MCP: search-motion-codex now returns Motion UI components and sections (Motion+ / React) as full multi-file paste-ready source — same delivery model as examples, baked into the package.
  24. Motion UIpatch0.0.1

    Added

  25. Motionpatch12.42.2

    Fixed

    • animateView: Cropped group layers now animate border-radius from the old to new radius.
  26. Motionpatch12.42.1

    Fixed

    • animateView: Old layer fade out now cancelled when defining .new().
  27. Motionminor12.42.0

    Changed

    • animateView: Layers are automatically grouped to match their DOM-hierarchy. New .group(false) method opts-out.

    Fixed

    • animateView: Auto-crop is now aspect-ratio aware, disabling crops for matching aspect-ratios.
    • animateView: Disabled automatic border-radius animation.
  28. Motionminor12.41.0

    Added

    • animateView: Moves from Motion+ Early Access and alpha to main library.
    • animateView: .add() resolves a CSS selector or Element to automatically generate, apply and remove view-transition-name.
    • animateView: .new() and .old() configures values to animate on new and old layers.
    • animateView: .layout() can set a custom transition on the size/position animation of the currently selected elements.
    • animateView: Group layers now automatically crop with children set to cover, with border-radius animating from old radius to new. .crop(false) disables this behaviour.
    • animateView: .class(name) tags currently selected elements with a view-transition-class as a custom CSS hook.

    Fixed

    • AnimatePresence: Prevent stuck exit animations when children interrupt.
    • drag: Child e.stopPropagation() no longer break drag end.
    • Fixing Next.js OOM on Windows when importing via motion package.
    • animateLayout: Improve handling of parallel/interleaved calls.

    Changed

    • animateView: .enter() and .exit() now refer specifically to new and old layers where there are no matching old or new layers.
    • animateView: Interrupted transition setups now return resolved animation rather than throwing.
  29. Motion+minor2.12.0

    Added

    • curtains/useCurtains: Cover/reveal page and element transitions.
  30. Motion AI Kitminor6.1.0

    Changed

    • Skills: Add MotionScore runtime performance profiling to /motion.