Skip to content

turbopack: Build win* targets from linux#92594

Draft
mmastrac wants to merge 3 commits intommastrac/docker-buildx-cachefrom
mmastrac/windows-on-linux
Draft

turbopack: Build win* targets from linux#92594
mmastrac wants to merge 3 commits intommastrac/docker-buildx-cachefrom
mmastrac/windows-on-linux

Conversation

@mmastrac
Copy link
Copy Markdown
Contributor

@mmastrac mmastrac commented Apr 10, 2026

What

Cross-compile Windows native binaries (x86_64 and aarch64) from Linux using Docker + cargo-xwin, replacing the Windows self-hosted runners for native builds.

Why

  • Windows builds are slow (~10 min even with sccache) and harder to make hermetic
  • Cross-compilation from Linux takes ~4 min with Docker image cache
  • Reduces load on Windows self-hosted runners (only used for tests now)

How

  • Add a windows stage to scripts/native-builder.Dockerfile with cargo-xwin, lld-link, and pre-cached MSVC SDK
  • build-native-windows jobs run on Linux metal runners with a matrix of x86_64-pc-windows-msvc and aarch64-pc-windows-msvc
  • Before building, try restoring the .node binary from turbo remote cache (native-cache.js). On cache hit, skip Docker entirely
  • On cache miss, build the Docker image via BuildKit registry cache, cross-compile, and save to turbo cache
  • Upload .node files as GitHub artifacts for Windows test jobs to consume
  • Windows test runners are unchanged — they still run tests natively

Changes

  • .github/workflows/build_and_test.yml: Replace Windows runner build with Linux cross-compilation matrix, add native cache restore/save, add buildNativeTarget to Windows test consumer jobs
  • scripts/native-builder.Dockerfile: Add windows stage with cargo-xwin, rustup Windows targets, lld-link/clang-cl symlinks, MSVC SDK pre-cache
  • scripts/docker-native-build.sh: Add Windows MSVC case with CARGO_ENCODED_RUSTFLAGS, llvm-strip for PE files
  • scripts/docker-native-build.js: Add Windows targets, --skip-image flag, auto-select Docker image by target
  • scripts/native-cache.js: Add --profile flag so release and release-with-assertions binaries cache separately (bumps cache key to v2)
  • Cargo.toml: Patch psm crate with inline asm for Windows (eliminates external .asm files that need MASM)

@nextjs-bot nextjs-bot added the created-by: Turbopack team PRs by the Turbopack team. label Apr 10, 2026
Copy link
Copy Markdown
Contributor Author

mmastrac commented Apr 10, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch 4 times, most recently from e68834b to 37215bc Compare April 10, 2026 01:04
@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 10, 2026

Failing test suites

Commit: ce8355f | About building and testing Next.js

pnpm test-start test/e2e/app-dir/metadata-suspense/index.test.ts (job)

  • app dir - metadata dynamic routes suspense > should render metadata in head when root layout is wrapped with Suspense for bot requests (DD)
Expand output

● app dir - metadata dynamic routes suspense › should render metadata in head when root layout is wrapped with Suspense for bot requests

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/missing-suspense-with-csr-bailout/missing-suspense-with-csr-bailout.test.ts (job)

  • missing-suspense-with-csr-bailout > useSearchParams > should pass build if useSearchParams is wrapped in a suspense boundary (DD)
Expand output

● missing-suspense-with-csr-bailout › useSearchParams › should pass build if useSearchParams is wrapped in a suspense boundary

expect(received).resolves.toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 1

  Object {
    "cliOutput": StringNotContaining "useSearchParams() should be wrapped in a suspense boundary at page \"/\".",
-   "exitCode": 0,
+   "exitCode": 1,
  }

  45 |       await next.renameFile('app/layout-suspense.js', 'app/layout.js')
  46 |
> 47 |       await expect(next.build()).resolves.toEqual({
     |                                           ^
  48 |         exitCode: 0,
  49 |         cliOutput: expect.not.stringContaining(message),
  50 |       })

  at Object.toEqual (../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:174:22)
  at Object.toEqual (e2e/app-dir/missing-suspense-with-csr-bailout/missing-suspense-with-csr-bailout.test.ts:47:43)

@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch from 37215bc to 8c45577 Compare April 10, 2026 01:23
@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 10, 2026

Stats from current PR

✅ No significant changes detected

📊 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) 456ms 455ms ▁▁█▁▁
Cold (Ready in log) 444ms 441ms ▁▂▁▆▂
Cold (First Request) 1.149s 1.115s ███▁█
Warm (Listen) 455ms 456ms ▁▁▁▁▁
Warm (Ready in log) 442ms 441ms ▅▆▅▃▆
Warm (First Request) 345ms 342ms ▅▆▅▅▅
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 457ms ▅▅▅▅▅
Cold (Ready in log) 442ms 442ms ▁▂▁▂▂
Cold (First Request) 1.960s 1.953s ▃▁▃▄▄
Warm (Listen) 456ms 456ms ▅▅▁█▅
Warm (Ready in log) 441ms 441ms ▁▂▁▂▂
Warm (First Request) 1.961s 1.957s ▂▂▃▃▃

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.933s 3.882s ▃▃▃▅▂
Cached Build 3.976s 3.945s ▂▁▄▇▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.595s 14.595s ▂▂▁▂▂
Cached Build 14.697s 14.777s ▁▂▁▂▂
node_modules Size 493 MB 493 MB ▇▁▇▇▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
01r_2fgyxokii.js gzip 154 B N/A -
053b9v5j96uu_.js gzip 8.56 kB N/A -
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
096aa2uod0_wa.js gzip 9.82 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0ea8vo2o6kp_s.js gzip 13.3 kB N/A -
0egovw6-5i1e3.js gzip 8.57 kB N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0ggglg3fqwng4.js gzip 160 B N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kmgih16pb2zy.js gzip 9.24 kB N/A -
0qjfywakinqdv.js gzip 153 B N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
1-z_xm7pzpbeh.js gzip 49.2 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1kb8nmsf1iszm.js gzip 156 B N/A -
1qlvpga3-wyzo.js gzip 156 B N/A -
1rvuywf98hse2.js gzip 152 B N/A -
1xz7fhgdco-x_.js gzip 8.59 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
2k1q_gre6hp0-.js gzip 8.56 kB N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2mkvafffp4_rr.js gzip 155 B N/A -
2nt0wg4sfoj9c.js gzip 156 B N/A -
2onvwpva84dvr.js gzip 154 B N/A -
2ow011slza0ki.js gzip 155 B N/A -
2pi_05i44_ir0.js gzip 159 B N/A -
2sgqisp4604si.js gzip 8.51 kB N/A -
3_628f2itgclt.js gzip 155 B N/A -
3_dj743z_808b.js gzip 70.8 kB N/A -
3-gk436oz-k3a.js gzip 167 B N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3pg35da_b3zme.js gzip 65.5 kB N/A -
3v9s-fz24f8oo.js gzip 10.4 kB N/A -
420pn_b9x-3ir.js gzip 8.62 kB N/A -
44un3--wmqiyh.js gzip 7.61 kB N/A -
turbopack-0j..e4lm.js gzip 4.19 kB N/A -
turbopack-0k..qrgx.js gzip 4.19 kB N/A -
turbopack-13..f1yd.js gzip 4.19 kB N/A -
turbopack-15..nmte.js gzip 4.19 kB N/A -
turbopack-1a..-5wl.js gzip 4.19 kB N/A -
turbopack-1d..rowy.js gzip 4.19 kB N/A -
turbopack-21..o6lb.js gzip 4.19 kB N/A -
turbopack-2c..4148.js gzip 4.19 kB N/A -
turbopack-2g..50ew.js gzip 4.2 kB N/A -
turbopack-2z..k8az.js gzip 4.19 kB N/A -
turbopack-3e..asmb.js gzip 4.19 kB N/A -
turbopack-3x..d85p.js gzip 4.19 kB N/A -
turbopack-43..n6yb.js gzip 4.17 kB N/A -
turbopack-44..7575.js gzip 4.19 kB N/A -
03_szppy5nakp.js gzip N/A 49.2 kB -
05aldz1x2im-w.js gzip N/A 161 B -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0e-n3tqx-seyq.js gzip N/A 70.8 kB -
0tvekitj587fh.js gzip N/A 8.51 kB -
0z83a1om5rvtt.js gzip N/A 7.61 kB -
1_8_fe36u6dt8.js gzip N/A 166 B -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
166yi4hj26d0f.js gzip N/A 151 B -
192q2suy7rwb_.js gzip N/A 8.56 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1elx6h48wpk0e.js gzip N/A 65.5 kB -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2f2bp_kexa37v.js gzip N/A 13.3 kB -
2hmikpxz6fexr.js gzip N/A 158 B -
2i5v1taq97gql.js gzip N/A 8.59 kB -
2n3vh0w0tnb_2.js gzip N/A 8.52 kB -
2q9nlxufl9p2k.js gzip N/A 154 B -
2tz0r9nx4uigu.js gzip N/A 156 B -
2u_rpxq3tzytl.js gzip N/A 233 B -
2wfbykz1avdns.js gzip N/A 8.56 kB -
32sifemopndov.js gzip N/A 10.4 kB -
35sia83pfm3ye.js gzip N/A 157 B -
368lim5wq0o0r.js gzip N/A 12.9 kB -
39m8b0notba72.js gzip N/A 160 B -
3ba03210a-tsj.js gzip N/A 157 B -
3de283pazbu99.js gzip N/A 9.81 kB -
3drqjohogojbw.js gzip N/A 5.69 kB -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3gp2o_v7jcw6s.js gzip N/A 8.57 kB -
3qtdefkjd18fd.js gzip N/A 155 B -
3qu7g1q2l_x2n.js gzip N/A 9.24 kB -
3vj55c8og7tly.js gzip N/A 155 B -
3x4j51vzb8ykv.js gzip N/A 154 B -
40vueuwv7_k-h.js gzip N/A 156 B -
43j6fjudq0a3_.js gzip N/A 8.62 kB -
turbopack-04.._bm3.js gzip N/A 4.19 kB -
turbopack-0c..4a4t.js gzip N/A 4.19 kB -
turbopack-0n..lfre.js gzip N/A 4.19 kB -
turbopack-0z..jko5.js gzip N/A 4.19 kB -
turbopack-10..24-p.js gzip N/A 4.19 kB -
turbopack-1t..yst3.js gzip N/A 4.19 kB -
turbopack-2-..7jy_.js gzip N/A 4.19 kB -
turbopack-2j..yly_.js gzip N/A 4.19 kB -
turbopack-2z..y9kj.js gzip N/A 4.17 kB -
turbopack-3-..cysa.js gzip N/A 4.19 kB -
turbopack-30..par2.js gzip N/A 4.19 kB -
turbopack-3a..jxbu.js gzip N/A 4.19 kB -
turbopack-40..86vj.js gzip N/A 4.2 kB -
turbopack-40..lnm-.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +52 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 718 B 719 B
Total 718 B 719 B ⚠️ +1 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 429 B 434 B 🔴 +5 B (+1%)
Total 429 B 434 B ⚠️ +5 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.3 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 235 kB 235 kB ✅ -619 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 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.97 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 273 kB 272 kB
Total 398 kB 398 kB ✅ -395 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 620 B 618 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.1 kB 44.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.7 kB 46 kB ⚠️ +256 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 721 B 720 B
Total 721 B 720 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.38 MB 🔴 +4.83 kB (+0%)
index.pack gzip 115 kB 114 kB
index.pack.old gzip 115 kB 114 kB
Total 4.61 MB 4.61 MB ⚠️ +3.66 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 346 kB 346 kB
app-page-exp..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 346 kB 346 kB
app-page-tur..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 342 kB 342 kB
app-page-tur..prod.js gzip 190 kB 190 kB
app-page.run...dev.js gzip 343 kB 343 kB
app-page.run..prod.js gzip 190 kB 190 kB
app-route-ex...dev.js gzip 77 kB 77 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 77.1 kB 77.1 kB
app-route-tu..prod.js gzip 52.6 kB 52.6 kB
app-route-tu...dev.js gzip 76.7 kB 76.7 kB
app-route-tu..prod.js gzip 52.3 kB 52.3 kB
app-route.ru...dev.js gzip 76.6 kB 76.6 kB
app-route.ru..prod.js gzip 52.3 kB 52.3 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 43.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.5 kB 33.5 kB
pages-api.ru...dev.js gzip 43.9 kB 43.9 kB
pages-api.ru..prod.js gzip 33.5 kB 33.5 kB
pages-turbo....dev.js gzip 53.3 kB 53.3 kB
pages-turbo...prod.js gzip 39.1 kB 39.1 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 39.1 kB 39.1 kB
server.runti..prod.js gzip 62.9 kB 62.9 kB
Total 3.06 MB 3.06 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/bccb95df34e3b5f79d4bb3e35443f771f81d21fa/next

@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch 5 times, most recently from b37d12d to fe3959a Compare April 10, 2026 14:37
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Apr 10, 2026

Merging this PR will degrade performance by 3.21%

❌ 1 regressed benchmark
✅ 16 untouched benchmarks
⏩ 3 skipped benchmarks1

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation packages-bundle.js[full] 981 ms 1,013.6 ms -3.21%

Comparing mmastrac/windows-on-linux (ce8355f) with canary (8298079)2

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

  2. No successful run was found on mmastrac/docker-buildx-cache (7f6b34c) during the generation of this report, so canary (8298079) was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch 13 times, most recently from 6a35def to ec1cf99 Compare April 10, 2026 15:54
@mmastrac mmastrac changed the title windows on linux prototype turbopack: Build win* targets from linux Apr 10, 2026
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch from ec1cf99 to c52847f Compare April 10, 2026 16:22
Comment thread .github/workflows/build_reusable.yml Outdated
Comment thread .github/workflows/build_and_deploy.yml
Comment thread scripts/clang-cl-wrapper.sh Outdated
Comment thread scripts/turbo-cache.mjs
@mmastrac mmastrac changed the base branch from canary to graphite-base/92594 April 10, 2026 20:55
@mmastrac mmastrac force-pushed the graphite-base/92594 branch from af83b4b to 95aa7f1 Compare April 10, 2026 20:55
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch from 2dd386c to 6e4f13c Compare April 10, 2026 20:55
@mmastrac mmastrac changed the base branch from graphite-base/92594 to mmastrac/docker-cache-improvements April 10, 2026 20:55
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch from 6e4f13c to ddcada2 Compare April 10, 2026 21:10
@mmastrac mmastrac force-pushed the mmastrac/docker-cache-improvements branch 2 times, most recently from 94cdf02 to f0e53bd Compare April 10, 2026 21:25
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch 2 times, most recently from 00f3d05 to a2ce16e Compare April 10, 2026 21:44
@mmastrac mmastrac force-pushed the mmastrac/docker-cache-improvements branch 2 times, most recently from c22d352 to 2ed35d2 Compare April 10, 2026 22:37
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch from a2ce16e to d2ac67c Compare April 10, 2026 22:49
@mmastrac mmastrac force-pushed the mmastrac/docker-cache-improvements branch from 2ed35d2 to c22d352 Compare April 10, 2026 22:49
Base automatically changed from mmastrac/docker-cache-improvements to canary April 10, 2026 23:22
@mmastrac mmastrac force-pushed the mmastrac/windows-on-linux branch 7 times, most recently from 4e31ae3 to bb03dad Compare April 13, 2026 22:55
@nextjs-bot
Copy link
Copy Markdown
Collaborator

Stats from current PR

✅ No significant changes detected

📊 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) 456ms 455ms █▁▁██
Cold (Ready in log) 444ms 442ms ▆▅█▅▂
Cold (First Request) 838ms 830ms ▁█▁▁█
Warm (Listen) 456ms 456ms ▁█▁▁▁
Warm (Ready in log) 442ms 441ms ▁▇▄▂▄
Warm (First Request) 344ms 343ms ▁█▅▃▅
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms ▅█▁▅▅
Cold (Ready in log) 438ms 437ms ▃▁▆▅▃
Cold (First Request) 1.950s 1.927s ▁▁▄▄▂
Warm (Listen) 455ms 456ms █▅▅▅▁
Warm (Ready in log) 438ms 438ms ▃▁█▅▃
Warm (First Request) 1.949s 1.948s ▁▁▇▆▅

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.968s 3.920s ▆▂▆▆▃
Cached Build 3.975s 3.950s ▅▄▇▅▂
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.396s 14.380s ▁▂▅▅▄
Cached Build 14.549s 14.603s ▁▁▇▅▁
node_modules Size 493 MB 493 MB █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
003q3zf-_j90o.js gzip 154 B N/A -
053b9v5j96uu_.js gzip 8.56 kB N/A -
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
096aa2uod0_wa.js gzip 9.82 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0ea8vo2o6kp_s.js gzip 13.3 kB N/A -
0egovw6-5i1e3.js gzip 8.57 kB N/A -
0ek_k55_6bo3v.js gzip 156 B N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0i-rrmz-wd2gx.js gzip 156 B N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kmgih16pb2zy.js gzip 9.24 kB N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
1cml77k0cjco9.js gzip 168 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1ldzw5bsf3-0l.js gzip 158 B N/A -
1rk604e6mevef.js gzip 158 B N/A -
1wj60c-jqsx-n.js gzip 65.5 kB N/A -
1xz7fhgdco-x_.js gzip 8.59 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
298segop7mz8t.js gzip 155 B N/A -
2k1q_gre6hp0-.js gzip 8.56 kB N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2rw6naw2b83yz.js gzip 155 B N/A -
2sgqisp4604si.js gzip 8.51 kB N/A -
2w6v6x0pu6b9t.js gzip 152 B N/A -
3-gysh_p9nr43.js gzip 154 B N/A -
32vddve-rleg-.js gzip 155 B N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3r9j-437x-6se.js gzip 70.8 kB N/A -
3u413wiqvqf_u.js gzip 49.1 kB N/A -
3v9s-fz24f8oo.js gzip 10.4 kB N/A -
3yexkdj8m6t6w.js gzip 156 B N/A -
420pn_b9x-3ir.js gzip 8.62 kB N/A -
44un3--wmqiyh.js gzip 7.61 kB N/A -
45b-gnabw9j10.js gzip 159 B N/A -
turbopack-03..-ma2.js gzip 4.19 kB N/A -
turbopack-13..kpmz.js gzip 4.19 kB N/A -
turbopack-1e..mq-a.js gzip 4.19 kB N/A -
turbopack-1m..v-xx.js gzip 4.19 kB N/A -
turbopack-1p..9plq.js gzip 4.19 kB N/A -
turbopack-2g..vuez.js gzip 4.19 kB N/A -
turbopack-2h..9hvz.js gzip 4.19 kB N/A -
turbopack-2z..x-oe.js gzip 4.19 kB N/A -
turbopack-2z.._2cn.js gzip 4.19 kB N/A -
turbopack-30..5pgu.js gzip 4.19 kB N/A -
turbopack-3c..zka7.js gzip 4.17 kB N/A -
turbopack-3q..w87f.js gzip 4.19 kB N/A -
turbopack-41..k4t0.js gzip 4.19 kB N/A -
turbopack-43..kpg1.js gzip 4.2 kB N/A -
089687r99-5_3.js gzip N/A 70.8 kB -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0ioow_tmvzxbf.js gzip N/A 160 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0z83a1om5rvtt.js gzip N/A 7.61 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
186o_9v4q6wvo.js gzip N/A 156 B -
192q2suy7rwb_.js gzip N/A 8.56 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1g64old_av12i.js gzip N/A 162 B -
1v0q1fw7v3roh.js gzip N/A 49.1 kB -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1xz2r9l20e-3a.js gzip N/A 154 B -
1z-ehckjr27om.js gzip N/A 156 B -
2368ic2ozqvf4.js gzip N/A 152 B -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2f2bp_kexa37v.js gzip N/A 13.3 kB -
2i5v1taq97gql.js gzip N/A 8.59 kB -
2k_lzeilnqipg.js gzip N/A 158 B -
2k_ngfk54igk6.js gzip N/A 153 B -
2n3vh0w0tnb_2.js gzip N/A 8.52 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
2wfbykz1avdns.js gzip N/A 8.56 kB -
2xzzk6an46wqn.js gzip N/A 156 B -
32sifemopndov.js gzip N/A 10.4 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
37eq851j9q6mo.js gzip N/A 154 B -
3de283pazbu99.js gzip N/A 9.81 kB -
3do8sy38i_qxd.js gzip N/A 158 B -
3drqjohogojbw.js gzip N/A 5.69 kB -
3dy48ip094dzs.js gzip N/A 65.5 kB -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3gp2o_v7jcw6s.js gzip N/A 8.57 kB -
3hqx7mbe-0y88.js gzip N/A 156 B -
3q6ng103a6hrv.js gzip N/A 167 B -
3qu7g1q2l_x2n.js gzip N/A 9.24 kB -
43j6fjudq0a3_.js gzip N/A 8.62 kB -
turbopack-02..3z3o.js gzip N/A 4.19 kB -
turbopack-06..dwwx.js gzip N/A 4.17 kB -
turbopack-0a..ouyp.js gzip N/A 4.19 kB -
turbopack-0g..wffw.js gzip N/A 4.19 kB -
turbopack-0j..oeej.js gzip N/A 4.19 kB -
turbopack-0l..0uik.js gzip N/A 4.2 kB -
turbopack-1g..agy-.js gzip N/A 4.19 kB -
turbopack-1n.._k1i.js gzip N/A 4.19 kB -
turbopack-1s..731r.js gzip N/A 4.19 kB -
turbopack-26..d_-r.js gzip N/A 4.19 kB -
turbopack-2u..rxmd.js gzip N/A 4.19 kB -
turbopack-3h..f3i2.js gzip N/A 4.19 kB -
turbopack-3m..ykcb.js gzip N/A 4.19 kB -
turbopack-44..-s4x.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +55 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 716 B 721 B
Total 716 B 721 B ⚠️ +5 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 435 B 434 B
Total 435 B 434 B ✅ -1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.3 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 235 kB 235 kB ✅ -619 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 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.97 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 273 kB 272 kB
Total 398 kB 398 kB ✅ -375 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 617 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.1 kB 44.1 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.7 kB 45.7 kB ⚠️ +48 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 721 B 720 B
Total 721 B 720 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.37 MB 4.38 MB
index.pack gzip 114 kB 115 kB
index.pack.old gzip 113 kB 112 kB
Total 4.6 MB 4.6 MB ⚠️ +3.53 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 346 kB 346 kB
app-page-exp..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 346 kB 346 kB
app-page-tur..prod.js gzip 191 kB 191 kB
app-page-tur...dev.js gzip 342 kB 342 kB
app-page-tur..prod.js gzip 189 kB 189 kB
app-page.run...dev.js gzip 343 kB 343 kB
app-page.run..prod.js gzip 190 kB 190 kB
app-route-ex...dev.js gzip 77 kB 77 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 77.1 kB 77.1 kB
app-route-tu..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 76.6 kB 76.6 kB
app-route-tu..prod.js gzip 52.3 kB 52.3 kB
app-route.ru...dev.js gzip 76.6 kB 76.6 kB
app-route.ru..prod.js gzip 52.2 kB 52.2 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 43.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.5 kB 33.5 kB
pages-api.ru...dev.js gzip 43.9 kB 43.9 kB
pages-api.ru..prod.js gzip 33.5 kB 33.5 kB
pages-turbo....dev.js gzip 53.3 kB 53.3 kB
pages-turbo...prod.js gzip 39.1 kB 39.1 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 39.1 kB 39.1 kB
server.runti..prod.js gzip 62.8 kB 62.8 kB
Total 3.06 MB 3.06 MB ⚠️ +1 B
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/fa0268789852f35d3e1e5562bb102b4dbbb85216/next

Try restoring the .node binary from turbo remote cache before building
the Docker image. On cache hit, skip Docker entirely. On miss, build
and save the result for next time.

Also add --profile flag to native-cache.js so release and
release-with-assertions binaries are cached separately.
Restore the cache-disable conditionals for production/staging/force-preview
deploys that were accidentally dropped in the windows-on-linux changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants