Open source · MIT · v1.1.1
Accessibility Devkit
Accessibility belongs in the build while the interface is still easy to change. It makes the path from intention to outcome shorter and more forgiving.
Start in a minute
Choose the shortest path to the outcome you need. Each route stands on its own.
Run a check
Check contrast, scan local HTML, review readability, or assess a timing policy from the command line.
Import a utility
Add one portable function or one focused browser package. No overlay and no hosted service.
Add the review workflow
Give a compatible coding tool the evidence and verification guidance behind the packages.
Run a useful check
The Node and Python commands share the same interface, JSON contract, findings, and exit codes. Manual checks never fail CI.
Node 22+
npx @accessibility-devkit/cli contrast '#595959' '#ffffff' npx @accessibility-devkit/cli scan ./index.html --profile all
Python 3.11+
pipx run accessibility-devkit contrast '#595959' '#ffffff' pipx run accessibility-devkit scan ./index.html --profile cvi --format json
Live URL? Use Deque's maintained browser runner: npx @axe-core/cli https://example.com.
A clean scan means the covered checks found nothing. It does not mean the interface is accessible.
Import a utility
The portable core has no runtime dependencies. Browser packages stay focused, so a project can install only the behavior it needs.
JavaScript
npm install @accessibility-devkit/core
import { getContrastRatio, meetsContrastThreshold } from '@accessibility-devkit/core';
const ratio = getContrastRatio('#595959', '#ffffff');
const passes = meetsContrastThreshold('#595959', '#ffffff', 'AA', 'normal');
TypeScript
import { assessTimeLimit, type TimeLimitPolicy } from '@accessibility-devkit/core';
const policy: TimeLimitPolicy = { adjustmentMultiplier: 10 };
console.log(assessTimeLimit(policy));
Python
from accessibility_devkit import get_contrast_ratio
ratio = get_contrast_ratio("#595959", "#ffffff")
Profiles that need more than a scan
Specialized profiles preserve the difficult questions instead of squeezing them into a score or a universal preset.
| Profile or need | Useful automation | Still verify |
|---|---|---|
| Switch access | Focus-order risks, pointer-only clues, and timing-policy boundaries | System Switch Control, scan speed, dwell, repeat filtering, and task completion |
| CVI | Exact WCAG checks when the source supplies measurable evidence | The individual's profile, complexity, salience, clutter, fatigue, motion, and multisensory alternatives |
| Color vision | Four simulation modes and exact contrast math | Meaning beyond color, real states, and individual perception |
| Motion and flash | Reduced-motion handling and flash-frequency screening | Luminance, affected area, saturated red, vestibular comfort, and context |
| Cognitive access | Timing policies, blocked paste, repeated entry, undo, and English readability clues | Comprehension, recovery, pacing, attention, fatigue, and real task completion |
CVI, color-vision deficiency, low vision, and photophobia describe different needs. The Devkit keeps their language and verification separate.
Package map
Ten npm packages ship ECMAScript modules, CommonJS, TypeScript declarations, source maps, a README, and the MIT license.
Portable core and command line
core
Contrast, English readability analysis, flash-frequency screening, and timing-policy assessment.
cli
Conservative static scans and the shared runtime-neutral report contract.
Focused browser packages
audit
axe-core browser audits and jsx-a11y's maintained flat configuration.
components
Focus traps, roving tabindex, dialogs, menus, skip links, and live announcements.
accommodations
Typography preferences, text-spacing override tests, contrast, and color-vision simulation.
motor
Target measurement, pointer cancellation, drag alternatives, dwell, and repeat filtering.
cognitive
Timing policy, session helpers, repeated-entry memory, authentication, and undo.
language
English readability clues, long-sentence flags, complex words, and abbreviations.
media
Captions, transcripts, autoplay-audio review, and media controls.
motion
Reduced-motion behavior, safe scrolling, and flash-frequency screening.
Add the review workflow
The review source is plain Markdown in skills/accessibility/. Load that folder with any compatible skill loader. Tool-specific marketplaces are shortcuts, not requirements.
Portable source
git clone https://github.com/actually-useful-ai/accessibility-devkit.git
Keep SKILL.md beside its references/ folder. Start with the general review, then add a specialist only when the product calls for one.
Marketplace shortcuts
Claude Code
/plugin marketplace add actually-useful-ai/accessibility-devkit /plugin install accessibility@accessibility-devkit
Codex
Import .claude-plugin/marketplace.json in the Plugins Directory, choose Accessibility, and start a fresh task.
Evidence before claims
Reports separate detected findings from manual checks. They carry severity, certainty, evidence level, WCAG references where applicable, remediation, and a verification step. There is no synthetic accessibility score.
Automation
Use source checks and browser automation to find barriers. Preserve incomplete results and review the separate manualChecks collection.
Interaction
Complete the task with keyboard-only navigation, visible focus, supported screen readers, zoom and reflow, forced colors, and reduced motion.
Specialized input
Use real Switch Control for switch-critical paths. Choose dwell and repeat timing with the person, not a universal default.
Human review
Test comprehension, comfort, recovery, and task completion with the people the work is meant to serve whenever practical.
Moving from v1.0
v1.1 uses names that describe what each function can prove.
| v1.0 | v1.1 |
|---|---|
meetsWCAG | meetsContrastThreshold |
findAccessibleColor | findNearestPassingColor |
simulateColorBlindness | simulateColorVisionDeficiency |
applyDyslexiaFriendlyFont | applyTypographyPreference with caller-supplied values |
applyTextSpacing | applyTextSpacingTest, including paragraph spacing and restore |
meetsTextSpacing | Removed. Author values alone cannot establish WCAG 1.4.12 conformance. |
isUnsafeFlashRate | exceedsFlashFrequencyLimit; frequency is one part of flash review |
Release and security
Accessibility Devkit v1.1.1 is MIT licensed and maintained by Luke Steuber. Review the source, report a vulnerability privately, or read the complete runtime notices.