Comparison

svg-scroll-draw
vs GSAP.

GSAP is great, and since 2025 it's free — every plugin, no subscription. So this page isn't about price. It's that for scroll work you ship 47.5 KB and an API surface you'll use 20% of. svg-scroll-draw does the same job at 4.75× smaller, with zero dependencies and a native CSS fast path that runs your draw on the compositor with no per-frame JavaScript at all.

01

Bundle size.

svg-scroll-draw
10 KB
yours
GSAP core
27.7 KB
GSAP + ScrollTrigger
45.3 KB
common setup
+ DrawSVGPlugin
47.5 KB
same job as us
+ SplitText
51.1 KB
full suite

All sizes minified + gzipped at level 9, measured 2026-08-14 against gsap 3.15.0, svg-scroll-draw 2.10.0 — measured, not estimated. SplitText is free to use as of 2025; it still costs you the bytes.

02

License.

Worth saying plainly: GSAP is free. Webflow acquired GreenSock and in 2025 released the entire toolset — including SplitText, DrawSVG, MorphSVG and every other former Club GreenSock plugin — at no charge. If you read an older comparison claiming you need a ~$150/yr subscription, that is out of date, and this page used to be one of them. Cost is not a reason to choose svg-scroll-draw. The remaining license difference is narrow but real, and it only matters if you redistribute.

svg-scroll-drawMIT
  • Free for personal use
  • Free for commercial use
  • Free forever — no subscription
  • All features included
  • No attribution required
  • Fork, modify, redistribute freely
GSAPGreenSock Standard — free
  • Free for personal use
  • Free for commercial use
  • All plugins free since 2025 — no subscription
  • SplitText, DrawSVG, MorphSVG all included
  • Cannot be redistributed inside a competing tool or SDK
  • Not OSI open source — terms set by the vendor

03

Feature matrix.

Feature
svg-scroll-draw
GSAP
Animate any CSS property on scroll
SVG path draw (stroke-dashoffset)
Animated number counters
Text split + stagger

GSAP SplitText — free since 2025, but +18 KB on top of core + ScrollTrigger

Video scrub on scroll
Pin / sticky sections
Section snapping
onEnter / onLeave / onEnterBack / onLeaveBack
Honours prefers-reduced-motion by default

Default-on for scrollDraw, scrollAnimate, scrollReveal, scrollCounter, scrollText, scrollVideo, scrollSnap and Cinematic — but scrollHorizontal opts out by design and scrollPin/scrollProgress have no path. GSAP ships gsap.matchMedia(), but you write the reduced-motion variant of each animation yourself.

partial
~
Native CSS scroll-driven animation

GSAP always runs JS

Parallax
Path morphing on scroll
Waypoints (fire at progress %)
Spring / bounce / elastic easings
React / Vue / Svelte / Solid wrappers

GSAP has basic React helpers, not full wrappers

~
Angular / Astro / Nuxt wrappers
Zero runtime dependencies

GSAP also declares no runtime dependencies — verified from its package.json. The difference is total weight, not dependency count.

MIT license (fork / redistribute freely)

GSAP is free to use, but its standard license restricts redistribution inside a competing product or SDK

~
Visual DevTools overlay

GSAP ships GSDevTools.js in the public tarball (free since 2025). Ours is scroll-specific and dev-only; theirs is a timeline scrubber.

Lenis smooth-scroll adapter

GSAP works with Lenis but no dedicated adapter

~
Bundle size (minified + gzipped)

gsap 3.15.0: core 27.7 + ScrollTrigger 17.6 + DrawSVG 2.2 — the equivalent stack, measured 2026-08-14

10 KB
47.5 KB

✓ = supported · ✗ = not supported · ~ = partial or requires extra setup. GSAP figures reflect the free-for-everyone toolset Webflow shipped in 2025 — all former Club GreenSock plugins included.

04

Side-by-side API.

Fade + slide in on scroll

GSAP + ScrollTrigger

gsap.js
gsap.from('#card', {
  opacity:  0,
  y:        40,
  ease:     'power2.out',
  scrollTrigger: {
    trigger: '#card',
    start:   'top 80%',
    end:     'top 40%',
    scrub:   true,
  },
});

svg-scroll-draw

app.js
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,
});

Pin / sticky section

GSAP + ScrollTrigger

gsap.js
ScrollTrigger.create({
  trigger:     '#panel',
  start:       'top top',
  end:         '+=800',
  pin:         true,
  pinSpacing:  true,
  onEnter:     () => console.log('enter'),
  onLeave:     () => console.log('leave'),
});

svg-scroll-draw

app.js
import { scrollPin }
  from 'svg-scroll-draw/pin';

scrollPin('#panel', {
  pinDistance: 800,
  onEnter:  () => console.log('enter'),
  onLeave:  () => console.log('leave'),
  onEnterBack: () =>
    console.log('enter back'),
});

onEnter / onLeave callbacks

GSAP + ScrollTrigger

gsap.js
ScrollTrigger.create({
  trigger: '#section',
  start:   'top center',
  end:     'bottom center',
  onEnter:     () => activate(),
  onLeave:     () => deactivate(),
  onEnterBack: () => activate(),
  onLeaveBack: () => deactivate(),
});

svg-scroll-draw

app.js
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(),
});

Section snapping

GSAP + ScrollTrigger

gsap.js
ScrollTrigger.create({
  snap: {
    snapTo:   'labels',
    duration: { min: 0.2, max: 0.8 },
    delay:    0.1,
    ease:     'power1.inOut',
  },
});

svg-scroll-draw

app.js
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),
});

Text split + stagger GSAP = +18 KB

GSAP SplitText (free, +18 KB)

gsap.js
// core + ScrollTrigger + SplitText
const split = new SplitText('#h1',
  { type: 'words' });

gsap.from(split.words, {
  opacity: 0,
  y: 20,
  stagger: 0.05,
  scrollTrigger: '#h1',
});

svg-scroll-draw (2.5 KB entry)

app.js
import { scrollText }
  from 'svg-scroll-draw/text';

scrollText('#h1', {
  split:   'words',
  stagger: 0.05,
  from: { opacity: 0, y: 20 },
  once: true,
});

05

When GSAP is still the right call.

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.

The full plugin suite — now free

MorphSVG, Flip, MotionPath, Observer and SplitText have no equivalent here, and since 2025 they cost nothing. If you need any of them, use GSAP.

Community & tutorials

GSAP has 15 years of CodePens, tutorials, and community support, plus Webflow behind it now. Our ecosystem is newer.

Try it in 30 seconds.

One npm install. No account. No license key. No config.