Changelog
Releases across Motion, Motion UI, Motion AI Kit, and Motion Studio.
Added
stagger: Newgrid,from: "edges" | "random"options.- Support for
scaleZ.
Fixed
- Fix matrix3d and other digit-named transform functions being tokenised as numbers.
useSpring: Ensure when switching targets we animate to the new target on switch.- Fix SVG MotionValue children being written as a children attribute.
Added
- Hardware accelerated independent transforms like
x,y,scaleXetc.
- Hardware accelerated independent transforms like
Added
Gallery: Switching togrid, its cells fade in outward from the centre on the transition'sdelay, liketransition={{ arrange: { delay: stagger(0.05) } }}.Gallery: The detail strip's stagger takesstagger()'sfrom, sotransition={{ close: { delay: stagger(0.04, { from: "last" }) } }}closes it from the outside in.
Changed
Gallery: Opening detail fades the whole strip in as one staggered wave, both sides of the open item together.Gallery: An item that changes places without flying there moves with its neighbours as it fades.
Fixed
Gallery: Items gather behind the active one again when switching togrid.Gallery: New options of the same arrangement, like a ring'srotateX, blend its camera as one piece again.Gallery: Switching away fromgridafter paging no longer flies the previously active item off alone, or others in from where they were last drawn.Gallery: Closing detail just after a change no longer flies the previously open item out of the strip.
Added
animateLayout: Layout animations for vanilla JS.
Fixed
- Delay animation start when main thread held to prevent visual jumps.
- Fix
whileHover/whileTapgetting stuck after Fast Refresh reorders siblings. scroll/useScroll: Fix reporting of elastic overscroll.AnimatePresence: FixpopLayoutwhen rendering into another window or iframe.animate: Fix JS animations jumping ahead when played after a pause at non-1speed.- Allow layout animations inside dragged elements.
Added
spring: Now accepts negativebounce(0--1) to define overdamped springs.
Changed
<m>: 20% smaller.useSpring: 10% smaller.scroll/useScroll: Use main thread for alloffsetanimations.
Fixed
- Ensure
warninganderrormessages are cleaned from production build. - Ensure values are never rendered before they've been resolved.
Added
- Unlock free Ultramotion allowance for all members.
- Allow undo/redo via Ultramotion.
Added
AnimateView: View transitions for React 19.3, built on React'sViewTransition.
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.
Added
animate.addEffect()for registering effects that letsanimatedrive 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/Computebindings ("params.time"), scene nodes, cameras, lights, materials, orbit controls, CSS colors and vector components.createEffectnow acceptstest,readandstepoptions and exposes bound motion values viaeffect.get().
Changed
- Reduced filesize and improved performance of
spring. MotionValueStateno longer caches values inlatest; effect renders read their motion values directly.set()drops itsuseDefaultValueTypeargument.
Added
Reorder: Multidimensional reorder.Reorder: Automatic axis detection.Reorder: RTL support.
Added
- Hardware acceleration for
backgroundColorin 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 custommotioncomponent an incorrectreftype.
- Hardware acceleration for
Added
- MCP:
search-motion-codexnow returns Motion UI components and sections (Motion+ / React) as full multi-file paste-ready source — same delivery model as examples, baked into the package.
- MCP:
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 automaticborder-radiusanimation.
Added
animateView: Moves from Motion+ Early Access and alpha to main library.animateView:.add()resolves a CSS selector orElementto automatically generate, apply and removeview-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 tocover, withborder-radiusanimating from old radius to new..crop(false)disables this behaviour.animateView:.class(name)tags currently selected elements with aview-transition-classas a custom CSS hook.
Fixed
AnimatePresence: Prevent stuck exit animations when children interrupt.drag: Childe.stopPropagation()no longer break drag end.- Fixing Next.js OOM on Windows when importing via
motionpackage. animateLayout: Improve handling of parallel/interleaved calls.
Changed
animateView:.enter()and.exit()now refer specifically tonewandoldlayers where there are no matchingoldornewlayers.animateView: Interrupted transition setups now return resolved animation rather than throwing.
Added
curtains/useCurtains: Cover/reveal page and element transitions.
Changed
- Skills: Add MotionScore runtime performance profiling to
/motion.
- Skills: Add MotionScore runtime performance profiling to
Added
pathoption totransition.arc()for motion along an arc.
Added
- Support for
repeatTypeandrepeatDelayin animation sequences.
Fixed
- Variants: Re-run keyframe animations when switching between variant labels even when they share identical keyframe arrays.
- Drag: Preserve in-flight motion value animations across React 19 reorder unmount/remount so
dragSnapToOriginno longer leaves the drag transform stranded after a layout swap. LazyMotion: Share React contexts between theframer-motionandframer-motion/m(and thereforemotion/reactandmotion/react-m) CJS bundles so that<m.div>from the/msubpath picks up features loaded by<LazyMotion>from the main entry point.useScroll: Support hydratingtargetandcontainerrefs from anywhere in the tree.- Drag: Gesture no longer starts from incorrect start point when rendered inside
<AnimatePresence initial={false} />. - Drag:
dragConstraints, when set as viewport-relative ref, no longer break on scroll.§ - Updated
visualElementhydration order. useAnimate: Now respectsskipAnimations.AnimatePresence: Fix object-forminitialvalues not applied on re-entry after exit completes.scroll: Fixed callback progress when tracking an element.useScroll: Fix hardware acceleration when tracking an element.
- Support for
Added
- Added
layoutAnchorprop to configure custom anchor point for resolving relative projection boxes.
Fixed
Reorder: Fix axis switching after window resize.Reorder: Fix with virtualised lists.AnimatePresence: Ensure children are removed when exit animation matches current values.
- Added
Added
- Support for hardware accelerating
"start"and"end"offsets inscrollanduseScroll. - Support for
oklch,oklab,lab,lch,color,color-mix,light-darkcolor types.
Fixed
- Fix
whileInViewwith client-side navigation. - Fix draggable elements when layout updates due to surrounding element re-renders.
- Improved memory pressure of layout animations.
- Ensure motion value returned from
useSpringreports correctisAnimating().
- Support for hardware accelerating
Added
- Allow
dragSnapToOriginto accept"x"or"y"for per-axis snapping. - Added axis-locked layout animations with
layout="x"andlayout="y". - Added
skipInitialAnimationtouseSpring.
Fixed
- Fixed
heightandwidth: autoanimations withbox-sizing: border-box. - Reset component values when exit animation finishes.
- Ensure
anticipateeasing returns1atp === 1. - Fix
@emotion/is-prop-validresolve error in Storybook. - Remove
data-pop-layout-idfrom exiting elements when animation interrupted. - Ensure we skip WAAPI for non-animatable keyframes.
- Ensure we skip WAAPI for SVG transforms.
- Ensure
MotionValueprops are not passed to SVG. AnimatePresence: Preventmode="wait"elements from getting stuck when switched rapidly.
- Allow
Added
- Skills:
/motionskill. Includes design guidelines, performance tips, and API gotchas. Can reference the Motion Studio MCP for docs search. - Skills:
/css-springskill. Generates CSS spring easing functions via the Motion Studio MCP. - Skills:
/see-transitionskill. Visualise easing curves and springs via the Motion Studio MCP. - Skills: Added new
motion-ai-kitinstaller with interactive skill picker.
- Skills:
Added
ViewTimelinesupport forscrollanduseScroll.
Added
Carousel: NewwheelSwipeThresholdprop configures the distance of wheel scroll before triggering a swipe.
Added
AnimateNumber:trendprop to control digit spin direction. -trend={1}: Digits always spin upward, wrapping 9 → 0. -trend={-1}: Digits always spin downward, wrapping 0 → 9. -trend={(oldValue, newValue) => number}: Function for custom logic. - Default (notrend): Auto-detects direction based on value change.
Changed
AnimateNumber: Now uses manual FLIP measurements instead of layout animations.
Added
useCarouselanduseTicker: Providesoffsetmotion value, which contains the unwrapped offset of aCarouselorTicker.
Added
- Extension: Added support for spring editing.
- Extension: Visual refresh.
- Skills: Added Motion Performance Audit skill.
Added
AnimateView: View animations for React.
Added
useScroll: Hardware accelerated animations.
Added
<motion>: Newpropagate.tapprop prevents tap gestures from propagating to parents.