Animation package contracts: imports, peers and lineage
Check the browser feature your interface needs separately from the package contract your application installs. This ledger compares twenty package names across five cutoffs, exposing changes in imports, peer dependencies and declared repository identity. Use it to choose upgrade checks, then define the interface’s fallback state explicitly.
Read declarations before choosing a test
An export-map change tells you to inspect the import path and module condition your build selects. A peer-contract change tells you to inspect the host package and version range. npm documents peer dependencies as a way to express compatibility with a host; the declaration is a useful input to an integration check.1 Keep the installed lockfile beside the ledger so a package name cannot stand in for an exact version.
The table shows four selected observations from the full twenty-field ledger. “Export,” “Peer” and “Repository” count changes between consecutive populated cutoffs. “Registry/shipped” counts unequal field values across those slots, including repeated versions. It is not a defect count. The audit tag is the observed npm latest tag, which can differ from the highest stable version selected at a cutoff.
| Package | Audit tag | Export | Peer | Repository | Registry/shipped | Documentation join |
|---|---|---|---|---|---|---|
| animejs | 4.5.0 | 2 | 1 | 0 | 3 | documented migration |
| motion | 14.6.0 | 2 | 4 | 2 | 6 | documented migration |
| gsap | 3.15.0 | 1 | 0 | 0 | 3 | documented migration |
| @tweenjs/tween.js | 25.0.0 | 2 | 0 | 0 | 5 | integration guidance only |
| shifty | 3.0.6 | 1 | 0 | 0 | 7 | documented migration |
| popmotion | 11.0.5 | 2 | 0 | 0 | 5 | unknown migration |
| @react-spring/web | 10.1.2 | 2 | 2 | 0 | 2 | documented migration |
| react-motion | 0.5.2 | 0 | 0 | 0 | 10 | unknown migration |
| @mojs/core | 1.7.1 | 0 | 0 | 0 | 0 | integration guidance only |
| velocity-animate | 1.5.2 | 0 | 0 | 0 | 5 | documentation version warning |
| kute.js | 2.2.6 | 0 | 0 | 0 | 0 | integration guidance only |
| @theatre/core | 0.7.2 | 0 | 0 | 0 | 0 | unknown migration |
| lottie-web | 5.13.0 | 0 | 0 | 0 | 10 | integration guidance only |
| @formkit/auto-animate | 0.10.0 | 1 | 0 | 0 | 6 | integration guidance only |
| react-transition-group | 4.4.5 | 0 | 0 | 0 | 5 | documented migration |
| react-move | 6.5.0 | 0 | 1 | 1 | 5 | documented migration |
| vivus | 0.4.6 | 0 | 0 | 0 | 5 | integration guidance only |
| scrollreveal | 4.0.9 | 0 | 0 | 1 | 5 | integration guidance only |
| aos | 2.3.4 | 0 | 0 | 0 | 5 | documented migration |
| countup.js | 2.10.1 | 1 | 0 | 0 | 5 | documentation version warning |
Counts describe sampled declarations, not rankings; documentation states describe the reviewed sources, not the existence of every possible guide.
Compare the right two snapshots
The cutoffs are the ends of 2019, 2021, 2023 and 2025, followed by 23 October 2026 at 19:08:15.760857 UTC. Each slot selects the highest numeric stable version published by that instant. This does not reconstruct an earlier npm latest tag. Four slots precede a stable release and remain empty; they are not zero-change releases.
There are 96 populated slots backed by 65 distinct archives. A version can occupy several slots. Comparing the same version at two cutoffs can therefore produce no differences without saying anything about releases between those cutoffs. Use the demo to choose a package and two cutoffs, then inspect the declared values before deciding which application test to run.
For example, animejs has two export-map changes and one peer-contract change in this sample. Those counts identify categories to inspect, not the exact number of edits your application needs. A missing declaration is displayed as “Not declared.” Keep that distinct from an explicit false value or a failed test result.
Resolve identity before reading a migration guide
The motion package-name history needs particular care. Its 2019 repository declaration resolves to a distinct archived repository; the current project has a different repository ID. Treat the row as a package-name history spanning different identities, not an uninterrupted upgrade history for the current project. The recorded counts stay visible with that qualification.
Theatre, React Move and ScrollReveal have older repository URLs that resolve to the same current IDs as their respective present records. That establishes a current alias relationship, not a transfer date. Current repository flags and documentation are separate from the historical manifest declarations throughout this ledger.
The documentation join contains eight explicit migration notes, seven integration-only records, three unknown migration contracts and two version warnings. Unknown means the contract was not established in the named sources. For a version warning, read the stated version boundary before borrowing an example; current default-branch guidance may target another release.
Check native support and define the fallback
First write the smallest capability requirement: creating an animation, retaining its result, using an intrinsic-size interpolation or attaching a scroll timeline. Detect that capability directly rather than inferring it from a browser name.2 Element.animate() creates and plays an animation and returns an Animation object; its presence alone does not answer whether every option your page uses behaves as required.3
Next define the useful state without the enhancement. An expanded panel should expose its content, a completed task should show its result, and a progress indicator should retain a meaningful value. Keep focus and reading order independent of motion. The cancellation guide and intrinsic-size guide separate those state decisions from the transition.
Finally, make the unsupported branch reachable in a small application test. Exercise the same user action with the enhancement enabled and disabled, checking the final content, controls and focus destination. Record the browser and exact requirement with the result. The package ledger helps choose import and dependency checks; this separate workflow answers the native-feature and fallback questions.
Download and reuse this edition
Download the CSV or full JSON. The method defines every count, and the source ledger preserves source dates, hashes and failures. Original observation data and compilation are CC BY 4.0; attribute this ledger and identify changes. Packages and their documentation retain their own licences. The viewer has filters and comparisons, with no paid rows or ranking.
Not covered on this page
- A compatibility matrix for browser versions or build tools.
- Performance benchmarks, security grades or maintenance predictions.
- Package installation, execution or application-specific upgrade instructions.
- Accessibility conformance or a replacement recommendation.
Sources
-
npm: package.json, opened 24 October 2026. ↩
-
MDN: Implementing feature detection, opened 24 October 2026. ↩
-
MDN: Element.animate(), opened 24 October 2026. ↩
How we test: methods. Found a mistake? Corrections.