Safeguard
Developer Tools•

How do you check that a dependency update does not drop Node support?

Read the engines field of the new version before merging an update, and run CI on your oldest supported Node. A short check for libraries and apps.

Safeguard Security Team
3 min read

Read the engines field in the updated package's package.json and compare it with the Node versions you support. Then run your CI on the oldest Node version you promise. An update that raises the minimum can pass on your laptop and fail for a consuming app or build server.

What the engines field says

The npm documentation describes engines as a way to state which versions of Node, and of npm, a package works with. By default npm treats it as advice and warns, unless the engine strict setting is on. That means an install can succeed on an unsupported runtime and fail later, in a confusing way.

For a design system, build tooling matters as much as the browser. A bumped dependency might need a newer Node to build, even if its output runs in any browser.

Why it matters for update bots

Update bots propose minor and patch bumps, and a package can raise its minimum runtime in a minor release. The pull request looks routine. If your CI runs a single, recent Node, it stays green, while an app team on an older build image breaks on the next install.

A check you can add

  1. Declare your own engines in the library and in each app, so the supported range is written down.
  2. Run a CI matrix with the oldest and newest Node versions you support. Failures on the oldest tell you an update changed the floor.
  3. Turn on strict engine checking in CI so an unsupported install fails loudly rather than warns.
  4. Read the diff of package.json in the lockfile changes of the update PR. Look at engines for the top level package and for any new transitive packages.
  5. Check the changelog for phrases such as "drop support for Node" before approving.
FindingAction
Floor raised above your oldest supported NodeHold the update, or raise your own floor deliberately
Floor raised but within your rangeMerge, note it in release notes
No engines fieldRely on tests; consider asking upstream
Warning only on a dev toolFix the build image, not the library

Raising your own floor

Sometimes the right move is to drop an old Node version. That is a breaking change for consumers of your library if it affects installs or builds, so treat it as one under your versioning policy. Semantic versioning says incompatible changes belong in a major release. See what counts as a breaking change.

Security link

Old runtimes stop receiving security fixes at some point, so a floor that never moves is also a risk. Check the runtime's own support schedule when you set yours, and plan floor changes alongside dependency upgrades, not in an emergency. Related reading: what happens when an open source component reaches end of life.

Safeguard scans the dependency changes in a pull request, so a new package arriving with a runtime floor change is visible in the same review. A free scan is at gold.safeguard.sh/scan.

Quick check

Does npm refuse to install a package with an unsupported engine?

By default it warns. A strict setting makes it an error, which is useful in CI.

Is the engines field enforced in the browser?

No. It concerns Node and npm, which affect builds and server side rendering, not browser runtime.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.