What changed in npm-check-updates from 22 to 23
4 releases numbered after v22.2.9 up to and including v23.1.0, stable releases only. v22.2.9 and v23.1.0 are the newest stable releases of 22 and 23 we track; this page follows them as new ones ship.
- 1 mentions breaking changes
- 1 removes or deprecates something
48 changes across 4 releases
- Strip terminal escape sequences from package and registry text
- Select the pnpm global config by the installed major version
- Read registries from pnpm-workspace.yaml
- Run getOwnerPerDependency at --concurrency
- Pass color through to the package manager spawn in doctor command
- Apply boolean false from the rc config as --no-<option>
- Lazily construct the RelativeTimeFormat to avoid eager ICU init on startup
- doctor: respect --no-color and NO_COLOR when spawning the package manager
- Shorten long build metadata in the upgrades table
- Keep the resolved version when the peer recursion requeries
- Select pnpm global minimumReleaseAge config by installed major version
- Replace timeago.js with the native Intl.RelativeTimeFormat
- Replace libnpmconfig and figgy-pudding with an in-house npm config loader
- Update dependencies
- Pin Docker base image by digest
- Minimum supported Node.js version is now 22; supported versions are ^22.22.2 || ^24.15.0 || >=26.0.0 (and npm >=10)
- Default export is now callable directly as ncu()
- Output is now grouped by default; use --format no-group to get flat output
- --target semver now respects explicit upper bounds in version ranges
- npm-registry-fetch is now lazy-loaded for faster startup
- Do not let rejectOnError:false swallow spawn errors
- Warn when peer dependency lookups fail instead of silently disabling --peer
- Reject invalid values in array options
- Fix operator precedence in the invalid filter message
- Replace the github url version tag only in the fragment
- Fix pnpm global and prefix args being spread into single characters
- Restrict yaml catalog upgrades to catalog paths
- Only log the merged yarn config when it is not empty
- Fix --no-color being ignored
- Fix crash when a dist-tag points to a version missing from the packument
- Handle unexpected pnpm ls -g output
- Fix Wildcard case
- Report npm's stderr and the real command when npm ls outputs no JSON
- Bound the yarn info line regex and skip non-matching lines
- Resolve npm dist-tags
- Fix unreachable error classification in queryVersions
- Handle the peerDependencies array that npm 12 outputs
- Scoped package 404s with encoded @ character
- --doctor and --errorLevel 2 crash
- Registry settings ignored by --enginesNode and --ownerChanged
- YAML catalog preservation
- Abort packument stream once required fields are parsed for better performance
- CLI options being overridden by .ncurc in --deep mode
- Upgrade a package in all selected sections when versions differ
- CommonJS build dropped; package is now pure ESM only
- filterVersion and rejectVersion options no longer accept predicate functions; use filter or reject instead
Original release notes, newest first
The list above is our reading of these notes; the originals from npm-check-updates are here, one fold per release.
v23.1.0
Added new option: --interactiveSelect
Usage:
ncu -i --interactiveSelect [value]
Default: auto
Control which upgrades are pre-selected in interactive mode. Only applies with --interactive.
Specify auto explicitly to restore the default when another value is set in your config file.
Major version zero upgrades (e.g. 0.1.0 → 0.2.0) are only pre-selected by all, since anything may change before 1.0.0. Custom groups returned by --groupFunction are likewise only pre-selected by all.
Other Changes
- LICENSE: use clean GPL-2.0 by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1979
- Strip terminal escape sequences from package and registry text by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1994
- Select the pnpm global config by the installed major version by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1995
- Do not let rejectOnError:false swallow spawn errors by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1997
- Warn when peer dependency lookups fail instead of silently disabling
--peerby @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1984 - Test getModuleMismatchError directly instead of through a real config load by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1998
- Further e2e.sh improvements by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1993
- Update dependencies by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1992
- Wrap option default values in code tags by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2001
- Always run the deep test CLI from build by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2000
- Reject invalid values in array options by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2002
- doctor: pass color through to the package manager spawn by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2003
- Fix operator precedence in the invalid filter message by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2004
- Replace the github url version tag only in the fragment by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2005
- Clean up misleading names and dead code in npm, logging and filterAndReject by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2006
- Fix pnpm global and prefix args being spread into single characters by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2007
- Apply boolean false from the rc config as --no- by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2008
- Restrict yaml catalog upgrades to catalog paths by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2009
- Only log the merged yarn config when it is not empty by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2010
- Fix --no-color being ignored by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2013
- Run getOwnerPerDependency at --concurrency by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2017
- Fix crash when a dist-tag points to a version missing from the packument by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2011
- Fix two rc-config tests that asserted nothing by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2020
- Restore
CHANGELOG.mdand automate release-driven changelog sync by @raineorshine with @Copilot in https://github.com/raineorshine/npm-check-updates/pull/2014 - Add min-release-age=7 to .npmrc by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2025
- Remove the temp working directory created by the build-changelog tests by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2024
- Update dependencies by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/2023
- feat(pnpm): read registries from pnpm-workspace.yaml by @smarlhens in https://github.com/raineorshine/npm-check-updates/pull/1973
- feat: add --interactiveSelect to control pre-selected upgrades by @raineorshine in https://github.com/raineorshine/npm-check-updates/pull/2029
New Contributors
- @smarlhens made their first contribution in https://github.com/raineorshine/npm-check-updates/pull/1973
Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.2...v23.1.0
v23.0.2
What's Changed
- Handle unexpected
pnpm ls -goutput by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1958 - Lazily construct the RelativeTimeFormat to avoid eager ICU init on startup by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1960
- Fix Wildcard case by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1963
- Update dependencies by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1967
- Further e2e.sh improvements by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1961
- Report npm's stderr and the real command when npm ls outputs no JSON by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1959
- doctor: respect --no-color and NO_COLOR when spawning the package manager by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1970
- Bound the yarn info line regex and skip non-matching lines by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1971
- Fix npm casing in comments and rename hasWildCard by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1972
- build(deps-dev): bump chalk from 5.6.2 to 6.0.0 by @dependabot[bot] in https://github.com/raineorshine/npm-check-updates/pull/1975
- Shorten long build metadata in the upgrades table by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1957
- Spawn tweaks by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1976
- CI cleanup and tweaks by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1962
- Resolve npm dist-tags by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1956
- Deprecate CHANGELOG.md by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1980
- Keep the resolved version when the peer recursion requeries by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1983
- Fix unreachable error classification in queryVersions by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1986
- Increase coverage by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1985
- Handle the peerDependencies array that npm 12 outputs by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1991
- e2e.sh: drop the npm view retry by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1977
- Select pnpm global minimumReleaseAge config by installed major version by @raineorshine with @Copilot in https://github.com/raineorshine/npm-check-updates/pull/1969
Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.1...v23.0.2
v23.0.1
What's Changed
- Pin Docker base image by digest by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1947
- build(deps): bump the github-actions group with 4 updates by @dependabot[bot] in https://github.com/raineorshine/npm-check-updates/pull/1950
- Add zizmor workflow by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1946
- Update LICENSE by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1952
- Delete the unused .github/screenshot.png by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1953
- Replace timeago.js with the native Intl.RelativeTimeFormat by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1936
- Doc fixes by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1955
- Update dependencies by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1954
- build(deps): bump the github-actions group with 3 updates by @dependabot[bot] in https://github.com/raineorshine/npm-check-updates/pull/1965
- Replace libnpmconfig and figgy-pudding with an in-house npm config loader by @XhmikosR in https://github.com/raineorshine/npm-check-updates/pull/1934
Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.0...v23.0.1
v23.0.0
⚠️ Breaking changes & migration
1. Node.js 22+ required (#1844)
The minimum supported Node.js is now 22. Supported versions: ^22.22.2 || ^24.15.0 || >=26.0.0 (and npm >=10).
- Migration: Upgrade Node before installing. On older Node, stay on v22.x.
2. Pure ESM package — CJS build dropped, default export is now callable (#1916, #1894)
The package is now pure ESM (no more CommonJS build), and the default export is now callable directly. ncu.run() and ncu.defineConfig() still work as namespaced properties.
- Migration (ESM):
// before import * as ncu from 'npm-check-updates' const upgraded = await ncu.run({ /* ... */ }) // after import ncu from 'npm-check-updates' const upgraded = await ncu({ /* ... */ }) // ncu.run({...}) also still works - Migration (CommonJS): Still usable via Node's native
require()of ESM (Node 22+), but the import shape changed:// before const ncu = require('npm-check-updates') // after const { default: ncu } = require('npm-check-updates') ncu({ /* ... */ }).then(upgraded => console.log(upgraded))
3. filterVersion / rejectVersion no longer accept a predicate function. Use filter / reject instead. (#1933)
These options now accept only a string, wildcard, glob, comma/space-delimited list, or /regex/. (CLI usage is unchanged — the CLI never supported functions.)
- Migration: If you passed a function to
filterVersion/rejectVersionin.ncurc.jsor via the module API, move it tofilter/rejectinstead. Those receive the package name and the parsed current version, so they can match on both:// before filterVersion: (name, semver) => !(name.startsWith('@myorg/') && +semver[0].major > 5) // after filter: (name, semver) => !(name.startsWith('@myorg/') && +semver[0].major > 5)
4. Output is now grouped by default (#1937)
--format now defaults to ["group"], so upgrades are grouped by major / minor / patch out of the box. This is a better default for most users.
- Migration: To get the old flat output, use:
The newncu --format no-groupno-prefix removes a value from the default list instead of replacing the whole list, so--format no-group,timedisables grouping while adding publish times.
5. --target semver now respects explicit upper bounds (#1920)
An explicit upper bound in a range is now preserved and never exceeded, e.g. ^9.5.0 <10 → ^9.7.0 <10 (previously the bound could be overrun). This can change which versions are selected for ranges with explicit upper bounds.
✨ Other improvements
- Native TypeScript loading (#1888), lazy-loaded
npm-registry-fetchfor faster startup (#1898), and reduced dependencies for a lighter install. - Numerous bug fixes: scoped-package 404s with encoded
@(#1923),--doctor+--errorLevel 2crash (#1900), registry settings ignored by--enginesNode/--ownerChanged(#1925), and YAML catalog preservation (#1922), abort packument stream once required fields are parsed (#1901) for better performance, fix cli options being overridden by .ncurc in --deep mode (#1902), and upgrade a package in all selected sections when versions differ.
Full changelog: https://github.com/raineorshine/npm-check-updates/compare/v22.2.9...v23.0.0