VS CODE EXTENSION DRIFT CHECK · RUNS IN YOUR BROWSER

Did an extension you already trust just change what it does?

Paste a snapshot of your installed VS Code, Cursor, Windsurf, or VSCodium extensions and see exactly which ones changed their activation surface -- a new startup trigger, a new extension dependency, or a changed entry point -- since an earlier snapshot. Neither VS Code nor the marketplaces warn you when this happens, or when an extension you already have installed is later pulled for being malicious -- the mechanism behind the GlassWorm and Nx Console incidents.

Nothing is uploaded. The text you paste is parsed in this browser and never leaves your device.

1. Paste your extension snapshot

Prefer a CLI, or want this as a CI gate?

Same logic, zero dependencies, one file — and it can read your local extensions directory directly, which a browser cannot do:

node cli.mjs snapshot --out baseline.json     # scans your extensions dir, commit this once after review
# ...time passes; an extension auto-updates...
node cli.mjs snapshot --out current.json
node cli.mjs diff baseline.json current.json  # exit 1 only if something's surface changed
node cli.mjs diff baseline.json current.json --ignore ms-python.python
node cli.mjs check current.json               # live Marketplace lookup -- the only command that touches the network

Get cli.mjs — Node 18+, nothing to install. snapshot and diff read only local files: no network call, ever. Only check talks to the network, from your machine, and only when you run it.

Real, dated incidents that used exactly this mechanism

CampaignMarketplaceSinceWhat happened

More: why VS Code doesn't warn you when an extension is delisted, and how to wire the CLI into CI. Comparing against a pre-install code scanner instead? See this checker vs. vsix-audit or this tool vs. VSCan.

Common questions

Why doesn't VS Code already warn me about this?

VS Code auto-updates extensions silently and has no mechanism to tell you an installed extension's activation surface changed, or that it was later pulled from the marketplace for being malicious. If you already have it installed when that happens, it keeps running with no notice — auto-update just quietly stops offering a newer version.

Is this a malware scanner?

No. It reports a structural difference between two snapshots of an extension's declared manifest fields (when it activates, what it depends on, its entry point), and a factual marketplace-resolution check. A flag means "read this one", not "this is malware" — it is not exhaustive and it is not a verdict.

Is my extension list uploaded anywhere?

No. The browser page parses the snapshot you paste entirely in your own browser and never sends it anywhere. The CLI's snapshot and diff commands read only local files — no network call, ever. Only the CLI's separate check command talks to the network, on your own machine, and only when you run it.

What do I paste in?

The output of node cli.mjs snapshot for the full picture, or the plain output of code --list-extensions --show-versions (Cursor and Windsurf have the same flag) for a quick id/version-only check.