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.

48 changes across 4 releases

Added 2

v23.1.0

  • Add --interactiveSelect option to control which upgrades are pre-selected in interactive mode, with values: auto (default), none, patch, minor, or all

v23.0.0

  • Native TypeScript loading support
Changed 20

v23.1.0

  • 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>

v23.0.2

  • 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

v23.0.1

  • 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

v23.0.0

  • 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
Fixed 24

v23.1.0

  • 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

v23.0.2

  • 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

v23.0.0

  • 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
Removed 2

v23.0.0

  • 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
New Contributors

Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.2...v23.1.0

View originalPermalink

v23.0.2
What's Changed

Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.1...v23.0.2

View originalPermalink

v23.0.1
What's Changed

Full Changelog: https://github.com/raineorshine/npm-check-updates/compare/v23.0.0...v23.0.1

View originalPermalink

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/rejectVersion in .ncurc.js or via the module API, move it to filter / reject instead. 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:
    ncu --format no-group
    
    The new no- prefix removes a value from the default list instead of replacing the whole list, so --format no-group,time disables 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-fetch for faster startup (#1898), and reduced dependencies for a lighter install.
  • Numerous bug fixes: scoped-package 404s with encoded @ (#1923), --doctor + --errorLevel 2 crash (#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

View originalPermalink