Skip to content

Adapter: STATIC_FILE.immutableHash#90045

Merged
mischnic merged 14 commits intocanaryfrom
mischnic/adapter-immutable
Feb 27, 2026
Merged

Adapter: STATIC_FILE.immutableHash#90045
mischnic merged 14 commits intocanaryfrom
mischnic/adapter-immutable

Conversation

@mischnic
Copy link
Member

@mischnic mischnic commented Feb 16, 2026

Disabled for now

Expose a hash for each file that should be treated as immutable

For nextjs/adapter-vercel#25

Part of PACK-6802

Copy link
Member Author

mischnic commented Feb 16, 2026

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Feb 16, 2026

Tests Passed

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Feb 16, 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 456ms ▁▁▂▂▁
Cold (Ready in log) 444ms 446ms ▂▁▁▁▂
Cold (First Request) 900ms 903ms ▄▁▁▁▄
Warm (Listen) 456ms 455ms ▁▁▁▂▁
Warm (Ready in log) 445ms 443ms ▁▁▁▁▁
Warm (First Request) 358ms 356ms ▁▁▂▂▂
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 456ms ▁▁▁▁▁
Cold (Ready in log) 439ms 439ms ▅▂▅▄▆
Cold (First Request) 1.947s 1.942s ▃▁▂▃▃
Warm (Listen) 455ms 455ms ▁▁▁▁▁
Warm (Ready in log) 438ms 438ms ▄▂▄▄▃
Warm (First Request) 1.949s 1.950s ▃▁▃▃▂

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.102s 4.076s ▁▂▁▃▁
Cached Build 4.104s 4.098s ▁▂▂▃▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.080s 14.054s ▁▁▁▁▁
Cached Build 14.208s 14.157s ▁▂▁▁▁
node_modules Size 475 MB 475 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **400 kB** → **400 kB** ✅ -33 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 762 B 763 B
Total 762 B 763 B ⚠️ +1 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 450 B 449 B
Total 450 B 449 B ✅ -1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 58.4 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.6 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 253 B
main-HASH.js gzip 39.1 kB 39.1 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.6 kB -
9544-HASH.js gzip N/A 59.1 kB -
Total 232 kB 233 kB ⚠️ +713 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 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.5 kB 2.5 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.97 kB 7.97 kB ✅ -2 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 125 kB
page.js gzip 254 kB 255 kB
Total 379 kB 379 kB ⚠️ +313 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 614 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 43.9 kB 43.6 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.5 kB 45.2 kB ✅ -279 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.02 MB 4.02 MB 🔴 +5.98 kB (+0%)
index.pack gzip 103 kB 103 kB
index.pack.old gzip 103 kB 104 kB 🔴 +1.21 kB (+1%)
Total 4.22 MB 4.23 MB ⚠️ +6.47 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 320 kB 320 kB
app-page-exp..prod.js gzip 170 kB 170 kB
app-page-tur...dev.js gzip 320 kB 320 kB
app-page-tur..prod.js gzip 170 kB 170 kB
app-page-tur...dev.js gzip 316 kB 316 kB
app-page-tur..prod.js gzip 168 kB 168 kB
app-page.run...dev.js gzip 317 kB 317 kB
app-page.run..prod.js gzip 168 kB 168 kB
app-route-ex...dev.js gzip 70.8 kB 70.8 kB
app-route-ex..prod.js gzip 49.2 kB 49.2 kB
app-route-tu...dev.js gzip 70.8 kB 70.8 kB
app-route-tu..prod.js gzip 49.2 kB 49.2 kB
app-route-tu...dev.js gzip 70.4 kB 70.4 kB
app-route-tu..prod.js gzip 49 kB 49 kB
app-route.ru...dev.js gzip 70.4 kB 70.4 kB
app-route.ru..prod.js gzip 49 kB 49 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.2 kB 43.2 kB
pages-api-tu..prod.js gzip 32.9 kB 32.9 kB
pages-api.ru...dev.js gzip 43.2 kB 43.2 kB
pages-api.ru..prod.js gzip 32.8 kB 32.8 kB
pages-turbo....dev.js gzip 52.5 kB 52.5 kB
pages-turbo...prod.js gzip 38.5 kB 38.5 kB
pages.runtim...dev.js gzip 52.5 kB 52.5 kB
pages.runtim..prod.js gzip 38.4 kB 38.4 kB
server.runti..prod.js gzip 61.9 kB 61.9 kB
Total 2.82 MB 2.82 MB
📎 Tarball URL
next@https://vercel-packages.vercel.app/next/prs/90045/next

@mischnic mischnic changed the base branch from canary to graphite-base/90045 February 17, 2026 15:46
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from c49acb8 to e2bbdba Compare February 17, 2026 15:46
@nextjs-bot nextjs-bot added the Turbopack Related to Turbopack with Next.js. label Feb 17, 2026
@mischnic mischnic changed the base branch from graphite-base/90045 to mischnic/content-hash February 17, 2026 15:47
@codspeed-hq
Copy link

codspeed-hq bot commented Feb 17, 2026

Merging this PR will not alter performance

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1


Comparing mischnic/adapter-immutable (d3c1675) with canary (4c6c31a)

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.

@mischnic mischnic force-pushed the mischnic/content-hash branch from 1a448e1 to 3985ef2 Compare February 17, 2026 22:16
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from e2bbdba to 8068adc Compare February 17, 2026 22:16
@mischnic mischnic force-pushed the mischnic/content-hash branch from 3985ef2 to 5ecd1b8 Compare February 18, 2026 10:10
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch 2 times, most recently from 3bbd023 to b7679fc Compare February 18, 2026 11:10
@mischnic mischnic force-pushed the mischnic/content-hash branch 2 times, most recently from 36fdcc2 to c57e37d Compare February 18, 2026 13:32
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from b7679fc to 14e262b Compare February 18, 2026 13:32
@mischnic mischnic changed the base branch from mischnic/content-hash to graphite-base/90045 February 18, 2026 14:07
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from 14e262b to cb443f2 Compare February 18, 2026 14:08
@mischnic mischnic force-pushed the graphite-base/90045 branch from c57e37d to 91bdad8 Compare February 18, 2026 14:08
@graphite-app graphite-app bot changed the base branch from graphite-base/90045 to canary February 18, 2026 14:09
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch 2 times, most recently from 794a41f to 6c1cc30 Compare February 18, 2026 17:40
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch 2 times, most recently from 794a41f to e90fcb6 Compare February 20, 2026 17:39
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from fc2e2eb to 0d2419d Compare February 26, 2026 16:03
@mischnic mischnic force-pushed the mischnic/assert-dpl-in-tests branch from 9519684 to 892fb71 Compare February 26, 2026 20:01
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from 0e7e3e8 to b81cb41 Compare February 26, 2026 20:01
@mischnic mischnic changed the title Adapter: STATIC_FILE.immutable Adapter: STATIC_FILE.immutableHash Feb 26, 2026
@mischnic mischnic changed the base branch from mischnic/assert-dpl-in-tests to graphite-base/90045 February 27, 2026 09:06
@mischnic mischnic force-pushed the graphite-base/90045 branch from 892fb71 to 1c1550c Compare February 27, 2026 09:07
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from b81cb41 to ccd022d Compare February 27, 2026 09:07
@graphite-app graphite-app bot changed the base branch from graphite-base/90045 to canary February 27, 2026 09:07
@mischnic mischnic force-pushed the mischnic/adapter-immutable branch from ccd022d to 4dd236b Compare February 27, 2026 09:07
@vercel
Copy link
Contributor

vercel bot commented Feb 27, 2026

Notifying the following users due to files changed in this PR based on this repo's notify modifiers:

@timneutkens, @ijjk, @shuding, @huozhi:

packages/next/src/server/config.ts

Comment on lines +1737 to +1738
// Silently ignore that flag for Webpack/Rspack since the server code assumes that all files
// in `static/chunks` are always immutable without checking the manifest.
Copy link
Member

Choose a reason for hiding this comment

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

Does that comment still makes sense?

Copy link
Member Author

@mischnic mischnic Feb 27, 2026

Choose a reason for hiding this comment

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

Yes.
Thinking of this here:
https://github.com/vercel/next.js/pull/88607/changes#diff-23c10662faa97d8e3036cfbc35b05c3bb4c141b6fe64a9ce38b9c1bdc1feab7b

  return [...normalScripts, ...lowPriorityScripts].map((file) => {
    // static/chunks/51e975e7b637a580.js should use the immutable id, while
    // static/Yj152X97rfGgF7NPcJEZs/_ssgManifest.js should use the deployment id
    const query = file.startsWith('static/chunks')
      ? assetQueryString
      : mutableAssetQueryString

@mischnic mischnic merged commit 0b3da78 into canary Feb 27, 2026
160 of 161 checks passed
@mischnic mischnic deleted the mischnic/adapter-immutable branch February 27, 2026 09:51
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

created-by: Turbopack team PRs by the Turbopack team. locked Turbopack Related to Turbopack with Next.js. type: next

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants