Skip to content
| Marketplace
Sign in
Visual Studio Code>Testing>Swipewalk: accessibility findings in your editorNew to Visual Studio Code? Get it now.
Swipewalk: accessibility findings in your editor

Swipewalk: accessibility findings in your editor

Preview

Swipewalk

| (0) | Free
Shows the accessibility findings from a saved Swipewalk scan on the source lines they likely come from. Read-only, local only, no telemetry.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Swipewalk for VS Code

See the accessibility findings from a saved Swipewalk scan on the source lines they likely come from, without leaving your editor.

Swipewalk scans a running Android or iOS app (with first-class .NET MAUI support) and writes its findings to a results.json file. This extension reads that file. Hover a marked line to see the problem, who is affected, the WCAG 2.2 criterion, the confidence of the match and the suggested fix.

Preview. This is the first version. Automated checks find only some accessibility issues, so a run with no findings has not been shown to meet any standard. Manual testing with assistive technology is still required.

What it never does

  • It only reads a saved run. It never changes your code, never edits the run, and never starts a scan or contacts a device, apart from unpacking a shared file into its own storage.
  • It is local only: no network calls, no telemetry, nothing sent anywhere.
  • It never tells you a project is or is not compliant. Findings are possible issues found by automated checks.

Get started

  1. Scan your app with Swipewalk and point the scan at your project folder so findings can be matched to source: swipewalk scan --platform android --package com.example.app --source <your project folder> (--source is an option of the command-line tool's scan and record; the desktop app's New scan has the same as its optional App source folder. swipewalk export --source adds lines only to the exported files, not to the saved run this extension reads). Without a source folder you still get a findings list, but no lines are marked.
  2. Open your project folder in VS Code.
  3. Run Swipewalk: Open run… and choose a run. The list shows every run it can find in one place, grouped by app and version, newest first, each labelled with where it was found, and nothing is chosen for you. To open something the list does not show, such as a .swipewalk file a teammate sent you, choose "Choose a file or folder…" or run Swipewalk: Open run from a file or folder….

Markers appear in the files the findings map to, and the Swipewalk view in the activity bar lists everything.

What you get

Markers in your files. Each mapped line shows in the editor and the Problems panel, from source "Swipewalk". The level says what kind of result it is, never how serious it is, and no result is ever an error:

Result Shown as
Possible WCAG issue, exact match Warning
Possible WCAG issue, likely match Information
Needs a person to review Information
Platform advisory (found against an Apple or Android guideline, not a WCAG failure) Information

Every line marked by default is at least Information so it also appears in the Problems panel; VS Code lists hints only as faint dots in the editor. A likely match is a best guess, so a possible WCAG issue is shown one level lower than an exact match and every likely message says "Likely match". When Swipewalk could only narrow a finding to several candidate lines, no line is marked (none is known to be right); the candidates are listed in the Findings view, and you choose one. If you turn on swipewalk.showCandidatesAsHints, each candidate line gets a faint hint (editor only, not in the Problems panel).

A rich hover. Hover a marked line for the problem, who is affected, the criterion with a link to the W3C explanation, which laws and standards it is relevant to ("Relevant to ADA Title II, Section 508 and N more", worked out from the list saved in the run, as in the Swipewalk reports), how sure the match is and why, and the suggested fix. The code example appears only for an exact match, and is labelled an example, not a patch. Actions: show details and screenshot, open in report (for runs in your Desktop history), copy ticket text.

The Swipewalk view.

  • Run: which run is open, where it was found, when it was scanned, for a shared file its signature notice and what the sender wrote, and the reminder that Swipewalk only knows the screens in that run.
  • Findings: grouped by screen, check, source file or who is affected; filter by kind, exact or likely match, and team marks; search by any words. Select a finding to go to its line; the eye button opens its details.

The details page. The screenshot with the element outlined, the predicted screen reader text (predicted from the accessibility tree, not recorded), the source location and any candidate lines, the standard, the full list of laws and standards it is relevant to (grouped by region, with each official link, the laws chosen when the run was saved, "Laws that matter to me" in the desktop app or --my-laws, first within each region; reference information, not legal advice), whether a finding was seen in light or dark appearance or in portrait or landscape, and the suggested fix. Go to source and Copy ticket text are buttons at the top of the page, plus Open in report for runs in your Desktop history.

Status bar. Counts for the open run. Select it to show the findings.

Runs other people shared

A run can be saved as one .swipewalk file and sent by any means you already use. You can open one, a results.json, or an unpacked run folder.

Checked so far by unit tests: with .swipewalk files the tests build themselves, and with the shared test files made by Swipewalk's engine (good and hostile ones). The integration tests that open a real VS Code do not open shared files, and nobody has yet tried opening one by hand in a VS Code window.

