You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Production client builds currently keep module paths in JS/CSS chunk filenames, which can exceed deployment URL limits once a host and public path are prepended. Enable upstream Turbopack's 13-character base38 content-hash naming by default: ordinary JS chunks become <hash>.js, and entry runtimes become turbopack-<hash>.js.
Explicit filename templates still take precedence, and development builds retain readable names. Update the affected production snapshots, make assertions independent of generated filenames, and add long-path/template regression cases. Document the default change and output.filename: "[name].js" for consumers that need stable entry names. Static assets, copied files, server builds, and library builds keep their existing naming rules; full URL limits still depend on the deployment prefix.
Includes the merged utooland/next.js#190 via submodule commit fb5c6e39ce1a935a3d9cf7bd8cfe70f1e84f048b. Its tree is identical to the previously tested PR head. Submodule pointer updates are recorded separately from the Pack integration and snapshots. Most changed files are generated snapshot renames and updated references.
Test Plan
Latest-base isolated checkout: cargo test -p pack-tests — 143 passed, no failures.
Rust formatting, tombi format --check, biome ci, and typos passed.
New regressions cover long-path production JS/CSS, source-map references, and explicit filename templates. Existing development, worker, external, server/library and multi-entry cases pass.
Browser smoke test with a rebuilt binding: entry, dynamic JS/CSS, image and Worker loading pass without runtime errors. An identical rebuild preserves paths and bytes; editing a lazy module changes hashes and keeps runtime references valid.
Review follow-up: default chunk hashes honor the configured context salt and clamp requested lengths to the available 25 base38 characters.
Regression coverage lives in Utoo crates/pack-tests/tests/chunk_hashing.rs: JS/CSS salt changes and stability, preserved prefix/extension, and 26/255-character requests. The new test and all 143 existing snapshot tests pass; full-workspace and targeted browser Clippy and formatting checks pass.
Shows when each build phase is active and how much CPU it consumes. Self-Time is the time spent exclusively in that phase (excluding children).
Phase
Spans
Inclusive (ms)
Self-Time (ms)
Wall Range (ms)
Resolve
50,040
6,895.2
1,890.5
3,164.5
Parse
8,186
1,336.8
995.5
5,869.5
Analyze
139,281
39,884.3
9,021.2
5,779.1
Chunk
5,838
5,932.3
962.5
2,377.0
Codegen
12,942
2,406.1
1,489.9
2,058.7
Emit
31
40.9
20.5
8.0
Other
3,297
6,070.5
3,352.3
6,387.7
Workload Distribution by Diagnostic Tier
Category
Spans
Inclusive (ms)
% Work
Self-Time (ms)
% Self
P0: Scheduling & Resolution
189,802
47,298.3
245.0%
11,116.7
57.6%
P1: I/O & Heavy Tasks
2,910
111.3
0.6%
90.9
0.5%
P2: Architecture (Locks/Memory)
0
0.0
0.0%
0.0
0.0%
P3: Asset Pipeline
25,621
9,718.1
50.3%
3,468.1
18.0%
P4: Bridge/Interop
0
0.0
0.0%
0.0
0.0%
Other
1,282
5,438.4
28.2%
3,056.6
15.8%
Top 20 Tasks by Self-Time
Self-time is the exclusive duration: time spent in the task itself, not in sub-tasks.
This is the most accurate indicator of where CPU cycles are actually spent.
Self (ms)
Inclusive (ms)
Count
Avg Self (us)
P95 Self (ms)
Max Self (ms)
% Work
Task Name
Top Caller
4,717.1
25,074.6
96,063
49.1
0.1
10.1
24.4%
module
module (61%)
2,021.2
2,150.8
2,411
838.3
2.8
209.7
10.5%
analyze ecmascript module
module (72%)
2,002.1
2,059.9
19
105374.8
325.6
440.3
10.4%
save snapshot
persist (5%)
1,404.9
11,545.2
30,872
45.5
0.1
5.4
7.3%
process module
process module (81%)
1,255.6
3,366.8
27,252
46.1
0.1
5.6
6.5%
internal resolving
internal resolving (77%)
934.6
1,275.9
6,014
155.4
0.6
32.3
4.8%
parse ecmascript
parse ecmascript (65%)
850.7
934.7
10,654
79.8
0.4
6.6
4.4%
precompute code generation
generate merged code (39%)
826.4
5,638.0
4,059
203.6
0.2
109.1
4.3%
chunking
chunking (46%)
737.1
843.3
7,220
102.1
0.4
112.2
3.8%
compute async module info
compute async module info (57%)
630.4
2,048.3
1,004
627.9
1.7
234.8
3.3%
generate merged code
chunking (44%)
625.4
3,518.9
22,081
28.3
0.0
3.2
3.2%
resolving
module (55%)
417.8
417.8
329
1269.9
1.0
241.1
2.2%
generate source map
code generation (83%)
338.9
750.6
129
2626.9
4.6
195.6
1.8%
emit code
generate merged code (41%)
282.9
523.3
1,644
172.1
0.1
145.1
1.5%
write all entrypoints to disk
write all entrypoints to disk (17%)
221.4
1,053.7
1,959
113.0
0.3
39.5
1.1%
code generation
code generation (83%)
131.9
289.8
1,686
78.2
0.1
10.1
0.7%
compute async chunks
compute async chunks (53%)
81.2
103.7
827
98.1
0.1
25.2
0.4%
compute binding usage info
compute binding usage info (46%)
61.0
61.0
9
6776.9
24.9
27.5
0.3%
blocking
save snapshot (56%)
60.9
60.9
2,169
28.1
0.0
3.0
0.3%
read file
parse ecmascript (91%)
47.0
82.7
1,868
25.2
0.0
16.7
0.2%
collect mergeable modules
collect mergeable modules (99%)
Critical Path Analysis
The longest sequential dependency chains that determine wall-clock time.
Focus on reducing the depth of these chains to improve parallelism.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Production client builds currently keep module paths in JS/CSS chunk filenames, which can exceed deployment URL limits once a host and public path are prepended. Enable upstream Turbopack's 13-character base38 content-hash naming by default: ordinary JS chunks become
<hash>.js, and entry runtimes becometurbopack-<hash>.js.Explicit filename templates still take precedence, and development builds retain readable names. Update the affected production snapshots, make assertions independent of generated filenames, and add long-path/template regression cases. Document the default change and
output.filename: "[name].js"for consumers that need stable entry names. Static assets, copied files, server builds, and library builds keep their existing naming rules; full URL limits still depend on the deployment prefix.Includes the merged utooland/next.js#190 via submodule commit
fb5c6e39ce1a935a3d9cf7bd8cfe70f1e84f048b. Its tree is identical to the previously tested PR head. Submodule pointer updates are recorded separately from the Pack integration and snapshots. Most changed files are generated snapshot renames and updated references.Test Plan
Latest-base isolated checkout:
cargo test -p pack-tests— 143 passed, no failures.cargo clippy --all-targets -- -D warnings --no-deps; targetedturbopack-browserClippy check passed during implementation.Rust formatting,
tombi format --check,biome ci, andtypospassed.New regressions cover long-path production JS/CSS, source-map references, and explicit filename templates. Existing development, worker, external, server/library and multi-entry cases pass.
Browser smoke test with a rebuilt binding: entry, dynamic JS/CSS, image and Worker loading pass without runtime errors. An identical rebuild preserves paths and bytes; editing a lazy module changes hashes and keeps runtime references valid.
Review follow-up: default chunk hashes honor the configured context salt and clamp requested lengths to the available 25 base38 characters.
Regression coverage lives in Utoo
crates/pack-tests/tests/chunk_hashing.rs: JS/CSS salt changes and stability, preserved prefix/extension, and 26/255-character requests. The new test and all 143 existing snapshot tests pass; full-workspace and targeted browser Clippy and formatting checks pass.