[Skip navigation links]
Login

WAI-ARIA Screen reader compatibility

Last updated: October 16, 2021

Shows how different WAI-ARIA attributes behave in commonly used screen readers.

The results include two types of test:

ARIA support by user agent

ARIA role and attribute support in different screen reader / browser combinations. Expected failures (marked with Expected to Fail) are not included in the reliability graph.

The solid area in the graph shows percentage of tests that pass in all tested interaction modes. The cross hatched area shows partial passes that only work in some interaction modes. An example of a partial pass is when form labels are read when tabbing, but ignored in browse mode.

ComboVersionsReliabilityTest Changes
JAWS ChromeJAWS 2021.2107.12 with Chrome 9483%1 worse
JAWS EdgeJAWS 2021.2107.12 with Edge 9483%1 worse
JAWS FirefoxJAWS 2021.2107.12 with FF9179%10 better 1 worse
JAWS IEJAWS 2019.1912.1 with IE1186%15 better
NVDA ChromeNVDA 2021.2 with Chrome 9483%
NVDA EdgeNVDA 2021.2 with Edge 9483%
NVDA FirefoxNVDA 2021.2 with FF9193%13 better
NVDA IENVDA 2019.2 with IE1164%5 better
VoiceOver MacVoiceOver macOS 11.5 with Safari 15.086%11 better
VoiceOver iOSVoiceOver iOS 14.7 with Safari iOS 14.769%4 better
WindowEyes IEWindowEyes 9.2 with IE1173%10 better 1 worse
Dolphin IEDolphin SR 15.05 with IE1152%
SaToGo IESaToGo 3.4.96.0 with IE1122%
Average Including older versions 73%

The average includes all versions, but some browser/AT combinations have tests for multiple versions (NVDA / JAWS / VoiceOver), while others only have tests for a single version (SaToGo and Dolphin).

ARIA support trend

This graph shows reliability over time for ARIA in NVDA, JAWS and Voiceover. Other screen readers don't have enough historical data yet to plot trends.

100%80%60%40%20%0%201468%201568%201669%201772%201877%201978%202083%202183%

ARIA roles

columnheader

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (34% average)0% 0% 0% 100% 90% 75% 0% 0%
Should work. Fails in 51% - 75% Data table with role=columnheader headers but no thBadBadBadGoodWorseWorseBadBad

grid

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (86% average)86% 100% 100% 75% 80% 100% 88% 75%
Should work. Fails in 1% - 25% Data table with role=gridBetterGoodGoodBetterBetterGoodBetterBetter

heading

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (92% average)71% 100% 100% 100% 100% 100% 100% 100%
Should work. Fails in 1% - 25% ARIA role=headingBetterGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% Nested ARIA headingsBadBadBadBadBadBadBadBad

note

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Should fail. Fails in 76% - 100% Data table with role=noteBetterBadBadBadBadBadBadBad

presentation

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (93% average)100% 100% 100% 100% 100% 100% 100% 75%
Should work. Fails in 1% - 25% Layout table with role=presentationGoodGoodGoodGoodGoodGoodGoodBetter
Should fail. Fails in 76% - 100% Data table with role=presentationBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% input with aria-labelledby pointing to role=presentation elementGoodGoodGoodBetterGoodGoodGoodGood

row

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (34% average)0% 0% 0% 100% 90% 75% 0% 0%
Should work. Fails in 51% - 75% Data table with role=columnheader headers but no thBadBadBadGoodWorseWorseBadBad

rowgroup

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (34% average)0% 0% 0% 100% 90% 75% 0% 0%
Should work. Fails in 51% - 75% Data table with role=columnheader headers but no thBadBadBadGoodWorseWorseBadBad

ARIA attributes

aria-describedby

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (92% average)100% 100% 100% 81% 95% 100% 78% 100%
Should work. Fails in 1% - 25% Click Here link with aria-describedby attributeGoodGoodGoodBetterBetterGoodBetterGood
Should work. Fails in 1% - 25% input type=text with aria-describedby attributeGoodGoodGoodBetterBetterGoodBadGood
Should fail. Fails in 76% - 100% img with aria-describedbyBadBadBadBadBadBadGoodBad

aria-label

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (74% average)76% 78% 83% 72% 71% 86% 81% 65%
Should work. Fails in 1% - 25% Link text replaced by aria-label attributeBetterBetterGoodGoodBetterGoodGoodGood
Should work. Fails in 26% - 50% applet with aria-label attributeGoodBetterGoodBetterBetterGoodBetterGood
Should work. Fails in 26% - 50% area with aria-label attributeBadBetterGoodBetterBetterGoodBetterBad
Should work. Fails in 76% - 100% audio with aria-label attributeBadBadBadBadBadBadBadBad
Should work. Fails in 1% - 25% button containing img with aria-labelBetterGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 1% - 25% button with aria-label containing img with null altGoodGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 51% - 75% embed with aria-label attributeGoodBetterBadBetterBadBadBetterBad
Should work. Fails in 1% - 25% img with aria-labelBetterGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% input type=image with aria-label attributeGoodGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 1% - 25% input type=text with aria-label attributeBadBetterGoodGoodGoodGoodGoodGood
Should work. Fails in 51% - 75% object with aria-label attributeGoodBetterGoodBadBetterGoodBetterBad
Should work. Fails in 51% - 75% video with aria-label attributeGoodBetterBadBadBadBadBetterBetter
Should fail. Fails in 1% - 25% Link with aria-label containing img with no altGoodBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 1% - 25% button with aria-label containing img with no altGoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% img with null alt and non-null aria-label attributesBadBadBadBadBadBadBadBad

aria-labelledby

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (65% average)39% 77% 81% 69% 57% 84% 67% 61%
Should work. Fails in 1% - 25% Link text replaced by aria-labelledby attributeBadBetterGoodBetterGoodGoodGoodGood
Should work. Fails in 26% - 50% applet with aria-labelledby attributeBadBetterGoodBetterBetterGoodBetterGood
Should work. Fails in 26% - 50% area with aria-labelledby attributeBadBetterGoodBetterBetterGoodBadBad
Should work. Fails in 76% - 100% audio with aria-labelledby attributeBadBadBadBadBadBadBadBad
Should work. Fails in 26% - 50% button containing img with aria-labelledbyBadGoodGoodBetterBadGoodGoodGood
Should work. Fails in 76% - 100% embed with aria-labelledby attributeBadBetterBadBetterBadBadBetterBad
Should work. Fails in 1% - 25% img with aria-labelledbyBadGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% input type=image with aria-labelledby attributeBadGoodGoodBetterGoodGoodGoodGood
Should work. Works in 100% input type=text with aria-labelledby attributeGoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 51% - 75% object with aria-labelledby attributeBadBetterGoodBadBetterGoodBetterBad
Should work. Fails in 76% - 100% video with aria-labelledby attributeBadBetterBadBadBadBadBetterBetter
Should fail. Fails in 1% - 25% Link with aria-labelledby containing img with no altBadBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 76% - 100% img with null alt and non-null aria-labelledby attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% input with aria-labelledby pointing to role=presentation elementGoodGoodGoodBetterGoodGoodGoodGood

aria-level

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (92% average)71% 100% 100% 100% 100% 100% 100% 100%
Should work. Fails in 1% - 25% ARIA role=headingBetterGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% Nested ARIA headingsBadBadBadBadBadBadBadBad

role

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (77% average)63% 74% 75% 94% 92% 94% 71% 63%
Should work. Fails in 1% - 25% ARIA role=headingBetterGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 51% - 75% Data table with role=columnheader headers but no thBadBadBadGoodWorseWorseBadBad
Should work. Fails in 1% - 25% Data table with role=gridBetterGoodGoodBetterBetterGoodBetterBetter
Should work. Fails in 1% - 25% Layout table with role=presentationGoodGoodGoodGoodGoodGoodGoodBetter
Should fail. Fails in 76% - 100% Data table with role=noteBetterBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Data table with role=presentationBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Nested ARIA headingsBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% input with aria-labelledby pointing to role=presentation elementGoodGoodGoodBetterGoodGoodGoodGood

Key

Tests expected to fail (due to authoring errors) are marked with Expected to Fail.

Test notes

All tests were carried out with screen reader factory settings. JAWS in particular has a wide variety of settings controlling exactly what gets spoken.

Screen readers allow users to interact in different modes, and can produce very different results in each mode. The modes used in these tests are:

In the "What the user hears" column: