Firewall every dependency, across every ecosystem.

One proxy in front of 24 registries and the pkg.go.dev API: npm, PyPI, Cargo, Go, Maven, NuGet, RubyGems, Composer, Homebrew, Docker/OCI, Debian, RPM, Arch/AUR and more. Every install is checked against CVSS, EPSS, Coalition ESS, CISA KEV, malware intelligence, exploit maturity, and safe harbour guidance before it reaches your build. Go, the pkg.go.dev API, and Arch/AUR are free for the community; the rest unlock on Pro & Enterprise.

Get Free API Key

One command. Transparent interception.

Configure any package manager from the CLI. vulnetix package-firewall <ecosystem> wires it to the Package Firewall proxy at packages.vulnetix.com, writing the relevant config (GOPROXY/GOAUTH, .netrc, npm/pip/cargo settings). Ecosystems: go, go-dev, npm, python, ruby, php, rust, java, dotnet, homebrew. Every go get, npm install or pip install is then evaluated against your org's 12-policy ruleset before any code touches the machine, and logged so teams can prove exactly why each request passed, blocked, or errored. Blocked requests return HTTP 403 with a JSON reason body; clean packages stream from upstream mirrors.

$ vulnetix package-firewall go        # --proxy-url, --base-url, --dry-run available
configured GOPROXY=https://packages.vulnetix.com and GOAUTH via .netrc

$ go get github.com/beego/beego/v2@v2.0.0
go: github.com/beego/beego/v2@v2.0.0: verifying module: 403 Forbidden
{ "error": "blocked by policy",
  "reason": "CVSS 9.8 meets or exceeds your organisation threshold" }

Set the policy thresholds once in the VDB console; the CLI just points your toolchain at the proxy. Use --dry-run to preview the config changes before they are written.

12 policy controls, active immediately

CVSS

Block by vulnerability severity

Every dependency request is checked against the Vulnetix VDB for known CVEs. If the highest CVSS v3 score on any CVE for that exact version meets or exceeds your threshold, the download is blocked before it reaches your machine.

EPSS

Block by exploitation probability

EPSS, the Exploit Prediction Scoring System, measures how likely a vulnerability is to be exploited in the wild within the next 30 days. A CVE with CVSS 7.5 and EPSS 0.97 is more dangerous than one with CVSS 10.0 and EPSS 0.01. Scores update daily from FIRST.org.

Coalition ESS

Block by exploit availability probability

Coalition ESS reports Exploit Availability Probability: the likelihood that working exploit code becomes publicly available for threat actors to reuse. It answers whether an exploit is likely to be easy to find and operationalise, not just how severe the CVE is.

Malware

Block known malicious packages

blockMalware rejects any dependency flagged as a known malicious package before the module metadata even downloads. The VDB aggregates malware intelligence from OSSF Malicious Packages, OSV.dev malware advisories, and researcher-submitted samples, de-duplicated against a single corpus.

End-of-life

Block end-of-life dependencies

End-of-life packages accumulate unpatched CVEs: their maintainers have stopped issuing security fixes, so any new vulnerability becomes a permanent exposure. blockEol prevents teams from introducing EOL dependencies before they become a liability.

CISA KEV

Block CISA Known Exploited Vulnerabilities

CISA KEV inclusion isn't a prediction, it's confirmation: these vulnerabilities are being actively exploited right now. US federal agencies must patch within 2–3 weeks of KEV listing; blockKev applies that same standard to your dependency pipeline automatically.

Weaponized

Block weaponized exploits

A weaponized exploit is attack code that is mature, reliable, and ready for adversarial use, no expertise required. Honeypot intelligence tracks when PoC code graduates from a researcher's lab to an operational weapon, the kind that powers ransomware and mass exploitation.

Active

Block actively exploited vulnerabilities

blockActive blocks dependencies with confirmed active exploitation in the wild. CrowdSec tracks real attack traffic across millions of sensors globally; when a dependency's CVE shows up in live attack data, the proxy blocks it immediately.

PoC

Block when exploit code exists

A published proof-of-concept drastically lowers the barrier to exploitation: attackers can follow a recipe. The window between PoC publication and mass exploitation is measured in hours, not days. blockPoc closes that window for your dependency pipeline.

Bad actors

Block everything a compromised maintainer publishes

blockBadActors matches the maintainer behind a package, by registry account identity or by the GPG or SSH key their releases are signed with, against the Vulnetix threat-actor graph, and blocks that maintainer's whole catalogue. No CVE and no malware verdict are required. It also applies when a CVE itself carries threat-actor attribution: state-sponsored groups, ransomware operators and supply-chain specialists.

Cooldown

Delay newly published versions, carefully

Fast-follow supply chain attacks publish a malicious version seconds after a legitimate one, timed to catch automated upgrade scripts before the community notices. cooldownDays creates a time buffer, a hopeful freshness guard rather than proof of safety.

Version lag

Avoid being first on a release

versionLag: N blocks a version unless at least N newer versions have been published. It is release-count-based rather than time-based, but it still only guesses that later releases create more scrutiny. It does not prove the older version is safe.

Allow & deny lists

Your call overrides ours, in both directions

Signals decide the overwhelming majority of packages; for the rest your team keeps a per-ecosystem deny-list and allow-list, scoped to an exact version or a whole package. The deny-list is enforced in every mode, and wins when a package appears on both. An allow entry waives every policy-derived block but never exact-version malware, a known-bad artefact hash or a malscan verdict. Every change writes an append-only audit row, each entry records when it last stopped or permitted real traffic, and a review queue surfaces waivers nobody has re-approved or used.

Enforcement modes

Roll it out without stopping the line

Warn mode downgrades every block to a logged advisory that still names the reason and the status that would have been returned, so you can measure the blast radius against a live build fleet before committing. Enforce applies the policy, and is the default. Allow-list-only inverts the default so a package with no allow entry is not installable, and falls back to normal enforcement when the list is empty rather than halting every build. Set any of them organisation-wide or per ecosystem.

One firewall across your dependency surface

Go is free for community plans. Language registries unlock on Pro, while container, OS, and infrastructure registries sit on Enterprise. 25 registries are live today:

Go

Free Live

pkg.go.dev API

Free Live

npm

Pro Live

PyPI

Pro Live

Cargo

Pro Live

RubyGems

Pro Live

Hex

Pro Live

pub.dev

Pro Live

Maven

Pro Live

NuGet

Pro Live

Composer

Pro Live

Conan

Pro Live

Conda

Pro Live

CRAN

Pro Live

Julia

Pro Live

Docker / OCI

Enterprise Live

Debian / Ubuntu

Enterprise Live

RPM

Enterprise Live

Alpine

Enterprise Live

AUR

Free Live

Arch Linux

Free Live

Homebrew

Pro Live

Helm

Enterprise Live

Chef

Enterprise Live

Terraform

Enterprise Live

Quickstart: every ecosystem, one proxy

Pick your package manager. Most ecosystems are configured by a single vulnetix package-firewall <ecosystem> command: it writes the registry config and credentials for you, then every install is screened against policy. Full guides live in the Package Firewall docs.

Go

Free on Community plans. Native GOPROXY module proxy, the CLI writes GOPROXY/GOAUTH to your shell rc and credentials to ~/.netrc, so vulnerable modules are filtered before go get ever sees them.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Point the Go toolchain at the firewall. Writes ~/.netrc plus your
#    shell rc:  export GOPROXY="https://packages.vulnetix.com"
#               export GOAUTH="netrc"
vulnetix package-firewall go

# 3. Pull modules as normal: blocked versions are filtered from the
#    module index, so the resolver never selects them
go get rsc.io/quote@v1.5.2
go mod download

# 4. Verify the toolchain picked it up
go env GOPROXY GOAUTH

# Bonus: the pkg.go.dev API is proxied too (also free),
#   vulnetix package-firewall go-dev
# then point clients at https://packages.vulnetix.com/go-dev/v1beta

Arch / AUR

Free on Community plans. Covers AUR helpers (paru, yay) and the official pacman repos, malicious AUR packages are gated at download time so PKGBUILD signatures stay intact.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Configure AUR helpers: folds AurUrl/AurRpcUrl into
#    ~/.config/paru/paru.conf and ~/.config/yay/config.json
#    (originals backed up as <file>.vulnetix.bak)
vulnetix package-firewall aur

# 3. Official repos: install the staged mirrorlist, then add
#      Include = /etc/pacman.d/vulnetix-mirrorlist
#    above the other Server lines in [core] and [extra] in /etc/pacman.conf
sudo cp ~/.config/vulnetix/package-firewall/arch-mirrorlist \
  /etc/pacman.d/vulnetix-mirrorlist

# 4. Use as normal
paru -S some-aur-package
sudo pacman -Syu

npm

Filter mode: blocked versions are removed from the packument, so npm, pnpm, and Yarn resolvers never even see them. One command writes the registry and auth into ~/.npmrc.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Point npm at the firewall. Writes ~/.npmrc:
#      registry=https://packages.vulnetix.com/npm/
#      //packages.vulnetix.com/npm/:_auth=BASE64(org:key)
vulnetix package-firewall npm

# 3. Install as normal: blocked versions are filtered out of the
#    packument, so the resolver never selects them
npm install lodash

# 4. Pin a blocked version and the download answers with a semantic
#    status: 423 malware · 426 vulnerable · 425 cooldown · 428 bad actor

# 5. Verify
npm config get registry

PyPI

Filter mode: blocked releases vanish from the PyPI Simple index. Works with pip, pip-tools, uv, and Poetry once the index URL points at the firewall.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Point pip at the firewall. Writes ~/.config/pip/pip.conf:
#      [global]
#      index-url = https://ORG:KEY@packages.vulnetix.com/pypi/simple/
vulnetix package-firewall pypi

# 3. Install as normal: pip, pip-tools, and uv all honour the index
pip install flask
uv pip install flask --index-url "https://packages.vulnetix.com/pypi/simple/"

# 4. Verify
pip config list

Cargo

Filter mode: blocked crate versions are removed from the sparse index (requires Cargo ≥ 1.74). The CLI replaces crates-io as a source and stores the token in credentials.toml.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Replace crates-io with the firewall's sparse index (Cargo ≥ 1.74).
#    Writes ~/.cargo/config.toml:
#      [source.crates-io]  replace-with = "vulnetix"
#      [source.vulnetix]   registry = "sparse+https://packages.vulnetix.com/cargo/"
#    and the Basic token into ~/.cargo/credentials.toml
vulnetix package-firewall cargo

# 3. Build as normal: blocked versions vanish from the index
cargo add serde
cargo build

RubyGems

Filter mode: blocked gem versions are removed from the version index for both the gem CLI and Bundler.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Point RubyGems at the firewall. Writes the source into ~/.gemrc
#    and the Bundler credential, equivalent to:
#      bundle config packages.vulnetix.com ORG_UUID:API_KEY
vulnetix package-firewall gem

# 3. Install as normal
gem install rails
bundle install

Hex

Gate mode: Hex’s signed registry index is served untouched so signature verification still passes; blocked versions are refused at tarball download instead.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Set the Hex mirror. Writes ~/.config/vulnetix/package-firewall/hex.env:
#      export HEX_MIRROR="https://packages.vulnetix.com/hex"
vulnetix package-firewall hex

# 3. Load the env, then fetch deps as normal, the signed index passes
#    verification untouched; blocked tarballs are refused at download
source ~/.config/vulnetix/package-firewall/hex.env
mix deps.get

pub.dev

Filter mode via PUB_HOSTED_URL: blocked versions are removed from the package listing for both Dart and Flutter.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Set the hosted URL. Writes ~/.config/vulnetix/package-firewall/pub.env:
#      export PUB_HOSTED_URL="https://packages.vulnetix.com/pub"
vulnetix package-firewall pub

# 3. Load the env, then resolve as normal
source ~/.config/vulnetix/package-firewall/pub.env
dart pub get    # or: flutter pub get

Maven

Filter mode: blocked versions are removed from maven-metadata.xml. The CLI writes a catch-all mirror plus server credentials into ~/.m2/settings.xml; Gradle uses the same URL with credentials in settings.gradle.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Mirror all repositories through the firewall. Writes ~/.m2/settings.xml:
#      <mirror>  id=vulnetix-package-firewall  mirrorOf=*
#                url=https://packages.vulnetix.com/maven/
#      <server>  username=ORG_UUID  password=API_KEY
vulnetix package-firewall maven

# 3. Resolve as normal: blocked versions are filtered from
#    maven-metadata.xml before the resolver reads it
mvn dependency:resolve

# Gradle: declare the same URL with credentials in settings.gradle
./gradlew build

NuGet

Filter mode: blocked versions are removed from the v3 service index. The CLI clears the default sources and adds the firewall with credentials in NuGet.Config.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Replace the default source. Writes ~/.nuget/NuGet/NuGet.Config:
#      <clear /> then adds
#      https://packages.vulnetix.com/nuget/v3/index.json  + credentials
vulnetix package-firewall nuget

# 3. Restore as normal
dotnet restore
dotnet add package Newtonsoft.Json

Composer

Filter mode: blocked versions are removed from the Composer repository metadata. The firewall repository replaces packagist.org globally.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Replace packagist.org. Writes ~/.composer/config.json:
#      repositories.vulnetix = https://packages.vulnetix.com/composer
#      repositories."packagist.org" = false
#      http-basic."packages.vulnetix.com" = { ORG_UUID, API_KEY }
vulnetix package-firewall composer

# 3. Install as normal
composer require monolog/monolog
composer install

Conan

Gate mode: revision metadata is served untouched; blocked package downloads are refused. The CLI writes the remote (and disables conancenter) in ~/.conan2/remotes.json.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Add the firewall remote (Conan 2.x). Writes ~/.conan2/remotes.json,
#    "vulnetix" enabled, "conancenter" disabled, and the credentials
#    into ~/.conan2/credentials.json
vulnetix package-firewall conan

# 3. Install as normal: revision metadata passes untouched, blocked
#    package downloads are refused
conan install . --remote=vulnetix

Conda

Filter mode: blocked versions are removed from repodata.json. CLI automation is not shipped yet: two files by hand, conda authenticates from ~/.netrc.

# Conda setup is manual for now: conda reads ~/.netrc for auth.
# 1. Credentials
cat >> ~/.netrc <<'EOF'
machine packages.vulnetix.com
login YOUR_ORG_UUID
password YOUR_API_KEY
EOF

# 2. Point the channels at the firewall
cat > ~/.condarc <<'EOF'
channels:
  - https://packages.vulnetix.com/conda/main
  - https://packages.vulnetix.com/conda/conda-forge
default_channels:
  - https://packages.vulnetix.com/conda/main
EOF

# 3. Install as normal: blocked versions are filtered from repodata.json
conda install numpy

CRAN

Filter mode: blocked versions are removed from the PACKAGES index. The CLI sets the repo in ~/.Rprofile and switches downloads to libcurl so R authenticates from ~/.netrc.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Point R at the firewall. Writes ~/.Rprofile:
#      options(repos = c(CRAN = "https://packages.vulnetix.com/cran"))
#      options(download.file.method = "libcurl")   # auth via ~/.netrc
vulnetix package-firewall cran

# 3. Install as normal
Rscript -e 'install.packages("ggplot2")'

Julia

Gate mode, the package server index is served untouched; blocked artifact downloads are refused. One env var, set before Julia starts.

# Julia setup is one env var: it must be set before Julia starts.
export JULIA_PKG_SERVER="https://packages.vulnetix.com/julia"

# Install as normal: the index passes untouched, blocked artifact
# downloads are refused
julia -e 'using Pkg; Pkg.add("Example")'

Homebrew

Both the formula API and bottle downloads route through the firewall. NO_FALLBACK is required, without it Homebrew silently falls back to ghcr.io and bypasses the firewall.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Writes ~/.config/vulnetix/package-firewall/homebrew.env:
#      HOMEBREW_API_DOMAIN       formula/cask API via the firewall
#      HOMEBREW_ARTIFACT_DOMAIN  bottle downloads via the firewall
#      HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK=1
#    NO_FALLBACK matters: without it Homebrew silently falls back to
#    ghcr.io and bypasses the firewall entirely
vulnetix package-firewall homebrew

# 3. Load the env, then brew as normal
source ~/.config/vulnetix/package-firewall/homebrew.env
brew install wget

# 4. Verify
brew config | grep HOMEBREW_API_DOMAIN

Docker / OCI

