What it catches
- A label disappears from the focused field
- Focus lands in an unexpected place
- A status or alert is missing, changed, or reordered
Local-first / release check 01
Turn one critical signup, search, or form flow into a checked-in accessibility transcript. See the first focus or live-region divergence—without an accessibility score or hosted dashboard.
npm i -D screen-reader-smoke-test
Free, open source, no telemetry.
A small contract beats a vague score
The expected transcript is plain JSON. Your reviewer can understand it, your CI can enforce it, and your fixture values never appear in it.
import { defineConfig } from "screen-reader-smoke-test";
export default defineConfig({
name: "Signup confirmation",
url: "http://127.0.0.1:4173/signup",
steps: [
{ action: "fill", target: { label: "Email address" }, value: fixture.email },
{ action: "click", target: { role: "button", name: "Create account" } },
{ action: "wait", for: 250 }
]
});
npx playwright install chromiumnpx announce-check --updatenpx announce-checkLocal HTML report
Try each first-class state. The real CLI writes this report beside your test run, with no upload and no account.
✓ Contract matched
3 / 3 eventsPrecise about its limits
Keep the human check. Use Announce Check to protect the contract on every commit, then verify the release candidate with a real screen reader.
Before the release branch