Comparison

svg-scroll-draw
vs AOS vs ScrollReveal.

AOS and ScrollReveal.js put animation config in HTML data attributes. svg-scroll-draw puts it in JavaScript — typed, traceable, and part of a full scroll platform. Both of them are smaller than us, and both do less; the numbers below are measured so you can decide which trade you want.

01

Bundle size.

This one does not go our way, so here it is plainly: AOS and ScrollReveal are both smallerthan svg-scroll-draw's main entry. They also do considerably less — neither draws SVG paths, pins, snaps, splits text or scrubs video. If all you need is fade-up-on-scroll, they are a perfectly good choice and you should use them. Our svg-scroll-draw/reveal entry point is 3.9 KB if you want just that piece — that is the number worth comparing, not the 10.0 KB figure for every API at once.

scrollreveal 4.0.9
5.6 KB
smallest
aos 2.3.4 (js+css)
6.7 KB
svg-scroll-draw/reveal
3.9 KB
like-for-like
svg-scroll-draw (all APIs)
10 KB
yours

All sizes minified + gzipped at level 9, measured 2026-08-14 against aos 2.3.4, scrollreveal 4.0.9, svg-scroll-draw 2.10.0 — measured, not estimated. AOS includes its stylesheet (2.1 KB), which you need.

02

Side-by-side API.

Fade up on scroll

AOS

index.html
<!-- HTML attribute on every element -->
<div data-aos="fade-up"
     data-aos-once="true">
  Content
</div>

<!-- Init in JS -->
AOS.init({ duration: 800 });

ScrollReveal.js

app.js
// ScrollReveal.js 4.0.9 (GPL-3.0)
const sr = ScrollReveal({
  origin: 'bottom',
  distance: '32px',
  duration: 800,
  once: true,
});

sr.reveal('.card');

svg-scroll-draw

app.js
import { scrollReveal }
  from 'svg-scroll-draw/reveal';

// One import. One call.
scrollReveal('.card');

// Custom config:
scrollReveal('.card', {
  from:    { opacity: 0, y: 32 },
  stagger: 0.08,
  once:    true,
});

Stagger cascade

AOS

index.html
<!-- AOS: delay per element in HTML -->
<div data-aos="fade-up"
     data-aos-delay="0">A</div>
<div data-aos="fade-up"
     data-aos-delay="100">B</div>
<div data-aos="fade-up"
     data-aos-delay="200">C</div>

ScrollReveal.js

app.js
sr.reveal('.card', {
  interval: 100,
  origin:   'bottom',
});

svg-scroll-draw

app.js
scrollReveal('.card', {
  stagger: 0.1, // seconds
});

03

Feature matrix.

Feature
svg-scroll-draw
AOS
ScrollReveal.js
Fade up / down / left / right
Scale reveal
3D flip (rotateX / rotateY)
Custom from state (x, y, scale…)
Stagger (cascade)
Custom easing function

AOS ships 8 named CSS easings; ScrollReveal takes any CSS timing function. Only we take a JS easing function (createSpring/createBounce/createElastic).

~
~
CSS-only config (data attributes)
TypeScript types

Neither ships its own .d.ts; both have community types on DefinitelyTyped (@types/aos, @types/scrollreveal).

~
~
Tree-shakeable sub-imports
scrollAnimate (any CSS property)
scrollPin / sticky sections
scrollSnap
scrollText (split + stagger text)
scrollVideo (scrub)
scrollProgress (CSS variable)
scrollHorizontal sections
Honours prefers-reduced-motion by default

True for scrollReveal. Not a blanket claim across every API here — scrollHorizontal opts out by design. Neither AOS nor ScrollReveal references prefers-reduced-motion in its published bundle.

~
React / Vue / Svelte wrappers
~
Last published

Dates from npm, read 2026-08-14. Both are stable, finished libraries rather than abandoned ones — weigh that how you like.

2026-08-14
2022-06-13
2022-06-26
License

ScrollReveal is GPL-3.0, which is a real consideration for a closed-source commercial product. AOS is MIT, same as us.

MIT
MIT
GPL-3.0
Bundle size (gzipped)

Measured 2026-08-14 at gzip level 9 against aos 2.3.4 and scrollreveal 4.0.9. Both are smaller than us — see below.

10 KB
6.7 KB
5.6 KB

✓ supported · ✗ not supported · ~ partial

One import. Done.

No data attributes. No config files. No separate CSS import. Works in React, Vue, Svelte, Solid, Astro, Nuxt.

$npm i svg-scroll-draw
Read the docs →