Where the list looks. It combines runs from three places, plus anything you open by hand, and labels each one:

  • Desktop history: Swipewalk's default History folder on this computer. If you chose another location in the desktop app (History > Change location…), set swipewalk.historyFolder to the same folder.
  • Workspace: the accessibility/runs folder of your open project. Teams can commit .swipewalk files or unpacked run folders there and everyone finds them without setup.
  • Additional location: any folders you list in swipewalk.additionalRunLocations (absolute paths), for example a shared drive. Only the folders you list are searched, and only a few levels down.
  • Opened file: something you chose by hand.

If the same run turns up in more than one place, it is listed once: the copy that has screenshots, then the most recently shared one. Symbolic links inside those folders are never followed.

Opening a .swipewalk file. The file is checked before anything is used. It is refused if it is malformed, larger than your limit (swipewalk.maxRunFileSizeMb, 200 MB by default and never more than 2 GB), made of unsafe file names, unzips to far more than its size, or has any file that does not match the size and SHA-256 hash it lists. A file made by a newer Swipewalk opens with one short note when it can still be read, and is refused with the version you need when it cannot. The contents are unpacked into the extension's own storage, never into your project, and nothing in the file is ever run. The unpacked copy, including any screenshots, stays in VS Code's storage for this extension until you run Swipewalk: Remove opened copies of shared runs (it says how many copies and how much space, and asks first; a shared run that is open is closed; your .swipewalk files are not touched). Opening the same file again reuses its copy and says "Already opened"; a different file with the same run id is unpacked beside the earlier copy, never over it. A shared file never opens a report (a shared file carries none, and a file with an .html entry is refused), and runs found outside your Desktop history don't open their saved report either (including your own scan --out folders), as a safe default; the findings list shows the same findings, and the full report is in the Swipewalk desktop app.

The signature notice. A run can be signed. The Run view and a message say which of these applies. It is a notice, not a block: the run opens either way, and you can close it with Swipewalk: Close the run.

Notice What it means
Signed by a key you trust The signature is valid and the key is in your own trusted-keys list
Signed by a key listed in your project's team keys file The signature is valid and the key is only in the project's accessibility/team-keys file (read only in a folder you have trusted); you didn't trust it yourself
Signed, but the key (fingerprint XXXX-XXXX) isn't trusted yet The signature is valid, but you have not said you trust this key
Not signed There is no signature to show which key made the file or whether someone changed it after it was shared
Signed in a format this version can't check The file says a newer Swipewalk made it and its signature uses a format this version of the extension doesn't know. Treat it as not signed. Update the extension to check it
The file didn't match its signature The signature does not match the file's contents, or its signature file is damaged or claims a format a file from this version could not have

