Changelog
Releases across Motion, Motion UI, Motion AI Kit, and Motion Studio.
Changed
pinch: Snap points use velocity-based prediction to calculate rotation snap point.pinch: Configure transform origin between element-relative origin and pointer center.
Added
pinch: Multitouch pinch and rotate gestures.
Fixed
animate: Fix not recognising timeline of only nested sequences as timeline.- Various performance-related improvements.
Added
press:count,holdandrepeat, for double/triple press, long press and multipress gestures.drag: ExposegetPropson the dragConstraints function context.drag:x/yprops for headless gesture tracking.Reorder: Home and End buttons move selected item to beginning and end of list, respectively.motion: Newtapprop for configuring press gesture.
Fixed
animate: Minor fixes.
Added
- Ensure accelerated transform animations finish correctly.
AnimatePresence: Fixexitnever starting when a child mounts already exiting.AnimatePresence: Fixexitstuck after an openlayoutIdcard switches to another item.- Ensure accelerated animations are cleaned up in WebKit.
Added
PresenceContext: Added internalkeepValuesOnRemountoption for internal use.dragConstraints: Accepts function for internal use.Reorder: Keyboard accessibility now focuses just the first item, arrows move focus, arrow keys work in relation to how items are presented on-screen.
Added
transition: Addedmixeroption for passing custom mixer functions.
Fixed
- Only counts projection stats while
recordStats()is running. - Fix accelerated animations stuck at
initialafter remount. drag: 20% smaller.mcomponent: 6% smaller.- Keep timeline adjustments within timeline scope.
Reorder
Fixed
- Demote transforms to CPU when interrupted by layout animations.
Added
animate: Mutable timeline sequences.animate: Relative label offsets for timeline sequences.useScroll: ReturnsscrollXLengthandscrollYLength.Reorder: AddLazyMotion-compatible import.motion:transition.outprop for transitions when exiting a state.
Fixed
- Fix one flash when changing playback speed of accelerated independent transform.
AnimatePresence: Improved positioning of popped elements.spring: Fix overdamped springs snapping to target.drag: Ref-constraints kept up-to-date after scroll.motion: AnimatelayoutIdelements relative tolayoutRootcontainer.motion: Bundle size reductions.- Moving
background-coloranimations back to main thread for improved interpolation. drag: Fix drag inertia stopping dead after a fast flick from a standstill.layout:layoutIdelements now animate relative to their closestlayoutRootancestor, if any.layout:layoutIdmay be changed after mount.useScroll: Fix tracking in horizontal containers.useSpring: Reduced bundle size by 30%.
Added
Reorder: Grab-and-move keyboard reordering.processFrame: Manually process the frameloop att.stepFrames: For tests, synchronously advance frameloop time byduration.
Fixed
- Improved tree-shaking.
motion: FixlayoutIdelements jumping in some situations.Reorder: Make auto-scroll speed independent of refresh rate.drag: Fix animations when disablingdragfrom withinonDrag.- Fix shared layout animations applying an element's own
scale/x/ytwice. - Fix replaying mount animation when an element takes over a
layoutId. motion: Fix updating SVG styles.useTransform: Improving value resolution.
Added
scopeMotion/useScopeMotion: Scope animations and gestures to set default transitions, specify root elements, match media, and easy cleanup.Reorder: PassmovedtoonReorderas second argument.
Fixed
drag: With direction lock, apply the move that sets the lock. Before, a fast drag released in that frame didn't move.press: Improve cleanup of keyboard accessibility events.Reorder: Stop double-countingwindowscroll during drag.motion: Ensure we animate from the latest props when parentActivityis made visible.useInView: Observerefif contents change after mount.
Added
- Reduced motion mode.
Added
drag: Drag gesture added to JavaScript API.
Fixed
AnimatePresence: FireonExitCompleteafter exiting children unmount.AnimatePresence:popLayoutchildren that don't acceptrefare now popped when root component is<motion>element.- Fix interpolation of axis
rotateandskewtransforms during shared layout animation. - Fix layout animations when
layoutis enabled after mount. - Fix
dragjumping to0after animatex/yto CSS variable. arc: Fix path animations withanimate.- Ensure shared elements are freed from memory when unmounted.
- Fix accelerated independent transform animations vanishing when they start from a float residue.
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
Fixed
- Fix velocity hand-off for hardware-accelerated springs.
cubicBezier: More accurate, 2x faster.Reorder: Fix click events on reoredered items.useTransform: Fix desync when source is set in an effect under Strict Mode.
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.
Fixed
Gallery: Closing detail fades the whole strip out together. Thumbnails with no place in view to return to no longer linger.Gallery: Paging on straight after switching togridno longer hides the item paged to.Gallery: Switching away fromgridno longer resizes its items to the next arrangement's item size as they fade out.
Added
Gallery:rearrangeoption andshift()preset set the state an item fades in from when it changes places without flying there.Gallery:rearrangeFromoption sets where the stagger starts as the detail strip opens or closes.Gallery:gatheroption. Items collapse behind the active one when switching togrid.
Fixed
Gallery: Items no longer fly across the view whenlooporarrangechanges. They fade out and in on the side they belong.Gallery: Opening and closing detail fades the other items between the arrangement and the strip.Gallery: The camera no longer swings between arrangements, so items entering the new one fade in where they belong.
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
Gallery: 2D and 3D gallery animations with list and detail view.
Changed
- Requires
motion@^14.1.0. - Improved tree shaking.
Removed
animateLayoutmoved tomotion.
Changed
- Removed internal APIs restored in
13.5.1for compatibility withframer-motion13.0–13.4. Future removed internal APIs won't cause cross-compatibility issues since pinning internalframer-motion,motion-domandmotion-utilsdependencies.
- Removed internal APIs restored in
Changed
<motion>: Fall back to the attribute in readSVGValue when computed style is empty.<motion>: Internal changes toanimateChangesfor size reductions.
Fixed
scroll: Temporarily reverted removal of internalobserveTimelineAPI to fix compatibility with previous13.xAPIs. Moving to pinned dependencies before removing in14.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>: FixsortNodePositionthrowing when a sibling hasn't mounted
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.
Changed
scroll/useScroll: Moreoffsets are now hardware accelerated viaViewTimeline.
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 andViewTimeline.scroll/useScroll: RemoveScrollTimeline/ViewTimelineobserver in favour of main-thread scroll tracking.
Fixed
AnimatePresence:mode="wait"no longer drops new children ifexitcompletes during a React transition.
Changed
- Requires
motion@^13.0.0. motionis now a peer dependency ofmotion-plusandmotion-plus-dom, so it must be explicitly installed alongside them.
- Requires
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.
Added
- Unlock free Ultramotion allowance for all members.
- Allow undo/redo via Ultramotion.