Skip to content

@salesforce/core declares Node >=18 but resolves @jsforce/jsforce-node >=3.10.17 which requires Node >=22 — runtime crash on Node 18/20 #3596

Description

@scolladon

Filing here since forcedotcom/sfdx-core has issues disabled.

Summary

@salesforce/core declares engines.node: ">=18.0.0" but its dependency range on @jsforce/jsforce-node now resolves to versions that require Node >=22, crashing at load time on Node 18/20.

@jsforce/jsforce-node@3.10.17 (published 2026-06-25) bumped engines.node from >=18 to >=22 and moved to undici@^8.5.0 (engines.node: ">=22.19.0") — in a patch release. Because @salesforce/core depends on it with a caret range (^3.10.17 since core 8.31.4, and older versions' ^3.10.13 also resolves to 3.10.18), every fresh install of any @salesforce/core version now pulls the Node-22-only tree.

npm only warns on the engines mismatch (EBADENGINE), so installs succeed and the failure surfaces at runtime:

TypeError: webidl.util.markAsUncloneable is not a function
    at Object.<anonymous> (.../node_modules/undici/lib/web/cache/cachestorage.js:20)

Steps to reproduce

On Node 20.x (or 18.x):

npm install @salesforce/core
node -e "require('@jsforce/jsforce-node')"

Observed in CI here: sf CLI plugin installs on Node 20 crash at CLI load (sfdx-git-delta e2e matrix — Node 20 legs fail on all OSes since jsforce-node 3.10.17 was published, Node 22/24 pass).

Expected

Either @salesforce/core bumps its own engines.node to >=22 (semver-major), or the jsforce-node engines/undici bump is reverted out of the 3.10.x patch range so the declared Node 18 support holds. Note that consumers cannot work around this themselves: caret resolution happens at install time in downstream trees (e.g. sf plugins install), where lockfiles and overrides of the intermediate package don't apply.

Versions

  • @salesforce/core 8.31.5 (latest): engines.node >=18.0.0, depends @jsforce/jsforce-node@^3.10.17
  • @jsforce/jsforce-node 3.10.16: engines >=18 / 3.10.17+: engines >=22, undici@^8.5.0 (>=22.19.0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions