← Back to Demo Research

Accessible Carousel Library Comparison

Scores re-fetched 2026-06-07 from isitaccessible.dev. Local WCAG 2.1 AA and W3C pattern audits run against this site’s own implementations on the same date.

Two numbers, two meanings. The score below is isitaccessible.dev’s measure of how many accessibility-related GitHub issues a library has closed — a signal about the library’s maintenance, not your markup. Our audit runs axe-core and the W3C carousel checks against the actual implementations on this site (with workarounds applied). They diverge: several low-scoring libraries pass our audit because the right ARIA was added by hand. Read the score as “how much will the library fight you”, and the audit as “what’s achievable once you’ve done the work”.

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 2026NoYesPasses our audit
Siema85.7%3.5kSep 2024YesWrapUnmaintained
Swiper86.4%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

Libraries Not Included

These libraries were considered but not implemented or tested on this site. They are listed for reference, not scored as if covered.

jQuery-dependent (require jQuery):

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.

Other (not implemented here):

LibraryA11y ScoreStarsNotes
Pure React Carousel80%1.7kReact-only. Reported wrong ARIA roles. Not tested on this site.

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-rc02 embla-carousel-accessibility@9.0.0-rc02

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

Note: The accessibility plugin only supports Embla v9 (release candidate), and the three packages must stay on the same rc version (they peer-depend on each other exactly). The stable v8.x is incompatible with the accessibility plugin, so do not “upgrade to latest” — npm’s latest tag points at 8.x.

Always test with: