Skip to main content

whoholdsup

Who holds up your app? Point it at your lockfile and it shows how many of your dependencies are kept alive by a single person, which haven't shipped in years, and which recently changed hands.

uvx whoholdsup          # in any project with a lockfile

whoholdsup demo

Real output for a typical Next.js + Express app (the lockfile is in docs/example), November 2026.

In 2024, a backdoor came within weeks of shipping in the stable releases of major Linux distros through xz, a compression library maintained by one exhausted volunteer who handed releases to a helpful newcomer. Your app has hundreds of packages just like it. whoholdsup tells you which ones.

What it checks

What it means Where it comes from
One maintainer Exactly one person can publish this package. If they burn out, get hacked or hand it over, there's nobody else. npm's maintainer list; PyPI's owners and maintainers
No release in 2+ years Might be finished. Might be abandoned. Either way, nobody's shipping fixes. Release dates on the registry
Changed hands this year Everyone who published a release in the last 12 months is someone who had never published it before. Usually a normal handover. It's also exactly what the xz takeover looked like. npm's per-release publisher history
Deprecated The authors told you to stop using it. npm deprecation notices; PyPI "Inactive" status
Not on the public registry Private, or removed (which sometimes means malware was taken down). 404 from the registry

It also works out which single-maintainer packages are load-bearing: how many other packages in your tree depend on each one, directly or indirectly. And it shows the people holding it up: who is the sole maintainer of the most packages you use.

Organisation and release-bot accounts (types for DefinitelyTyped, PyPI organisations, GitHub Actions trusted publishing) aren't counted as one person.

Supported lockfiles

Ecosystem Files
npm package-lock.json (v1–v3), npm-shrinkwrap.json, yarn.lock (classic and Berry), pnpm-lock.yaml (v5–v9)
Python uv.lock, poetry.lock, Pipfile.lock, pinned requirements*.txt

Direct dependencies are marked using your package.json or pyproject.toml.

Options

whoholdsup                       # current folder
whoholdsup path/to/project       # another folder
whoholdsup uv.lock yarn.lock     # specific lockfiles
whoholdsup --direct              # only packages you depend on directly
whoholdsup --top 25              # longer tables
whoholdsup --json                # everything, machine-readable (for CI)
whoholdsup --no-cache            # ignore the one-day lookup cache

How it works

whoholdsup reads your lockfile locally, then asks the public registries about each package: registry.npmjs.org for npm packages, and PyPI's JSON API, XML-RPC package_roles and project pages for Python. Lookups run 16 at a time and are cached for a day, so a second run is instant. Nothing about your project is uploaded anywhere: the registries only see package names, the same as when you install them.

Honest limits. "One maintainer" means one account with publish rights. That's the risk that matters for supply-chain attacks, but some single accounts are backed by a company, and some multi-maintainer packages are really run by one tired person. The publisher-change signal is npm-only, because PyPI doesn't publish who uploaded each release.

Install

uvx whoholdsup          # run without installing
pipx install whoholdsup # or install it

Requires Python 3.9+. The only dependency is rich (plus tomli on Python < 3.11).

License

MIT

Metadata

Release files for whoholdsup 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whoholdsup 0.1.0
File Size Uploaded Provenance Actions
whoholdsup-0.1.0.tar.gz 18.9 kB With provenance Details for whoholdsup-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for whoholdsup 0.1.0
File Interpreter ABI Platform Actions
whoholdsup-0.1.0-py3-none-any.whl Python 3 none any Details for whoholdsup-0.1.0-py3-none-any.whl

Total release size: 36.5 kB

Release files / whoholdsup-0.1.0.tar.gz

Download URL whoholdsup-0.1.0.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
8bc8b0f492d38def67e78d2ab240d7036bc004667e60f47ec05ccf30f78476e3
BLAKE2b-256 checksum
How to use checksums
c28926f22363692e5eb291f0cc876dee15ea36917b62aa323d7f08ec2357841d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / whoholdsup-0.1.0-py3-none-any.whl

Download URL whoholdsup-0.1.0-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a737f8658e8c30a7243d878749e02966ec9a5e7e094dd404c79cc849c08d009
BLAKE2b-256 checksum
How to use checksums
6a402f0fc602513150b360ef2b425b045dff7c785a5c84e54c5bc6e8602b9bbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Security for whoholdsup 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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for whoholdsup-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page