Skip to main content

ARIA

v5 adds ARIA 1.3 and makes it the default (v4 used 1.2). The v4 wai-aria umbrella is replaced by 21 independent rules.

What changed

ChangeWho is affected
Default ARIA version "1.3"Everyone
generic role is transparent in 1.3Content that wraps required owned roles in a <div> / <span>
<aside> conditional implicit role in 1.3Nested <aside>
image / img role synonym in 1.3role="image" on elements that permit img
"No role permitted" is strictExplicit role matching the implicit role
wai-aria removed as a rule nameAny config that named wai-aria

Shared version: Config. Catalog: Renames and splits.

ARIA version

Default is "1.3". To keep 1.2:

{
"ruleCommonSettings": {
"ariaVersion": "1.2"
}
}

Only require-accessible-name and no-refer-to-non-existent-id still accept per-rule options.ariaVersion. The 21 wai-aria successors have no options object. v4 wai-aria options.version is dropped; use ruleCommonSettings.ariaVersion.

Generic role transparency (ARIA 1.3)

Elements with implicit or explicit generic (bare <div> / <span>) are skipped when walking required parent/owned-child relationships.

<!-- ARIA 1.2: fails list → listitem. ARIA 1.3: passes. -->
<ul>
<div>
<li>item</li>
</div>
</ul>
Behavior1.1 / 1.21.3
generic transparent for child rolesNoYes
generic transparent for parent roleNoYes
presentation / none transparent for child rolesYesYes
presentation / none transparent for parent roleYesYes

<aside> conditional role (ARIA 1.3)

  • Not a descendant of <article>, <aside>, <blockquote>, <details>, <dialog>, <fieldset>, <figure>, <nav>, <section>, or <td>complementary
  • Descendant of one of those → generic, unless the <aside> has an accessible name, in which case it stays complementary

no-nested-top-level-landmark does not treat complementary as a top-level landmark: a selector cannot tell a demoted <aside> from a real one.

image / img synonym (ARIA 1.3)

When permitted roles include img, image is accepted (<embed>, <iframe>). <img> already has implicit img.

<embed src="chart.svg" role="image" />

"No role permitted" is strict

When ARIA in HTML says no role is permitted, v5 forbids any explicit role, including a value equal to the implicit role. v4 allowed that match.

<img src="spacer.png" alt="" role="presentation" /> <img src="spacer.png" alt="" role="none" />

Remove the attribute. The implicit role from HTML-AAM still applies. Background: issue #3641.

wai-aria umbrella

In v4, wai-aria ran many checks, some gated by boolean options.

wai-aria: true still works until v6: a deprecation warning, then expansion to all 21 rules with the same severity/reason. Option toggles are not routed. To turn a check off, disable that rule.

Map of v4 options → v5 rules

v4 optionv4 defaultv5 rule
checkingValuetrueno-invalid-aria-prop-value
checkingDeprecatedRoletrueno-deprecated-role
checkingDeprecatedPropstrueno-deprecated-aria-prop
permittedAriaRolestruepermitted-roles
checkingRequiredOwnedElementstruerequire-owned-elements
checkingPresentationalChildrenfalseno-aria-on-presentational-children
checkingInteractionInHiddenfalseno-focusable-in-aria-hidden
disallowSetImplicitRoletrueno-redundant-role
disallowSetImplicitPropstrueno-redundant-aria-prop and no-contradictory-aria-prop
disallowDefaultValuefalseno-default-aria-value
version"1.2"ruleCommonSettings.ariaVersion

v4 always ran (no option): #ARIAAttrs: falseno-aria-on-unsupported-element; unknown/abstract role; required ARIA properties; disallowed properties (no-prohibited-naming, element-supports-aria-prop, role-supports-aria-prop); global properties without a role → aria-prop-requires-role.

v4 wai-aria did not implement require-parent-role or tab-requires-tabpanel. The alias and markuplint:a11y still enable them.

Extra reports vs v4 defaults

Because toggles are dropped, wai-aria: true (and markuplint:a11y) now also run:

  • no-aria-on-presentational-children (was default off)
  • no-focusable-in-aria-hidden (was default off)
  • no-default-aria-value (was default off)
  • require-parent-role (new)
  • tab-requires-tabpanel (new)

Disable individually, for example:

{
"rules": {
"no-aria-on-presentational-children": false,
"no-focusable-in-aria-hidden": false,
"no-default-aria-value": false,
"require-parent-role": false,
"tab-requires-tabpanel": false
}
}

markuplint:a11y names these as a11y/wai-aria/* groups, so you can also disable a11y/wai-aria/presentational-children and the other group names.

landmark-roles and required-h1 splits are in Renames and splits, not in the wai-aria alias.

Terminology (custom rule authors)

ARIA 1.3 renames on ARIARole (old names remain @deprecated aliases):

ARIA 1.3Former
requiredAccessibilityParentRolerequiredContextRole
allowedAccessibilityChildRolesrequiredOwnedElements