juliangarnier/anime
juliangarnier/anime
Activity
Last release
Open issues
Open PRs
License
release notes
release notes
JavaScript animation engine
release notes
Published 4/29/2026
MinorContains breaking changesperspective > translate > rotate > scale > skew), regardless of the order they are defined in animation parameters:
// Before: scale rendered first because it was defined first
animate(el, { scale: 2, translateX: 100 }) // → scale(2) translateX(100px)
// After: order is always fixed
animate(el, { scale: 2, translateX: 100 }) // → translate(100px, 0px) scale(2)
matrix and matrix3d can no longer be animated directly (they are still preserved when read from inline styles and can be set using transform: 'matrix(...)')total (Number) to targets (Array). To migrate, replace total with targets.length:
// Before
translateX: (target, index, total) => total * 10
// After
translateX: (target, index, targets) => targets.length * 10
prevTween is now passed to function-based value callbacks, providing access to the previous sibling tween's computed end value for the same target and property.targets array instead of the total count:
// Before
delay: stagger(100, { use: (target, i, total) => total - i })
// After
delay: stagger(100, { use: (target, i, targets) => targets.length - i })
scrambleText() function-based value to animate text with a character-by-character scramble/reveal effect (learn more: https://animejs.com/documentation/text/scrambletext)grid: true auto-grid mode that computes a 2D layout from element positions or JS object coordinates ({x, y}) instead of requiring explicit [columns, rows] dimensionsfrom parameter now accepts [x, y] normalized coordinate arrays (0 to 1) for precise grid origin controlpriority parameter to control execution order within the engine tick looptranslateX + translateY → translate(x, y)translateX + translateY + translateZ → translate3d(x, y, z)scaleX + scaleY → scale(x, y)scaleX + scaleY + scaleZ → scale3d(x, y, z)translate(x, y), scale3d(x, y, z)) and nested calc() expressionscreateLayout() now accepts an id parameterglobals is now exported from the main module entry pointforEachChildren, addChild, removeChild helpers are now exported from utilsrevert() now restores object properties and DOM attributes to their original pre-animation values, in addition to CSS styles and transforms (previously only CSS styles and transforms were reverted, leaving animated object props and attributes at their last animated value). The public cleanInlineStyles() utility keeps its original behavior and only clears inline styles and transforms.getOriginalAnimatableValue not storing the original inline value for object properties and DOM attributes, preventing proper revertundefinedaddEffect() returning undefined instead of this when the effect argument is not a functiononComplete and onPause callbacks_startTime not being preserved when reconstructing tracked animations, causing timing jumps on effect refreshAnimeJSDevTools) removedtick() and render() extracted to module-scope functions to avoid allocation every frameto/from/duration/delay values, so the previous sibling tween is available to function-based value callbackssplitText() and TextSplitter target parameter widened from HTMLElement to ElementmorphTo and scrambleText to read the previous tween's end value when used in keyframe arrays or timelinesglobals.editor hook system allowing an external editor to intercept animate() and createTimeline() callsrelease notes
Published 4/29/2026
MinorContains breaking changesperspective > translate > rotate > scale > skew), regardless of the order they are defined in animation parameters:
// Before: scale rendered first because it was defined first
animate(el, { scale: 2, translateX: 100 }) // → scale(2) translateX(100px)
// After: order is always fixed
animate(el, { scale: 2, translateX: 100 }) // → translate(100px, 0px) scale(2)
matrix and matrix3d can no longer be animated directly (they are still preserved when read from inline styles and can be set using transform: 'matrix(...)')total (Number) to targets (Array). To migrate, replace total with targets.length:
// Before
translateX: (target, index, total) => total * 10
// After
translateX: (target, index, targets) => targets.length * 10
prevTween is now passed to function-based value callbacks, providing access to the previous sibling tween's computed end value for the same target and property.targets array instead of the total count:
// Before
delay: stagger(100, { use: (target, i, total) => total - i })
// After
delay: stagger(100, { use: (target, i, targets) => targets.length - i })
scrambleText() function-based value to animate text with a character-by-character scramble/reveal effect (learn more: https://animejs.com/documentation/text/scrambletext)grid: true auto-grid mode that computes a 2D layout from element positions or JS object coordinates ({x, y}) instead of requiring explicit [columns, rows] dimensionsfrom parameter now accepts [x, y] normalized coordinate arrays (0 to 1) for precise grid origin controlpriority parameter to control execution order within the engine tick looptranslateX + translateY → translate(x, y)translateX + translateY + translateZ → translate3d(x, y, z)scaleX + scaleY → scale(x, y)scaleX + scaleY + scaleZ → scale3d(x, y, z)translate(x, y), scale3d(x, y, z)) and nested calc() expressionscreateLayout() now accepts an id parameterglobals is now exported from the main module entry pointforEachChildren, addChild, removeChild helpers are now exported from utilsrevert() now restores object properties and DOM attributes to their original pre-animation values, in addition to CSS styles and transforms (previously only CSS styles and transforms were reverted, leaving animated object props and attributes at their last animated value). The public cleanInlineStyles() utility keeps its original behavior and only clears inline styles and transforms.getOriginalAnimatableValue not storing the original inline value for object properties and DOM attributes, preventing proper revertundefinedaddEffect() returning undefined instead of this when the effect argument is not a functiononComplete and onPause callbacks_startTime not being preserved when reconstructing tracked animations, causing timing jumps on effect refreshAnimeJSDevTools) removedtick() and render() extracted to module-scope functions to avoid allocation every frameto/from/duration/delay values, so the previous sibling tween is available to function-based value callbackssplitText() and TextSplitter target parameter widened from HTMLElement to ElementmorphTo and scrambleText to read the previous tween's end value when used in keyframe arrays or timelinesglobals.editor hook system allowing an external editor to intercept animate() and createTimeline() calls