## motiondivision/motion — v13.0.0-alpha.0…v13.0.0

_1055+ commits._

### Features
- **Added MotionScore badge to READMEs** — A MotionScore grade badge has been added to the top of the project READMEs, displaying a performance or quality metric that links to the detailed score page. (5e6eaa1)
- **Version 12.42.2 released** — A new patch version (12.42.2) is now available, which fixes an issue where cropped group layers didn't properly animate border-radius changes during view animations. (6183324)
- **View transitions hold static backdrops** — Fixed a bug where view transitions with a clip or transform reveal on `.new()` were incorrectly fading out the old layer. Now when you animate only the new layer with a non-opacity reveal (like a growing clip), the old layer stays put as a static backdrop instead of dissolving. (2223d87)
- **Smarter layer animations with grouping** — Layers now automatically group to match your DOM structure for cleaner animations, with a new `.group(false)` option to keep layers independent. Auto-cropping is now aspect-ratio aware—only layers that actually change shape get clipped—and border-radius animations are now handled naturally through scaling rather than separate animation. (60d7c72)
- **Split view buckets: add .new()/.old(), drop .crossfade()** (2597985)
- **Add .class(name) escape hatch for CSS-keyed view-transition layers** (2280f50)
- **Add .add(from, to) for shared-element morphs** (6b1aeeb)
- **Add a manual verifier for element-scoped transitions** (5697fdb)
- **Add crop cover/contain and circular clip-path examples** (4b9aea3)
- **Drop .get()/.new()/.old() from the animateView builder** (1946162)
- **Animate clip border-radius in .crop() between old/new elements** (7fa1ffb)
- **Add .crop() to clip + object-fit view target morphs** (a4dffed)
- **Add a stagger + auto-layout view-transition example** (773ab99)
- **Add Netflix-style animateView() example** (97bea88)
- **add `orientToPath`** (f90fe29)
- **support keyframe arcs** (4f481dc)

### Fixes
- **Fix SVG opacity animations with zero duration** — SVG elements now correctly handle zero-duration animations for properties like opacity and transform. The fix ensures these CSS style properties are read from and applied to the element's style object rather than SVG attributes, allowing animations to complete immediately without losing their target values. (b2bc637)
- **Remove automatic emotion prop validation** — Framer Motion no longer automatically loads the @emotion/is-prop-valid package. Apps using styled(motion.div) must now manually install @emotion/is-prop-valid and pass its validator function to the `isValidProp` prop on `<MotionConfig>`, scoping the configuration to that component's subtree. (96d35b6)
- **Fix #3779: read SVG CSS properties from styles** (165541a)
- **Fix #2652: scope custom prop validation** (e0be524)
- **Fix AnimatePresence propagate with empty children** — AnimatePresence now properly completes exit animations when using the propagate prop with no children, ensuring nested animations finish correctly. (34058c2)
- **Fix #3777: complete propagated exits without children** (0851575)
- **Fix #2652: remove automatic prop validator loading** (6acedcc)
- **Fix #3779: consolidate SVG style properties** (233593b)
- **Fix #3779: keep SVG opacity rendering in CSS** (3ca1d00)
- **Better error for invalid custom components** — When motion.create() wraps a custom component whose ref doesn't point to a DOM element, it now throws a clear, actionable error message instead of a cryptic internal error. This prevents animations from silently breaking across the entire page. (695cb39)
- **Fix React 18.3 ref warning** — Fixed a spurious React 18.3 warning about `ref` not being a prop in AnimatePresence when not using popLayout mode. The component was unconditionally reading a ref property that triggered a warning getter, even though the ref wasn't needed in that mode. (a6ed094)
- **Fix Reorder in scaled parents** — Added a workaround for drag-and-reorder lists inside parents with CSS scaling, ensuring dragged items track the cursor correctly and reorder at the right positions. The fix uses `correctParentTransform` to align gesture measurements with the parent's transformed space. (e2411fd)
- **Resolve cropped-clip radius timing once; fix transition-option leak** (5299aa6)
- **Fix plus-lighter brightness flash on morph crossfades** (3608ea7)
- **Fix view-transition correctness bugs from code review** (51e82aa)
- **Fix duplicate view-transition-name when a paired .add() `from` survives** (633b188)
- **Remove unused devDependencies (lint-staged, zlib); fix turbo.json for turbo 2.x** (10dc14e)
- **Fix animateView() target-resolution bugs from review** (1716f07)
- **Fix: enter/exit falsy values (e.g. opacity: 0) were skipped** (d36af88)
- **Fix open snap: morph the hero to its rendered corner radii** (239daa5)
- **fix: don't crash render loop for custom components with non-DOM refs** (86c7b94)
- **Fix spurious React 18.3 ref warning in AnimatePresence non-popLayout mode** (304e7ef)
- **Add fire-and-forget animateLayout regression fixture** (2ae3c9c)
- **Fixed Turbopack memory crash** — Reorganized how framer-motion exports are re-exported in the motion/react package to avoid a duplicate-source pattern that caused Next.js Turbopack to run out of memory during build analysis. The fix maintains IDE auto-import support while preventing the crash. (fc060e3)
- **Fix gesture end detection with nested elements** — Fixed an issue where child elements calling stopPropagation() on pointer events could prevent drag and press gestures from ending properly. Gesture end listeners now run in the capture phase to ensure they always fire, maintaining consistent behavior across drag and press interactions. (9d90d34)
- **Merge pull request #3707 from motiondivision/worktree-fix-issue-3243** (043d96d)
- **Fix Turbopack OOM by avoiding duplicate-source re-export in motion/react** (d03482e)
- **arc(): rename amp/rotate, expose MotionPath, fix explicit cw/ccw** (f1a96cf)
- **fix: test** (9ebe999)
- **fix test** (c444d88)

### Backend
- **Release version 13.0.0** — All packages and development environments updated to version 13.0.0, including framer-motion, motion, motion-dom, and motion-utils. This is a major version release with updated dependency versions across the monorepo. (e4029ce)
- **Release version 13.0.0** — Version 13.0.0 has been released with breaking changes to how the optional `@emotion/is-prop-valid` dependency is handled—it must now be explicitly passed to `<MotionConfig>`. The release also includes fixes for hardware-accelerated SVG animations and `AnimatePresence` node cleanup. (c862954)
- **Update color animation test values** — Updated scroll animation test expectations to reflect that backgroundColor now uses the browser's native sRGB color interpolation instead of Motion's custom gamma-2 mixer, resulting in different mid-scroll color values. (a4e4b3a)
- **Release version 12.43.0** — Version bump to 12.43.0 across all motion animation packages and development environments. All internal package dependencies have been updated to the new version. (a4ef40a)
- **Hardware acceleration for SVG** — SVG elements now benefit from hardware-accelerated animations for opacity and transform properties, matching the existing acceleration support for HTML elements. This improves performance by offloading animations to the browser's Web Animations API instead of JavaScript. (14f2d28)
- **Resolve merge conflict** — Cleaned up a merge conflict in the changelog that was preventing the file from being properly formatted. (1f5a27b)
- **Changelog updated with fixes** — Updated the changelog to document fixes for AnimatePresence child interleaving issues and motion component ref type validation errors. (79f0353)
- **Hardware acceleration for background color** — Added hardware acceleration support for backgroundColor in browsers that support it, improving performance when animating background colors. (57f179b)
- **Drop the production fallback for non-DOM refs** (33a1820)
- **Throw an actionable invariant for non-DOM custom component refs** (ebe35f2)
- **Enable color animation acceleration** — backgroundColor and color properties can now use Web Animation API acceleration for smoother, more efficient animations. This improves performance by offloading color transitions to the browser's native animation engine, with support for interrupting animations mid-flight. (9f251f3)
- **Limit color WAAPI acceleration to backgroundColor** (103be77)
- **Enable WAAPI acceleration for backgroundColor and color** (d8404e5)
- **Updated Next.js to 15.5.21** — Upgraded the Next.js framework dependency from version 15.5.18 to 15.5.21, bringing in the latest patches and improvements. (2ab028e)
- **Update ws dependency to 8.21.1** — Updated the ws WebSocket library from version 8.18.2 to 8.21.1 to pull in the latest bug fixes and improvements. (6610efe)
- **Updated dependency packages** — Bumped brace-expansion from version 1.1.12 to 1.1.16, along with updating Next.js from 15.5.18 to 15.5.21 and related dependencies. These are routine dependency updates to pull in bug fixes and improvements. (5826bbe)
- **Bump brace-expansion from 1.1.12 to 1.1.16** (b5d6fe6)
- **Bump ws from 8.18.2 to 8.21.1** (e5ed795)
- **Bump next from 15.5.18 to 15.5.21** (4738af5)
- **Clean up unused dependencies** — Removed unused npm packages `lint-staged` and `zlib` from the project's dependencies, and fixed `turbo.json` configuration to work with turbo 2.x by renaming the `pipeline` key to `tasks`. These changes unblock the build process which was broken on the main branch. (625af18)
- **Merge branch 'main' into advisor/010-manifest-hygiene** (9b0e9fc)
- **Updated build tool dependency** — Vite, a build tool used in development, was updated from version 6.4.2 to 6.4.3. This is a routine dependency maintenance update. (220a654)
- **Update Babel core dependency** — Upgraded @babel/core from version 7.27.4 to 7.29.7 to include the latest bug fixes and improvements from the Babel JavaScript compiler. (f7cf938)
- **Update js-yaml dependency** — Upgraded the js-yaml package from version 3.14.2 to 3.15.0 to incorporate the latest improvements and security updates. (88a6766)
- **Update shell-quote dependency** — Upgraded the shell-quote npm package from version 1.8.4 to 1.10.0 to get the latest bug fixes and improvements. (b557973)
- **Update Next.js to 15.5.21** — Bumped the Next.js framework dependency from version 15.5.18 to 15.5.21 in the dev environment, picking up the latest patches and improvements. (3575789)
- **Bump next from 15.5.18 to 15.5.21 in /dev/next** (008fdad)
- **Bump shell-quote from 1.8.4 to 1.10.0** (e6dffe9)
- **Bump @babel/core from 7.27.4 to 7.29.7** (dbe2348)
- **Bump js-yaml from 3.14.2 to 3.15.0** (4be5717)
- **Bump vite from 6.4.2 to 6.4.3** (a357065)
- **Release version 12.42.2** — Published a patch update to version 12.42.2 across all packages including framer-motion, motion, and motion-dom, with corresponding updates to development environment dependencies. (40e8756)
- **Animate corner radius in cropped views** — When view transitions crop and reshape elements between states, corner radius now smoothly animates along with the geometry changes. This ensures rounded corners stay visually consistent during the animation, especially when elements change aspect ratio. (718ccc7)
- **Dedupe corner-radius longhands; merge crop box/radii measurements** (19195a4)
- **Animate cropped view-transition group corner radius** (937cdf3)
- **Release version 12.42.1** — Bumped the version of framer-motion, motion, and motion-dom packages from 12.42.0 to 12.42.1, updating all development environments and dependency references accordingly. (fd2d6f6)
- **Release version 12.42.0** — Released version 12.42.0 of the motion animation library suite, updating all packages (framer-motion, motion, and motion-dom) and their dependencies across development environments. (9c84145)
- **Fix border-radius animation artifacts** — Improved `animateView` to handle animating between layers with different border-radius values by flattening source elements to square during snapshot capture, then restoring the real radius values so only the group's animated border-radius creates smooth corner transitions. (6437276)
- **Release version 12.41.0** — Published a new version of the motion animation library and related packages (framer-motion, motion, motion-dom) with version bump to 12.41.0, updating all development environments and dependencies accordingly. (f0f893e)
- **Released version 12.41.0** — Version 12.41.0 has been released with new animateView features graduating from Early Access, including CSS selector support, layer configuration methods, automatic cropping, and custom CSS hooks. Several fixes and behavior changes were also included. (c0c53cb)
- **Removed completed plans and docs** — Cleaned up the plans directory by removing six completed planning documents while updating related plan references and the changelog. A new app store layout demo was added to the dev folder. (18c3e3e)
- **Support selector and element targets in animate…** — The animateView() function now properly resolves both CSS selector strings and DOM Element objects as animation targets, expanding flexibility for developers. This includes new test coverage and example pages demonstrating the feature across various animation scenarios. (378fc4c)
- **Merge branch 'main' into worktree-view-target** (94ea505)
- **Fade auto morph crossfades over the spring's visual duration** (de65f6b)
- **Let an explicit duration override the inherited spring on a view layer** (f8af239)
- **Export view-transition types through to the motion package** (9ca2f8d)
- **Warn (once) and skip x/y in the view API** (e444801)
- **Don't apply enter/exit to persistent (survivor) elements** (0b6f6e0)
- **Port view-transition examples from motion-api to hack on the API** (27af62b)
- **Make .layout() a transition-only API** (eecb538)
- **Stagger the Shuffle layout morph in the stagger demo** (3d60450)
- **Remove .addName() from animateView()** (3037cb5)
- **Batch view-transition-name reads to avoid per-element style recalc** (32c2d71)
- **Defer element-scoped view transitions to a follow-up** (344de59)
- **Retime the group-children pseudo so scoped morphs stay in sync** (2fc99a7)
- **Make crop + timing scope-aware for element-scoped transitions** (40cdb20)
- **Update examples for default-on crop** (f6f01c3)
- **Crop morphs by default; .crop(false) opts out; drop the object-fit arg** (9d1a9cc)
- **Bump Netflix demo radii so the morph rounding reads clearly** (130f103)
- **Animate individual corner radii in .crop()** (3e7239c)
- **Round the Netflix morphs via .crop() border-radius** (c1d8c70)
- **Use self-contained SVG posters in the Netflix example** (d8dee5c)
- **Use .crop() and real images in the Netflix example** (ed2960f)
- **Clip cross-aspect-ratio morphs in the Netflix example** (d21322b)
- **Morph the card into the modal in the Netflix example** (9f834c8)
- **Showcase auto-layout + stagger in the Netflix example** (22b8af2)
- **Auto-enable layout morph for view targets + per-element stagger** (e7601eb)
- **Removed Puzzmo from sponsors** — Puzzmo has been removed from the silver sponsors section across all project READMEs. The change was made consistently across the main README and package-specific documentation. (830c737)
- **Migrate turbo.json `pipeline` to `tasks` for Turborepo 2.x** (e5e3110)
- **Override `match-element` in view target name detection** (a3ce27a)
- **Resolve selector/Element targets in animateView()** (7d30705)
- **Pin correctParentTransform workaround for Reorder inside a scaled parent** (15cf1b0)
- **Improved layout animation batching** — Rewrote the animateLayout system to use batched commits on a shared projection tree, improving performance when multiple layout animations occur simultaneously. Added comprehensive test cases covering various animation scenarios including fire-and-forget calls, parallel animations, and data-layout attribute handling. (0c6ba08)
- **Cleaned up old issue plans** — Removed three completed issue plan documents from the plans directory and added a changelog entry documenting a fix for Next.js out-of-memory errors on Windows when importing the motion package. (e0cc666)
- **Completed planning items archived** — Removed five completed planning documents from the internal tracking system and added a changelog entry documenting a fix for child event propagation breaking drag gestures. The planning files tracked issues #2794, #2807, and PRs #3727–#3731, which have now been resolved. (8681c16)
- **Removed closed draft PR plan** — Dropped the plan file and index entry for PR #3725, a draft regression test that was closed per the repository's no-repro policy. The README was updated to reflect one fewer open PR plan (from 9 to 8) and dependencies were simplified. (11f7e55)
- **Cleaned up merged PR plans** — Removed executor plans for six merged or closed pull requests (pr-3707, pr-3713, pr-3723, pr-3742, pr-3744, pr-3750) and two related issues (issue-2674, issue-2677). Updated the plans README index to reflect 9 open PRs instead of 15, and added an AnimatePresence fix entry to the changelog. (7261506)
- **Remove plans for closing PR #3724.** (e3a32c4)
- **Merge pull request #3740 from motiondivision/dependabot/npm_and_yarn/turbo-2.9.14** (9236e43)
- **Merge pull request #3744 from motiondivision/cleanup/strip-unused-stats** (f12afba)
- **Bump turbo from 1.13.4 to 2.9.14** (f14a88e)
- **Merge pull request #3750 from motiondivision/dependabot/npm_and_yarn/shell-quote-1.8.4** (4c2e02d)
- **Adding plans** (1dd0730)
- **Bump shell-quote from 1.8.3 to 1.8.4** (cad6f7f)
- **Address review: normalize data-layout="true", tidy restorePoints** (87d61a8)
- **Rewrite LayoutAnimationBuilder with batched commits on a shared projection tree** (498aa80)
- **Strip unused stats internals from shipped bundle** (6de5049)
- **Merge pull request #3733 from motiondivision/audit/framer-motion-animation** (43e508e)
- **Merge pull request #3734 from motiondivision/dependabot/npm_and_yarn/tootallnate/once-2.0.1** (9c6b826)
- **Bump @tootallnate/once from 1.1.2 to 2.0.1** (f631e15)
- **Updating changelog** (42bfbe3)
- **v12.40.0** (38ebb94)
- **Latest** (b1f766c)
- **Merge pull request #3699 from motiondivision/lochie/arcs-injectable** (bca5544)
- **pathRotation: non-destructive orientToPath rotation channel** (b4aaba0)
- **Make arcs injectable via `transition.path = arc()`** (8604ef3)
- **Revert "no should"** (bc2107e)
- **no should** (6eeb92d)
- **export Arc type** (9f90e42)
- **redundant alias** (50fed2c)
- **tests** (d3c5ce1)
- **outdated comments** (e9f4f8a)
- **move examples** (064b9b4)
- **examples** (dda0c2f)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/motiondivision/motion?utm_source=github-action)._