├── .gitignore
├── .vitepress
├── config.mjs
└── theme
│ ├── index.js
│ └── style.css
├── CODE_OF_CONDUCT.md
├── LICENSE.md
├── README.md
├── automated-tools
├── accessibility-insights.md
├── accesslint-screenreaders.md
├── accesslint.md
├── alfa.md
├── andi.md
├── arc.md
├── assistive-webdriver.md
├── axe-core-react.md
├── axe-core.md
├── axe-devtools.md
├── editoria11y.md
├── ember-a11y-testing.md
├── ember-template-lint.md
├── equal-access-accessibility-checker-engine.md
├── equal-access-accessibility-checker-extension.md
├── equal-access-accessibility-checker-testing-libraries.md
├── eslint-plugin-jsx-a11y.md
├── eslint-plugin-lit-a11y.md
├── eslint-plugin-vuejs-accessibility.md
├── guidepup.md
├── index.md
├── jaws-inspect.md
├── jest-axe.md
├── keyboard-testing-library.md
├── lighthouse.md
├── luma.md
├── pa11y.md
├── sa11y.md
├── screen-reader-testing-library.md
├── stark-for-figma.md
└── storybook-addon-a11y.md
├── components
├── SearchInput.vue
└── TagLinks.vue
├── index.md
├── package.json
├── pnpm-lock.yaml
├── public
├── AAT-social.png
├── _headers
├── a-logo.svg
└── robot-automation.png
├── tags
├── best-practice.md
├── failure-1.md
├── failure-10.md
├── failure-100.md
├── failure-101.md
├── failure-102.md
├── failure-103.md
├── failure-104.md
├── failure-105.md
├── failure-106.md
├── failure-107.md
├── failure-108.md
├── failure-12.md
├── failure-13.md
├── failure-14.md
├── failure-15.md
├── failure-16.md
├── failure-19.md
├── failure-2.md
├── failure-20.md
├── failure-22.md
├── failure-23.md
├── failure-24.md
├── failure-25.md
├── failure-26.md
├── failure-3.md
├── failure-30.md
├── failure-31.md
├── failure-32.md
├── failure-33.md
├── failure-34.md
├── failure-36.md
├── failure-37.md
├── failure-38.md
├── failure-39.md
├── failure-4.md
├── failure-40.md
├── failure-41.md
├── failure-42.md
├── failure-43.md
├── failure-44.md
├── failure-46.md
├── failure-47.md
├── failure-48.md
├── failure-49.md
├── failure-50.md
├── failure-52.md
├── failure-54.md
├── failure-55.md
├── failure-58.md
├── failure-59.md
├── failure-60.md
├── failure-61.md
├── failure-63.md
├── failure-65.md
├── failure-66.md
├── failure-67.md
├── failure-68.md
├── failure-69.md
├── failure-7.md
├── failure-70.md
├── failure-71.md
├── failure-72.md
├── failure-73.md
├── failure-74.md
├── failure-75.md
├── failure-77.md
├── failure-78.md
├── failure-79.md
├── failure-8.md
├── failure-80.md
├── failure-81.md
├── failure-82.md
├── failure-83.md
├── failure-84.md
├── failure-85.md
├── failure-86.md
├── failure-87.md
├── failure-88.md
├── failure-89.md
├── failure-9.md
├── failure-90.md
├── failure-91.md
├── failure-92.md
├── failure-93.md
├── failure-94.md
├── failure-95.md
├── failure-96.md
├── failure-97.md
├── failure-98.md
├── failure-99.md
├── general-technique-1.md
├── general-technique-10.md
├── general-technique-11.md
├── general-technique-13.md
├── general-technique-14.md
├── general-technique-15.md
├── general-technique-17.md
├── general-technique-18.md
├── general-technique-19.md
├── general-technique-21.md
├── general-technique-4.md
├── general-technique-5.md
├── general-technique-53.md
├── general-technique-54.md
├── general-technique-55.md
├── general-technique-56.md
├── general-technique-57.md
├── general-technique-58.md
├── general-technique-59.md
├── general-technique-60.md
├── general-technique-61.md
├── general-technique-62.md
├── general-technique-63.md
├── general-technique-64.md
├── general-technique-65.md
├── general-technique-68.md
├── general-technique-69.md
├── general-technique-70.md
├── general-technique-71.md
├── general-technique-73.md
├── general-technique-74.md
├── general-technique-75.md
├── general-technique-76.md
├── general-technique-78.md
├── general-technique-79.md
├── general-technique-8.md
├── general-technique-80.md
├── general-technique-81.md
├── general-technique-82.md
├── general-technique-83.md
├── general-technique-84.md
├── general-technique-85.md
├── general-technique-86.md
├── general-technique-87.md
├── general-technique-88.md
├── general-technique-89.md
├── general-technique-9.md
├── general-technique-90.md
├── html-33.md
├── wcag-1-1-1.md
├── wcag-1-1.md
├── wcag-1-2-1.md
├── wcag-1-2-2.md
├── wcag-1-2-3.md
├── wcag-1-2-4.md
├── wcag-1-2-5.md
├── wcag-1-2-6.md
├── wcag-1-2-7.md
├── wcag-1-2-8.md
├── wcag-1-2-9.md
├── wcag-1-2.md
├── wcag-1-3-1.md
├── wcag-1-3-2.md
├── wcag-1-3-3.md
├── wcag-1-3-4.md
├── wcag-1-3-5.md
├── wcag-1-3-6.md
├── wcag-1-3.md
├── wcag-1-4-1.md
├── wcag-1-4-10.md
├── wcag-1-4-11.md
├── wcag-1-4-12.md
├── wcag-1-4-13.md
├── wcag-1-4-2.md
├── wcag-1-4-3.md
├── wcag-1-4-4.md
├── wcag-1-4-5.md
├── wcag-1-4-6.md
├── wcag-1-4-7.md
├── wcag-1-4-8.md
├── wcag-1-4-9.md
├── wcag-1-4.md
├── wcag-2-1-1.md
├── wcag-2-1-2.md
├── wcag-2-1-3.md
├── wcag-2-1-4.md
├── wcag-2-1.md
├── wcag-2-2-1.md
├── wcag-2-2-2.md
├── wcag-2-2-3.md
├── wcag-2-2-4.md
├── wcag-2-2-5.md
├── wcag-2-2-6.md
├── wcag-2-2.md
├── wcag-2-3-1.md
├── wcag-2-3-2.md
├── wcag-2-3-3.md
├── wcag-2-3.md
├── wcag-2-4-1.md
├── wcag-2-4-10.md
├── wcag-2-4-2.md
├── wcag-2-4-3.md
├── wcag-2-4-4.md
├── wcag-2-4-5.md
├── wcag-2-4-6.md
├── wcag-2-4-7.md
├── wcag-2-4-8.md
├── wcag-2-4-9.md
├── wcag-2-4.md
├── wcag-2-5-1.md
├── wcag-2-5-2.md
├── wcag-2-5-3.md
├── wcag-2-5-4.md
├── wcag-2-5-5.md
├── wcag-2-5-6.md
├── wcag-2-5.md
├── wcag-3-1-1.md
├── wcag-3-1-2.md
├── wcag-3-1-3.md
├── wcag-3-1-4.md
├── wcag-3-1-5.md
├── wcag-3-1-6.md
├── wcag-3-1.md
├── wcag-3-2-1.md
├── wcag-3-2-2.md
├── wcag-3-2-3.md
├── wcag-3-2-4.md
├── wcag-3-2-5.md
├── wcag-3-2.md
├── wcag-3-3-1.md
├── wcag-3-3-2.md
├── wcag-3-3-3.md
├── wcag-3-3-4.md
├── wcag-3-3-5.md
├── wcag-3-3-6.md
├── wcag-3-3.md
├── wcag-4-1-1.md
├── wcag-4-1-2.md
├── wcag-4-1-3.md
├── wcag-4-1.md
├── wcag-5-1.md
├── wcag-5-2-1.md
├── wcag-5-2-2.md
├── wcag-5-2-3.md
├── wcag-5-2-4.md
├── wcag-5-2-5.md
├── wcag-5-2.md
├── wcag-5-3-1.md
├── wcag-5-3-2.md
├── wcag-5-3.md
├── wcag-5-4.md
└── wcag-5-5.md
└── violations
├── abstract-roles.md
├── alt-color-diffs.md
├── areas-in-img-maps.md
├── ascii-art-alt.md
├── autocomplete-values.md
├── autoplaying-media.md
├── autoplaying-sound.md
├── avoid-blink.md
├── background-contrast.md
├── banner-as-body-descendant.md
├── blank-th-elements.md
├── button-link-text.md
├── captions-in-layout-tables.md
├── character-key-shortcuts.md
├── color-contrast.md
├── color-specification.md
├── complementary-as-body-descendant.md
├── complete-captions.md
├── content-formats.md
├── content-hoverable.md
├── content-identification-shape-location.md
├── content-meaning-through-css.md
├── contentinfo-as-body-descendant.md
├── css-faux-headings.md
├── description-equality.md
├── dynamic-images.md
├── element-zoom.md
├── emphasized-text.md
├── empty-heading.md
├── event-handler-activation.md
├── faux-links.md
├── faux-lists.md
├── focus-removed.md
├── glyphs-require-alt.md
├── grouped-form-controls.md
├── h1-missing.md
├── h1-multiple.md
├── hidden-interactive-elements.md
├── hidden-tooltip-content.md
├── icon-only.md
├── icon-zoom.md
├── iframe-title-unique.md
├── iframe-title.md
├── ignore-decorative-images.md
├── incorrect-page-title.md
├── index.md
├── input-character-counts.md
├── interactive-datepicker.md
├── interactive-focus.md
├── interactive-keyboard.md
├── interactive-tabs.md
├── invalid-interactive.md
├── invalid-lists.md
├── invalid-roles.md
├── keyboard-nav-scrollable-content.md
├── keyboard-nav-typeahead.md
├── labels-in-forms.md
├── linearize-table.md
├── link-name.md
├── link-title.md
├── links-as-text.md
├── main-as-body-descendant.md
├── main-landmark-exists.md
├── meta-redirect-time-limit.md
├── meta-refresh.md
├── missing-alt-attribute.md
├── missing-bypass-block.md
├── missing-page-title.md
├── multiple-labels.md
├── multiple-landmarks.md
├── nested-interactive.md
├── no-background-image-text.md
├── no-blink-without-pause.md
├── no-blink.md
├── no-obsolete-element-use.md
├── no-presentational-interactive.md
├── no-presentational-semantics.md
├── non-conforming-page.md
├── non-text-contrast-ratio.md
├── only-one-banner.md
├── only-one-contentinfo.md
├── only-one-main.md
├── orientation-lock.md
├── orientation-message.md
├── pop-ups.md
├── positive-tabindex.md
├── pre-tables.md
├── pseudo-content.md
├── reflow-content.md
├── required-and-error-fields.md
├── required-input-fields.md
├── search-result-announcements.md
├── select-accessible-name.md
├── semantic-markup-relationships.md
├── server-side-image-maps.md
├── sync-media-with-more-info.md
├── sync-media-with-text-alt.md
├── tab-markup.md
├── table-captions.md
├── table-headers-content.md
├── table-headers-markup.md
├── table-titles.md
├── text-as-headings.md
├── text-form-controls.md
├── text-justified.md
├── text-resized.md
├── text-spacing.md
├── text-zoom.md
├── th-in-layout-tables.md
├── unique-landmarks.md
├── user-controlled-focus.md
├── valid-alt-text.md
├── valid-dd-dt-elements.md
├── valid-dl-elements.md
├── viewport-unit-use.md
├── whitespace-for-layout.md
├── whitespace-for-tables.md
└── whitespace-within-word.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .vitepress/dist
2 | .vitepress/cache
3 | node_modules
4 |
5 | .DS_Store
--------------------------------------------------------------------------------
/.vitepress/theme/index.js:
--------------------------------------------------------------------------------
1 | // https://vitepress.dev/guide/custom-theme
2 | import { h } from 'vue'
3 | import DefaultTheme from 'vitepress/theme'
4 | import TagLinks from './../../components/TagLinks.vue'
5 | import './style.css'
6 |
7 | /** @type {import('vitepress').Theme} */
8 | export default {
9 | extends: DefaultTheme,
10 | Layout: () => {
11 | return h(DefaultTheme.Layout, null, {
12 | // https://vitepress.dev/guide/extending-default-theme#layout-slots
13 | })
14 | },
15 | enhanceApp({ app, router, siteData }) {
16 | app.component('TagLinks', TagLinks)
17 | // ...
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | I'll keep it simple. There's one expectation: be kind.
4 |
5 | Contributions, questions, and constructive criticism are welcome. Rudeness and other foolishness will simply not be tolerated. This project should _only_ be used for the purposes already otherwise stated in the documentation.
6 |
7 | Anyone who contributes to this project deserves to be recognized and should add themselves in the `package.json` file as a contributor of the project.
8 |
9 | If you have any questions, please file an issue in this repository and I will respond as quickly as I am able.
10 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Melanie Sumner
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/automated-tools/accessibility-insights.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Accessibility Insights"
3 | category: "Browser Extension"
4 | description: "A browser extension that helps developers find and fix accessibility issues in web apps and sites."
5 | link: "https://accessibilityinsights.io/downloads/"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/accesslint-screenreaders.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "AccessLint/screenreaders"
3 | category: "AT Automation"
4 | description: "Screen reader automation tools by AccessLint, including VoiceOver.js and Auto-VO."
5 | link: "https://github.com/AccessLint/screenreaders"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/accesslint.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "AccessLint"
3 | category: "Code Linter (Static)"
4 | description: "AccessLint brings automated web accessibility testing into your development workflow. When a pull request is opened, AccessLint reviews the changes and comments with any new accessibility issues, giving you quick, timely, and targeted feedback, before code goes live."
5 | link: "https://github.com/marketplace/accesslint"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/alfa.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "alfa"
3 | category: "Testing Engine"
4 | description: "Suite of open and standards-based tools for performing reliable accessibility conformance testing at scale."
5 | link: "https://github.com/Siteimprove/alfa"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/andi.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "ANDI"
3 | category: "Browser Extension"
4 | description: "ANDI (Accessible Name & Description Inspector) is a free open-source tool that can be used to test websites for conformance to the Web Content Accessibility Guidelines (WCAG) 2.0 Level A and AA success criteria."
5 | link: "https://www.ssa.gov/accessibility/andi/help/install.html"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/arc.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "ARC"
3 | category: "Browser Extension"
4 | description: "Single-page, on-demand, accessibility testing tool."
5 | link: "https://www.tpgi.com/arc-platform/arc-toolkit/"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/assistive-webdriver.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Assistive-Webdriver"
3 | category: "AT Automation"
4 | description: "Assistive-Webdriver is a tool to automate end-to-end web application tests with a screen reader."
5 | link: "https://github.com/AmadeusITGroup/Assistive-Webdriver"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/axe-core-react.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "@axe-core/react"
3 | category: "Testing Library"
4 | description: "Test your React application with the axe-core accessibility testing library. Results will show in the Chrome DevTools console."
5 | link: "https://github.com/dequelabs/axe-core-npm/tree/master/packages/react"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/axe-core.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "aXe-core"
3 | category: "Testing Engine"
4 | description: "A accessibility testing engine for JavaScript."
5 | link: "https://github.com/dequelabs/axe-core"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/axe-devtools.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "aXe DevTools"
3 | category: "Browser Extension"
4 | description: "A browser extension that anyone can use to help identify and resolve common accessibility issues."
5 | link: "https://www.deque.com/axe/browser-extensions/"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/editoria11y.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Editoria11y"
3 | category: "Testing Tool"
4 | description: "A user-friendly automatic content accessibility checker."
5 | link: "https://editoria11y.princeton.edu/"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/ember-a11y-testing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "ember-a11y-testing"
3 | category: "Testing Library"
4 | description: "Accessibility testing for Ember apps; provides middleware that allows the browser to talk to the node process running the tests via testem."
5 | link: "https://github.com/ember-a11y/ember-a11y-testing"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/ember-template-lint.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "ember-template-lint"
3 | category: "Code Linter (Static)"
4 | description: "Linting for your handlebars templates. Supports custom and shared configs, todo utils, and auto-fixes."
5 | link: "https://github.com/ember-template-lint/ember-template-lint"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/equal-access-accessibility-checker-engine.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "equal-access accessibility-checker engine"
3 | category: "Testing Engine"
4 | description: "IBM accessibility rules and evaluation engine to help users to check their web pages to identify and report accessibility issues. Part of the IBM Equal Access Accessibility Checker suite."
5 | link: "https://github.com/IBMa/equal-access/blob/master/accessibility-checker-engine/README.md"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/equal-access-accessibility-checker-extension.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "equal-access accessibility-checker extension"
3 | category: "Browser Extension"
4 | description: "Adds automated accessibility checking capabilities to Firefox and Chromium browsers. Part of the IBM Equal Access Accessibility Checker suite."
5 | link: "https://github.com/IBMa/equal-access"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/equal-access-accessibility-checker-testing-libraries.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "equal-access accessibility-checker testing libraries"
3 | category: "Testing Library"
4 | description: "Automated accessibility testing for Node.js-based, Cypress, or Karma test runners. Part of the IBM Equal Access Accessibility Checker suite."
5 | link: "https://github.com/IBMa/equal-access"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/eslint-plugin-jsx-a11y.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "eslint-plugin-jsx-a11y"
3 | category: "Code Linter (Static)"
4 | description: "Accessibility Linting for your React applications."
5 | link: "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/eslint-plugin-lit-a11y.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "eslint-plugin-lit-a11y"
3 | category: "Code Linter (Static)"
4 | description: "Accessibility linting plugin for lit-html. Most of the rules are ported from eslint-plugin-jsx-a11y, and made to work with lit-html templates and custom elements."
5 | link: "https://github.com/open-wc/open-wc/tree/master/docs/docs/linting/eslint-plugin-lit-a11y"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/eslint-plugin-vuejs-accessibility.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "eslint-plugin-vuejs-accessibility"
3 | category: "Code Linter (Static)"
4 | description: "Accessibility Linting for your Vue applications."
5 | link: "https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/guidepup.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Guidepup"
3 | category: "AT Automation"
4 | description: "Screen reader driver for test automation, including VoiceOver and NVDA."
5 | link: "https://www.guidepup.dev/"
6 | ---
7 |
--------------------------------------------------------------------------------
/automated-tools/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Automated Tools
3 | editLink: true
4 | lastUpdated: true
5 | sidebar: false
6 | aside: false
7 | ---
8 |
9 |
26 |
27 | # {{ $frontmatter.title }}
28 |
29 |
30 |
31 |
32 |
These are some of the automated tools available, no endorsement implied. If you know of one that exists but is not listed here, please file an issue and let us know!