Skip to content

engines.node says >=20, but commander@15 requires >=22.12.0 (and the CI matrix pins 20) #234

Open

Description

@qoole

package.json declares "engines": { "node": ">=20" } and the CI matrix pins node-version: '20', but commander@15.0.0 — a direct dependency — declares "engines": { "node": ">=22.12.0" }.

$ npm view commander@15.0.0 engines
{ node: '>=22.12.0' }

Two consequences. A Node 20 user passes the stated engines check and then runs a Commander that doesn't support their runtime. And CI currently tests the one combination Commander says isn't supported, so if it ever does break there, the matrix is the last place it would show.

Raising this as an issue rather than a PR because the fix isn't obviously mine to choose — it's tangled with the node-gyp pin from #228.

Option A — raise the floor to >=22.12.0 and move the matrix to Node 22. Matches what the dependency tree already requires. It also loosens #228: that comment notes node-gyp 12.x is the newest line still supporting Node 20, and node-gyp@13 needs ^22.22.2 || ^24.15.0 || >=26.0.0, so Node 22.22+ would put 13.x back on the table. Cost is dropping Node 20 users.

Option B — pin Commander back to a line that supports Node 20. commander@14 (latest 14.0.3) declares >=20, so ^14.0.0 makes the manifest true as written and keeps Node 20 and the node-gyp 12 pin exactly as #228 left them. Cost is staying a major behind.

Happy to send either as a one-line PR — just say which. Not touching it meanwhile, since #228 made the Node 20 choice deliberately and I don't want to undo that sideways.

Noticed while rebasing #40. I'd briefly folded a >=22.12.0 bump into that PR and pulled it back out for exactly this reason. Somewhat related: #113 bundled an "align engines" change and was closed unmerged, so there may already be a view on this I haven't seen.

Activity

  1. Frankie-Xu commented on Aug 31, 2026

    @Frankie-Xu
    Contributor

    I'd take Option B: pin commander to ^14 (14.x declares >=20) so the published engines.node >=20 stays true, and so #228's node-gyp@12 pin is left alone.

    Option A (raise engines to >=22.12.0 and move CI to Node 22) would drop Node 20 on purpose. #228 pinned node-gyp 12 because 13.x needs >=22.22; bumping engines would reopen that without a separate decision. #113 already had an "align engines" change and was closed unmerged.

    I won't send a PR until this is called. @shhdwi — A or B?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions