Dependency Explorer

Examples
Build:
Frameworks:
Web servers:
Tooling:
Databases:
Visualization:
AI clients:
JS
native1
unattested2

Dependency Explorer

Everything runs in your browser. The explorer walks the dep tree directly from the public npm registry JSON API and lays it out with dagre (vendored, no CDN).

Click a node to re-root the graph on that package. Every view has a shareable URL via the hash.

Native packages (orange dot) declare an os or cpu restriction in their manifest. The platform dropdown filters these: dependencies that don’t match the selected target are skipped entirely. Package names that obviously encode a platform (e.g. @esbuild/darwin-arm64) are filtered before even fetching. The common pattern — a wrapper package with many per-platform sub-packages wired up via optionalDependencies — is documented in Sentry’s publishing binaries on npm.

Attested packages (ring around the dot) carry an SLSA provenance statement published via registry.npmjs.org/-/npm/v1/attestations. Hovering the dot shows the repository, commit, and workflow file that produced the release, verified against the in-toto statement.

Caveats. Transitive dependencies always resolve to latest; exact semver solving is intentionally not done. The goal is to show what a fresh npm install with no lockfile would pull in. Sizes are unpackedSize from the registry (tarball extracted).

1 “native” is a heuristic. A package is flagged native if its manifest declares an os or cpu restriction. This is a good proxy for packages that contain compiled code, but it’s not authoritative. See Sentry’s publishing binaries on npm for context on why native packages are split into many per-platform sub-packages.

2 An unattested package was uploaded directly by a maintainer, and there is no way to verify what code or toolchain produced it. See Npm Slop & Wonky Software Supply Chains for context.