michalsnik/aos
41.3
Weak · 25 September 2026
650
lines of production code
JavaScript
primary language
4
measurements over time
What this system is
Features
Expanded demo pages for AOS features
The demo section now includes dedicated pages for anchor placement, offset, async loading, and the 'once' option, alongside an updated main demo page that demonstrates the mirror and custom event features.
demo · high confidence
Introduce DOM observation and offset calculation utilities
Added new utility modules for handling DOM changes and positioning. The observer module provides a MutationObserver wrapper that detects when elements with the 'aos' dataset attribute are added or removed from the DOM, with a fallback to older methods if necessary. The offset module provides a function to calculate the absolute top and left position of a DOM element, accounting for transforms and scroll positions. These utilities support dynamic content updates and accurate positioning calculations.
src/js/libs · high confidence
Architecture
Build system and development environment overhaul
The project's build pipeline has been migrated from Gulp to Rollup, with the removal of the Gulpfile and Bower configuration. A new Rollup configuration (rollup.config.js) now handles bundling for UMD, CommonJS, and ES modules, utilizing Babel for ES6+ transpilation, Uglify for minification, and PostCSS (with autoprefixer and cssnano) for CSS processing. Development tooling has been updated with ESLint and Prettier configurations (.eslintrc.json, .babelrc), and the repository now includes a Cypress configuration (cypress.json) for end-to-end testing. Additionally, a CONTRIBUTING.md guide and issue/PR templates have been added to standardize the development workflow.
(repo-wide) · high confidence
Behavioural changes
AOS library initialization and configuration overhaul
The AOS library has been refactored into a modular ES6 structure (src/js/aos.js) with a new public API including refreshHard() and disable() methods. Configuration options have been expanded to include throttleDelay, debounceDelay, anchorPlacement, and disableMutationObserver, allowing users to fine-tune scroll performance and browser compatibility. The initialization process now respects the 'disable' setting for asynchronously loaded content and automatically disables mutation observer support on older browsers like IE9.
src/js · high confidence
Add AOS animation styles and easing support
The Sass styles for the AOS library have been restructured into modular files: \_core.scss defines transition durations, delays, and pointer-events; \_easing.scss provides a map of cubic-bezier timing functions (linear, ease, ease-in, etc.) applied via the data-aos-easing attribute; and \_animations.scss defines the CSS for fade, zoom, slide, and flip animations, all scoped to screen media and requiring JavaScript (no-js check). The main aos.scss entry point now imports these three partials, enabling users to customize animation timings, delays, and easing curves through data attributes.
src/sass · high confidence
Automated test execution with proper server lifecycle management
The project now includes scripts to automate running Cypress tests alongside a local development server. The new \scripts/run-cypress-tests.js\ orchestrates the test suite, ensuring the server is properly closed and the process exits with the correct status code. The \scripts/start-server.js\ configures a live server on port 8080 to serve the demo and dist directories, with automatic reloading and optional browser opening. This change streamlines the local testing workflow by managing the server's lifecycle during test execution.
scripts · medium confidence
Refactored core helper modules for scroll detection and offset calculation
The library's JavaScript helpers have been restructured into distinct modules: a new device detector (src/js/helpers/detector.js) handles browser and mobile detection; elements are now gathered via a dedicated helper (src/js/helpers/elements.js); inline options are parsed through a new getInlineOption utility; scroll handling and class application are managed by a new handleScroll module; and offset calculations are centralized in offsetCalculator.js. This refactoring improves code organization and enables features like the 'mirror' option and custom event firing during scroll states.
src/js/helpers · high confidence
Removed obsolete AOS source files
The files src/\_animations.scss, src/aos.js, and src/aos.scss have been deleted from the source code. This removes the original AOS (Animate on Scroll) implementation and associated styles from the project.
src · high confidence
Updated demo CSS styles and layout
The demo page's CSS has been refactored to improve layout and styling. The extensive list of \.colored-N\ background color classes has been removed, and the \.aos-all\ container now includes a \max-width\ constraint. Additionally, a new \.scroll-counter\ class has been added to display a fixed position counter in the top-right corner of the demo.
demo/css · high confidence
Test coverage
Add comprehensive Cypress integration tests for AOS configuration and behavior
Added a new Cypress test suite covering the AOS library's configuration options and core behaviors. The tests verify that global and inline settings—including offset, duration, easing, delay, and startEvent—correctly apply to the DOM. It also validates the behavior of the 'once' flag, the 'mirror' option, and the 'disable' setting. Furthermore, the suite ensures that the 'useClassNames' option properly applies custom classes, that the 'disableMutationObserver' setting prevents dynamic element detection, and that the 'anchor' and 'anchorPlacement' settings trigger animations at the correct scroll positions.
cypress · high confidence
Dependencies
Upgrade to AOS 3.0.0-beta.6 with modern build tooling and ESM support
The AOS library has been updated to version 3.0.0-beta.6, introducing a modern build system using Rollup instead of Gulp. This change adds support for ES modules (via the 'module' field in package.json) alongside the CommonJS and browser bundles, improving compatibility with modern JavaScript tooling. The project also integrates ESLint, Prettier, and Cypress for testing and code quality, while dependencies like Babel, Rollup plugins, and various utility libraries have been updated to their latest versions.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 40 → 41 (+1.5)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 47 → 70 (+22.4)
- Architecture 69 (new)
- Maturity 53 → 44 (-8.7)
- Readiness 26 → 27 (+1.0)
- Security 75 → 60 (-15.0)
Resolved (63)
- Change coupling: aos.js ↔ detector.js (src/js/aos.js)
- Change coupling: aos.js ↔ elements.js (src/js/aos.js)
- Change coupling: aos.js ↔ handleScroll.js (src/js/aos.js)
- Change coupling: aos.js ↔ observer.js (src/js/aos.js)
- Change coupling: aos.js ↔ prepare.js (src/js/aos.js)
- Change coupling: detector.js ↔ handleScroll.js (src/js/helpers/detector.js)
- Change coupling: detector.js ↔ observer.js (src/js/helpers/detector.js)
- Change coupling: detector.js ↔ prepare.js (src/js/helpers/detector.js)
- Change coupling: elements.js ↔ handleScroll.js (src/js/helpers/elements.js)
- Change coupling: handleScroll.js ↔ prepare.js (src/js/helpers/handleScroll.js)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- …and 43 more
New (84)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Documentation: no usage examples (README.md)
- High CVE: [GHSA redacted] (yarn.lock)
- …and 64 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
michalsnik/aos was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 329fb34f777034345f4d3f4def4dc3bcc300cc2e — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.