What This Error Means
npm skipped or rejected the package because it does not support your current operating system or CPU architecture.
How to Fix It
Confirm OS/arch:node -p "process.platform + \"/\" + process.arch"
Check if the dependency is optional or has prebuilt binaries for your platform.
If this is in CI, ensure your runner architecture matches what you expect.
Retry with npm --verbose if the error message is truncated.
Why It Happens
The configured registry does not contain the package/version you requested.
Auth is missing for a private registry or scoped package.
The requested version/tag/range is invalid or does not exist.
How to Verify
Re-run npm view <pkg> for the same registry and confirm metadata is accessible.
Re-run the original install and confirm the resolution error no longer appears.
Manual dependency inspection
Check which registry npm is using:npm config get registry
If the package is scoped, verify scope registry mapping in .npmrc (example: @your-scope:registry=...).
Query the registry directly for metadata:npm view <pkg>@<version> --json
Examples
npm ERR! code EBADPLATFORM
npm ERR! notsup Unsupported platform for package How npm resolves dependencies
npm resolves packages by fetching metadata from the registry, then selecting versions that satisfy semver ranges.
Private registries and scopes add auth and routing requirements via .npmrc.
If metadata lookup fails or no version satisfies constraints, npm throws a resolution error.
Prevention Tips
Keep registry config and auth in .npmrc under version control (where appropriate).
Pin versions (or use lockfiles) to avoid unexpected tag/range changes.
Prefer a proxy/cache registry for CI stability.
Where This Can Be Triggered
github.com/npm/cli/blob/417daa72b09c5129e7390cd12743ef31bf3ddb83/lib/utils/ping.js
This is a registry request path. Many resolution/publish errors happen while fetching or publishing package metadata to the registry. - GitHub
// used by the ping and doctor commands
const npmFetch = require('npm-registry-fetch')
module.exports = async (flatOptions) => {
const res = await npmFetch('/-/ping', { ...flatOptions, cache: false })
return res.json().catch(() => ({}))
}