Dependency curator

Curate the versions in your manifests

Pick a policy for every package in a manifest, deal with the exceptions one at a time, read the final files, then open or update a pull request. Lockfiles are generated for you and never edited by hand.

Get a Demo

Each policy shows what it would do before you pick it

Safest

The highest stable release that Safe Harbour clears.

Chosen by version order. A pre-release is never picked.

Stable

The stable release closest to the one you run.

Closest by major, then minor, then patch, with a tie going to the higher version. It can be lower than the version you run.

Latest

The highest stable release by the ecosystem's own version rules.

A pre-release is never picked. Where versions follow SemVer, the highest version wins whatever its date. Where versions cannot be ordered by number, the most recent release by date wins. A point release on an old branch is newer by date but is not the latest.

Rolling

What shipped most recently, closest to the one you run.

Takes every version published on the release day of the highest version, pre-releases included and malware removed, and picks the one closest to your version.

Every pick comes from versions Safe Harbour clears: no known vulnerability, exploit or malware report. The database works each one out with the ecosystem's own version rules. Safest and Latest are worked out separately, so they can name different versions. Today they usually agree.

Only the packages that need you ask for you

Packages fall into three groups: needs your decision, ready to ship, and no change. Fixes and routine updates the policy picked go straight into the change set. Anything riskier waits, and a pull request never includes it until you say so.

Fix a problem where it is cheapest to fix

A vulnerable package three levels down is rarely in your manifest. The curator shows it under the direct dependency that pulls it in, and offers three routes: pin it in the section your package manager uses for overrides, upgrade the parent, or leave it.

When accepting a parent brings a clean copy of the child, the child needs no override and drops out of the change set. Pins stay inside the versions the parents accept, so an override cannot break the resolve.

Lockfiles are generated, never edited

The curator edits only your manifests. We generate the lockfile from them on our servers, with install scripts switched off, and show it to you read only with the packages the resolver moved. Generation covers npm, Yarn, pnpm, Go, Cargo, Poetry, uv, Bundler and Composer. pip and Maven have no lockfile, so there is nothing extra to commit. If the resolver cannot satisfy your choices, it tells you which package conflicts with which, and the pull request waits until the lockfile matches.

The same change, read three ways

A pull request that carries on from the last one

Which manifests it writes

The editor writes package.json, requirements.txt and requirements.in, pyproject.toml, go.mod, Cargo.toml, pom.xml, composer.json and Gemfile. Every other manifest we read is shown and listed as not edited yet.

Try it on a repository you already scan.

Software composition analysis · Safe patching · Get a Demo

How an override lands in the manifest →