Yellow Jack logo: the yellow quarantine flag on a masthead

The self-hosted package firewall

Your firewall never sees what your developers install.

Yellow Jack does.

A gate you run on your own infrastructure for npm, PyPI, Maven and Docker. Every package fetched through it is checked against published malware advisories and your own policy before it reaches a laptop or a build — and your dependency list never leaves your network.

developer laptop
$ npm --registry http://localhost:8080 install is-number
added 1 package in 3s

$ npm --registry http://localhost:8080 install left-pad
npm error code E403
npm error 403 Forbidden - GET http://localhost:8080/left-pad
  - blocked by firewall:
  package "left-pad" is on this organisation's deny list;
  refused without contacting upstream. This is a local
  policy decision, not a published malware advisory ...
Output from our reference deployment, wrapped to fit.
4 ecosystemsnpm · PyPI · Maven · Docker
Byte-for-bytepackage files and integrity hashes, untouched
60.8 MiBidle, whole stack · how we measured
Every blocknames its reason and what happens next

The problem

The install is the attack surface.

Every npm install, pip install and docker pull runs code your organisation didn't write, on laptops and build servers that hold your credentials. To your network firewall it is ordinary HTTPS to a registry it already trusts.

In September 2025, an attacker who phished a single npm maintainer published malicious releases of chalk and debug — packages present in a vast share of JavaScript builds. Within weeks the Shai-Hulud worm was stealing publishing tokens and republishing itself across hundreds of npm packages.

A scanner reports that after the fact. By then, the code has already run.

How it works

A checkpoint between your builds and the public registries.

Where Yellow Jack sitsDeveloper laptops and CI send package requests to Yellow Jack, which runs inside your network. It checks each package and fetches allowed ones from the public registries. Every decision is recorded in the audit log and console.YOUR NETWORKDevelopersand CInpm · pip · mvn · dockerYellow Jack✓ Published malware advisories✓ Release-age cooldown✓ Your allow and deny lists○ Repository health (optional)Audit log · console · decision exportPublicregistriesnpmjs · PyPI · Maven · OCIrequestif allowedbytes, or a 403with its reason
  1. 01

    Point your clients at it

    npm, pip, Maven and Docker already know how to use a different registry. Yellow Jack runs as containers on your own infrastructure — nothing to install on a developer's machine.

  2. 02

    Each pull is checked

    Before a package reaches a laptop or a build, it is evaluated against advisories and your policy. Malware and deny-list decisions are made without contacting the registry at all.

  3. 03

    Allowed, or refused with a reason

    Allowed package files pass through byte-for-byte. Refused ones fail in the developer's terminal with the reason, and every decision lands in the audit log.

The controls

Policy you can read, explain and defend.

Advisories

Published malware, refused locally

Every package is checked against published malware advisories — the OpenSSF Malicious Packages data, via OSV — held on your own server and consulted before any network call is made.

npm and PyPI in practice — public advisories barely cover Maven or Docker

Cooldown

Brand-new releases wait

A new version isn't admitted until it has been public for 14 days — or as long as you choose — which gives maintainers and advisory feeds time to catch a bad one. Resolvers settle on the last release that is old enough.

On by default for npm, PyPI and Maven

Your lists

Your own allow and deny lists

Block a package by name or a single release; allow what your team has vetted. Keep the lists in git so every change has an author — the git-enabled console can edit them and commit for you.

All four ecosystems

Optional

Repository health and human review

Score the source repository behind a package with OpenSSF Scorecard, and route anything that can't be scored to a reviewer's queue instead of guessing.

Optional add-on

The console

Every decision, on the record.

See what the gate decided, for which machine, and why — and what each replica is actually enforcing, rather than what a config file says it should be.

⚑ Yellow Jack — Audit Log5 recent event(s)
Approval queue · Audit log · Downloads by IP · Package activity · Enforced policy · Operator lists · Package lookup
any verdict ▾Export .jsonl ↓
WhenPackageEcosystemVerdictSourceReason
2026-09-15 02:49:41 UTCis-numbernpmallow172.20.0.1score 7.5 >= threshold 0.0
2026-09-15 02:48:58 UTCleft-padnpmblock172.20.0.11package "left-pad" is on this organisation's deny list; refused without contacting upstream. This is a local policy decision, not a published malware advisory
2026-09-15 02:47:43 UTCleft-padnpmblock172.20.0.1package "left-pad" is on this organisation's deny list; refused without contacting upstream. This is a local policy decision, not a published malware advisory
⚑ Enforced policy3 replicas reporting
Replicas are enforcing different policies3 distinct policies are in force across the replicas that are currently reporting. If it persists, some replicas did not pick up a change.

Policy 2b7743eca4bd3f4c — 1 replica · npm

  1. allow OSSF score at or above threshold
  2. reject block everything
  3. reject terminal: block everything (implicit)

A request matching no rule above is rejected.

  • Approval queue — what's waiting on a human, how long it has waited, and who decided.
  • Audit log — every allow and block with its reason, filterable and exportable.
  • Downloads by source — which machines pulled what, for incident response.
  • Enforced policy — the rules each replica reports it is running, in order.
  • Operator lists — what you've authored beside what the fleet has loaded.
  • Package lookup — everything the gate has seen and decided about one package.

Rebuilt from our reference deployment's console, 15 September 2026 — real labels and rows; some columns and reason text shortened to fit.

Security

Built for the people who have to sign off on it.

A package firewall sits in the path of every dependency your teams pull. It should be the easiest part of that path to trust — so these are properties we test, not adjectives.

What your developers install stays on your network

The gate decides locally. By default no inventory, no SBOM and no usage telemetry is sent to us — we never learn which packages you use.

We never alter a package's bytes or its integrity data

npm checks every download against the registry's own integrity hash — so you can verify this one without trusting us.

No third-party code in the gate

A firewall in your supply chain shouldn't widen it. The gate binary links only Go's standard library, and our build fails if a third-party package gets in.

What it can't identify, it refuses

A request the gate can't recognise as a package fetch is blocked by default, not waved through to the registry.

Same package, same policy, same answer

Verdicts are deterministic — the same decision and the same reason, whether the gate is idle or under load.

Every refusal says why

The reason travels in the response the client receives and into the audit log, with what happens next and who decides it.

Evidence for your auditors

Yellow Jack helps you show the work. It doesn't make you compliant, and we won't tell you it does.

ObligationWhat it asksWhat you can show
NIST SSDF (SP 800-218) PW.4.1, PW.4.4Acquire well-secured third-party components, and verify they meet your requirementsA policy decision on every component fetched through the gate, with its reason
EU Cyber Resilience Act, Art. 13(5)Exercise due diligence when integrating third-party componentsAn exportable log of every package allowed or refused, and why
Incident response"Did it get in — where, and when?"Search decisions by package, ecosystem and verdict; see which machines pulled it

What we don't have yet

Customer logos, analyst coverage and a SOC 2 report — and our source isn't public yet. So we won't ask you to take our word for anything on this page. We'll show you, on a gate running in front of you, with the engineers who built it.

Who's building it

A small team, with Georgia Tech roots.

Security software written by the people you'll talk to. We'll be sharing what we learn — including write-ups on real supply-chain attacks — on our blog.

  • Vineet

    Vineet

    AI Engineering

  • D

    Dylan

    DevOps Engineering

Worth thirty minutes of your team's time?

We'll walk your security and platform leads through a live gate. Bring a few packages you depend on and see what it decides, and why.