Enterprise plan. Gate mode: manifests and digests are served untouched so image signatures still verify; blocked tags fail at pull. Manual config, requires root.

# 1. Register the firewall as a registry mirror (requires root)
sudo tee /etc/docker/daemon.json <<'EOF'
{ "registry-mirrors": ["https://packages.vulnetix.com"] }
EOF

# 2. Authenticate: org UUID as username, API key as password
docker login packages.vulnetix.com

# 3. Restart the daemon, then pull as normal, manifests and digests
#    pass untouched so signatures verify; blocked tags fail at pull
sudo systemctl restart docker
docker pull nginx:1.25

Debian / Ubuntu

Enterprise plan. Gate mode: Release/InRelease signatures pass untouched; blocked packages fail at download with a policy status. Manual config, requires root.

# 1. Add the firewall as an APT source (requires root)
echo 'deb https://packages.vulnetix.com/debian stable main' | \
  sudo tee /etc/apt/sources.list.d/vulnetix.list

# 2. Credentials in auth.conf.d: must be mode 600
sudo tee /etc/apt/auth.conf.d/vulnetix.conf <<'EOF'
machine packages.vulnetix.com
login YOUR_ORG_UUID
password YOUR_API_KEY
EOF
sudo chmod 600 /etc/apt/auth.conf.d/vulnetix.conf

# 3. Install as normal: Release signatures pass untouched; blocked
#    packages fail at download with a policy status
sudo apt update
sudo apt install <package>

RPM

Enterprise plan. Gate mode: repomd.xml signatures pass untouched; blocked packages fail at download. Manual config, requires root.

# 1. Add the firewall repo (requires root)
sudo tee /etc/yum.repos.d/vulnetix.repo <<'EOF'
[vulnetix]
name=Vulnetix Package Firewall
baseurl=https://packages.vulnetix.com/rpm/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=1
username=YOUR_ORG_UUID
password=YOUR_API_KEY
EOF

# 2. Install as normal: repomd.xml signatures pass untouched; blocked
#    packages fail at download
sudo dnf install <package>

Alpine

Enterprise plan. Gate mode: APKINDEX signatures pass untouched; blocked packages fail at download. Manual config, requires root.

# 1. Point apk at the firewall (requires root)
sudo tee /etc/apk/repositories <<'EOF'
https://YOUR_ORG_UUID:YOUR_API_KEY@packages.vulnetix.com/alpine/v3.20/main
https://YOUR_ORG_UUID:YOUR_API_KEY@packages.vulnetix.com/alpine/v3.20/community
EOF

# 2. Install as normal: APKINDEX signatures pass untouched; blocked
#    packages fail at download
apk update
apk add <package>

Helm

Enterprise plan. Filter mode: blocked chart versions are removed from the repository index. The CLI writes the repo with credentials into ~/.config/helm/repositories.yaml.

# 1. Authenticate once: org UUID is the username, API key the password
vulnetix auth login --org-id "$VULNETIX_ORG_ID" --api-key "$VULNETIX_API_KEY"

# 2. Add the firewall repo. Writes ~/.config/helm/repositories.yaml,
#    equivalent to:
#      helm repo add vulnetix https://packages.vulnetix.com/helm \
#        --username ORG_UUID --password API_KEY --pass-credentials
vulnetix package-firewall helm

# 3. Install as normal: blocked chart versions are filtered from the
#    repo index
helm repo update
helm install myrelease vulnetix/<chart>

Chef

Enterprise plan. Filter mode: blocked cookbook versions are removed from the universe index. Manual config for Berkshelf and knife.

# Chef setup is manual: point Berkshelf and knife at the firewall.
# Berksfile:
#   source "https://packages.vulnetix.com/chef"
# knife.rb:
#   knife[:supermarket_site] = "https://packages.vulnetix.com/chef"

# Resolve as normal: blocked cookbook versions are filtered from the
# universe index
berks install
knife supermarket download <cookbook>

Terraform

Enterprise plan. Filter mode: blocked provider versions are removed from the network mirror index. Manual config in ~/.terraformrc.

# 1. Route provider installs through the firewall's network mirror
cat > ~/.terraformrc <<'EOF'
provider_installation {
  network_mirror {
    url = "https://packages.vulnetix.com/terraform/"
  }
  direct {}
}
EOF

# 2. Credentials via env var (or a credentials block in ~/.terraformrc)
export TF_TOKEN_packages_vulnetix_com="YOUR_TOKEN"

# 3. Init as normal: blocked provider versions are filtered from the
#    mirror index
terraform init

How the Vulnetix Package Firewall compares

Evaluating Aikido SafeChain, Socket, JFrog Artifactory or DevGuard? Each is a capable supply-chain tool; here is where the Vulnetix Package Firewall is different, and where it wins.

Largest malware corpus

One de-duplicated corpus, every major feed

The firewall checks each install against a malware corpus that aggregates OSSF Malicious Packages, OSV.dev malware advisories, GitHub Advisory and Vulnetix first-party research into one de-duplicated set: one of the largest in the industry, and broader than any single-feed scanner.

Most configurable

12 policy controls, including EOL & exploit intelligence

Beyond malware, gate installs on CVSS, EPSS, Coalition ESS, CISA KEV, weaponized / active / PoC exploit maturity, bad-actor association, cooldown and version lag, plus end-of-life blocking that competitors do not offer. Tune every threshold per ecosystem.

Curation you can audit

Your own allow-list and deny-list, with a review queue

Signals decide most packages; you decide the rest. Keep per-ecosystem allow and deny lists scoped to an exact version or a whole package, each with an append-only audit trail, a last-seen timestamp recorded when the entry actually stops or permits traffic, and a staleness queue that surfaces waivers nobody has reviewed or used. An allow entry waives policy, never exact-version malware, a known-bad hash or a malscan verdict.

Roll out without an outage

Observe first, then enforce — or default-deny

Warn mode downgrades every block to a logged advisory carrying the reason and the status that would have been returned, so you can measure blast radius against a live build fleet before enforcing. Allow-list-only mode inverts the default so nothing installs without approval, and falls back to normal enforcement when the list is empty rather than halting every build. Set either org-wide or per ecosystem; the deny-list is enforced in all of them.

Safe Harbour autofix

Block, then fix, not just alert

When a version is blocked, Safe Harbour resolves the nearest safest / latest / stable version that clears the finding and autofixes to it. This remediation step is unique to Vulnetix, found nowhere else among package firewalls.

Vulnetix Package Firewall vs Aikido SafeChain, Socket, JFrog & DevGuard

Aikido SafeChain

A free CLI that wraps npm / pnpm / yarn to block known-malicious packages at install time.

They focus on Malware interception for JavaScript package managers.

Vulnetix edge Vulnetix firewalls 25+ registries (not just JavaScript) and layers 12 configurable policies (CVSS, EPSS, Coalition ESS, CISA KEV, end-of-life, exploit maturity) on top of malware blocking, then offers Safe Harbour autofix to a known-clean version.

Vulnetix vs Aikido SafeChain →

Socket

Socket.dev and Socket Firewall (sfw): behavioural / AI analysis of package signals such as install scripts, obfuscation and network access.

They focus on Detecting and alerting on suspicious package behaviour, mostly across npm and PyPI.

Vulnetix edge Vulnetix adds policy-grade gating on CVSS, EPSS, Coalition ESS, CISA KEV, end-of-life and exploit maturity, draws on a de-duplicated malware corpus aggregated from OSSF Malicious Packages, OSV.dev and GitHub Advisory, and turns a block into a fix with Safe Harbour autofix, not just an alert.

Vulnetix vs Socket →

JFrog Artifactory, Curation & Xray

Artifactory is a universal repository manager whose remote repositories cache upstream artefacts and can be restricted with include/exclude patterns; Curation gates packages on the way in; Xray scans stored artefacts for CVEs and licence issues.

They focus on Owning the binary as a stored, cached artefact — allow-list patterns, offline resilience and retention — with policy gating and SCA layered on for teams standardised on the JFrog Platform.

Vulnetix edge Vulnetix needs no Artifactory because it proxies any package manager directly, and it adds end-of-life and exploit-intelligence policies, threat-actor maintainer attribution and Safe Harbour autofix, free for Go and Arch/AUR. Artifactory keeps the edge on artefact storage: it caches what it proxies and Vulnetix does not.

Vulnetix vs JFrog Artifactory, Curation & Xray →

DevGuard

An open-source DevSecOps platform covering SCA, SBOM, VEX and in-toto supply-chain attestations.

They focus on Self-hosted, open-source software-composition and supply-chain attestation.

Vulnetix edge Vulnetix pairs a managed VDB and de-duplicated malware corpus with exploit intelligence, a 25+ registry install-time firewall, and Safe Harbour autofix, with no infrastructure to run.

Vulnetix vs DevGuard →

See all package firewall alternatives compared →

Package Firewall: frequently asked questions

Is the Vulnetix Package Firewall an alternative to Aikido SafeChain?

Yes. Aikido SafeChain blocks malicious npm/pnpm/yarn packages at install. The Vulnetix Package Firewall does the same across 25+ registries, not just JavaScript, and adds 12 configurable policies (CVSS, EPSS, Coalition ESS, CISA KEV, end-of-life, exploit maturity) plus Safe Harbour autofix to a known-clean version.

How is Vulnetix different from Socket?

Socket analyses package behaviour and alerts on suspicious signals. Vulnetix turns that into enforceable policy: it gates installs on CVSS, EPSS, CISA KEV, end-of-life and exploit maturity against a de-duplicated malware corpus, then remediates with Safe Harbour autofix instead of only raising an alert.

Do I need JFrog Artifactory to use the Vulnetix Package Firewall?

No. JFrog Curation gates packages entering Artifactory and Xray scans artefacts within the JFrog Platform. The Vulnetix Package Firewall is a standalone proxy in front of any package manager, with no Artifactory required, and adds end-of-life and exploit-intelligence policies plus Safe Harbour autofix, free for Go and Arch/AUR.

How does Vulnetix compare to DevGuard?

DevGuard is a self-hosted open-source DevSecOps platform for SCA, SBOM and attestation. Vulnetix is a managed service that pairs a de-duplicated malware corpus and exploit intelligence with a 25+ registry install-time firewall and Safe Harbour autofix, with no infrastructure to run.

What makes Vulnetix Safe Harbour autofix unique?

When the firewall blocks a version, Safe Harbour resolves the nearest safest, latest or stable version that clears the finding and autofixes to it. Competing package firewalls block or alert; Safe Harbour autofix, which fixes as well as blocks, is found only in Vulnetix.

Can I deny-list a specific package myself, or only what the firewall flags?

Both. Beyond the twelve signal policies you keep a per-ecosystem deny-list of your own, scoped to an exact version or the whole package. It is enforced in every mode, including observation mode, and it wins if a package somehow appears on both your lists. Every entry carries a reason, an append-only audit trail and a last-seen timestamp, so the list can be reviewed and pruned rather than growing forever.

Can I block every package a known-bad maintainer publishes?

Yes, and it does not depend on malware being detected first. Enable blockBadActors and the firewall matches a package's maintainer account, and the GPG or SSH fingerprint its releases are signed with, against the Vulnetix threat-actor graph, then blocks that maintainer's entire catalogue. The block names the actor it matched.

Can I run the firewall in a report-only mode before enforcing it?

Yes. Warn mode serves every package but downgrades each block to a logged advisory that still carries the reason and the status that would have been returned, so you can quantify what enforcement would stop before you turn it on. Your deny-list keeps blocking throughout. Set it organisation-wide or per ecosystem.

Can I allow only an approved list of packages and block everything else?

Yes. Allow-list-only mode inverts the default: a package with no allow entry is not installable, set organisation-wide or for a single ecosystem. As a safety interlock an empty allow-list falls back to normal enforcement, so a half-configured rollout cannot halt every build.

Does the Package Firewall cache packages so builds survive a registry outage?

No. It streams from upstream and stores no artefacts, so resilience comes from trying your configured mirrors in priority order rather than from a local cache. If you need builds to keep running with no upstream at all, put a caching repository manager behind it and point a Vulnetix mirror at that repository: you keep its cache and gain firewall policy in front.

Protect your Go workspace today

Free for community plans. One command to configure. 12 policy controls active immediately, blocking malware, critical CVEs, active exploits, and fast-follow attacks before they reach your machine.

curl -fsSL https://cli.vulnetix.com/install.sh | sh

Get Free API Key →