Scan a package
homescanevil-pkg@1.0.0

evil-pkg exposure.

Below is the verdict plus every row that produced it. Click show cypher on any tile to inspect the query.

CRITverdict·evil-pkg@1.0.0just now
17 services exposed · 5 lockfiles resolved the bad version · 6 typosquats nearby.
fix:  pnpm update evil-pkg@^1.0.0   ▸  breach window 4h 12m
fix command
$ pnpm update evil-pkg@^1.0.0
share
https://meridian.sithunyein.com/scan/evil-pkg%401.0.0
▸ open replay
enter ⏎
try

The six tiles

1ms · hydradb:https://cheap-dawn-noble-located.trycloudflare.com (fixture tiles)
CRIT

17 services exposed

17 rows · 45ms

MATCH (npm:evil-pkg@1.0.0)<-[:DEPENDS_ON*1..6]-(svc:Service)

serviceteamenvhops
checkout-svcplatformprod1
worker-queuecheckoutstage2
edge-routergrowthprod3
auth-api-gwbillingprod4
billing-svcedgeprod1
pricing-svcplatformprod2
search-svccheckoutstage3
notification-svcgrowthprod4
audit-loggerbillingprod1
tenant-routeredgeprod2
ci-runner-apiplatformprod3
feature-flags-svccheckoutstage4
dlq-pullgrowthprod1
geo-redirectorbillingprod2
session-storeedgeprod3
metrics-collectorplatformprod4
incident-room-botcheckoutstage1
shape · MATCH (n)<-[:DEPENDS_ON*1..3]-(svc) — 3-hop budget
HIGH

first bad version: 3.10.8

3 rows · 49ms

MATCH (advisory)-[:AFFECTS]->(version) — published timeline

versionpublishedrepolive_during_compromise
3.10.72026-07-12github.com/TanStack/virtualfalse
3.10.82026-08-14github.com/TanStack/virtualtrue
3.10.92026-08-15github.com/TanStack/virtualfalse
shape · MATCH (Advisory)-[:AFFECTS]->(Version {id:Int})
HIGH

5 lockfiles resolved this version

5 rows · 59ms

MATCH (Version)<-[:RESOLVES]-(Lockfile)<-[:USES_LOCKFILE]-(Service)

lockfileserviceteamcapturedwindow
apps/web/package-lock.jsoncheckout-svcplatform2026-08-11T00:00Z4h 12m
services/checkout/package-lock.jsonworker-queuecheckout2026-08-12T01:00Z4h 12m
services/worker/package-lock.jsonedge-routergrowth2026-08-13T02:00Z4h 12m
packages/ui-tw/package-lock.jsonauth-api-gwbilling2026-08-14T03:00Z4h 12m
packages/util/package-lock.jsonbilling-svcedge2026-08-15T04:00Z4h 12m
shape · MATCH (Lockfile)-[:RESOLVES]->(Version {id:Int})
INFO

4 packages share a maintainer

4 rows · 45ms

MATCH (Maintainer)-[:MAINTAINS]->(sibling) — same-CI clusters collapse

packageecosystemmonthly_downloadssame_ci
evil-pkg-utilnpm240000true
evil-pkg-clipypi223000false
evil-clinpm206000false
@evil/pkgpypi189000false
shape · MATCH (pkg)<-[:MAINTAINED_BY]-(m)-[:MAINTAINED_BY]->(sib)
HIGH

6 typosquat candidates within edit-distance 2

6 rows · 53ms

MATCH (Package)<-[:TYPOSQUAT_OF { distance: 1..2 }]-(candidate)

candidateedit_distancefirst_seeninstalls
evil-pkgx12026-08-10T00:00Z1280
evilpack22026-08-11T01:00Z1170
evilpkg12026-08-12T02:00Z1060
evil-pkg-old22026-08-13T03:00Z950
@evil-pkg12026-08-14T04:00Z840
evi1-pkg22026-08-15T05:00Z730
shape · MATCH (p)<-[:TYPOSQUAT_OF]-(t)
CRIT

blast radius: 17 services · 5 lockfiles · 6 typosquats

1 rows · 42ms

AGG services ⊕ lockfiles ⊕ typosquats — 3 optional MATCH arms in one query

services_countlockfiles_counttyposquats_count
1756
shape · count(svc) from Package fan-in
00:00PUBLISHevil-pkg

evil-pkg@1.0.0 published clean

60:00INSTALL

+dependency.added chalk-extra 0.0.1

120:00PUBLISHevil-pkg

evil-pkg@1.0.0 rebuilt with payload

180:00ALERT

typosquat install spike 240× chalk-extras

240:00INSTALL

co-maintainer vit-dev-bot 12 ops/min

300:00LOCKFILE

5 lockfiles × 17 services resolved the bad version

360:00GUARD

breach window 4h 12m push guard ⚑