Skip to content

[code-infra] Use Node v24 instead of v22#1239

Open
LukasTy wants to merge 6 commits intomasterfrom
bump-node-to-v24
Open

[code-infra] Use Node v24 instead of v22#1239
LukasTy wants to merge 6 commits intomasterfrom
bump-node-to-v24

Conversation

@LukasTy
Copy link
Copy Markdown
Member

@LukasTy LukasTy commented Mar 24, 2026

Testing it out in: mui/base-ui#4423


CI Performance: Node 22 (#6168) vs Node 24 (#6182)

I chose 6168 pipeline due to it having the new docs infra as well as triggering the pnpm dedupe.

The results show no meaningful performance improvement or degradation outside of run-to-run variance.

Job-Level Comparison

Job Node 22 (#6168) Node 24 (#6182) Delta
checkout 2m 33s 33s -2m 00s*
test_unit 59s 57s -2s
test_static 1m 25s 1m 41s +16s*
test_package 56s 1m 15s +19s*
test_lint 1m 49s 1m 36s -13s*
Validating Docs 1m 19s 1m 32s +13s
Total workflow 2m 36s 1m 43s -53s

* Heavily influenced by spin-up time variance (CircleCI infrastructure noise)

Step-Level Breakdown (excluding spin-up noise)

Step Node 22 Node 24 Delta
Install js deps (checkout) 30s 26s -4s
Install js deps (test_unit) 26s 26s 0s
Install js deps (test_static) 30s 30s 0s
Install js deps (test_package) 31s 40s +9s
Install js deps (test_lint) 25s 26s +1s
Install js deps (Validating Docs) 27s 37s +10s
Install js deps (Val. Docs 2nd) 2s 3s +1s
pnpm dedupe 23s 19s -4s
pnpm prettier 15s 14s -1s
TypeScript 8s 9s +1s
ESLint 43s 44s +1s
Stylelint 3s 4s +1s
Lint Markdown 1s 1s 0s
Docs Infra Build 6s 6s 0s
Build packages 9s 8s -1s
Size snapshot 8s 7s -1s
Run tests (vitest) 26s 25s -1s
Build docs-infra 6s 7s +1s
Validate docs 35s 35s 0s

Key Findings

  1. Actual tool execution is neutral. ESLint (43s vs 44s), TypeScript (8s vs 9s), vitest (26s vs 25s), Validate docs (35s vs 35s), and Build packages (9s vs 8s) are all within ±1s — measurement noise.

  2. pnpm dedupe is 4s faster on Node 24 (23s → 19s), the only meaningful improvement in actual work.

  3. pnpm install is inconsistent. Two jobs (test_package, Validating Docs) saw +9-10s install regressions, while others were identical. This is likely cache variance rather than a systematic Node 24 issue — the same pnpm install command takes 26-40s across different jobs on Node 24, suggesting it depends on when the pnpm store cache was hit.

  4. Spin-up times dominate the job-level differences. Node 22's checkout job had a 1m 59s spin-up vs 3s on Node 24; test_lint had 24s vs 5s. These are CircleCI Docker image pull/allocation times, not Node performance.

  5. Total excluding spin-up: 355s (Node 22) vs 369s (Node 24) = +14s (+4%) slower on Node 24, almost entirely from install time variance in 2 jobs.

Verdict

Node 24 is performance-neutral for actual code execution. The observed ±1s differences in ESLint, TypeScript, vitest, and builds are within noise. The only real signal is pnpm dedupe being slightly faster (-4s). The +14s aggregate "regression" is driven by pnpm install cache variance in 2 of 6 jobs, not by Node 24 being slower at running JavaScript. A single re-run could flip this result.

@LukasTy LukasTy self-assigned this Mar 24, 2026
@LukasTy LukasTy added the scope: code-infra Involves the code-infra product (https://www.notion.so/mui-org/5562c14178aa42af97bc1fa5114000cd). label Mar 24, 2026
@oliviertassinari oliviertassinari temporarily deployed to bump-node-to-v24 - mui-tools-public PR #1239 March 24, 2026 09:13 — with Render Destroyed
@mui-bot
Copy link
Copy Markdown

mui-bot commented Mar 24, 2026

Bundle size report

Bundle Parsed size Gzip size
@base-ui/react 0B(0.00%) 0B(0.00%)
@mui/x-charts-pro 0B(0.00%) 0B(0.00%)

Details of bundle changes


Check out the code infra dashboard for more information about this PR.

@Janpot
Copy link
Copy Markdown
Member

Janpot commented Mar 24, 2026

fyi https://mui-org.notion.site/Node-js-support-strategy-25acbfe7b66080df9d8bf6634f8c9367

@LukasTy
Copy link
Copy Markdown
Member Author

LukasTy commented Mar 24, 2026

I wanted to bring up this topic due to noticing that GH actions are bumping to node 24 on their end.
It's becoming like the "default" version, especially given that it is in the middle of the "Active" cycle.

Do we plan to keep using v22 until it goes out of maintenance mode?

@Janpot
Copy link
Copy Markdown
Member

Janpot commented Mar 24, 2026

Do we plan to keep using v22 until it goes out of maintenance mode?

If I read the notion doc correctly, I think that would be the intention, unless there are significant gains. But have to admit that it's not 100% clear to me the way it is written.

@LukasTy LukasTy marked this pull request as ready for review March 24, 2026 12:15
@oliviertassinari oliviertassinari temporarily deployed to bump-node-to-v24 - code-infra-dashboard PR #1239 March 24, 2026 16:16 — with Render Destroyed
@github-actions github-actions Bot added the PR: out-of-date The pull request has merge conflicts and can't be merged. label Mar 27, 2026
@LukasTy LukasTy added the on hold There is a blocker, we need to wait. label Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

on hold There is a blocker, we need to wait. PR: out-of-date The pull request has merge conflicts and can't be merged. scope: code-infra Involves the code-infra product (https://www.notion.so/mui-org/5562c14178aa42af97bc1fa5114000cd).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants