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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 Livepkg.go.dev API
Free Livenpm
Pro LivePyPI
Pro LiveCargo
Pro LiveRubyGems
Pro LiveHex
Pro Livepub.dev
Pro LiveMaven
Pro LiveNuGet
Pro LiveComposer
Pro LiveConan
Pro LiveConda
Pro LiveCRAN
Pro LiveJulia
Pro LiveDocker / OCI
Enterprise LiveDebian / Ubuntu
Enterprise LiveRPM
Enterprise LiveAlpine
Enterprise LiveAUR
Free LiveArch Linux
Free LiveHomebrew
Pro LiveHelm
Enterprise LiveChef
Enterprise LiveTerraform
Enterprise LiveQuickstart: 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 installConan
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.25Debian / 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.
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.
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.
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.
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.
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.
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.
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.
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.
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