← Back to Demo Research

Accessible Carousel Library Comparison

Research conducted 2026-01-29 using isitaccessible.dev scores and official documentation.

Contents

TL;DR Recommendation

Embla Carousel is the clear winner for accessibility-focused projects.

LibraryA11y Score⭐ StarsLast UpdatedVanillaReactNotes
Embla Carousel100%8.0kJan 2026YesYesBest choice
@egjs/flicking100%2.9kNov 2025YesYesOnly 2 issues reported
react-responsive-carousel100%2.7kJan 2026NoYesKnown ARIA issues
Siema85.7%3.5kSep 2024YesWrapUnmaintained
Swiper84.9%41.8kJan 2026YesYesKeyboard/SR issues
Flickity74.6%7.6kMay 2024YesWrapAging
Keen Slider66.7%5.0kJan 2026YesYesOld a11y issue
tiny-slider58.5%5.3kAug 2024YesWrapFocus issues
React Slick57.4%12.0kAug 2025NoYes8+ yr old issues
Splide53.8%5.3kJul 2024YesYesNot actually accessible
Glide.js44.4%7.7kNov 2024YesWrapFocus issues

*Wrap = wrapper needed

CSS Class Name Customization

Some libraries let you use your own class names (e.g., Tailwind utilities), while others require their fixed classes.

LibraryCustomizable?How
Embla Carousel✅ YesClass-agnostic - uses element refs, any classes work
Swiper✅ YesslideClass, wrapperClass, etc. in config
Glide.js✅ Yesclasses config object
Splide✅ Yesclasses config object
tiny-slider⚠️ LimitedOnly animation classes (animateIn, animateOut)
Flicking⚠️ LimitedOnly panelClass for virtual panels
Siema❌ NoMinimal by design
Flickity❌ NoHardcoded classes
Keen Slider❌ NoFixed keen-slider__slide convention

jQuery-Dependent Libraries (Not Included)

The following carousels require jQuery and are not included in the test app:

LibraryA11y ScoreStarsNotes
Slick Carousel57.6%28.6k81 open a11y issues. Very popular but problematic.
Owl Carousel27.6%7.9kAvoid. Oldest issue 11+ years old. No keyboard nav.
accessible-slickN/A271Purpose-built a11y fork of Slick. Best jQuery option.

If you must use jQuery, accessible-slick is the recommended choice as it was specifically designed for accessibility.


Acceptance Criteria for Accessible Carousels

Derived from W3C WAI, ARIA APG, and expert resources. Use this checklist when evaluating or building carousels.

WCAG Success Criteria

CriterionRequirement
1.3.1 Info and RelationshipsStructure is programmatically determinable
1.3.2 Meaningful SequenceReading order matches visual order
2.1.1 KeyboardAll functionality operable via keyboard
2.2.1 Timing AdjustableUsers can extend/disable time limits
2.2.2 Pause, Stop, HideMoving content can be paused/stopped
2.4.3 Focus OrderFocus order preserves meaning
3.2.5 Change on RequestContext changes only on user request
4.1.2 Name, Role, ValueAll UI components have accessible name/role/value

Keyboard Navigation


Auto-Rotation / Autoplay


Screen Reader Support


ARIA Implementation

Carousel Container:

Individual Slides:

Navigation Controls:

Rotation Control:


Visual & Design


Content & Structure


Testing Checklist


Common A11y Issues and Fixes

Recurring issues across carousel libraries, plus how we address them in this demo. For library-specific notes and implementation details, see each carousel page:

Common issues

Our fixes


CSS-Only Carousels (Future)

Chrome is developing native CSS carousel features with built-in accessibility:

Status: Experimental. Sara Soueidan’s analysis notes current CSS carousels fail accessibility criteria and are unsuitable for production.

References:


References

Standards & Guidelines

Analysis & Articles

Implementation Resources


Conclusion

Use Embla Carousel with its accessibility plugin for the best out-of-box accessibility:

Installation:

# Vanilla JS (requires v9 RC for accessibility plugin)
npm install embla-carousel@9.0.0-rc01 embla-carousel-accessibility@9.0.0-rc01

# React (requires v9 RC for accessibility plugin)
npm install embla-carousel-react@9.0.0-rc01 embla-carousel-accessibility@9.0.0-rc01

Note: The accessibility plugin currently only supports Embla v9 (release candidate). The stable v8.x is incompatible with the accessibility plugin.

Always test with: