Audit all your VS Code extensions in one paste.
After the GitHub breach, you should know what's running inside your editor. ExtensionAudit checks your entire installed list for unverified publishers and stale extensions, instantly, no install required.
Run in terminal
code --list-extensionsPaste the output
into the box belowSee your risk report
per extension, in seconds
How ExtensionAudit works
The whole audit happens in the page you are looking at. There is no install, no OAuth prompt, and no server of ours in the path between your extension list and the marketplace.
- 1
You export your installed extension list
Run code --list-extensions in any terminal. VS Code prints one extension ID per line in publisher.name form. That list is the complete inventory of what can execute inside your editor, which is the thing being audited.
- 2
The pasted text is parsed into extension IDs
Each line is trimmed, blank lines and lines beginning with a hash are dropped, and everything before the first dot becomes the publisher. IDs are lowercased and de-duplicated, so pasting the same list twice does not double the work. The counter in the corner of the box shows how many valid IDs were recognised.
- 3
The IDs are queried against the VS Code Marketplace
The IDs are sent in batches of 50 to the public marketplace gallery API, straight from your browser, with all batches running in parallel. Nothing is routed through a Dev Encyclopedia server, so we never see the list.
- 4
Three facts are pulled back for every extension
Whether the publisher carries the verified badge, the total install count, and the date the latest version was published. Anything the marketplace does not recognise comes back as not found rather than being silently dropped.
- 5
A risk level is derived from verification plus staleness
Unverified and last published over a year ago is red. Unverified, or last published over six months ago, is yellow. Verified and published within six months is green. Install count is shown for context but does not change the level, because popularity is not the same as safety.
- 6
Results are sorted worst first and can be exported
The table puts red at the top, then yellow, then unknown, then green, so the extensions that need a decision are the ones you see first. Export CSV writes the same data to a file for a ticket, an audit trail, or a team review.
What the risk signals mean
Low risk
Publisher is verified on the marketplace AND the extension was updated within the last 6 months.
Review recommended
Publisher is unverified, or the extension hasn't been updated in 6โ12 months. Worth a manual check.
High risk
Publisher is unverified AND the extension hasn't been updated in over a year. Strong candidate for uninstalling.
Unknown
Not found in the public marketplace. Could be a private, corporate, or typo'd extension ID.
What to do with each result
Green: No action needed
- Continue using. Publisher is verified and the extension is actively maintained.
Yellow: Review recommended
- Click the marketplace link and check the extension's GitHub repository for recent activity.
- If you still need it: enable it per-workspace only instead of globally, press Ctrl+Shift+P โ "Enable Extension (Workspace Only)".
- If you don't use it: uninstall it. Unused extensions are pure attack surface.
Red: Evaluate carefully
- Check the last commit date on the GitHub repository. Abandoned + unverified = high risk.
- Ask yourself: have you used this extension in the last 90 days? If no, uninstall it now.
- If you keep it: enable per-workspace only, Ctrl+Shift+P โ "Enable Extension (Workspace Only)".
Unknown: Not in the public marketplace
- This is expected for corporate or private extensions hosted on Azure DevOps.
- If you don't recognise the extension ID, investigate: it may be a typo, a renamed extension, or something you don't remember installing.
- Verify the source through your internal security channels before keeping it.
Make this a quarterly habit
Run code --list-extensions every 3 months and re-paste here. Extensions get compromised after you install them: a verified publisher today is not a guarantee for tomorrow.
Input format reference
The parser expects one extension ID per line in publisher.name form, which is exactly what the VS Code CLI prints. The counter in the corner of the input box shows how many valid IDs were recognised, so you can confirm the paste worked before running the audit.
# VS Code
code --list-extensions
# Forks use the same flag
cursor --list-extensions
codium --list-extensions
code-insiders --list-extensions
# Copy straight to the clipboard
code --list-extensions | pbcopy # macOS
code --list-extensions | clip # Windows
code --list-extensions | xclip -sel c # Linux
# Versions are not needed, strip them if you have them
code --list-extensions --show-versions | cut -d@ -f1ms-python.python # standard form, counted
esbenp.prettier-vscode # hyphens in the name are fine
dbaeumer.vscode-eslint # leading spaces are trimmed
MS-Python.Python # case is normalised to lowercase
# lines starting with a hash are treated as comments
ms-python.python # a repeat of an earlier ID is dropped
prettier # no dot, so this line is ignored| Line | Result |
|---|---|
| ms-python.python | Audited |
| GitHub.copilot | Audited |
| ms-python.python@2026.2.0 | Unknown |
| # my work machine | Skipped |
| (blank line) | Skipped |
| prettier | Ignored |
IDs are queried in batches of 50, all batches in parallel, so a list of 120 extensions is three requests to the marketplace and takes about as long as one.
When to use ExtensionAudit
The tool is most useful at the moments when your editor's extension list changes, or when someone needs evidence that it was reviewed.
| Situation | What to look for |
|---|---|
| Quarterly personal cleanup | Red rows and anything you have not opened in months |
| A marketplace compromise makes the news | The named publisher, and any unverified publisher |
| Setting up a new machine | Stale extensions worth dropping before they are reinstalled |
| Onboarding a recommended extension set | Unverified publishers you would be asking the whole team to trust |
| Security questionnaire or audit evidence | A dated CSV of publisher, verification, and last update |
| Reviewing an unfamiliar repo or a contractor machine | Unknown rows, which are private, renamed, or mistyped IDs |
Frequently Asked Questions
How does ExtensionAudit work?
- Run
code --list-extensionsin your terminal and paste the output into the text box. - ExtensionAudit parses the list, then queries the VS Code Marketplace API directly from your browser.
- It fetches publisher verification status, install counts, and last update dates for each extension.
- The risk signal is calculated from those factors. No data is sent to DevEncyclopedia servers.
What does the risk signal mean?
| Signal | Meaning |
|---|---|
| ๐ข Green | Publisher verified + updated within 6 months |
| ๐ก Yellow | Publisher unverified, or not updated in 6โ12 months |
| ๐ด Red | Publisher unverified AND not updated in 1+ year |
| โซ Unknown | Not found in the public marketplace |
What is a verified publisher?
The blue checkmark means the publisher verified domain ownership and has maintained good standing for at least six months.
I have red or yellow extensions. What should I do?
- Click the marketplace link and review the extension's GitHub repository for recent activity.
- Ask yourself: have you used this extension in the last 90 days? If no, uninstall it: unused extensions are pure attack surface.
- If you keep it: enable it per-workspace only, press
Ctrl+Shift+Pโ "Enable Extension (Workspace Only)".
Is my extension list private?
ExtensionAudit processes your list entirely in your browser. Extension names are sent directly to the VS Code Marketplace API to fetch metadata. DevEncyclopedia never receives or stores your extension list.
What about private or corporate extensions?
Private extensions hosted on a corporate Azure DevOps feed will not appear in the public VS Code Marketplace. ExtensionAudit shows them as Unknown, that is expected. Evaluate those extensions through your internal security channels.
Why doesn't a high install count improve the risk level?
Popularity is a measure of reach, not of safety. Install count is shown for context so you can tell a widely used tool from something you picked up once, but it never changes the colour of the row.
The reason is that a popular extension is a more valuable target, not a safer one. Supply chain attacks on editors and package registries work precisely because the compromised package already has a large installed base and an auto-update channel into every one of those machines.
What is in the CSV export?
Export CSV downloads the same table you are looking at, one row per extension, generated in your browser with no upload step.
| Column | Contents |
|---|---|
| Extension | The full publisher.name ID |
| Publisher | The publisher's display name |
| Verified | yes, no, or unknown |
| Installs | Total install count, blank when not found |
| Last Updated | Publish date of the latest version |
| Risk | green, yellow, red, or unknown |
Attach it to a ticket, diff it against last quarter's export to see what changed, or hand it to whoever asked for evidence that the review happened.