tactual-dev/Tactual Accessibility Analysis

Measures how hard web content is for screen-reader users to find, reach, and operate.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
urlURL to analyzeyes
profileAT profile ID (generic-mobile-web-sr-v0, nvda-desktop-v0, jaws-desktop-v0, voiceover-ios-v0, talkback-android-v0)nogeneric-mobile-web-sr-v0
devicePlaywright device name for emulation (e.g., 'iPhone 14')no""
formatOutput format: json, markdown, console, sarifnosarif
max-findingsMax detailed findings in the report (CLI --top)no""
min-severityMinimum severity to report: severe|high|moderate|acceptable|strongno""
summary-onlyOutput only summary stats (~500 bytes)nofalse
exploreExplore hidden branches (menus, tabs, dialogs, disclosures)nofalse
explore-depthMax exploration depth (CLI default: 3)no""
explore-budgetMax exploration actions (CLI default: 50)no""
explore-max-targetsMax accumulated targets before stopping exploration (CLI default: 2000)no""
explore-timeoutTotal exploration timeout in milliseconds; includes probe time when combined with probe (CLI default: 60000)no""
allow-actionSpace-separated glob patterns for controls explorable despite safety policyno""
excludeSpace-separated patterns to exclude targets by name/roleno""
exclude-selectorSpace-separated CSS selectors to exclude from captureno""
scope-selectorSpace-separated CSS selectors that define subtree(s) to capture, score, and probeno""
focusSpace-separated landmarks to focus analysis onno""
suppressSpace-separated diagnostic codes to suppressno""
probeOpt-in runtime keyboard probes for interactive targets (focus, activation, Escape recovery, Tab trapping). Adds ~30-60s.nofalse
probe-budgetMaximum targets for generic probe (overrides --probe-mode)no""
probe-modeProbe depth preset: fast | standard | deepnostandard
probe-selectorSpace-separated CSS selectors that narrow probing without changing capture/scoringno""
entry-selectorCSS selector for a trigger to activate before capture/probeno""
goal-targetExact-ish target id, name, role, kind, or selector hint for goal-directed probingno""
goal-patternGlob pattern matched against target id/name/role/kind/selector for goal-directed probingno""
probe-strategyProbe strategy: all | overlay | composite-widget | form | navigation | modal-return-focus | menu-patternnoall
validateRun @guidepup/virtual-screen-reader against the captured DOM for predicted-vs-validated step comparison. Requires jsdom + @guidepup/virtual-screen-reader.nofalse
validate-max-targetsMaximum findings to validate when validate=true (CLI default: 10)no""
validate-strategyNavigation strategy for the virtual SR: linear | semanticno""
check-visibilityRun per-icon visibility probe across profile-declared color-scheme × forced-colors modes. 'true' to force-enable, 'false' to disable, empty to defer to profile default (desktop AT profiles declare the matrix, mobile/generic do not).no""
detect-routesRecord SPA route changes (history.pushState/replaceState, popstate, hashchange) that fire during analysis. Set 'true' to enable; emits an spa-route-changes info diagnostic when any are observed.no""
descend-framesDescend into child iframes during capture (capped at 20 frames). Set 'true' to enable; appends frame targets with frame-URL attribution, can recover many Chromium cross-origin OOPIFs via CDP, and emits a frames-descended info diagnostic.no""
auto-scrollScroll to the bottom of the page in steps before capture so lazy/infinite-scroll content materializes (capped at 20 scrolls / 30 s). Set 'true' to enable; emits an auto-scrolled info diagnostic.no""
dismiss-bannersBest-effort dismiss of cookie/consent/GDPR banners before capture. Set 'true' to enable; clicks safe-accept buttons and skips Decline/Manage/Customize. Emits a banners-dismissed info diagnostic.no""
probe-hoverHover candidate triggers to surface hover-only popups/tooltips with no attribute hint. Default budget 10 candidates; adds ~7-8 s. Captures discovered content as _hoverContent on the trigger target.no""
walk-tab-orderPress Tab up to 30 times and record the focused sequence so the analyzer can flag positive-tabindex anti-patterns and focus traps. Adds ~1-3 s.no""
diff-viewportsCapture the URL at desktop (1280×800) and mobile (375×667) viewports and diff target/landmark/heading lists. Surfaces a viewport-divergence diagnostic when content uses display:none on small screens. Adds ~3-5 s.no""
baselinePath to a previously-saved analysis JSON. Diffs against current run; prints regression summary.no""
fail-on-regressionExit non-zero when N or more findings regressed vs baseline. Set '1' (or higher) with baseline=path.json to enable a strict CI gate.no""
fail-belowFail if average score is below this threshold (0 to disable)no0
channelBrowser channel: chrome, chrome-beta, msedge. Uses the installed browser instead of bundled Chromium.no""
stealthApply anti-bot-detection defaults (realistic UA, override navigator.webdriver, spoof plugins/languages). Pair with channel=chrome for Cloudflare-protected sites.nofalse
user-agentOverride the User-Agent string sent with requestsno""
headlessRun browser in headed mode (CLI --no-headless). Set to 'false' for headed, anything else for headless.notrue
timeoutPage load timeout in millisecondsno30000
wait-for-selectorCSS selector to wait for before capturing (essential for SPAs)no""
wait-timeAdditional milliseconds to wait after page loadno""
storage-statePath to Playwright storageState JSON for authenticated pagesno""
comment-on-prPost a summary comment on pull requests (requires GITHUB_TOKEN with pull-requests: write)nofalse
node-versionNode.js version to useno22
namedescription
average-scoreAverage accessibility score across all targets
result-filePath to the analysis result file