WCAG 2.1 AA Legal Baseline Audit for templates

Audits HTML, JSX, Vue, Twig, Blade, ERB and Razor markup against the 24 WCAG 2.1 Level AA checks that 28 CFR 35.200 and EN 301 549 actually name - not WCAG 2.2.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker HubApify (audit live URLs)
ext install ReadyStack.wcag21-aa-legal-baseline-audit
npx @readystack/wcag21-aa-legal-baseline-audit <file>
npx @readystack/wcag21-aa-legal-baseline-audit --mcp

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 24 rules WCAG 2.1 AA Legal Baseline Audit for templates checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the full version $29

Audits HTML, JSX, Vue, Twig, Blade, ERB and Razor markup against the 24 WCAG 2.1 Level AA checks that 28 CFR 35.200 and EN 301 549 actually name - not WCAG 2.2.

One payment, one licence key for this tool. The key is shown right after payment.

A consultancy WCAG audit is $100-$250 per page (Accessible.org published pricing, 2026); this reads every template in the repository for $29 once.

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

Six lines that fail the WCAG 2.1 AA baseline your deadline names

Six lines in this county permits template fail WCAG 2.1 AA - US county and city web teams, due 26 April 2027.

  1: 3.1.1 Language of Page (A) - <html> has no lang attribute, so the screen reader guesses the voice.
  2: 1.4.4 Resize Text (AA) - user-scalable=no blocks pinch zoom. This is an AA failure, not a preference.
  4: 1.1.1 Non-text Content (A) - <img> has no alt. Use alt="" only when the image is decorative.
  5: 1.3.5 Identify Input Purpose (AA) - no autocomplete token. This criterion is NEW in WCAG 2.1, so WCAG 2.0-era checkers never report it.
  6: 2.1.1 Keyboard (A) - a click handler on a <div>/<span> cannot be reached by Tab.
  7: 4.1.2 Name, Role, Value (A) - <iframe> has no title. The frame list announces it as "frame".
—— 6 ——

The whole file it read - nine lines, unedited:

<html>
<head><meta name="viewport" content="user-scalable=no"></head>
<body>
  <img src="/img/county-seal.png">
  <input type="email" id="em" name="email">
  <div onclick="payBill()">Pay a bill</div>
  <iframe src="https://maps.example/embed"></iframe>
</body>
</html>

No page was rendered; every finding came out of the source.

The version nobody checks

Ask an assistant which standard applies and it answers WCAG 2.2, because that is the current W3C recommendation. That is the wrong answer for a legal baseline. 28 CFR 35.200(b) names WCAG 2.1 Level AA, and in the EU the presumed-conformance standard behind the European Accessibility Act, EN 301 549 V3.2.1, names WCAG 2.1 Level AA as well. Version 4.1.1 of EN 301 549 will move to WCAG 2.2, but it is not the harmonised standard yet.

A team following the assistant chases 2.2-only criteria that carry no obligation and walks straight past line 5 above: 1.3.5 Identify Input Purpose, an AA criterion that is new in WCAG 2.1, which every 2.0-era checker in the toolchain silently ignores.

The dates moved, and the moved dates are the ones that bind

On 20 April 2026 the Department of Justice issued an interim final rule extending the Title II compliance dates by one year. Public entities serving 50,000 or more people now have until 26 April 2027. Entities under 50,000, and all special district governments, have until 26 April 2028. The technical standard did not move: it is still WCAG 2.1 Level AA. Articles written before April 2026, and the models trained on them, still give the old dates.

Why the checker on your laptop cannot see this

Browser extensions and page scanners test a rendered page. A county site is hundreds of Twig, Blade, ERB and Razor templates, most of which never render outside a request with real data. The 6 failures above live in the markup, one line each, and they are readable there long before anyone can load the page.

So the audit belongs in the editor. This one reads markup as source: 24 checks covering 13 success criteria, each finding labelled with its WCAG 2.1 criterion number and level, on HTML, JSX, Vue, Twig, Blade, ERB and Razor alike.

Mechanical means mechanical. A positive tabindex becomes tabindex="0". A zoom lock becomes a cap that reaches 200%. Anything needing human judgement - what the alt text on line 4 should say, what the frame on line 7 is for - is listed and left alone, because a tool that invents alt text produces a page that passes a checker and still fails a person.

Free, and what a licence adds

Auditing the file you have open is free and complete: every one of the 24 checks, real line numbers, criterion numbers, nothing withheld. A licence adds scale rather than answers - every template in the repository in one pass, the findings exported as CSV, JSON or HTML for procurement and counsel, mechanical fixes applied in place, and a re-audit on every save. That is $29 once. An audit firm bills $100-$250 a page for the same reading.

Run it against one template you already shipped. If it finds nothing, you have your answer for free.

15 seconds — what it actually does

Questions people ask

What does this actually check?

It reads template markup line by line and reports every failure of the 24 WCAG 2.1 Level A and AA checks it ships with, naming the success criterion number and level for each one. It works on HTML, JSX, Vue, Twig, Blade, ERB and Razor source, so it reaches templates that never render in a browser checker.

Who is this for?

Web teams at US state, city, county and special-district government bodies, and the agencies and vendors who build for them. Also EU product teams, because the European Accessibility Act has applied since 28 June 2025 and its presumed-conformance standard, EN 301 549 V3.2.1, names the same WCAG 2.1 Level AA baseline.

Why not just use a free checker or ask an AI assistant?

A free checker needs a rendered page, so your Twig, Blade, ERB and Razor templates are invisible to it. An AI assistant answers from WCAG 2.2, the current W3C version, but 28 CFR 35.200(b) and EN 301 549 V3.2.1 both name WCAG 2.1 Level AA. Chasing 2.2-only criteria while missing 2.1 ones is the common, expensive mistake.

What is free and what needs a licence?

Free audits the open template completely: all 24 checks, real line numbers, criterion numbers, nothing withheld. A licence adds scale, not answers - auditing every template in the repository at once, exporting the findings as CSV, JSON or HTML, mechanical quick fixes, and re-auditing on every save.

What would this cost otherwise?

A consultancy accessibility audit runs about $100 to $250 per page at published 2026 rates, and a small-business engagement commonly starts near $3,000. This extension is $29 once, reads every template in the repository, and re-reads them free every time the markup changes. It does not replace a human audit; it removes the findings a human would bill you to list.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. WCAG 2.1 AA Audit - HTML template legal baseline (ADA, EN 30 checks the file you open against 24 rules from a rule set dated 2026-09-20, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Embed this tool on your site (free)

Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.

 All embeddable tools

For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →