stack-rot
A dependency health scanner that finds dead, deprecated, and abandoned packages in your project — and tells you what to migrate to.
📦 stack-rot v0.1 — scanning ./package.json
🪦 ABANDONED (1 package):
❌ moment 2.24.0
→ In maintenance mode since 2020. Maintainers officially recommend alternatives.
→ Migrate to: dayjs, date-fns, luxon
→ Evidence: https://momentjs.com/docs/#/-project-status/
⚠️ DEPRECATED (2 packages):
❌ brute-knex 4.0.1
→ Package no longer supported.
❌ path-match 1.2.4
→ Archived and no longer maintained.
✅ HEALTHY (207 packages)
────────────────────────────────────────
📊 Project health: 9.9/10
207/210 dependencies are healthy (2 unknown packages excluded).
The example above is a real scan of TryGhost/Ghost.
What it does
stack-rot reads your package.json and reports which dependencies are:
- Abandoned — community has moved away, even if the registry doesn't say so (e.g. moment)
- Deprecated — officially marked deprecated on npm or by maintainers (e.g. request, node-sass)
- Healthy — actively maintained
For each problematic dependency, it tells you:
- Why it's flagged
- A link to public evidence (maintainer announcement, deprecation notice, archived repo)
- Recommended alternatives
Why this exists
Existing tools handle adjacent problems:
| Tool | Primary focus |
|---|---|
npm outdated |
Newer versions available |
npm audit |
Security vulnerabilities |
| Dependabot | Automated version bumps |
| Snyk | Security vulnerabilities + license issues |
| Socket.dev | Supply-chain risk |
stack-rot |
Community migration intelligence (open-source, free, CLI) |
None of those answer the question developers actually ask when they inherit an old codebase: which of these packages should I stop using?
stack-rot answers that. It combines a hand-curated database of known-abandoned packages with the npm registry's deprecation flag to surface problems no other tool catches.
Install
pip install stack-rot
Requires Python 3.10 or newer.
Usage
Scan the package.json in the current directory:
stack-rot
Scan a specific file:
stack-rot path/to/package.json
Scan without hitting the npm registry (uses only the curated database):
stack-rot --no-network
Exit codes:
0— no abandoned or deprecated dependencies found1— problems found (useful for CI)2— error reading the manifest
What's in v0.1
- JavaScript / npm support (reads
package.json, querieshttps://registry.npmjs.org) - 8 hand-verified entries in the curated database, each with an evidence URL
- Live npm deprecation detection for every other package on the registry
Roadmap
- v0.2 — Python (
requirements.txt,pyproject.toml) - v0.3 — Automated abandonment signals (last-publish dates, repo activity)
- v0.4 — Go (
go.mod) - v0.5 — Rust (
Cargo.toml) - v0.6 — Community sentiment data from public sources
- v0.7 — JSON/HTML reports, CI mode, GitHub Action
- v0.8 — Safe codemods for trivial migrations
- v0.9 — Web dashboard and README badges
- v1.0 — Stability and sustainability
Contributing
The curated database (src/stack_rot/rot-db.json) grows by community contribution. Every new entry requires:
- A
statusofdead,deprecated, orstale - A
reasonexplaining the verdict - A list of at least one
alternativepackage - A public
evidenceURL (maintainer announcement, deprecation notice, archived repo, or registry flag) verified_byandverified_datefields
PRs missing any of these will be rejected automatically. See CONTRIBUTING.md for full rules.
License
MIT. See LICENSE.
Metadata
Release files for stack-rot 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| stack_rot-0.1.0.tar.gz | 9.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stack_rot-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.1 kB
Release files / stack_rot-0.1.0.tar.gz
| Download URL | stack_rot-0.1.0.tar.gz |
|---|---|
| Size | 9.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4db43ba91d70f5395bce365416c68de3072906cd47117cbb2f821bc9a1b13e3
|
|
BLAKE2b-256 checksum How to use checksums |
09e9aecccde453ebe29c34a2152d057bc3dc4f3ba29928d6cff65cd189f68d27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / stack_rot-0.1.0-py3-none-any.whl
| Download URL | stack_rot-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86c52da9f71e8390297e251e49336e6a863f79c99dd7060ea9f5a7d1eaa84cfe
|
|
BLAKE2b-256 checksum How to use checksums |
5bfc3a3166d4f70080bbe9701312aa57d2fa924799aea34b8a841d303b6cbe2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for stack-rot 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.