astropod Contact Us sign in

a private npm registry that remembers

Point your .npmrc at gastropod and get a private npm registry, a caching proxy for npmjs, and a place to publish your own scoped packages, plus the part every other registry leaves out: it verifies what it serves, remembers what it saw, and can tell you who pulled what. Works with any client that speaks the npm registry protocol — npm, yarn, pnpm.

connecting is as easy as

# .npmrc
registry=https://gastropod.io/npm/
//gastropod.io/npm/:_authToken=TOKEN

That's the whole integration. Installs flow through gastropod: public packages proxy from npmjs and cache on first pull; your own packages publish to a hosted repo with npm publish. No plugin, no wrapper, no new CLI.

what happens on every install

  • Identity is fixed. The package resolves to an exact PURL, version, and sha256 digest, not just a name and a semver range.
  • Provenance is verified. Integrity is checked against npm's SRI hashes, registry signatures, and Sigstore attestations where publishers provide them, before the artifact is served. A package whose contents don't match its claimed identity is flagged, not delivered.
  • Advisories are correlated. Known OSV advisories attach to the exact version, along with everything downstream of it, so when the next npm advisory is published, you already know every package and consumer it reaches.
  • The pull is recorded. Who pulled it, when, and from where, attributed to a principal on the audit spine and exportable on request.
  • It's remembered. SBOM, findings, provenance, and dependents stay attached to that digest. The next install of the same artifact, by any team or pipeline, inherits all of it.

identity, not just scanning

npm's worst incidents haven't mostly been vulnerabilities; they've been identity problems: a maintainer handoff gone bad, a lookalike name, a version that isn't what it claims to be. The 2018 event-stream incident shipped malicious code to millions of installs through a legitimate dependency, and most organizations couldn't answer the two questions that mattered: did we pull it, and what did it reach? Gastropod catches an identity or provenance mismatch at intake, block rules stop the artifact from being served, and the blast-radius graph plus pull history answer "where is it and who has it" in minutes. It also closes the dependency-confusion hole: private scopes resolve from hosted repos through the same registry URL, so a public lookalike can't shadow an internal package name.

proxy, hosted, virtual

proxy

A caching mirror of npmjs, or any upstream registry. The first pull fetches and verifies; repeat pulls of the same digest serve from content-addressed, deduplicated storage.

hosted

Your own scoped packages, published with standard npm publish, token-gated, with reader and publisher roles.

virtual

One URL aggregating both, so a single .npmrc line covers public and private resolution in the right order.

Every feature is on every tier, so none of this is an upsell: OIDC SSO, scoped tokens, SBOMs, advisories, blast radius, and the audit spine are all present starting at our published rates.

FAQ

how do I point npm at a private registry?

Two lines in .npmrc: set registry= to your gastropod instance and add the _authToken line for authentication. yarn and pnpm honor the same configuration. Scoped registries (@yourorg:registry=…) work too, if only a private scope should route through gastropod.

can I publish private npm packages to gastropod?

Yes. Create a hosted repository, issue a publisher token, and npm publish works as-is. Packages are private by default and readable only with a token; per-repository public read is a setting, not a plan upgrade.

does gastropod scan npm packages for vulnerabilities?

It verifies and correlates rather than replacing your scanner: integrity and provenance are checked at intake, OSV advisories attach to each exact version, and findings from scanners you already run — Trivy, Grype, Snyk, Anchore — pin to the artifact and follow it everywhere it appears.

how does it handle malicious or hijacked packages?

An artifact whose contents don't match its claimed identity is flagged at intake, and block rules can quarantine it before a single install succeeds. If something already got through upstream, the where-seen history and blast-radius graph show every package and consumer it reached.

can gastropod replace my current npm registry?

Yes, for standard npm workflows. It's a registry-protocol change in .npmrc, not new tooling, and it runs side by side with your current registry during evaluation.

Part of the full product overview. Also speaking: Go · PyPI · OCI · RubyGems.

See it on your own packages.

Get started in minutes.

npm is a trademark of npm, Inc. (GitHub/Microsoft). Gastropod is not affiliated with npm, Inc. Details current as of July 2026.