← ScanA11y

Figma Plugin

Audit the frames and layers in your Figma file against WCAG 2.2, jump to any finding on canvas, and generate a full report — one 16:9 frame per finding, with a screenshot and a recommendation — written directly into the file. No login, no history stored, no network calls.

scana11y-figma-plugin.zip

Not on Figma Community yet — install as a local development plugin (free, takes under a minute, Figma desktop app required).

Download .zip
Install it
  1. Download the plugin

    Download the zip below. It contains the built plugin — no build step needed.

  2. Unzip it

    Extract the zip to a folder you'll keep around (Figma reads the plugin from this folder every time you run it).

  3. Open Figma desktop

    This install flow needs the Figma desktop app — it isn't available from figma.com in a browser.

  4. Import the plugin

    Menu → Plugins → Development → Import plugin from manifest… — then select manifest.json inside the unzipped folder.

  5. Run it

    Open any file, select what you want audited (or nothing, for a whole-page audit), then Plugins → Development → ScanA11y — Accessibility Auditor.

What it checks

The same WCAG 2.2 compliance matrix the website uses — but a static design file has no live DOM, keyboard, or focus, so only what's actually verifiable from a Figma file runs as a live check: text contrast, touch-target size, missing image descriptions, text boxes at risk of clipping, and heading-hierarchy signals. Everything else (keyboard, focus, live regions, real reading order, screen-reader announcement) shows as manual — the plugin says so rather than a fabricated pass.

Why local install

Publishing to Figma Community is free (no developer fee, unlike the Chrome Web Store) but still goes through review. Loading it locally is immediate and gives you the exact same plugin — Figma just shows it under "Development" instead of the Community tab, and you rebuild manually after an update instead of it auto-updating.

Privacy

Everything runs inside Figma's plugin sandbox against the file already open on your machine. The manifest explicitly denies all network access (networkAccess.allowedDomains: ["none"]) — nothing is sent anywhere.