Skip to content
| Marketplace
Sign in
Visual Studio Code>Linters>PkgWatchNew to Visual Studio Code? Get it now.
PkgWatch

PkgWatch

Nana-dev

|
7 installs
| (0) | Free
Inline EOL warnings + CVE detection for package.json. Powered by endoflife.date, OSV.dev, and GitHub Advisory Database.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

PkgWatch

A VS Code extension that scans your package.json and flags dependencies with End of Life warnings, CVE security advisories, npm deprecations, and abandoned packages — all inline, without leaving your editor.


What it does

When you open a package.json, the extension automatically runs 5 checks per dependency:

  1. endoflife.date — checks if the installed major version has reached or is approaching End of Life
  2. npm registry — detects packages officially deprecated by their maintainer, plus latest version and last publish date
  3. ecosyste.ms — detects abandoned packages (archived repo or no release in 3+ years)
  4. OSV.dev — queries for known CVEs against the installed version
  5. GitHub Advisory Database — additional security advisories, deduplicated against OSV results

Results appear as inline hints, hover tooltips, Problems panel entries, and a sidebar dashboard. No configuration required.


Support this project

PkgWatch is built and maintained independently. If it saves you time, consider supporting future development:

GitHub Sponsors


Inline hints

Hints appear directly next to the version string in package.json. Packages with no issues show nothing — the file stays clean.

Hint Meaning Action
🔴 ⚠ EOL → upgrade to X.X.X Major version is End of Life. No more security patches. Upgrade immediately.
🟡 ⏳ EOL 2025-06-01 → X.X.X EOL is coming within the warning window (default: 6 months). Plan the upgrade.
🟠 📦 deprecated: use X instead Maintainer officially deprecated this package on npm. Migrate to the recommended replacement.
🔵 🗄 repo archived GitHub repository is archived — no further updates ever. Find an alternative or fork.
🔵 🕳 abandoned (3y no release) No release in 3+ years with no recent repo activity. Evaluate risk before keeping.
⚪ → latest: X.X.X No EOL/deprecation/abandon signal, but a newer version is available. Review if upgrade is needed.

CVE badges appear at the end of the line (not on the version string):

Badge Meaning
🔴 1 CRITICAL CVE One or more critical severity CVEs found for this version
🟠 2 HIGH CVE High severity CVEs found
⚠ 3 CVE Moderate or low severity CVEs found

Hint priority is managed automatically — if a package is EOL, the deprecated hint won't stack on top. If deprecated, the grey "latest" hint won't appear. One signal per package at a time.


Hover tooltip

Hover over any version string to see the full picture for that package:

  • EOL status and exact date
  • Recommended upgrade version
  • Last published date (from npm)
  • Deprecation message (if deprecated)
  • Abandoned/archived reason with time since last release
  • Data source used
  • Full CVE list with severity, advisory ID (clickable link), summary, fixed-in version, and affected version range

Up to 5 CVEs are shown inline. If there are more, a link to OSV.dev is provided.


Problems panel

All findings are also reported to VS Code's built-in Problems tab — the same place TypeScript errors appear. This means you can see all flagged packages across your project at once without opening individual files.

Finding Severity in Problems
End of Life Error 🔴
Approaching EOL Warning 🟡
CVE (CRITICAL / HIGH) Error 🔴
CVE (MODERATE / LOW) Warning 🟡
npm Deprecated Warning 🟡
Repo Archived / Abandoned Information 🔵

CVE entries have a clickable link directly to the advisory page.

Open the Problems tab: Ctrl/Cmd + Shift + M


Security dashboard (sidebar)

Click the shield icon in the Activity Bar on the left to open the PkgWatch panel.

The dashboard shows:

  • 6 summary cards: EOL count, approaching EOL, packages with CVEs, critical CVE count, npm deprecated count, abandoned/archived count
  • Package list sorted by severity (critical CVEs first, then EOL, then deprecated, then abandoned)
  • Per-package detail: EOL date, deprecation message, abandoned reason, last published date, upgrade recommendation, full CVE list with fix info

Only packages with at least one issue appear in the list. All-clear projects show a green confirmation.


Output channel

To see exactly what the extension is doing — especially useful when a package is not getting detected:

  1. Open the Output panel: Ctrl/Cmd + Shift + U
  2. Select PkgWatch from the dropdown

The log shows every step: how many packages were found, which matched endoflife.date, which are not in the EOL map (with a suggestion to add them), what CVEs were found from each source, and any API errors.

Example output:

