Accessibility testing

Accessibility that only gets better.

Turn on accessibility checks today, even with thousands of known issues. Happo tracks the ones you have, stops new ones at the pull request, and shows you the number going down.

Included on every plan, the free one too.

Open accessibility violations

Main branch, end of each day

142 open

  • 0 critical
  • 18 serious
  • 71 moderate
  • 53 minor
Open accessibility violations by day
DayOpen violations
Day 12,184
Day 22,184
Day 31,720
Day 41,702
Day 51,215
Day 61,190
Day 71,190
Day 81,190
Day 9860
Day 10802
Day 11760
Day 12540
Day 13516
Day 14516
Day 15516
Day 16380
Day 17301
Day 18262
Day 19198
Day 20160
Day 21160
Day 22142
Illustrative numbers, starting today. 2,184 open violations the day a team turns on Happo, 142 three weeks later. Fixing one shared component clears hundreds at once, and not one day does the count go up.

The rollout

Day one: 2,184 issues. Now what?

That’s the kind of number you get the first time you check a big app. Fix them all first, and the checks never ship. Block every pull request on them, and the checks get turned off by Friday. Happo takes a third way.

  1. Day one

    Turn it on

    Every violation you already have is recorded, and none of them block anyone. Your team keeps shipping the same afternoon.

  2. Every pull request

    New ones stop at review

    A change that adds a violation blocks approval, with the element outlined on a screenshot next to the visual diffs. The fix happens while the code is still fresh.

  3. Every week after

    The number only goes down

    Fix a shared component and hundreds of issues go at once. Violations are graded by impact and charted over time, for your team and for anyone who asks.

In the review

What broke, where, and how to fix it.

A new violation lands in the same comparison as the visual diffs, so one review covers both. Happo points out the element on a screenshot of the page, and tells you the rule, how serious it is, and what to change.

TeamSettings / defaultAccessibility
The part of the page with accessibility violations

Pick a numbered element to see what is wrong with it.

  • Pointed out on the page

    Every failing element is outlined and numbered on a screenshot, in the color of its impact: critical, serious, moderate, or minor. Pick one to see what’s wrong with it. No more working out which button a selector means.

  • New is new

    The low-contrast text was there before this pull request, so it doesn’t block it. The missing label and button name are new, so they do.

  • WCAG 2.0 and 2.1, A and AA

    Labels, contrast, link names, alt text, and dozens more rules, checked in a real browser with your styles applied. Turn off a rule that doesn’t apply to you.

Screen readers

Changes you can’t see, but your users hear.

Some regressions never change a pixel. Happo snapshots the accessibility tree of each component, the page as a screen reader presents it, and shows you when that changes too.

TripHeader / defaultAccessibility tree
- navigation "Trips":
  - link "Upcoming"
  - link "Past"
- main:
Before:   - heading "Lisbon, 3 nights" [level=1]
After:   - heading "Lisbon, 3 nights" [level=2]
  - text: Apr 12 to 15, 2 guests
Before:   - button "Cancel trip"
After:   - button

The screenshot looks the same, and no rule fails. But a screen reader now announces a heading one level down and a button with no name. Happo shows it as a diff, so someone decides whether it was meant.

  • A button that loses its name
  • A heading that drops a level
  • A list that stops being a list
  • A label that no longer points at its field

Setup

One more target. No new tests.

If you already run Happo with Storybook, Playwright, or Cypress, accessibility testing is one more target in your config. Every snapshot you take is checked from then on.

happo.config.ts
export default defineConfig({
  targets: {
    chrome: { type: 'chrome', viewport: '1024x768' },
    accessibility: {
      type: 'accessibility',
      viewport: '1024x768',
    },
  },
});
  • Included on every plan. Most tools sell accessibility testing separately. Each accessibility snapshot counts as one snapshot.
  • Ready for the European Accessibility Act. The chart over time is the reporting you’ll want. What the EAA means for you

FAQ

Questions, answered

Will my existing violations block pull requests?

No. Violations that were already on your base branch are tracked, not blocked. Only a violation a pull request adds blocks its approval, so nobody gets stuck on a problem they didn’t cause.

How do I find the element a violation is about?

Happo shows you. When a snapshot’s violations are on elements it can point at, it comes with a screenshot of the part of the page they are in, with every failing element outlined and numbered. Switch to the list, and each element has a close-up next to its selector and HTML. Agents reviewing through Happo’s MCP server get the same picture.

Do I have to write new tests?

No. Add an accessibility target to your Happo config, and every story or screenshot you already take is checked too.

Which rules and standards does Happo check?

Happo checks against WCAG 2.0 and 2.1 at levels A and AA: form labels, color contrast, link names, alt text, ARIA attributes, and dozens more. You can turn off a rule or narrow the run to the levels you care about.

Does accessibility testing cost extra?

No. It’s included on every plan, the free one too. Each accessibility snapshot counts as one snapshot toward your plan. See pricing.

Does this replace a manual accessibility audit?

No, and no automated tool can. Automated checks catch a large share of common problems on every change, which keeps an audit’s fixes from coming undone. Keep testing with real people and assistive technology too.

Start where you are.

Turn on accessibility checks this afternoon, issues and all. From your next pull request on, the number only goes down.

Start free with 5,000 snapshots a month. No credit card needed.

Need help?