For teams that publish SDKs, CLIs and images
Publish GuardCheck how your packages reach their registries - before a stolen token publishes for you.
List your packages and paste your release workflow. Your browser dates every credential against today, flags long-lived tokens where the registry offers OIDC, counts owners and phishing-resistant 2FA, and lints the workflow: dangerous triggers, default permissions, SHA-pinned actions, caches, the build and publish split and a protected environment. It ranks the credential rung per registry, says what goes first, scores the five gates, and writes a hardened workflow and a rollback sheet. Then the publishing plan, and the rollback runbook. Never paste a real token - if one slips in, it is masked and never sent. An independent tool - not affiliated with or endorsed by npm, PyPI, Maven Central, NuGet, crates.io, RubyGems, Docker Hub, GitHub or any registry or CI it names.
The team, and a short interview free
Packages and the release workflow free
Versions, rollback and private packages free
The checks free
What the page flags
The five gates
Every package
The credential rung per registry
The workflow's jobs, read
Area by area
Your hardened workflow and rollback sheet free
A draft release workflow - build once without privileges, one publish job per registry in a protected environment, triggered by a tag, actions and secrets as placeholders - and the per-registry rollback sheet.
Release workflow (YAML)
Rollback sheet (Markdown)
The publishing plan metered
Pricing as soon as the session is ready...
Sign inThe reply could not be read. Here it is as it came back:
Caveats
Caveats
The page's check of this reply
Saved plans
How it works - and what is sourced
The checks follow the skill: no long-lived token on a registry that accepts OIDC from your CI, and every other token scoped and expiring (npm and NuGet tokens now expire within 30-90 days, so one with no expiry on record is treated as lost); nothing expired or expiring within two weeks of the as-of date; at least two owners per package on a security key or passkey; no laptop publishes; no pull_request_target or workflow_run trigger on the release workflow; default permissions none; third-party actions pinned to a full commit SHA; no restored caches; the OIDC identity only in the publish job; the publish job in a protected environment, separate from the build; a dry-run step; a written, rehearsed rollback per registry; signed binaries with checksums; internal names blocked from public upstreams. Publish steps are recognised by their commands (npm publish, twine, gem push, cargo publish, nuget push, mvn deploy, goreleaser, docker push and others).
The rankings follow the skill: trusted publishing bound to a protected environment by default, the narrowest bot-owned token where no OIDC exists, the tag ruleset where the tag is the release (Go, SwiftPM, Packagist); a human approval gate for paying customers, many dependents or after an incident; provenance when buyers ask. A deadline migrates the registry whose credential runs out first; an incident runs the rollback runbook first. Private consumption: one blocking internal endpoint when you control the feed, explicit client mapping otherwise.