Skip to content

v2.1.0 - Interactive state scans, CI baselines, and localized UI

Choose a tag to compare

@jakub-lipinski jakub-lipinski released this 14 May 18:47

This release adds interactive accessibility state scans, CI baseline quality gates, localized dashboard support, and
better local HTTPS handling.

Added

  • Interactive state scanning for UI states that appear after user interaction
  • Visual state recorder in the dashboard
  • Reusable interaction scripts for dashboard and CI workflows
  • Support for interactive actions:
    • click
    • type
    • select
    • check
    • uncheck
    • wait
  • stateLabel metadata on issues found during interactive state scans
  • Interactive state labels in scan history
  • Interactive state labels in PDF reports
  • State-aware scan comparisons for new, fixed, and remaining issues
  • Baseline quality gate for existing projects
  • New CLI option for writing a baseline:
php artisan lens:audit --crawl --baseline
  • New CLI option for failing only on new violations:
php artisan lens:audit --crawl --fail-on-new
  • Custom baseline file support:
php artisan lens:audit --crawl --fail-on-new --baseline-file=.github/lens-baseline.json
  • Configurable baseline path:
LENS_FOR_LARAVEL_BASELINE_PATH=storage/app/lens-for-laravel/baseline.json
  • Dashboard localization support
  • Built-in language switcher
  • Translations for:
    • English
    • Polish
    • Spanish
    • French
    • German
  • New translation publishing tag:
php artisan vendor:publish --tag="lens-for-laravel-translations"
  • Configurable dashboard locale:
LENS_FOR_LARAVEL_LOCALE=en
  • Configurable fallback locale:
LENS_FOR_LARAVEL_FALLBACK_LOCALE=en
  • Local HTTPS certificate error handling for DDEV, Laravel Valet, and other local HTTPS environments:
LENS_FOR_LARAVEL_IGNORE_HTTPS_ERRORS=true

Changed

  • The dashboard now includes an interactive states scan mode.
  • The scanner can now run axe-core after scripted browser interactions.
  • Scan history can now store and compare issues from different UI states.
  • PDF reports now include interactive state labels where available.
  • The CLI can now be used as a regression-only quality gate through baselines.
  • Dashboard text now comes from translation files instead of hardcoded strings.
  • Package resources now include publishable translations.

Fixed

  • Local scans against self-signed HTTPS environments can now be enabled without failing on certificate errors.
  • Scan comparison now distinguishes the same selector across different interactive states.
  • Reports preserve state context for interactive scan issues.

Security

  • URL validation remains restricted to HTTP and HTTPS URLs on the configured application host.
  • Interactive state scans use the same same-origin scan restrictions as regular scans.
  • Interaction scripts are validated and limited before execution.
  • Baseline fingerprints normalize URL host and scheme, making local and CI environments comparable without weakening scan
    domain rules.
  • HTTPS certificate ignoring is opt-in and disabled by default.

Upgrade Notes

Run migrations after upgrading:

php artisan migrate

If you previously published the config, add the new v2.1 options manually or republish the config:

'locale' => env('LENS_FOR_LARAVEL_LOCALE', app()->getLocale()),

'fallback_locale' => env('LENS_FOR_LARAVEL_FALLBACK_LOCALE', 'en'),

'supported_locales' => [
    'en' => 'English',
    'pl' => 'Polski',
    'es' => 'Español',
    'fr' => 'Français',
    'de' => 'Deutsch',
],

'baseline_path' => env('LENS_FOR_LARAVEL_BASELINE_PATH', storage_path('app/lens-for-laravel/baseline.json')),

'ignore_https_errors' => env('LENS_FOR_LARAVEL_IGNORE_HTTPS_ERRORS', false),

To publish translation files, run:

php artisan vendor:publish --tag="lens-for-laravel-translations"

For local HTTPS environments with self-signed certificates, enable:

LENS_FOR_LARAVEL_IGNORE_HTTPS_ERRORS=true

For baseline-based CI checks, first create a reviewed baseline:

php artisan lens:audit --crawl --baseline

Then use the regression gate in CI:

php artisan lens:audit --crawl --fail-on-new

Notes

Interactive state scanning helps cover menus, modals, validation states, dropdowns, tabs, and other UI states that do not
exist on initial page load. Automated accessibility testing still cannot prove full compliance, so Lens should be combined
with keyboard testing, screen reader testing, and manual review.