Skip to content

[turbopack] Create a chunk_group_bootstrap_params() function#94631

Merged
sampoder merged 1 commit into
sp-turbopack-shared-runtime-assetfrom
sp/turbopack/registration_code_method
Jul 16, 2026
Merged

[turbopack] Create a chunk_group_bootstrap_params() function#94631
sampoder merged 1 commit into
sp-turbopack-shared-runtime-assetfrom
sp/turbopack/registration_code_method

Conversation

@sampoder

@sampoder sampoder commented Jun 9, 2026

Copy link
Copy Markdown
Member

This method generates the params for this code (random example for reference):

(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([
    "output/1ece_tests_snapshot_basic-tree-shake_export-namespace_input_index_0tbr8qy.js",
    {"otherChunks":["output/0_9x_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_1mqgz2-._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript)"]}
]);

This is a pretty small change on its own (no functionality change), it makes it a separate method so that it can be called in future PRs. I will flag that the shape for inline-d bootstrap code will be slightly different (further up the stack). Because it isn't a chunk itself it does not have the first item in the array (output/1ece_tests_snapshot_basic-tree-shake_export-namespace_input_index_0tbr8qy.js):

(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/node_modules_react-dom_82bf80._.js","static/chunks/_4f9bce._.js","static/chunks/pages_index_tsx_5a9e._.js"],"runtimeModuleIds":[96168]});

This item only has otherChunks and runtimeModuleIds. New code is added in #94664 to handle this different shape.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

🔴 1 regression, 1 improvement

Metric Canary PR Change Trend
Webpack Build Time (cached) 25.787s 26.452s 🔴 +665ms (+3%) ▁▁▁▂▁
Webpack Warm (First Request) 3.519s 3.337s 🟢 182ms (-5%) ▁▁▁▁▁
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 814ms 813ms ▁▂▁▁▁
Cold (Ready in log) 789ms 793ms ▁▂▁▁▁
Cold (First Request) 1.323s 1.336s ▁▂▁▁▁
Warm (Listen) 813ms 813ms ▁▂▁▁▁
Warm (Ready in log) 787ms 793ms ▁▁▁▁▁
Warm (First Request) 1.317s 1.330s ▁▁▁▁▁
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 814ms 813ms ▂▁▁▂▁
Cold (Ready in log) 782ms 779ms ▁▁▁▂▁
Cold (First Request) 3.401s 3.417s ▂▁▁▂▁
Warm (Listen) 813ms 812ms ▂▂▂▂▁
Warm (Ready in log) 790ms 779ms ▁▁▁▂▁
Warm (First Request) 3.519s 3.337s 🟢 182ms (-5%) ▁▁▁▁▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 5.300s 5.393s ▁▃▁▁▁
Cached Build 5.545s 5.599s ▁▃▁▁▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 25.646s 25.763s ▂▁▁▂▁
Cached Build 25.787s 26.452s 🔴 +665ms (+3%) ▁▁▁▂▁
node_modules Size 516 MB 516 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
02fwsva46cnsd.js gzip 154 B N/A -
03gmyxr7dukvs.js gzip 10.3 kB N/A -
03gqxoqyjt32f.js gzip 166 B N/A -
040t1q17lo593.js gzip 8.77 kB N/A -
04yn6-hxsbhh9.js gzip 155 B N/A -
0bb0vtp8dwsez.js gzip 450 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0l0sr6gau5xjn.js gzip 3.53 kB N/A -
0nxqz3q165m2l.js gzip 220 B N/A -
0qr-1tnb7_hg5.js gzip 5.72 kB N/A -
0uilzvklme4ea.js gzip 8.76 kB N/A -
0umj2po0qo8--.js gzip 151 B N/A -
0wgy8k62lzswt.js gzip 158 B N/A -
0z0y83mfx-l-h.js gzip 10 kB N/A -
1_-g_r52k540c.js gzip 7.4 kB N/A -
15ok8ydf274z0.js gzip 10.6 kB N/A -
16cqqcigykfea.js gzip 13.6 kB N/A -
17h18zxt1915l.js gzip 1.46 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1fq1h7dxad4cv.js gzip 9.44 kB N/A -
1fym-adbk_69_.js gzip 13.1 kB N/A -
1g80-jfls9qyr.js gzip 13.2 kB N/A -
1gav7nfh4y8ln.js gzip 8.76 kB N/A -
1ngcyobfk1zxm.js gzip 153 B N/A -
1ufl-_jc-p-jv.js gzip 65.6 kB N/A -
215pz0dr_p8-l.js gzip 154 B N/A -
2gj21se-1b63n.js gzip 155 B N/A -
2rypqffktcxqh.js gzip 8.69 kB N/A -
2uqsizxtehgqf.js gzip 8.79 kB N/A -
2vzktdqwbijqc.js gzip 8.74 kB N/A -
2wcar9zudlttv.js gzip 44.9 kB N/A -
3-gngtpe4rl0x.js gzip 71.2 kB N/A -
35a66acyid_yb.js gzip 153 B N/A -
35gmp7bjd2zkr.js gzip 153 B N/A -
38b3-cip-8bzs.js gzip 154 B N/A -
38wt4lnp9jabj.js gzip 155 B N/A -
3c244akvx_-be.js gzip 8.74 kB N/A -
3dmlemitx3ef3.js gzip 2.29 kB N/A -
3w-7qnx6dkxe8.js gzip 157 B N/A -
4237vdj6eyslt.js gzip 8.7 kB N/A -
turbopack-0s..3kt_.js gzip 3.77 kB N/A -
turbopack-11..gttf.js gzip 3.79 kB N/A -
turbopack-13..ncy1.js gzip 3.78 kB N/A -
turbopack-1l..ar39.js gzip 3.77 kB N/A -
turbopack-1n..mjf_.js gzip 3.77 kB N/A -
turbopack-1x..5-cr.js gzip 3.78 kB N/A -
turbopack-29..crni.js gzip 3.77 kB N/A -
turbopack-2h..sh6c.js gzip 3.76 kB N/A -
turbopack-3a..fajw.js gzip 3.78 kB N/A -
turbopack-3f..jshs.js gzip 3.77 kB N/A -
turbopack-3p..rjcy.js gzip 3.77 kB N/A -
turbopack-3u..1s99.js gzip 3.78 kB N/A -
turbopack-3x..e0mu.js gzip 3.78 kB N/A -
turbopack-43..lmld.js gzip 3.78 kB N/A -
00tc16j5-eos9.js gzip N/A 1.46 kB -
01c60iuf_bpri.js gzip N/A 71.2 kB -
0gaw1gmpwuwkn.js gzip N/A 8.8 kB -
0kcq5tsyrxqvd.js gzip N/A 154 B -
0o30115knhxlk.js gzip N/A 167 B -
11dh-c4p-o4jz.js gzip N/A 153 B -
12_mzjygkwte6.js gzip N/A 160 B -
12zyjjmq4oad1.js gzip N/A 5.72 kB -
1b_5lm2rb0cxg.js gzip N/A 65.6 kB -
1k9cc4-gpa2cx.js gzip N/A 13.1 kB -
1n59uogejo81s.js gzip N/A 10.3 kB -
1npei3hlexdv3.js gzip N/A 9.99 kB -
1ssuiwj_rnpc5.js gzip N/A 8.77 kB -
1vx0wf6ifusx9.js gzip N/A 156 B -
1xewxf1vt1eb0.js gzip N/A 153 B -
1y3l4h-zjq0bq.js gzip N/A 155 B -
2-phc9obd3nyd.js gzip N/A 8.77 kB -
24utq57r3l1cw.js gzip N/A 8.7 kB -
2fhjq6ek3srmr.js gzip N/A 8.69 kB -
2g0t7upz_v-hf.js gzip N/A 10.6 kB -
2ia9qqy99aie9.js gzip N/A 13.6 kB -
2k1b4-nao_sh7.js gzip N/A 156 B -
2n5fp99a5xt9s.js gzip N/A 7.4 kB -
2oza28kdqvoay.js gzip N/A 8.74 kB -
2sfz3rq5z_6wt.js gzip N/A 155 B -
2zh8-mmhujy8o.js gzip N/A 2.29 kB -
30h_m0irj-q6p.js gzip N/A 221 B -
37ejbfx1u9lpo.js gzip N/A 8.75 kB -
38c63ct4i1cy7.js gzip N/A 449 B -
3hd1us4ordyc9.js gzip N/A 13.2 kB -
3jimpal3lvz5e.js gzip N/A 9.44 kB -
3l8ywk64gcog-.js gzip N/A 155 B -
3rxda-enqm36a.js gzip N/A 45 kB -
3su6a4l8jbfth.js gzip N/A 3.53 kB -
3wb4pe4z4-aim.js gzip N/A 8.77 kB -
3ztw7zm_iy1lj.js gzip N/A 154 B -
41zzhejofalks.js gzip N/A 156 B -
445c2yeke2kwj.js gzip N/A 159 B -
turbopack-00..nv6h.js gzip N/A 3.77 kB -
turbopack-00..gjxp.js gzip N/A 3.78 kB -
turbopack-0r..g-t5.js gzip N/A 3.77 kB -
turbopack-13..e2u4.js gzip N/A 3.77 kB -
turbopack-19..7b-l.js gzip N/A 3.78 kB -
turbopack-1e..z5h4.js gzip N/A 3.79 kB -
turbopack-1k..d8tc.js gzip N/A 3.77 kB -
turbopack-1s..dnr_.js gzip N/A 3.78 kB -
turbopack-1t..85x9.js gzip N/A 3.77 kB -
turbopack-20..pzvj.js gzip N/A 3.77 kB -
turbopack-2g..04aa.js gzip N/A 3.77 kB -
turbopack-2j..senq.js gzip N/A 3.76 kB -
turbopack-2s..yi-i.js gzip N/A 3.78 kB -
turbopack-35..zq4x.js gzip N/A 3.78 kB -
Total 447 kB 447 kB ⚠️ +57 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 728 B 722 B
Total 728 B 722 B ✅ -6 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 432 B 434 B
Total 432 B 434 B ⚠️ +2 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2486.HASH.js gzip 169 B N/A -
3146-HASH.js gzip 64.1 kB N/A -
39fcf99b-HASH.js gzip 62.9 kB N/A -
8443-HASH.js gzip 4.68 kB N/A -
9431-HASH.js gzip 5.62 kB N/A -
framework-HASH.js gzip 59.8 kB 59.8 kB
main-app-HASH.js gzip 255 B 252 B 🟢 3 B (-1%)
main-HASH.js gzip 39.7 kB 40.1 kB 🔴 +453 B (+1%)
webpack-HASH.js gzip 1.68 kB 1.68 kB
6105-HASH.js gzip N/A 5.63 kB -
764.HASH.js gzip N/A 169 B -
8898-HASH.js gzip N/A 63.5 kB -
9597-HASH.js gzip N/A 4.65 kB -
e1ccab69-HASH.js gzip N/A 62.9 kB -
Total 239 kB 239 kB ✅ -193 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 182 B
css-HASH.js gzip 335 B 335 B
dynamic-HASH.js gzip 1.8 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 254 B
head-HASH.js gzip 351 B 349 B
hooks-HASH.js gzip 384 B 384 B
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.49 kB 2.49 kB
routerDirect..HASH.js gzip 319 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 313 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.96 kB 7.95 kB ✅ -7 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 128 kB 127 kB
page.js gzip 283 kB 285 kB
Total 410 kB 412 kB ⚠️ +1.72 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 615 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 45.2 kB 45.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 46.8 kB 46.9 kB ⚠️ +52 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 719 B 720 B
Total 719 B 720 B ⚠️ +1 B
Build Cache
Canary PR Change
0.pack gzip 4.79 MB 4.78 MB 🟢 7.02 kB (0%)
index.pack gzip 119 kB 119 kB
index.pack.old gzip 119 kB 120 kB
Total 5.03 MB 5.02 MB ✅ -6.11 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 363 kB 363 kB
app-page-exp..prod.js gzip 201 kB 201 kB
app-page-tur...dev.js gzip 363 kB 363 kB
app-page-tur..prod.js gzip 201 kB 201 kB
app-page-tur...dev.js gzip 360 kB 360 kB
app-page-tur..prod.js gzip 199 kB 199 kB
app-page.run...dev.js gzip 360 kB 360 kB
app-page.run..prod.js gzip 199 kB 199 kB
app-route-ex...dev.js gzip 81.3 kB 81.3 kB
app-route-ex..prod.js gzip 55.3 kB 55.3 kB
app-route-tu...dev.js gzip 81.4 kB 81.4 kB
app-route-tu..prod.js gzip 55.4 kB 55.4 kB
app-route-tu...dev.js gzip 81 kB 81 kB
app-route-tu..prod.js gzip 55.1 kB 55.1 kB
app-route.ru...dev.js gzip 80.9 kB 80.9 kB
app-route.ru..prod.js gzip 55.1 kB 55.1 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 45.2 kB 45.2 kB
pages-api-tu..prod.js gzip 34 kB 34 kB
pages-api.ru...dev.js gzip 45.2 kB 45.2 kB
pages-api.ru..prod.js gzip 33.9 kB 33.9 kB
pages-turbo....dev.js gzip 54.7 kB 54.7 kB
pages-turbo...prod.js gzip 39.6 kB 39.6 kB
pages.runtim...dev.js gzip 54.7 kB 54.7 kB
pages.runtim..prod.js gzip 39.6 kB 39.6 kB
server.runti..prod.js gzip 65.3 kB 65.3 kB
use-cache-pr...dev.js gzip 71.4 kB 71.4 kB
use-cache-pr...dev.js gzip 71.4 kB 71.4 kB
use-cache-pr...dev.js gzip 69.7 kB 69.7 kB
use-cache-pr...dev.js gzip 69.7 kB 69.7 kB
Total 3.49 MB 3.49 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/3b88edc9b4d1b2034dd4a44f20da3af983d2c49c/next

Commit: 3b88edc

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

Commit: 3b88edc

@sampoder sampoder changed the title sp/turbopack/registration code method [turbopack] Create a registration_code() function Jun 9, 2026
@sampoder sampoder changed the title [turbopack] Create a registration_code() function [turbopack] Create a registration_code() function Jun 9, 2026
@sampoder sampoder changed the title [turbopack] Create a registration_code() function [turbopack] Create a registration_code() method Jun 9, 2026
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch 2 times, most recently from 58512bf to 0ce9422 Compare June 10, 2026 18:48
@sampoder sampoder changed the title [turbopack] Create a registration_code() method [turbopack] Create a chunk_group_bootstrap_code() function Jun 10, 2026
@sampoder
sampoder marked this pull request as ready for review June 10, 2026 18:53
@sampoder
sampoder requested review from bgw and lukesandberg June 10, 2026 18:53
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch from 0ce9422 to da06b98 Compare June 10, 2026 21:40
@sampoder sampoder changed the title [turbopack] Create a chunk_group_bootstrap_code() function [turbopack] Create a chunk_group_bootstrap_params() function Jun 10, 2026
Comment thread turbopack/crates/turbopack-browser/src/ecmascript/evaluate/chunk.rs Outdated
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch from da06b98 to e91fc51 Compare June 16, 2026 18:28
@sampoder
sampoder force-pushed the sp-turbopack-shared-runtime-asset branch from 8f48625 to 10dd355 Compare June 16, 2026 18:28
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch 2 times, most recently from f205679 to 9741df0 Compare June 16, 2026 18:36
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch from 9741df0 to dd58569 Compare June 30, 2026 21:46
@sampoder
sampoder force-pushed the sp-turbopack-shared-runtime-asset branch from b234326 to 53e13a0 Compare June 30, 2026 21:46
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch from dd58569 to 1443d0e Compare June 30, 2026 21:59
source_maps,
*this.chunking_context.debug_ids_enabled().await?,
);
Ok(Vc::cell(format!("{}", StringifyJs(&params)).into()))

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.

The build manifest is a JSON file. It seems like we're storing a JSON-stringified value inside of a JSON file.

  • Don't use StringifyJs here, it's overkill, directly call serde_json::to_string instead
  • Enable the serde_json raw_value feature for this crate and next-core.
  • use serde_json::RawValue::from_string to convert the string to a RawValue.
  • Make sure SerializedBuildManifest in crates/next-core/src/next_manifests/mod.rs (later in this stack) uses the RawValue

RawValue skips the re-encoding.

@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch 2 times, most recently from e1f4eff to 53e61ed Compare July 15, 2026 22:25
@sampoder
sampoder force-pushed the sp-turbopack-shared-runtime-asset branch from 282b095 to 240fa34 Compare July 15, 2026 22:25
@sampoder
sampoder force-pushed the sp-turbopack-shared-runtime-asset branch from 240fa34 to b7872ef Compare July 16, 2026 01:03
@sampoder
sampoder force-pushed the sp/turbopack/registration_code_method branch from 53e61ed to 3b88edc Compare July 16, 2026 01:03
@sampoder
sampoder merged commit 6faa553 into canary Jul 16, 2026
223 of 225 checks passed
@sampoder
sampoder deleted the sp/turbopack/registration_code_method branch July 16, 2026 07:35
sampoder added a commit that referenced this pull request Jul 16, 2026
)

In #94631, we started pushing
items to `globalThis["TURBOPACK"]` that were of a slightly different
shape. See the comment on
#94631 (comment).

This PR adds a new method `registerEntry()` that is able to take that
new shape (the object without the file name as an argument) and still
instantiate the module + load the other chunks.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants