Comparison
GSAP is great. But for scroll animations it costs you ~50 KB, a commercial license for some features, and an API surface you'll only use 20% of. svg-scroll-draw does the same job at 5.5× smaller and free forever.
01
All sizes minified + gzipped. Source: bundlephobia.com. GSAP SplitText requires a paid Club GreenSock license for commercial use.
02
03
GSAP SplitText requires Club GreenSock
GSAP always runs JS
GSAP has basic React helpers, not full wrappers
GSAP has no deps but is itself a large dep
GSAP requires paid license for SplitText
GSAP has no built-in overlay; third-party only
GSAP works with Lenis but no dedicated adapter
✓ = supported · ✗ = not supported · ~ = partial · paid = requires Club GreenSock subscription
04
GSAP + ScrollTrigger
gsap.from('#card', {
opacity: 0,
y: 40,
ease: 'power2.out',
scrollTrigger: {
trigger: '#card',
start: 'top 80%',
end: 'top 40%',
scrub: true,
},
});svg-scroll-draw
import { scrollAnimate }
from 'svg-scroll-draw';
scrollAnimate('#card', {
props: {
opacity: [0, 1],
transform: [
'translateY(40px)',
'translateY(0)',
],
},
easing: 'ease-out',
trigger: {
start: 'top 80%',
end: 'top 40%',
},
once: true,
});GSAP + ScrollTrigger
ScrollTrigger.create({
trigger: '#panel',
start: 'top top',
end: '+=800',
pin: true,
pinSpacing: true,
onEnter: () => console.log('enter'),
onLeave: () => console.log('leave'),
});svg-scroll-draw
import { scrollPin }
from 'svg-scroll-draw/pin';
scrollPin('#panel', {
pinDistance: 800,
onEnter: () => console.log('enter'),
onLeave: () => console.log('leave'),
onEnterBack: () =>
console.log('enter back'),
});GSAP + ScrollTrigger
ScrollTrigger.create({
trigger: '#section',
start: 'top center',
end: 'bottom center',
onEnter: () => activate(),
onLeave: () => deactivate(),
onEnterBack: () => activate(),
onLeaveBack: () => deactivate(),
});svg-scroll-draw
import { scrollAnimate }
from 'svg-scroll-draw';
scrollAnimate('#section', {
props: { opacity: [0.5, 1] },
trigger: {
start: 'top center',
end: 'bottom center',
},
onEnter: () => activate(),
onLeave: () => deactivate(),
onEnterBack: () => activate(),
onLeaveBack: () => deactivate(),
});GSAP + ScrollTrigger
ScrollTrigger.create({
snap: {
snapTo: 'labels',
duration: { min: 0.2, max: 0.8 },
delay: 0.1,
ease: 'power1.inOut',
},
});svg-scroll-draw
import { scrollSnap }
from 'svg-scroll-draw/snap';
scrollSnap('.section', {
duration: 600,
easing: 'ease-in-out',
threshold: 0.3,
onSnap: (index) =>
console.log('snapped to', index),
});GSAP SplitText (Club GreenSock)
// Requires paid Club GreenSock
const split = new SplitText('#h1',
{ type: 'words' });
gsap.from(split.words, {
opacity: 0,
y: 20,
stagger: 0.05,
scrollTrigger: '#h1',
});svg-scroll-draw (free)
import { scrollText }
from 'svg-scroll-draw/text';
scrollText('#h1', {
split: 'words',
stagger: 0.05,
from: { opacity: 0, y: 20 },
once: true,
});05
We're being honest here. GSAP has 15 years of production hardening and some features we don't have yet:
Complex timeline sequencing
GSAP's timeline API is unmatched for orchestrating multi-element animations across a precise time axis.
Draggable + physics
GSAP Draggable, Inertia, and physics plugins have no equivalent in scroll-focused libraries.
Club GreenSock plugins
MorphSVG (advanced), DrawSVG (GSAP's version), Flip, and MotionPath are uniquely GSAP.
Community & tutorials
GSAP has 15 years of CodePens, tutorials, and community support. Our ecosystem is newer.
One npm install. No account. No license key. No config.