You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
opts.access now defaults to null instead of 'public'. With null, libnpmpublish no longer sets an explicit access level in the publish payload, so new scoped packages are created as restricted (registry default) and republishes preserve the existing access level. Callers that want to force public access must now pass access: 'public' explicitly.
Ensure git status is not dirty on this branch after resetting deps. If it is, then something is probably wrong with the automated release process.
gh pr checkout 9387 --force
npm run resetdeps
node scripts/git-dirty.js
2. Check CI status
gh pr checks --watch
3. Log in to npm
npm login sessions are short lived, so you will want to have a fresh one before you publish.
npm login
4. Publish the CLI and workspaces
Warning:
This will publish all updated workspaces to latest, prerelease or backport depending on their version, and will publish the CLI with the dist-tag set to next-12.
Note:
The --test argument can optionally be omitted to run the publish process without running any tests locally.
node scripts/publish.js --test
5. Optionally install and test npm@12.0.0-pre.1 locally
npm i -g npm@12.0.0-pre.1
npm --version
npm whoami
npm help install
# etc
6. Trigger docs.npmjs.com update
gh workflow run update-cli.yml --repo npm/documentation
7. Approve and Merge release PR
gh pr review --approve
gh pr merge --rebase
git checkout latest
git fetch
git reset --hard origin/latest
node . run resetdeps
8. Wait For Release Tags
Warning:
The remaining steps all require the GitHub tags and releases to be created first. These are done once this PR has been labelled with autorelease: tagged.
Release Please will run on the just merged release commit and create GitHub releases and tags for each package. The release bot will will comment on this PR when the releases and tags are created.
Note:
The release workflow also includes the Node integration tests which do not need to finish before continuing.
You can watch the release workflow in your terminal with the following command:
gh run watch `gh run list -R npm/cli -w release -b latest -L 1 --json databaseId -q ".[0].databaseId"`
9. Mark GitHub Release as latest
Warning:
You must wait for CI to create the release tags before running this step. These are done once this PR has been labelled with autorelease: tagged.
Release Please will make GitHub Releases for the CLI and all workspaces, but GitHub has UI affordances for which release should appear as the "latest", which should always be the CLI. To mark the CLI release as latest run this command:
gh release -R npm/cli edit v12.0.0-pre.1 --latest
10. Open nodejs/node PR to update npm
Warning:
You must wait for CI to create the release tags before running this step. These are done once this PR has been labelled with autorelease: tagged.
Trigger the Create Node PR action. This will open a PR on nodejs/node to the main branch.
First, sync our fork of node with the upstream source:
Then, if we are opening a PR against the latest version of node:
gh workflow run create-node-pr.yml -R npm/cli -f spec=next-12
For backport releases, you must target the correct Node branch using -f branch=<NODE_MAJOR>. Make sure you are targeting the right Node major version for this npm version.
For example, this will create a PR on nodejs/node to the v16.x-staging branch:
gh workflow run create-node-pr.yml -R npm/cli -f spec=next-12 -f branch=16
11. Label and fast-track nodejs/node PR
Note:
This requires being a nodejs collaborator. This could be you!
Thumbs-up reaction on the Fast-track comment
Add an LGTM / Approval
Add request-ci label to get it running CI
Add commit-queue label once everything is green
For backport releases, comment on the PR asking the Node.js team to add dont-land-on-v<NODE_MAJOR> labels for Node versions where this npm version should not be included
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 I have created a release beep boop
12.0.0-pre.1
12.0.0-pre.1 (2026-05-28)
Features
f2e4a28#9351 add a global npmignore file (feat: add a global npmignore file #9351) (@ljharb)c9be2d1#9153 publish --access=private alias for restricted (feat: publish --access=private alias for restricted #9153) (@reggi, @Copilot)7068d42#9360 Phase 1 ofallowScriptsopt-in install-script policy (feat: Phase 1 ofallowScriptsopt-in install-script policy #9360) (@JamieMagee)979518d#9276 error on unknown configs, flags, and abbreviations (feat!: error on unknown configs, flags, and abbreviations #9276) (@owlstronaut)Bug Fixes
b97edc0#9430 audit: don't apply min-release-age before filter when verifying installed signatures (@JamieMagee)080e3b2#9425 block forbidden keys in Queryable setter to prevent prototype pollution (@12122J, @claude)c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)33aebaa#9410 fix typo of fullMetadata (@owlstronaut)2a03860#9267 run root preinstall before reify (@owlstronaut)c0fc549#9372 config: pause progress spinner during interactive editor spawn (fix(config): pause progress spinner during interactive editor spawn #9372) (@Zelys-DFKH, @claude)Documentation
d124c08#9385 Documentnpm_old_versionandnpm_new_versionenvironment variables (docs: Documentnpm_old_versionandnpm_new_versionenvironment variables #9385) (@36degrees)Dependencies
d28783e#9420undici@6.26.07f6c6ef#9420sigstore@4.1.1ee61b6e#9420lru-cache@11.5.1d5ddef2#9420@sigstore/verify@3.1.111e7ac7#9420@sigstore/core@3.2.111cd66e#9420@npmcli/agent@4.0.28be4c04#9420semver@7.8.1577d61d#9420make-fetch-happen@15.0.6Chores
da63c79#9420 dev dependency updates (@owlstronaut)5fc9bc0#9393 sanitize newlines in flags table default and type values (chore: sanitize newlines in flags table default and type values #9393) (@reggi, @Copilot)@npmcli/arborist@10.0.0-pre.1@npmcli/config@11.0.0-pre.1libnpmdiff@8.1.6-pre.1libnpmexec@10.2.6-pre.1libnpmfund@7.0.20-pre.1libnpmpack@10.0.0-pre.1libnpmpublish@12.0.0-pre.0libnpmversion@9.0.0-pre.1arborist: 10.0.0-pre.1
10.0.0-pre.1 (2026-05-28)
Features
7068d42#9360 Phase 1 ofallowScriptsopt-in install-script policy (feat: Phase 1 ofallowScriptsopt-in install-script policy #9360) (@JamieMagee)Bug Fixes
a81f2f8#9428 arborist: read install scripts from disk on lockfile installs instead of a sentinel (@JamieMagee)c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)dac7ff6#9399 arborist: drop self-link materialization for undeclared workspaces (fix(arborist): drop self-link materialization for undeclared workspaces #9399) (@manzoorwanijk)b77850e#9395 skip hidden lockfile save on dry run (fix: skip hidden lockfile save on dry run #9395) (@puneetdixit200, @puneetdixit200)config: 11.0.0-pre.1
11.0.0-pre.1 (2026-05-28)
Features
f2e4a28#9351 add a global npmignore file (feat: add a global npmignore file #9351) (@ljharb)c9be2d1#9153 publish --access=private alias for restricted (feat: publish --access=private alias for restricted #9153) (@reggi, @Copilot)7068d42#9360 Phase 1 ofallowScriptsopt-in install-script policy (feat: Phase 1 ofallowScriptsopt-in install-script policy #9360) (@JamieMagee)979518d#9276 error on unknown configs, flags, and abbreviations (feat!: error on unknown configs, flags, and abbreviations #9276) (@owlstronaut)Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)libnpmdiff: 8.1.6-pre.1
8.1.6-pre.1 (2026-05-28)
Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)Dependencies
@npmcli/arborist@10.0.0-pre.1libnpmexec: 10.2.6-pre.1
10.2.6-pre.1 (2026-05-28)
Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)6237783#9408 exempt local project introspection from allow-directory (@owlstronaut)Dependencies
@npmcli/arborist@10.0.0-pre.1libnpmfund: 7.0.20-pre.1
7.0.20-pre.1 (2026-05-28)
Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)Dependencies
@npmcli/arborist@10.0.0-pre.1libnpmpack: 10.0.0-pre.1
10.0.0-pre.1 (2026-05-28)
Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)Dependencies
@npmcli/arborist@10.0.0-pre.1libnpmpublish: 12.0.0-pre.0
12.0.0-pre.0 (2026-05-28)
opts.accessnow defaults tonullinstead of'public'. Withnull, libnpmpublish no longer sets an explicit access level in the publish payload, so new scoped packages are created asrestricted(registry default) and republishes preserve the existing access level. Callers that want to force public access must now passaccess: 'public'explicitly.Bug Fixes
79b0c84#9419 default opts.access to null to preserve registry behavior (@owlstronaut)c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)libnpmversion: 9.0.0-pre.1
9.0.0-pre.1 (2026-05-28)
Bug Fixes
c5292fa#9422 use prerelease strategy without a bug (@owlstronaut)Documentation
d124c08#9385 Documentnpm_old_versionandnpm_new_versionenvironment variables (docs: Documentnpm_old_versionandnpm_new_versionenvironment variables #9385) (@36degrees)This PR was generated with Release Please. See documentation.