Skip to content
CAI
Software that uses CAICheck a score

michalsnik/aos

41.3

Weak · 25 September 2026

650

lines of production code

JavaScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.