We checked every single-typo of the 30 most popular npm and PyPI packages. Here's what's actually registered.

By Rushabh Shah, Senior Software Developer · 2026-08-25

Typosquatting is one of the best-documented supply-chain attack techniques — publish a package one keystroke away from something popular, wait for developers to fat-finger npm install, and you have a foothold with no CVE ever filed. What's less documented is a simple question: right now, today, how many of those look-alike names are actually sitting on the registry? So we checked every single-character typo (omit a letter, double a letter, swap two adjacent letters) of the 30 most popular packages on npm and the 30 most popular on PyPI, queried live against each registry's real API, then cross-referenced every hit against OSV.dev's public malicious-package database.

The headline numbers

Methodology

This mirrors the exact detection method DepWarden uses in production: Damerau-Levenshtein edit-distance matching against a curated list of high-popularity package names, narrowed here to the three typo patterns that account for the overwhelming majority of real-world typosquats — omission, duplication, and adjacent transposition. Every candidate was checked against the real registry API; every hit was queried against api.osv.dev for an associated advisory. Nothing here is inferred; every count is a live HTTP response, checked on 25 August 2026. A registered look-alike name alone isn't automatically malicious — short strings inevitably collide with unrelated legitimate packages — which is exactly why the OSV cross-reference is the finding that matters, not the raw registration count.

Which popular packages attract the most confirmed-malicious squats

Popular packageConfirmed-malicious typo variants found
request17
lodash9
express9
chalk8
commander8
async8
react7
debug5
bluebird5
moment4

request — deprecated since 2020 but still enormously installed from years of accumulated dependents — tops the list by a wide margin, plausibly because the sheer volume of developers who've typed its name from memory over its lifetime is larger than for a younger package.

The full data, and how to re-run it yourself

The top-10 table is the interesting slice, but a study you cannot check is just an assertion. So here is all of it — every candidate name, whether the registry says it is published, and every advisory id attached to it.

Re-running the whole study on 5 September 2026, eleven days after the original pass, reproduced it closely: npm 483 candidates, 284 registered (58.8%), 99 carrying an advisory (34.9% of registered); PyPI 615 candidates, 52 registered (8.5%), zero carrying an advisory. The per-package ranking came back identical, request still first by a wide margin at 17. Counts move by a few points between runs because packages are published and unpublished and OSV adds advisories; the finding does not.

npm, every package in the sample

Popular packageCandidates checkedRegisteredWith an OSV advisory
request202017
lodash17179
express17179
commander23238
chalk14148
async14148
react14147
bluebird23235
debug14145
moment17174
rimraf1743
axios14102
webpack2062
colors1752
semver1742
yargs14141
babel1461
typescript2951
prettier2051
uuid841
mkdirp1741
minimist2321
dotenv1711
redux1480
vue880
jest1170
rxjs1150
next1150
glob1150
eslint1730

Package health: real OpenSSF Scorecard data

Alongside the typosquat check, we pulled real OpenSSF Scorecard scores for the same 60 popular packages. npm averaged 6.24/10 (20.7% below 5, 6.9% below 3); PyPI averaged 6.79/10 (10.0% below 5, none below 3). Lowest scores: bluebird (2.0), debug (2.6) and request (3.4) on npm; psycopg2 (3.7), setuptools (4.4) and httpx (4.9) on PyPI. Notably, bluebird and debug — two of the lowest Scorecard scores in the whole sample — also both appear in the confirmed-malicious-squat table above.

What this means

Single-character typing mistakes in npm install carry real, non-hypothetical, currently-live risk — at a rate higher than most developers would guess. PyPI's exposure to this specific technique is measurably lower. Three things help: pin exact versions in a lockfile, use a scanner that checks for typosquat-shaped names as a signal distinct from CVE matching (by definition, none of these 97 packages have a CVE), and treat an unfamiliar package with a suspiciously close name as worth a second look before installing. DepWarden runs this same detection — free, no account required — on every scan. Related: how npm typosquatting attacks work, detecting typosquats in CI.