compare / vs vivusmeasured 2026-10-3110 rows

svg-scroll-draw vs vivus

vivus draws SVG strokes over time, and does it well — but it has not shipped since 0.4.6 in April 2021. svg-scroll-draw/vivus is a drop-in: import Vivus from 'svg-scroll-draw/vivus' instead of 'vivus', and every new Vivus(…) call, option, animation type, scenario attribute and timing function keeps working. The browser suite runs vivus 0.4.6 beside it and requires the SVG markup — every generated path and dash value — to match exactly at every point of the animation. It is 4.2 KB against 4.1 KB. When you want the stroke tied to scroll position instead of a clock, scrollDraw is in the same package.

svg-scroll-draw
11.6 KB
vivus
4.1 KB
Only here
4 of 10
Only vivus
0 of 10
01size

What each figure measures

Measured from vivus 0.4.6 dist/vivus.min.js and the built svg-scroll-draw/vivus entry, gzip level 9.

itemPackageVersionLicenceLast publishgzip
01svg-scroll-drawVersion2.23.3LicenceMITpublished2026-08-1411.6 KB
02vivusVersion0.4.6LicenceMITpublished2021-04-174.1 KB

Minified + gzipped at level 9, measured 2026-10-31 against vivus 0.4.6 and svg-scroll-draw 2.23.3. vivus is MIT.

vivus: npm pack vivus@0.4.6 && gzip -9 package/dist/vivus.min.js — Draws SVG strokes over time (frame-based), started on page load, on viewport entry or by hand — not scrubbed by scroll position.

0210 rows

Feature matrix

Σboth 5only here 4only vivus 0
#Featuresvg-scroll-drawvivus
01new Vivus(el, options, callback)Same constructor, same validation errorsSupportedSupported
02Animation types (delayed, sync, oneByOne, scenario, scenario-sync)SupportedSupported
03Shapes converted to paths (rect, circle, line, polyline…)Same d strings, byte for byteSupportedSupported
04play / stop / reset / finish / setFrameProgressSupportedSupported
05Draw tied to scroll positionvivus only starts on viewport entry; scrollDraw scrubs with the scrollSupportedNot supported
06Native CSS fast pathFor scrollDrawSupportedNot supported
07Respects prefers-reduced-motionThe drop-in jumps to the end and still fires callbacksSupportedNot supported
08TypeScript types shippedSupportedNot supported
09ES module + script-tag buildSupportedSupported
10Bundle size (gzipped)The vivus entry point on its own4.2 KB4.1 KB

Supported SupportedNot supported Not supportedPartial Partial or requires extra workChecked against vivus 0.4.6.

03where vivus wins

When vivus is the right call

  1. W1

    It already works

    vivus is MIT and stable. If your animation is done and you never revisit it, there is no urgent reason to change.

  2. W2

    Its demo site and docs

    vivus has a well-known demo page and years of tutorials and answers written against it — all of which apply to the drop-in too.

04questions

Questions

Q1

Do I need to change my vivus code?

No. Change the import (or the script tag to dist/cdn/vivus.global.js, which defines window.Vivus) and keep the rest — or run npx svg-scroll-draw migrate, which makes those edits and swaps the dependency. Options, types, start modes, data-start / data-duration / data-delay / data-async / data-ignore attributes and Vivus.EASE and friends are all supported.

Q2

How do I use it in React or Next.js?

useVivus() from svg-scroll-draw/vivus/react creates the instance on the mounted <svg>, destroys it on unmount (StrictMode-safe) and returns it for play() and reset(). The entry is marked "use client", so it works in the Next.js App Router.

Q3

Is vivus still maintained?

Its last release was 0.4.6, published 2021-04-17. It is MIT-licensed and still works.

Q4

Can the line draw as you scroll instead of on a timer?

Yes — that is what scrollDraw does, in the same package: the stroke follows the scroll position, reverses when you scroll back, and runs on a native CSS scroll timeline where the browser supports it.

05Other comparisons

Other comparisons