For the last three (not signed, did not match, or a format this version can't check) a message asks "Import this file anyway?" before the file is unpacked; Don't import (the first button; Escape or closing the message also chooses it) opens nothing. How this dialog behaves has not yet been tried in a real VS Code window.

A signature shows which key signed the file and that the file has not changed since. It does not show who the person is: check the key's full 64-digit fingerprint with its owner (hover the Signature row in the Run view to see it in 16 groups of 4; the short XXXX-XXXX form is only for recognising it), then trust it with the command line's swipewalk keys trust. It does not stop a recipient passing the screenshots on, and the file is not encrypted. Trusted keys are read from two places: the per-user list that swipewalk keys trust keeps (trusted-keys.json in Swipewalk's user folder), and the project's accessibility/team-keys file (one key fingerprint of 64 hexadecimal digits per line, then an optional label; # starts a comment), which is read only when you have trusted the folder (Workspace Trust) and only from the top of each workspace folder. Anyone who can change accessibility/team-keys can add a key to it, so review changes to that file like code. The extension only reads these lists; it does not add keys to them.

Read only. The extension never edits a run. Team marks inside a shared file are shown as the sender saved them, marked "in the shared file", and nothing is merged into your own marks. Text that came from the file (app name, messages, notes, who shared it) is cleaned of hidden characters and shown as plain text. What the sender wrote when sharing is shown as "Sender wrote: …"; Swipewalk does not check it.

Commands

All commands are in the Command Palette under Swipewalk. None has a default keyboard shortcut, so nothing clashes with your own; you can bind any of them in Keyboard Shortcuts.

Command What it does
Swipewalk: Open run… Pick a run from the combined list, grouped by app and version
Swipewalk: Open run from a file or folder… Open a .swipewalk file, a results.json file or a run folder
Swipewalk: Remove opened copies of shared runs Delete the unpacked copies of shared runs kept in the extension's storage, after asking (a shared run that is open is closed)
Swipewalk: Reload the run Read the run again (it also reloads by itself while swipewalk.watchRun is on)
Swipewalk: Close the run Remove the markers and empty the views
Swipewalk: Show the findings Move focus to the Findings view
Swipewalk: Find a finding by name Search all findings in a list and go to one
Swipewalk: Group findings by Screen, check, source file or who is affected
Swipewalk: Filter findings By kind, exact or likely match, and team marks
Swipewalk: Search findings By words in the message, rule, element, screen, file or who is affected
Swipewalk: Clear filters and search Show everything again
Swipewalk: Go to the next finding in this file Jump to the next marked line and show its hover
Swipewalk: Go to the previous finding in this file Jump to the previous marked line
Swipewalk: Choose the project folder for this run Tell the extension which folder holds the scanned project

Settings

Setting Default Meaning
swipewalk.historyFolder empty Folder with Swipewalk's saved runs. Empty uses Swipewalk's default History folder
swipewalk.additionalRunLocations none Extra folders to look in for runs and .swipewalk files (absolute paths), such as a shared drive
swipewalk.maxRunFileSizeMb 200 The largest .swipewalk file to open, in megabytes. Files over 2,048 MB are never opened, whatever you enter
swipewalk.showLikelyMatchesInEditor on Mark likely matches (a likely possible WCAG issue shows as Information, not Warning). Off marks exact matches only
swipewalk.showCandidatesAsHints off Mark every candidate line with a faint hint
swipewalk.watchRun on Reload the open run when its results.json or triage.json changes (applies to the next run opened)

Keyboard and screen readers

The extension uses VS Code's own surfaces (Problems, hover, views, quick picks, commands), so keyboard navigation, zoom, themes, high contrast and screen reader mode come from VS Code. Every item in the Findings view has a text label and a spoken description that includes its kind, its match confidence and its line, and meaning is never carried by colour alone. The details page uses proper headings and labelled controls, moves focus to its heading when it opens, and announces actions such as "Ticket text copied" through a live region. It uses only VS Code theme colours and follows high contrast themes.

This has not yet been reviewed with people who use screen readers every day, and it has not yet been tested with NVDA, VoiceOver or VS Code's screen reader mode. What is described above is checked by automated tests only, and no person has tried it in a VS Code window. Please tell us what does not work.

How lines are matched, and what can be stale

Swipewalk matches an element to a line by its identifier or its text. Exact means it found a unique match. Likely is a best guess: check it is the right element before changing anything. Candidates means several lines fit. Not found means nothing in the source folder fit, for example a third-party control. Your source may have changed since the scan, so line numbers can drift; every hover shows the run's date and version. A run only covers the screens it scanned; Swipewalk cannot know which screens the app has.

Team marks

If your team marked findings in Swipewalk (won't fix, false positive, accepted risk, each with a reason), the extension shows those marks. On a run saved in results format 0.8 that is every marked finding; on an older run only findings that repeat across the run can be matched to a mark, and the rest show no mark here (the report and the desktop app show them all). It never creates or changes a mark; use the Swipewalk desktop app or swipewalk triage for that. A won't-fix or accepted-risk mark means the team chose not to fix the issue for now. It does not mean the issue meets WCAG.

Where it runs

Written to run on macOS, Windows and Linux (plain TypeScript, no native code) in VS Code 1.90 or later. So far it has been checked on macOS only, by unit tests and by nine integration tests in a real VS Code (version 1.140.0, 2026-10-01) that cover registering the commands, markers and their levels, no marker for candidate lines, the hover, Open in report, Copy ticket text, the next-finding command, an older results format and a refused file. The Swipewalk view, the details page and opening shared files are covered by unit tests only. It has not been run on Windows or Linux, in a remote window, or in other VS Code-based editors, and no person has tried it in a VS Code window.

Source paths are saved relative to the project folder given with --source, so a run made on one computer is designed to open in a workspace on another. Newer runs (results format 0.8) also record that folder's name, and the extension uses it to find the project among your workspace folders. If more than one folder could be the project, or none matches, you are asked once and the choice is remembered.

It runs where your workspace runs (a workspace extension). In a remote window, WSL or a dev container it reads the History folder of that remote machine, so open a copied results.json with Open run from a file or folder… or set swipewalk.historyFolder. A .swipewalk file opens the same way. Web editors such as vscode.dev are not supported.

Reference: the results file

The extension reads results.json written by Swipewalk: results format 0.8, and the older 0.x formats without the newer fields (a finding id, who is affected and the report link are then taken from what the older file holds where possible). A file from a newer major format is refused with a plain message. It reads only the fields it needs. Besides the run folder (results.json, run.json, triage.json, report.html and screenshots), it reads only files in your project, .swipewalk files and run folders in the locations above, and the trusted-keys lists. The only thing it writes is the unpacked copy of a shared file, in its own storage. A .swipewalk file is a zip with a fixed layout (a manifest, an optional signature and one run folder); the extension reads it with Node's built-in zip support and cryptography, with no extra libraries.

Licence

Free to use under the Swipewalk License (the LICENSE file in the extension), the same as Swipewalk 0.4.2 and later. The source code is not public. Not legal advice; the extension reports what automated checks found.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft