GSAP vs Framer Motion: Choosing the Right Animation Library
Both libraries make web animation easier — but they're built for different jobs. Here's how to pick the right one.

If you've decided to add animation to your site (good move — done right, it dramatically improves perceived quality), the next question is which library. GSAP and Framer Motion are the two best choices in 2025. They're not interchangeable.
The 60-second answer
- Framer Motion — pick this if you're in React and most animations are simple component transitions and gestures.
- GSAP — pick this if you need complex, scroll-driven, timeline-based, or vendor-agnostic animation.
Where Framer Motion shines
Framer Motion is built for React. Its API maps to how React thinks: animate-on-mount, animate-when-prop-changes, gesture handlers as components. Hover effects, page transitions, layout animations, drag-and-drop — all are one-liners.
<motion.div animate={{ opacity: 1 }} initial={{ opacity: 0 }} />
If your site is React-only and you mainly need declarative animations tied to component state, Framer Motion is the cleaner fit.
Where GSAP shines
GSAP is older, framework-agnostic, and rules complex animation. Its ScrollTrigger plugin is the gold standard for scroll-driven storytelling. Timeline chaining lets you choreograph dozens of animations precisely. It works equally well in vanilla JS, Vue, React, or with no framework at all.
gsap.timeline()
.to(".hero", { opacity: 1, duration: 1 })
.to(".cta", { y: 0, duration: 0.5 }, "-=0.5")
If you're building a portfolio, agency site, or product page with cinematic scroll moments, GSAP is the right tool.
Performance reality
Both libraries are highly optimised. Real-world performance differences are negligible at typical use. The one caveat: GSAP's free tier is impressively complete, but ScrollTrigger and a few advanced plugins are part of the paid Club GreenSock. For commercial projects this is worth it.
Bundle size
- Framer Motion: ~30-50KB depending on imports
- GSAP core: ~22KB, plus plugins
Both can be tree-shaken in a modern build. Neither is "too big" for a serious project.
My typical setup
For React/Next.js sites that need both worlds: I use Framer Motion for component-level state-driven animations (mounting, hover, drag), and GSAP for scroll-driven timelines and full-page choreography. They coexist happily.
Want to see what good animation does for conversion? Check out my project case studies.




