staticdata.dev
Menu
Datasets About Contact

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.

v1.0.0 MIT 100 records Updated 2026-10-05 stable Source:  WAI-ARIA 1.2 — The Roles Model, WAI-ARIA 1.3 Editor's Draft

Quick fetch

Stable URL. CORS-enabled. No auth.

bash
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

    Open

    min: 16.3 KB · /v1/aria-roles.min.json

  • CSV 11.6 KB

    /v1/aria-roles.csv

    Open
  • TypeScript 19.5 KB

    /v1/aria-roles.ts

    export const ariaRoles

    type AriaRole = (typeof ariaRoles)[number]

    Open

Schema

Each record in the dataset has the following shape.

Schema
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.

Data preview
rolecategorydescriptionabstract
alertlive-regionA type of live region with important, time-sensitive information.false
alertdialogwindowA type of dialog that contains an alert message, where the initial focus goes to an element within the dialog.false
applicationdocument-structureA 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
articledocument-structureA section of a page that consists of a composition that forms an independent part of a document, page, or site.false
bannerlandmarkA region that contains mostly site-oriented content, rather than page-specific content.false
blockquotedocument-structureA section of content that is quoted from another source.false
buttonwidgetAn input element that allows for user-triggered actions when clicked or pressed.false
captiondocument-structureVisible content that names, or describes a figure, grid, group, radiogroup, table or treegrid.false
celldocument-structureA cell in a tabular container.false
checkboxwidgetA checkable input that has three possible values: true, false, or mixed.false

Showing 10 of 100. View full data:  JSON · CSV

Fetch examples

Drop-in snippets in five languages.

curl
curl -sSL https://staticdata.dev/v1/aria-roles.json | jq '.[0]'
JavaScript
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]);
Python
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])
Go
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])
}
Rust
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