Add axle — Accessibility Scanner#27308
Conversation
|
Congratulations on your new Raycast extension! 🚀 We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
Greptile SummaryThis PR adds the axle Raycast extension, which scans any URL for WCAG 2.1/2.2 AA violations via the public Two store-submission blockers need to be resolved before merge:
Confidence Score: 4/5Not ready to merge — two required store artifacts (CHANGELOG.md and metadata/ screenshots) are missing. The core logic in scan.tsx and statement.tsx is straightforward and correct. The two P1 findings are missing required files that are mandatory for all Raycast store submissions; fixing them is mechanical. The P2 issues are minor cleanup. extensions/axle/package.json — CHANGELOG.md and metadata/ folder with screenshots must be added before the extension can be published to the store. Important Files Changed
Prompt To Fix All With AIThis is a comment left during a code review.
Path: extensions/axle/package.json
Line: 1-37
Comment:
**Missing `CHANGELOG.md`**
Every PR to this repo must include a `CHANGELOG.md` file. For an initial release it should follow the standard pattern:
```markdown
## [Initial Release] - {PR_MERGE_DATE}
- Initial release of axle — Accessibility Scanner
```
The `{PR_MERGE_DATE}` placeholder is filled in automatically when the PR merges.
**Rule Used:** What: Ensure that CHANGELOG.md is created or updat... ([source](https://app.greptile.com/review/custom-context?memory=97cd51bc-963b-43f5-acc3-9ba85fe7bb2d))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/axle/package.json
Line: 14
Comment:
**Missing `metadata/` folder with screenshots**
The `scan` command has `"mode": "view"`, so the store requires Raycast-styled screenshots in a `metadata/` directory. Without them the extension will be rejected from the store. See the [Raycast docs](https://developers.raycast.com/basics/prepare-an-extension-for-store#screenshots) for the expected format and dimensions.
**Rule Used:** What: Extensions with view-type commands must incl... ([source](https://app.greptile.com/review/custom-context?memory=87059ac1-c601-487f-9f1c-bce8a3cb6209))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/axle/src/scan.tsx
Line: 1-10
Comment:
**Unused `useNavigation` import**
`useNavigation` is imported but never called in this file. `Action.Push` handles navigation internally and doesn't require it directly.
```suggestion
import {
ActionPanel,
Action,
List,
Detail,
Icon,
showToast,
Toast,
} from "@raycast/api";
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/axle/src/scan.tsx
Line: 47
Comment:
**Use auto-generated argument types instead of manual typing**
The `raycast-env.d.ts` file already exports `Arguments.Scan` which covers the `url` argument. Prefer `LaunchProps` with the generated type to stay in sync with the manifest automatically.
```suggestion
export default function Scan(props: LaunchProps<{ arguments: Arguments.Scan }>) {
```
You'll also need to add `LaunchProps` to the `@raycast/api` import.
**Rule Used:** What: Don't manually define `Preferences` for `get... ([source](https://app.greptile.com/review/custom-context?memory=d93fc9fb-a45d-4479-a6a4-b1b4af98ebc8))
How can I resolve this? If you propose a fix, please make it concise.Reviews (1): Last reviewed commit: "Add axle command-icon.png" | Re-trigger Greptile |
| { | ||
| "$schema": "https://www.raycast.com/schemas/extension.json", | ||
| "name": "axle", | ||
| "title": "axle — Accessibility Scanner", | ||
| "description": "Scan any URL for WCAG 2.1 / 2.2 AA accessibility violations without leaving Raycast. Results appear as a list; pick any violation to see the offending element and suggested fix.", | ||
| "icon": "command-icon.png", | ||
| "author": "asafamos", | ||
| "categories": ["Developer Tools", "Web"], | ||
| "license": "MIT", | ||
| "commands": [ | ||
| { | ||
| "name": "scan", | ||
| "title": "Scan URL for Accessibility", | ||
| "subtitle": "axle", | ||
| "description": "Run an axe-core scan against any public URL and show violations.", | ||
| "mode": "view", | ||
| "arguments": [ | ||
| { | ||
| "name": "url", | ||
| "type": "text", | ||
| "placeholder": "https://example.com", | ||
| "required": true | ||
| } | ||
| ] | ||
| }, | ||
| { | ||
| "name": "statement", | ||
| "title": "Open Hebrew Accessibility Statement Generator", | ||
| "subtitle": "axle", | ||
| "description": "Opens the free Hebrew statement generator — aligned with Israeli תקנה 35.", | ||
| "mode": "no-view" | ||
| } | ||
| ], | ||
| "dependencies": { | ||
| "@raycast/api": "^1.78.0" | ||
| } | ||
| } |
There was a problem hiding this comment.
Every PR to this repo must include a CHANGELOG.md file. For an initial release it should follow the standard pattern:
## [Initial Release] - {PR_MERGE_DATE}
- Initial release of axle — Accessibility ScannerThe {PR_MERGE_DATE} placeholder is filled in automatically when the PR merges.
Rule Used: What: Ensure that CHANGELOG.md is created or updat... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/axle/package.json
Line: 1-37
Comment:
**Missing `CHANGELOG.md`**
Every PR to this repo must include a `CHANGELOG.md` file. For an initial release it should follow the standard pattern:
```markdown
## [Initial Release] - {PR_MERGE_DATE}
- Initial release of axle — Accessibility Scanner
```
The `{PR_MERGE_DATE}` placeholder is filled in automatically when the PR merges.
**Rule Used:** What: Ensure that CHANGELOG.md is created or updat... ([source](https://app.greptile.com/review/custom-context?memory=97cd51bc-963b-43f5-acc3-9ba85fe7bb2d))
How can I resolve this? If you propose a fix, please make it concise.| { | ||
| "name": "scan", | ||
| "title": "Scan URL for Accessibility", | ||
| "subtitle": "axle", |
There was a problem hiding this comment.
Missing
metadata/ folder with screenshots
The scan command has "mode": "view", so the store requires Raycast-styled screenshots in a metadata/ directory. Without them the extension will be rejected from the store. See the Raycast docs for the expected format and dimensions.
Rule Used: What: Extensions with view-type commands must incl... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/axle/package.json
Line: 14
Comment:
**Missing `metadata/` folder with screenshots**
The `scan` command has `"mode": "view"`, so the store requires Raycast-styled screenshots in a `metadata/` directory. Without them the extension will be rejected from the store. See the [Raycast docs](https://developers.raycast.com/basics/prepare-an-extension-for-store#screenshots) for the expected format and dimensions.
**Rule Used:** What: Extensions with view-type commands must incl... ([source](https://app.greptile.com/review/custom-context?memory=87059ac1-c601-487f-9f1c-bce8a3cb6209))
How can I resolve this? If you propose a fix, please make it concise.| import { | ||
| ActionPanel, | ||
| Action, | ||
| List, | ||
| Detail, | ||
| Icon, | ||
| showToast, | ||
| Toast, | ||
| useNavigation, | ||
| } from "@raycast/api"; |
There was a problem hiding this comment.
useNavigation is imported but never called in this file. Action.Push handles navigation internally and doesn't require it directly.
| import { | |
| ActionPanel, | |
| Action, | |
| List, | |
| Detail, | |
| Icon, | |
| showToast, | |
| Toast, | |
| useNavigation, | |
| } from "@raycast/api"; | |
| import { | |
| ActionPanel, | |
| Action, | |
| List, | |
| Detail, | |
| Icon, | |
| showToast, | |
| Toast, | |
| } from "@raycast/api"; |
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/axle/src/scan.tsx
Line: 1-10
Comment:
**Unused `useNavigation` import**
`useNavigation` is imported but never called in this file. `Action.Push` handles navigation internally and doesn't require it directly.
```suggestion
import {
ActionPanel,
Action,
List,
Detail,
Icon,
showToast,
Toast,
} from "@raycast/api";
```
How can I resolve this? If you propose a fix, please make it concise.| minor: { source: Icon.Circle, tintColor: "#2563eb" }, | ||
| }; | ||
|
|
||
| export default function Scan(props: { arguments: { url: string } }) { |
There was a problem hiding this comment.
Use auto-generated argument types instead of manual typing
The raycast-env.d.ts file already exports Arguments.Scan which covers the url argument. Prefer LaunchProps with the generated type to stay in sync with the manifest automatically.
| export default function Scan(props: { arguments: { url: string } }) { | |
| export default function Scan(props: LaunchProps<{ arguments: Arguments.Scan }>) { |
You'll also need to add LaunchProps to the @raycast/api import.
Rule Used: What: Don't manually define Preferences for `get... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/axle/src/scan.tsx
Line: 47
Comment:
**Use auto-generated argument types instead of manual typing**
The `raycast-env.d.ts` file already exports `Arguments.Scan` which covers the `url` argument. Prefer `LaunchProps` with the generated type to stay in sync with the manifest automatically.
```suggestion
export default function Scan(props: LaunchProps<{ arguments: Arguments.Scan }>) {
```
You'll also need to add `LaunchProps` to the `@raycast/api` import.
**Rule Used:** What: Don't manually define `Preferences` for `get... ([source](https://app.greptile.com/review/custom-context?memory=d93fc9fb-a45d-4479-a6a4-b1b4af98ebc8))
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
|
This pull request has been automatically marked as stale because it did not have any recent activity. It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊 |
|
This pull request has been automatically closed due to inactivity. Feel free to comment in the thread when you're ready to continue working on it 🙂 You can also catch us in Slack if you want to discuss this. |
Adds axle — Accessibility Scanner to the Raycast store. Scan any URL for WCAG 2.1 / 2.2 AA accessibility violations without leaving Raycast. Results show in a native list; pick any violation to see the offending element and the axe-core help URL.
Commands
Screencast
A screencast + store screenshots are attached below (or in the next comment on this PR).
Why this belongs in the Raycast store
Accessibility compliance has become a live ship-stopper in 2025:
Developers currently have to leave their flow, open a browser devtools panel, and wait for Lighthouse/axe-core to boot. This extension is a keystroke + URL away — same engine axe-core reviewers use in courts.
Ecosystem
axle also ships as a GitHub Action, an npm CLI, and plugins for Netlify / Cloudflare Pages / Vercel. Source code is MIT, open on GitHub.
Checklist
@raycast/api@^1.78.0command-icon.png— 512×512 PNG includedscan(view mode) +statement(no-view)Happy to adjust copy, icon, or commands if anything doesn't fit the store style guide.