Skip to content

packages/setup claims Node 18 support, and Node 18 has been end-of-life since 2025-04-30 #327

Description

@vladimirrott

packages/setup/package.json declares:

"engines": { "node": ">=18" }

and packages/setup/node-preflight.js backs it with MIN_MAJOR = 18, which is what produces the friendly "sysknife-setup needs Node 18 or newer" message instead of a syntax error.

Node 18 reached end-of-life on 2025-04-30, sixteen months ago. Node 20 followed on 2026-04-30. Both numbers come from nodejs/Release.

So the published claim is that npx sysknife-setup supports two runtimes that receive no security fixes. The wizard downloads binaries over the network and verifies them against a SHA-256, which is exactly the kind of code where the runtime's TLS stack and its patch level matter.

What is actually true today

Nothing tests the claim. CI ran the wizard's suite on Node 20 and, after #326, runs it on 24. packages/setup/tests/node-preflight.test.mjs exercises the version-comparison logic in isolation, not the wizard on an old runtime. So >=18 has never been observed to hold; it is an assertion, not a measurement.

The decision

Three options, and they are not equivalent.

  1. Raise the floor to 22 (maintenance until 2027-04-30) and say why in the message node-preflight.js prints. Users on 18 or 20 get a clear sentence instead of a subtle failure. This is my preference.
  2. Keep >=18 and test it, with a CI matrix that runs packages/setup on the floor as well as on current LTS. Honest, and it costs a job.
  3. Keep >=18 untested. Then the number should stop appearing in the docs as a support statement.

Anything but option 3 also wants the published statements updated, and there are
six of them rather than the one this issue first named. Verified 2026-09-09 at
5673d20:

$ grep -rn 'Node 18' --include='*.md' .
docs/quickstart.md:23:**Prerequisites:** Node 18 or newer. On Ubuntu 22.04, `apt install nodejs`
README.md:86:Needs **Node 18 or newer**. On Ubuntu 22.04 `apt install nodejs` gives Node 12,
README.md:430:| **npm** | `npx sysknife-setup` | ... needs Node 18+, no compile |
docs/mcp.md:185:Needs Node 18 or newer (Ubuntu 22.04's apt Node is 12, which is too old). The
apps/sysknife-cli/README.md:40:npx sysknife-setup            # needs Node 18+
docs/introduction.md:124:For prebuilt binaries instead of a build, run `npx sysknife-setup` (Node 18+).

Five of those six predate this issue rather than drifting into it: README.md,
docs/quickstart.md and docs/mcp.md all got their line in aeb4d19
(2026-07-28, #116). My omission when I filed this, not new work.

Scope

  • packages/setup/package.json engines.node
  • packages/setup/node-preflight.js MIN_MAJOR and the message it composes
  • packages/setup/tests/node-preflight.test.mjs
  • the six Markdown statements listed above, docs/introduction.md:127 among them (it was :124 in the transcript above; the line moved, the sentence did not)
  • A line in docs/release.md if the floor becomes a release-time check

Difficulty

easy as a code change, medium as a decision. The edit reaches eight files, nine if the floor becomes a release-time check. Five of them are documentation, carrying six sentences between them. Picking the number is the part that needs an opinion about who is still on Node 18.

Getting started

CONTRIBUTING.md has the build and test commands. npm test --prefix packages/setup is the suite. No CLA and no copyright waiver. The project is MIT.

Comment here before you start if you want to argue for a different floor. That conversation is the issue.

Activity

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

    easyDifficulty: self-contained, no deep context neededenhancementNew feature or requestgood first issueGood for newcomershelp wantedExtra attention is neededtwir-listedListed in a This Week in Rust CfP. Do not offer to anyone until that issue publishes.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions