Npm Trusted publishing setup — check your npm release setup online

npm classic tokens were revoked 2025-12-09 and granular write tokens now expire in 90 days. Finds the token, OIDC and provenance gaps that will 401 your next release, in GitHub Actions and GitLab CI. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hub
ext install ReadyStack.npm-trusted-publish-lint
npx @readystack/npm-trusted-publish-lint <file>
npx @readystack/npm-trusted-publish-lint --mcp

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 15 rules npm Trusted Publish Lint checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the complete version $29

This page is the working piece. The full pack has everything below.

Finds the credential in your release workflow that expires before your next release

A freelance DevOps engineer is a median $60/hour on Upwork (typical range $40-$100); reading one release workflow and rewriting it for OIDC is most of an hour

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

npm Trusted Publish Lint

Sixteen findings, six of them blocking, came back from a twenty-five line release workflow - the file a Node package maintainer in Berlin gets when they ask a coding assistant for "a GitHub Action that publishes my package to npm".

Nothing in that workflow is broken today. It checks out the repository, installs, builds, and runs npm publish with NODE_AUTH_TOKEN read from a repository secret. That is exactly what makes it expensive: the file keeps passing CI right up to the morning it answers E401 Unauthorized, and that morning is not one you picked.

Here is what moved underneath it. npm revoked every classic token on 2025-12-09. The replacement - a granular access token with write scope - cannot be given a lifetime longer than 90 days, so a token minted on 2026-09-14 stops working on 2026-12-13 whether or not a release is planned that week. There is a different shape: OIDC trusted publishing, where GitHub Actions or GitLab CI mints a credential for one run, so nothing in your repository can expire or leak.

Coding assistants write the old shape because the old shape is what a decade of public workflows looks like. The secret block, the .npmrc echo, the --otp flag: all of it was correct advice for years, and all of it is now the reason a release stops.

npm Trusted Publish Lint reads the file you have open and reports the lines, not a score. Fifteen rules, in five groups. Credential: a stored npm token in the job environment, an _authToken line written into .npmrc, a literal npm_ token committed to the file, a one-time password passed on the command line. OIDC readiness: no id-token: write anywhere in a file that publishes, no environment binding on the publish job, an npm CLI pinned to 10 or older when trusted publishing needs 11.5.1. Blast radius: permissions: write-all, a pull_request_target trigger in a file that can publish, an action pinned to a moving ref like @main. Job hygiene: an install that runs dependency lifecycle scripts beside the publish credential, a curl piped into a shell, a plain http registry URL, a job still on Node 18. Attestation: npm publish without --provenance, so the tarball on the registry carries no signed link back to the run that built it.

On the sample file the six blocking findings are concrete. permissions: write-all becomes contents: read at the top and id-token: write on the publish job. The http registry URL becomes https. The .npmrc echo disappears entirely. The missing id-token: write is added. NODE_AUTH_TOKEN with a repository secret gives way to a credential the runner mints for the run.

The same file rewritten that way returns zero findings. That is the whole point of a line-level check: you can tell when you are finished.

Why not npm audit? npm audit reads your dependency tree; it never opens your workflow. A secret scanner fires only on a literal token you committed. Neither one knows the date the classic tokens died or the ceiling on the token that replaced them.

The check is free - all fifteen rules, every line, every file you open, in the editor or in the browser, no key and no account. The paid layer changes what you take away rather than what you are allowed to see: it sweeps every workflow in the repository in one pass and writes the audit to a dated Markdown or CSV file. $29 once.

For scale: a freelance DevOps engineer is a median $60 an hour on Upwork, with the usual range running $40 to $100. Reading one release workflow line by line, checking it against npm's current token rules and rewriting it for OIDC is most of an hour.

15 seconds — what it actually does

Questions people ask

What does npm Trusted Publish Lint actually do?

It reads a release workflow, an .npmrc line or a package.json and reports every place your npm publish still leans on a credential with an expiry date. Fifteen rules cover stored tokens, missing id-token: write, missing provenance, mutable action refs and install scripts running beside your publish credential. Each finding lands on its own line with the fix named.

Who is this for?

Node package maintainers and release engineers who publish to npm from GitHub Actions or GitLab CI - the solo maintainer with one publish.yml, and the platform engineer who owns forty of them in a monorepo. If your release job still carries NODE_AUTH_TOKEN or an .npmrc line, every rule here is about your file.

Why is npm audit or a secret scanner not enough?

npm audit reads your dependency tree, not your workflow, and a secret scanner only fires on a literal token you committed. Neither one knows that classic tokens were revoked on 2025-12-09, that a granular write token cannot outlive 90 days, or that trusted publishing needs id-token: write in that exact job.

What is free and what costs money?

Free is the whole check: all 15 rules, every line, every file you open, in the editor or in the browser, with no key and no account. The paid layer changes what you take away - it sweeps every workflow in the repository in one pass and writes the audit to a dated Markdown or CSV file.

What would this cost me otherwise?

A freelance DevOps engineer is a median $60 an hour on Upwork, with the usual range running $40 to $100. Reading one release workflow line by line, checking it against npm's current token rules and rewriting it for OIDC is most of an hour. The extension is $29 once.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. npm Trusted Publish Lint checks the file you open against 15 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.