[PkgWatch] Scanning /project/package.json — 24 packages found
  next@13.5.0 → EOL status: eol (2024-04-26)
  react@18.2.0 → EOL status: ok
  react@18.2.0 → npm latest: 18.3.1, last published: 2024-04-26
  @googlemaps/js-api-loader@1.16.2 → not in eolMap, npm latest: 1.16.6
  request@2.88.2 → ⚠ DEPRECATED on npm: "request has been deprecated"
  left-pad@1.3.0 → ecosyste.ms: abandoned — No release in 8 years
  next@13.5.0 → 2 CVE(s) from OSV.dev: GHSA-xxxx-yyyy, CVE-2024-34351
  crypto-js@4.1.1 → 1 CVE(s) from OSV.dev: GHSA-xwcq-pm8m-c4vf
[PkgWatch] Done — 1 EOL, 0 approaching, 2 with CVEs (1 critical), 1 deprecated, 1 abandoned

Data sources

Source What it covers Requires token
endoflife.date EOL lifecycle dates for major frameworks and runtimes. Covers Next.js, React, Vue, Angular, Node.js, Express, NestJS, Electron, Bootstrap, Tailwind, and more. No
npm registry Official deprecation flag set by the maintainer. Also provides latest version and last publish date for all packages. No
ecosyste.ms Aggregates health signals from npm + GitHub. Detects archived repos and abandoned packages (3+ years no release, no repo activity). No
OSV.dev Open-source vulnerability database. Aggregates CVEs from GitHub, NVD, and other sources for the npm ecosystem. No
GitHub Advisory Database GitHub's GHSA advisory database via GraphQL. Rate-limited to 60 req/hour without a token. No (but recommended)

All 5 sources are free. None require API keys to function, though GitHub Advisory performs better with a personal access token due to rate limits.


Adding packages to EOL tracking

If you see not in eolMap in the Output Channel for a package you want tracked, add it to src/eolMap.ts:

'your-package-name': 'endoflife-slug',

The slug is the URL path on endoflife.date. For example:

  • https://endoflife.date/nextjs → slug is nextjs
  • https://endoflife.date/nodejs → slug is nodejs

Verify the slug exists before adding it. If a package has no endoflife.date entry (e.g. @googlemaps/js-api-loader, lodash, axios), the extension still covers it via npm deprecation, ecosyste.ms health checks, and CVE detection — you just won't get lifecycle dates.


Commands

Open the Command Palette (Ctrl/Cmd + Shift + P):

Command Description
PkgWatch: Refresh Force re-scan the current package.json
PkgWatch: Clear Cache Wipe all cached API responses and re-scan
PkgWatch: Show Security Panel Open the sidebar dashboard

Settings

Search for PkgWatch in VS Code settings:

Setting Default Description
pkgWatch.enabled true Enable or disable the extension entirely
pkgWatch.warnMonthsBefore 6 Months before EOL date to start showing yellow warnings
pkgWatch.cacheHours 12 How long to cache API responses (in hours)
pkgWatch.checkCVE true Enable CVE checking via OSV.dev
pkgWatch.checkGHAdvisory true Enable additional CVE checking via GitHub Advisory Database
pkgWatch.checkPackageHealth true Enable npm deprecation detection and ecosyste.ms abandoned/archived checks

Caching

All API responses are cached in VS Code's global state to avoid hammering APIs on every keystroke.

  • Default cache duration: 12 hours
  • Cache is keyed per-package and per-version — changing a version string in package.json immediately triggers a fresh fetch for that package
  • To force a full refresh: PkgWatch: Clear Cache

Limitations

  • EOL lifecycle dates are only available for packages tracked on endoflife.date, which covers major frameworks and runtimes. Utility libraries like lodash or axios are not tracked there — they fall back to npm deprecation and ecosyste.ms signals instead, and CVEs are still checked.
  • npm deprecation only fires if the maintainer explicitly set the deprecated field on npm. A dead package with no official deprecation won't show the orange hint — ecosyste.ms covers this case instead.
  • Abandoned heuristic uses a 3-year no-release threshold. Some packages are intentionally stable and release rarely (e.g. semver, mime-types) — check the last published date in the hover tooltip before acting on this signal.
  • GitHub Advisory rate limit is 60 requests/hour without authentication. Hitting the limit means some advisory results may be missing for that session. OSV.dev is unaffected and covers most of the same CVEs.
  • The extension only reads package.json. It does not inspect node_modules, package-lock.json, or yarn.lock.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft