Hawk sits between your developers and the public registries. It intercepts every package request, gathers supply-chain intelligence, scans for known vulnerabilities, and runs your TypeScript security policy before the byte lands on disk.
npm install, pip install, or cargo add — your dev runs the same command they always have.
The request hits Hawk first. Supply-chain signals gathered, CVEs checked against OSV, and your TypeScript policy runs - all before the package is forwarded.
Clean packages pass through. Violating packages are blocked with an audit log entry and a clear error message.
Write your admission logic as real TypeScript and return allow() or deny(). Hawk runs it in a V8 sandbox on every request and fails closed if a policy errors or never reaches a verdict.
Hawk's scrobe collector enriches every package with maintainer reputation, GitHub repo health, commit-signing rate, and release cadence - all queryable from policy as ctx.scrobe.
Every package is checked against OSV.dev, which aggregates NVD, GHSA, and PyPA. Your policy reads the live vulnerability count from ctx.scrobe.vulns and can deny on known-vulnerable releases.
Hawk detects npm Sigstore provenance and PyPI PEP 740 attestations, exposing has_provenance and has_attestation signals so policy can require a trusted publisher.
Every package request runs your policy in a V8 sandbox with no filesystem, network, or host access. Return allow() or deny() - anything else, a thrown error or a missing verdict, fails closed. Edit the policy below and watch the verdict change live.
A fresh V8 isolate per evaluation with zero ops registered. No fs, no network, no syscalls reachable from policy code.
A transpile error, a thrown exception, or a policy that never calls allow/deny is treated as a deny. Broken policies block.
Policies live in Postgres. A NOTIFY rebuilds the snapshot on every replica in under a second - no restart.
No SDK. No agent. No code changes. Update one line in your package manager config and every developer on your team gets security enforcement automatically.
# .npmrc registry=https://hawk.your.co/npm/
# pip.conf [global] index-url = https://hawk.your.co/pypi/
# shell or .envrc export UV_INDEX_URL=https://hawk.your.co/pypi/simple/
# Pull and run Hawk docker run -d \ -p 8080:8080 \ -e HAWK_DATABASE_URL=postgres://... \ -v ./hawk-config:/etc/hawk \ ghcr.io/your-org/hawk:latest
helm repo add hawk \ https://charts.hawk.your.co helm install hawk hawk/hawk \ --set registry.upstream=registry.npmjs.org
Every allow, quarantine, and deny is written to a structured log with package identity, resolved version, the signals that were evaluated, and the policy that fired.