Skip to content

deps,lib,tools: remove jitless and lite modes - #66459

Merged
nodejs-github-bot merged 4 commits into
nodejs:mainfrom
ShogunPanda:no-jitless
Oct 4, 2026
Merged

nodejs-github-bot merged 4 commits into
nodejs:mainfrom
ShogunPanda:no-jitless

Conversation

@ShogunPanda

Copy link
Copy Markdown
Contributor

Summary

Remove support for jitless execution and V8 lite mode. Built-in functionality, including fetch() through Undici and TypeScript through Amaro, requires WebAssembly; supporting configurations without it leaves Node.js partially functional.

Changes

  • Reject jitless and lite-mode flags through CLI, NODE_OPTIONS, and V8’s runtime flag API.
  • Remove --v8-lite-mode build support, always enable WebAssembly, and reject interpreter-only V8 build defines.
  • Remove WebAssembly availability guards from TypeScript and frozen intrinsics, and retire ERR_WEBASSEMBLY_NOT_SUPPORTED.
  • Replace jitless compatibility coverage with flag-rejection and WebAssembly coverage.
  • Update platform requirements, CLI documentation, and the manual.

Notes

  • Environments that prohibit runtime executable-memory allocation lose the jitless execution option.
  • Downstream V8 flag changes must be preserved during V8 updates.

Assisted-By: OpenAI:GPT-6 Astra Ultrafast <openai/gpt-6-astra-ultrafast>

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/build
  • @nodejs/config
  • @nodejs/gyp
  • @nodejs/security-wg
  • @nodejs/tsc
  • @nodejs/v8-update

@nodejs-github-bot nodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Oct 2, 2026
@marco-ippolito marco-ippolito added the semver-major PRs that contain breaking changes and should be released in the next major version. label Oct 2, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are going to require perpetual V8 floating patches, are they strictly necessary? eg. can we override --no-jitless in InitializeNodeWithArgsInternal?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. How about now?

@codecov

codecov Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.42%. Comparing base (463711a) to head (5ca01e7).
⚠️ Report is 32 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #66459      +/-   ##
==========================================
- Coverage   90.43%   90.42%   -0.02%     
==========================================
  Files         791      790       -1     
  Lines      275604   275427     -177     
  Branches    52849    52812      -37     
==========================================
- Hits       249239   249045     -194     
- Misses      16770    16784      +14     
- Partials     9595     9598       +3     
Files with missing lines Coverage Δ
lib/internal/errors.js 98.81% <ø> (-0.01%) ⬇️
lib/internal/freeze_intrinsics.js 97.04% <100.00%> (-0.02%) ⬇️
lib/internal/util.js 98.48% <ø> (-0.61%) ⬇️
src/node.cc 78.94% <100.00%> (+0.02%) ⬆️
src/node_options.cc 81.62% <ø> (+0.03%) ⬆️
src/node_v8.cc 87.21% <100.00%> (+0.02%) ⬆️

... and 50 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
@ShogunPanda ShogunPanda added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Oct 3, 2026
Signed-off-by: Paolo Insogna <paolo@cowtech.it>
Signed-off-by: Paolo Insogna <paolo@cowtech.it>

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina mcollina added request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. and removed request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. labels Oct 4, 2026
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Oct 4, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@ShogunPanda ShogunPanda added commit-queue PRs queued for automated landing through the Commit Queue. commit-queue-squash PRs the Commit Queue should land as one squashed commit. labels Oct 4, 2026
@nodejs-github-bot
nodejs-github-bot merged commit 7e39b87 into nodejs:main Oct 4, 2026
74 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in 7e39b87

@nodejs-github-bot nodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Oct 4, 2026
Comment thread src/node.cc
// Node.js requires WebAssembly for built-in functionality. Override these
// modes after all option sources, before V8 applies their implications.
// Explicitly allow overriding even when contradiction checks are enabled.
V8::SetFlagsFromString("--allow-overwriting-for-next-flag --no-lite-mode "

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--allow-overwriting-for-next-flag has been removed by V8 which now only allows ignoring the contradiction https://chromium-review.googlesource.com/c/v8/v8/+/7775553

@joyeecheung joyeecheung Oct 4, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I opened a revert #66516 to unblock the V8 upgrade. IMO to reland this PR, it's better to add some support in the upstream for the override first, otherwise this just leaves no way of opting-into jitless etc. even if the users do it at their own risk.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JoyeeChung Thanks, I didn't know about it.
We have two choices here:

1 - As in the original PR we remove support for jitless. Unlike the original PR I would throw if the user tries to enable it rather than overwrite it.
2 - we let them to, but whenever the user tries to access WebAssemly we also throw an error and exit. But this also means that some part of Node might be totally unaccessible in the future.

To clarify, when I introduce Milo as replacement of llhttp, the entire http1 will be affected. Fetch is already like that today. That's why I went for the hard route.

WDYT?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@joyeecheung I just sent #66524, which should eliminate the need for the revert. PTAL.

@aduh95

aduh95 commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

supporting configurations without it leaves Node.js partially functional.

I don't understand why we don't leave that choice to the user, they might have good reasons to disable those, maybe "partially functional" is good enough for them

@ShogunPanda
ShogunPanda deleted the no-jitless branch October 5, 2026 07:17
@ShogunPanda

Copy link
Copy Markdown
Contributor Author

IMHO is a very niche feature that poses more maintainance burden on top of collaborators because all the times we have to protect access to WASM or similar and often provide fallbacks.

Instead, cutting it off will allow us to draw a clear line on what we do or don't support and can lead us to a lean and modern Node.

@aduh95

aduh95 commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

I think you should update the description with that explanation, which is more honest and less paternalistic. I would also mention the plans regarding milo.

My two cents: it’s better to leave a blank description that use an LLM generated one, but that’s another topic

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

Labels

commit-queue-squash PRs the Commit Queue should land as one squashed commit. lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. semver-major PRs that contain breaking changes and should be released in the next major version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants