Check Dependencies

Spot hallucinated and typosquatted package names before you install them.

Runs in your browser Free · no account

Loading the checker…

About the Check Dependencies converter

Language models invent package names. They are confident, plausible and completely fictional — and attackers worked out that if a model keeps suggesting the same non-existent package, registering it is a way to get code onto other people's machines. The practice picked up the name slopsquatting.

This checks a dependency list for names that sit suspiciously close to very popular packages, which is the shape both of a genuine typo and of a deliberate imitation.

Why AI-written code made an old problem worse

Typosquatting is not new: registries have always carried packages named one character away from something huge, waiting for a slip of the finger. What changed is the volume and the confidence. A developer typing by hand makes typos occasionally; a model generating an install command produces a plausible-looking name every time it is unsure, and does it at scale.

The attack that follows is simple. Watch which non-existent names models suggest, register them, and wait. The person installing has no reason to be suspicious, because the name came from something that sounded authoritative. It is a supply chain attack that costs the attacker almost nothing to attempt.

What the check actually does

Each name is compared against a bundled list of widely-used packages using an edit distance that treats a transposition as a single mistake, because swapped letters are exactly the shape of error involved. A name within a character or two of something popular is flagged along with what it resembles.

Names differing only in punctuation are called out separately. Swapping a hyphen for an underscore is one of the oldest squats there is, and it survives a casual read of a manifest because the two look almost identical in a diff.

What it cannot do, which matters

It cannot tell you whether a package exists, who published it, when, or what it contains. All of that lives in the registry, and this page never goes online — your manifest is not sent anywhere, which is the trade being made deliberately.

So a name that is not recognised here is reported as unverified rather than wrong. Most real packages are not on the reference list: your own internal libraries will not be, and neither will anything niche. Treat a flag as a reason to go and look, and a clean result as no reason to relax.

Frequently asked questions

What is slopsquatting?

Registering a package under a name that AI models hallucinate. Researchers noticed models repeatedly suggest the same non-existent packages, which makes those names predictable targets — register one, and you receive installs from anyone who trusted the suggestion without checking.

Does this prove a package is malicious?

No. It says a name is close to a well-known one, which is a reason to look rather than a verdict. The judgement still needs a human: check the registry page, the download counts, the repository and the publish date before installing anything flagged here.

Why is my own package flagged as unverified?

Because it is not on the bundled list of widely-used packages, and nothing else can be determined offline. Internal and niche packages land here as a matter of course — unverified means unrecognised, not suspect.

Is my package.json uploaded?

No. Everything happens in your browser against a list shipped with the page. That is why it cannot check the registry, and it is also why you can paste a private manifest into it without thinking twice.

Which ecosystems does it cover?

npm and PyPI, which is where most of this activity has been seen. It reads package.json including dev, peer and optional dependencies, requirements.txt with versions, extras and environment markers, or a plain list of names one per line.