Forge safer npm installs

Anvil Registry is an open source npm registry gateway, paired with Anvil Node Base, that puts policy, analysis, and audit trails before dependency installs.

Open source and meant to be inspected.
Works with npm-compatible clients instead of replacing developer workflows.
Optimized for practical review in pull requests, CI, and local repo triage.
Built for the uncomfortable bit between 'npm install' and 'hope nothing weird happened'.
Technical illustration of an anvil over npm package blocks

Two tools, one install path

Use the registry gateway for enforcement and the Node base image when you need a safer local harness.

Anvil Registry

A drop-in npm registry gateway that evaluates packages before install traffic reaches developers or CI.

  • Policy decisions before tarballs
  • Metadata and tarball proxying
  • Analysis cached by immutable identity
  • Clear block and quarantine reasons
npm config set registry http://localhost:4873

Anvil Node Base

A hardened Node devcontainer base image for safer installs when you need to inspect unknown repos.

  • Non-root by default
  • ignore-scripts safe mode
  • Observed install mode with reports
  • Strict mode for high-confidence IOCs
FROM ghcr.io/<owner>/anvil-node-base:22

Architecture that fits the toolchain

Anvil Registry sits between package managers and upstream registries, then pushes expensive work out to the analysis worker.

  1. Step 1

    Developer / CI

    • npm
    • pnpm
    • yarn
    • build agents
  2. Step 2

    Anvil Registry

    • policy engine
    • analysis queue
    • tarball cache
    • audit log
  3. Step 3

    Upstream npm

    • metadata
    • tarballs
    • audit APIs
  4. Step 4

    Data store

    • decisions
    • reports
    • overrides

CLI in your workflow

Fast, deterministic, and scriptable enough for local review, CI, and release gates.

Analyze
Safe install
Observed
Registry CLI
$ anvil explain left-pad@1.3.0
Decision: allow
Policy: default@2026-05
Provenance: verified
Signals: no high-confidence findings
Cache identity: sha512-Qw8...Yjm

JSON decision output

Decisions are useful in terminals, but they also need to be boringly machine-readable.

{
  "package": "left-pad@1.3.0",
  "decision": "allow",
  "policy": "default",
  "provenance": { "verified": true },
  "signals": [],
  "cacheIdentity": "sha512-Qw8..."
}

Policy and analysis with receipts

Reviewers get the why, the evidence, and the override trail. Decorative security can stay outside.

Deterministic policy

Package age, provenance, low adoption, static findings, typo-squatting, and overrides feed one auditable decision.

Static package analysis

Manifest diffs, lifecycle scripts, dependency shifts, binary files, encoded blobs, and install-path code patterns.

Reviewer context

Optional LLM review adds structured risk context without becoming the authority that allows a package.

Install-path telemetry

Node Base can capture lifecycle scripts, process execution, network activity, and sensitive file access.

Policy decision timeline

Allow

Metadata fetched

Package metadata is cached and normalized.

Review

Static analysis queued

Unknown tarball identity gets a worker job.

Block

Policy signal found

Lifecycle script changed in a patch release.

Override

Audited override

Reviewer approves with reason and expiry.

left-pad

1.3.0
Age
8 years
Downloads
1.2M weekly
Integrity
sha512-Qw8...
Decision
allow
Decision: allow

All policy checks passed for this immutable tarball identity.