Version-sensitive. Every API name, SDK gate and browser-support claim below was verified on 2026-09-08 against primary sources. What against, and when, is in
_jutsu/VERSIONS.md. If that date is old, re-verify before acting on a version number.
Framer Motion - Sub-skill
Two package names, one library. Framer Motion was renamed to Motion.
motionandframer-motionboth publish the same version (13.2.0 as of 2026-09-08):motiondeclares"framer-motion": "^13.2.0"as a dependency andmotion/reactre-exports it. Neither is broken, andframer-motionis still the one most installed projects have.Read
package.jsonand follow what is there. Do not migrate a project from one to the other unless the user asks - that is Iron Rule 8 incast/ 10 inpaint.Every API in this skill is identical across the two names at v13. Where a symbol is newer than v11, it is flagged inline. Peers:
react/react-dom^18 || ^19.
When to use Framer Motion vs alternatives
Rule: Framer Motion for React UI interactions (modals, toasts, reorder, shared layout). GSAP for complex timelines, cinematic scroll-driven, SVG morphing.
AnimatePresence - Exit animations
mode="wait"- waits for exit to finish before enter (page transitions)mode="sync"- exit and enter simultaneouslymode="popLayout"- removes from flow immediately (good for lists)onExitComplete- callback when all exit animations are finished
Layout animations
Variants - Propagation and orchestration
Variants automatically propagate to motion children - no need for initial/animate on children.
Gestures
Motion values - Reactive without re-render
Motion values do NOT trigger React re-renders - they update the DOM directly via style.
Do Not
Do not use motion with styled-components / Emotion without isValidProp (v13+)
Motion 13.0 removed @emotion/is-prop-valid as an optional dependency. Without explicit injection, motion-only props leak onto the DOM.
Or reverse the composition so the styling library owns prop forwarding: const MotionDiv = motion.create(StyledDiv).


