Skip to content

Overhaul plugin docs - #261

Merged
JoyceZhu merged 1 commit into
mainfrom
joycezhu/overhaul_plugin_docs
Aug 21, 2026
Merged

Overhaul plugin docs#261
JoyceZhu merged 1 commit into
mainfrom
joycezhu/overhaul_plugin_docs

Conversation

@JoyceZhu

Copy link
Copy Markdown
Contributor
  • new issue template for allowlisting third-party issues from NPM
  • plugin documentation reorganized and rewritten to organize information about all plugins vs. NPM plugins only vs. local plugins only

- new issue template for allowlisting third-party issues from NPM
- plugin documentation reorganized and rewritten to organize information
  about all plugins vs. NPM plugins only vs. local plugins only
@JoyceZhu
JoyceZhu requested a review from a team as a code owner August 21, 2026 06:57
@JoyceZhu
JoyceZhu requested review from kendallgassner and a balanced review from Copilot August 21, 2026 06:57
@JoyceZhu
JoyceZhu enabled auto-merge August 21, 2026 06:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reorganizes plugin documentation and introduces an issue form for requesting third-party NPM plugin allowlisting.

Changes:

  • Separates guidance for NPM-hosted and local plugins.
  • Adds an allowlisting request issue form.
Show a summary per file
File Description
PLUGINS.md Reworks plugin creation and loading guidance.
.github/ISSUE_TEMPLATE/allowlist-npm-plugin-request.yml Adds the allowlisting request form.

Review details

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Suppressed comments (2)

PLUGINS.md:36

  • This relative URL resolves to a nonexistent repository path instead of the heading in this document, so the navigation link returns a 404. Use the heading fragment here.
To then enable an NPM plugin in the `scans` input, follow the instructions in the [loading plugins from NPM](./loading-plugins-from-npm-packages) section.

.github/ISSUE_TEMPLATE/allowlist-npm-plugin-request.yml:10

  • This textarea also lacks the unique id required for non-Markdown GitHub Issue Form elements, so the template will fail schema validation.
  - type: textarea 
  • Files reviewed: 2/2 changed files
  • Comments generated: 7
  • Review effort level: Balanced

Comment thread PLUGINS.md

Some plugins come built-in with the scanner and can be enabled via [actions inputs](https://github.com/github/accessibility-scanner/tree/main/action.yml#L48-L50).
Some first-party plugins come built-in with the scanner repository and can be enabled via [actions inputs](https://github.com/github/accessibility-scanner/tree/main/action.yml#L48-L50).
There are also some [allowlisted](https://github.com/github/accessibility-scanner/blob/7ec4b73ca2fdb471ad6f71a48a88e7b1a84ab3ad/.github/actions/find/src/pluginManager/index.ts#L92) first-party plugins hosted in a different repository; we also have the ability to support loading approved third-party plugins [from NPM](./loading-plugins-from-npm-packages).
Comment thread PLUGINS.md
Comment on lines +10 to +13
### Plugin folder structure for all plugins

Plugins are dynamically loaded by the scanner when it runs. The scanner will look into the `./.github` folder in your repo (where you run the workflow from) and search for a `scanner-plugins` folder. If it finds it, it will assume each folder under that is a plugin, and attempt to load the `index.ts` (first) or `index.js` (second) file inside it. Once loaded, the scanner will invoke the exported default function from the `index.js/index.ts` file.
- Each plugin should have one `index.ts` OR `index.js` file inside its folder.
- The `index.ts/index.js` file must export a `name` field. This is the name used to pass to the `scans` input. So if the plugin exports a name value of `my-custom-plugin` and we pass the following to the scanner action inputs: `scans: ['my-custom-plugin']`, it would cause the scanner to only run that plugin.
Comment thread PLUGINS.md
Plugins are dynamically loaded by the scanner when it runs. The scanner will look into the `./.github` folder in your repo (where you run the workflow from) and search for a `scanner-plugins` folder. If it finds it, it will assume each folder under that is a plugin, and attempt to load the `index.ts` (first) or `index.js` (second) file inside it. Once loaded, the scanner will invoke the exported default function from the `index.js/index.ts` file.
- Each plugin should have one `index.ts` OR `index.js` file inside its folder.
- The `index.ts/index.js` file must export a `name` field. This is the name used to pass to the `scans` input. So if the plugin exports a name value of `my-custom-plugin` and we pass the following to the scanner action inputs: `scans: ['my-custom-plugin']`, it would cause the scanner to only run that plugin.
- The `index.ts/index.js` file must export a default function (see [below](./default-function-api)). This is the function that the scanner uses to run the plugin. This can be an async function.
Comment thread PLUGINS.md
- The `index.ts/index.js` file must export a `name` field. This is the name used to pass to the `scans` input. So if the plugin exports a name value of `my-custom-plugin` and we pass the following to the scanner action inputs: `scans: ['my-custom-plugin']`, it would cause the scanner to only run that plugin.
- The `index.ts/index.js` file must export a default function. This is the function that the scanner uses to run the plugin. This can be an async function.
- In your workflow file, before the scanner step, add `- uses: actions/checkout@v6` (or whatever the current version is). This allows the current repository's files (where your custom plugin's file exists) to be read:
Once the public URL is live, please fill out [this issue template](./.github/ISSUE_TEMPLATE/allowlist-npm-plugin-request.yml) so we can allowlist your plugin in future versions of the scanner.
Comment thread PLUGINS.md

If you wish, you can create _local plugins_ by creating a folder containing plugin code in `./.github/scanner-plugins/`. Each separate plugin should be contained in its own directory. For example, `./.github/scanner-plugins/plugin-1` would be 1 plugin loaded by the scanner.

Enabled local plugins (i.e. those listed in the `scans` Action input) are dynamically loaded by the scanner when it runs. The scanner will search for a `./.github/scanner-plugins` folder in your repo (where you run the workflow from). If it finds one, it will assume each folder under that is a plugin, and attempt to load the `index.ts` (first) or `index.js` (second) file inside it. Once loaded, the scanner will invoke the exported default function from the `index.js/index.ts` file.
@@ -0,0 +1,15 @@
name: Allowlist Third Party NPM Plugin Request
description: Fill out the details to request allowlisting your third party plugin hosted on NPM in the scanner.
labels: 'allowlist-plugin-request'
description: Fill out the details to request allowlisting your third party plugin hosted on NPM in the scanner.
labels: 'allowlist-plugin-request'
body:
- type: input

@abdulahmad307 abdulahmad307 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm (aside from the copilot comments)

@JoyceZhu
JoyceZhu merged commit b9278b0 into main Aug 21, 2026
8 checks passed
@JoyceZhu
JoyceZhu deleted the joycezhu/overhaul_plugin_docs branch August 21, 2026 13:50
@abdulahmad307

Copy link
Copy Markdown
Contributor

oh lol - i didnt realize automerge was on. i guess we can fix the copilot warnings in a second PR

@edsummersnc edsummersnc left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to document the reason why there is a plugin allow-list and also the summary of our plugin review/approval process. IOW:

  • Why are we gate-keeping the plugin list?
  • What reviews are we going to perform after someone submits an npm plguin? They need to know this so they can perform the reviews themselves before submitting the issue.
  • What are the conditions for approval and rejection?

Consider adding a field to the issue template to collect the repo of the plugin source code.

It would be a great benefit to GitHub, our customers, and PWD if we could create a vibrant community of third-party plugins. Consider refactoring the list of approved plugins into a JSON file or similar file type. Include npm package name, description, and repo. This will allow users of the scanner to find third-party plugins, perform their own security review, file issues on those plugins, contribute fixes, fork/extend, etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants