ARIA Roles
The 94 WAI-ARIA 1.2 roles, plus the 6 roles added in the WAI-ARIA 1.3 Editor's Draft as of October 2026 (comment, image, mark, sectionfooter, sectionheader, suggestion). Each entry captures the role name, its taxonomy category (widget, composite, document-structure, landmark, live-region, window, or abstract), a concise description of its purpose, and a boolean flag indicating whether the role is abstract and therefore not intended for direct use in markup. The dataset has 100 roles, 12 of them abstract base roles, making it suitable for accessibility tooling, linters, documentation generators, and IDE integrations.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/aria-roles.json
Or use as a typed import:
import { ariaRoles } from "https://staticdata.dev/v1/aria-roles.ts"
Formats
- JSON 19.3 KB
/v1/aria-roles.json
min: 16.3 KB · /v1/aria-roles.min.json
- CSV 11.6 KB
/v1/aria-roles.csv
- TypeScript 19.5 KB
/v1/aria-roles.ts
export const ariaRoles
type AriaRole = (typeof ariaRoles)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| role | string | The ARIA role name as used in the role attribute | button |
| category | string | Taxonomy category from the ARIA roles model | widget |
| description | string | A concise description of the role's purpose and usage | An input element that allows for user-triggered actions when clicked or pressed. |
| abstract | boolean | True if the role is abstract and not for direct use in markup | false |
Preview
First 10 records.
| role | category | description | abstract |
|---|---|---|---|
| alert | live-region | A type of live region with important, time-sensitive information. | false |
| alertdialog | window | A type of dialog that contains an alert message, where the initial focus goes to an element within the dialog. | false |
| application | document-structure | A structure containing one or more focusable elements requiring user interaction, such as keyboard or gesture events, that do not follow a standard interaction pattern supported by a widget role. | false |
| article | document-structure | A section of a page that consists of a composition that forms an independent part of a document, page, or site. | false |
| banner | landmark | A region that contains mostly site-oriented content, rather than page-specific content. | false |
| blockquote | document-structure | A section of content that is quoted from another source. | false |
| button | widget | An input element that allows for user-triggered actions when clicked or pressed. | false |
| caption | document-structure | Visible content that names, or describes a figure, grid, group, radiogroup, table or treegrid. | false |
| cell | document-structure | A cell in a tabular container. | false |
| checkbox | widget | A checkable input that has three possible values: true, false, or mixed. | false |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/aria-roles.json | jq '.[0]' import type { AriaRole } from "https://staticdata.dev/v1/aria-roles.ts";
const res = await fetch("https://staticdata.dev/v1/aria-roles.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const ariaRoles: AriaRole[] = await res.json();
console.log(ariaRoles[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/aria-roles.min.json") as r:
ariaRoles = json.load(r)
print(ariaRoles[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/aria-roles.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/aria-roles.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The data is curated from the WAI-ARIA 1.2 specification published by the W3C Web Accessibility Initiative. WAI-ARIA (Accessible Rich Internet Applications) defines a set of roles, states, and properties that can be added to HTML elements to improve accessibility for users of assistive technologies such as screen readers.
Roles are organised into seven taxonomy categories: widget roles represent interactive user interface controls (e.g., button, checkbox, slider); composite roles are container widgets that manage a set of owned interactive children (e.g., grid, listbox, tree); document-structure roles describe structural, non-interactive portions of a document (e.g., article, heading, table); landmark roles identify major sections of a page for quick navigation (e.g., main, navigation, banner); live-region roles mark content that updates dynamically (e.g., alert, log, status); window roles represent sub-windows within the application (e.g., dialog, alertdialog); and abstract roles are base types in the inheritance hierarchy that authors must never use directly in markup.
Abstract roles (abstract: true) such as roletype, widget, landmark, and structure define the taxonomy hierarchy and carry inherited properties, but setting them directly on HTML elements is invalid. All non-abstract roles are safe to use as values of the role attribute. Roles that exist only in the WAI-ARIA 1.3 draft are marked “(WAI-ARIA 1.3 draft)” in their description, and directory is deprecated in 1.2. The category field is this dataset’s grouping (composite widgets such as grid, listbox and tree are separated from simple widgets) and follows the spec’s role categorization otherwise. The descriptions in this dataset are concise paraphrases of the normative WAI-ARIA definitions, suitable for developer tooling and quick reference.
Versioning
URLs under /v1/ are stable: field names and types will not change in a way
that breaks consumers. Values can be corrected or records added when the upstream source
changes; schema-incompatible updates ship under a new version path. See the
aria-roles changelog for this dataset's history.
Related datasets
More Web datasets
- aria-attributes
- character-encodings
- csp-directives
- credit-card-types
- dns-record-types
- dom-events
- emoji
- emoji-shortcodes
- html-attributes
- input-types
- http-auth-schemes
- http-cache-directives
- http-content-codings
- http-headers
- http-methods
- http-status-codes
- http-versions
- iframe-sandbox-tokens
- ip-protocol-numbers
- keyboard-event-codes
- link-relations
- media-type-suffixes
- mime-types
- oauth-grant-types
- ports
- referrer-policies
- ip-special-blocks
- svg-elements
- tcp-flags
- tlds
- tls-cipher-suites
- tls-versions
- uri-schemes
- well-known-uris