Skip to content

Compiler: Support boolean and number primtives in next.config defines#92731

Merged
andrewimm merged 1 commit into
canaryfrom
imm/primitivedefines
Apr 13, 2026
Merged

Compiler: Support boolean and number primtives in next.config defines#92731
andrewimm merged 1 commit into
canaryfrom
imm/primitivedefines

Conversation

@andrewimm
Copy link
Copy Markdown
Contributor

Expand config.compiler.define to support number and boolean primitives as well.

The support is already in Turbopack's rewrite engine, as well as Webpack's DefinePlugin. We just need to modify the zod schema to actually support passing numbers and bools.

Added an E2E test that should check all supported types.

@andrewimm andrewimm requested a review from a team April 13, 2026 17:54
@nextjs-bot
Copy link
Copy Markdown
Contributor

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) 455ms 455ms █▁▁▁█
Cold (Ready in log) 440ms 439ms █▅▁▁▂
Cold (First Request) 828ms 821ms ▁████
Warm (Listen) 456ms 456ms █▅▅▅▅
Warm (Ready in log) 438ms 439ms ▃▅▃▄▆
Warm (First Request) 337ms 339ms ▂▅▇▆▅
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms ▅▁▁▅▁
Cold (Ready in log) 439ms 440ms ▄▁▁▅█
Cold (First Request) 1.963s 1.967s ▄▂▄▅█
Warm (Listen) 457ms 456ms ▁█▁██
Warm (Ready in log) 439ms 439ms ▂▂▂▇█
Warm (First Request) 1.984s 1.969s █▄▇██

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.946s 3.904s █▃▃▁▃
Cached Build 3.939s 3.945s █▁▅▅▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.638s 14.534s ▁▃▄▆█
Cached Build 14.750s 14.713s ▁▂▂▄█
node_modules Size 493 MB 493 MB ██▄▄▄
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0_e7jpplzy-1d.js gzip 8.61 kB N/A -
0_pmftwo7hmuf.js gzip 158 B N/A -
02rwv4f_6c1sm.js gzip 8.55 kB N/A -
05go1o13ui4h8.js gzip 9.23 kB N/A -
08vhvpz7njgxl.js gzip 8.57 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0d7tzhy6qxh_t.js gzip 49.1 kB N/A -
0g7jw_dt7_dey.js gzip 5.67 kB N/A -
0kcv7hz-0b8-q.js gzip 155 B N/A -
0n4ox_35s91v7.js gzip 8.5 kB N/A -
0t77rui7va2ul.js gzip 158 B N/A -
0vve0aeer3euy.js gzip 157 B N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
1-g7xciuhb56_.js gzip 156 B N/A -
11q9_2xtrffzs.js gzip 10.1 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
1a3ew0_khbkhb.js gzip 157 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1fjz2ak1ney0-.js gzip 154 B N/A -
1gk8qw910ozx1.js gzip 2.28 kB N/A -
1h4q0sv0fk24i.js gzip 8.55 kB N/A -
1ikr3081c4whe.js gzip 156 B N/A -
1jw65jwz-5bxm.js gzip 225 B N/A -
1mt43tko9mlgy.js gzip 9.8 kB N/A -
1t-5hgb4p0nld.js gzip 7.6 kB N/A -
1tffxp0fi80s8.js gzip 13.8 kB N/A -
1zxv27ew2zjrn.js gzip 8.58 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
229ekdamwvswq.js gzip 157 B N/A -
23k74df7xvees.js gzip 8.59 kB N/A -
249774z9d3xpd.js gzip 168 B N/A -
2gdd25csjuru0.js gzip 13.3 kB N/A -
2iy12g5bci6dc.js gzip 12.9 kB N/A -
2j-s21vcbkac3.js gzip 154 B N/A -
2wfujv40rkljt.js gzip 13 kB N/A -
2yo2gbpw58jmk.js gzip 10.4 kB N/A -
36bdhi6x4fyla.js gzip 65.5 kB N/A -
3dfb2x6wi6mwz.js gzip 160 B N/A -
3gm9s9t5j8nwy.js gzip 8.5 kB N/A -
3gs_6b3llr-1t.js gzip 155 B N/A -
3qqu8mzx9_zwk.js gzip 70.8 kB N/A -
turbopack-0p.._xrn.js gzip 4.18 kB N/A -
turbopack-0y..l6me.js gzip 4.18 kB N/A -
turbopack-10.._ebb.js gzip 4.18 kB N/A -
turbopack-13..j7yv.js gzip 4.16 kB N/A -
turbopack-1o..-jrc.js gzip 4.18 kB N/A -
turbopack-1p..r2it.js gzip 4.17 kB N/A -
turbopack-1s..wvoi.js gzip 4.18 kB N/A -
turbopack-21..uewu.js gzip 4.18 kB N/A -
turbopack-21..064_.js gzip 4.18 kB N/A -
turbopack-2q..xb33.js gzip 4.18 kB N/A -
turbopack-32..xlq8.js gzip 4.18 kB N/A -
turbopack-37..4xjr.js gzip 4.19 kB N/A -
turbopack-3g..gkjl.js gzip 4.18 kB N/A -
turbopack-41..zbsm.js gzip 4.17 kB N/A -
06evto34q6kog.js gzip N/A 13 kB -
0aiow2efzggpv.js gzip N/A 8.59 kB -
0apirp-m3fna-.js gzip N/A 2.28 kB -
0de0kgzpgabvg.js gzip N/A 169 B -
0gvjtplu4ik03.js gzip N/A 152 B -
0ksot8co-qub9.js gzip N/A 7.6 kB -
0qu3po6qlx8a-.js gzip N/A 9.8 kB -
0r8j5khvzvo_j.js gzip N/A 65.5 kB -
0uzs-uwqfgoio.js gzip N/A 160 B -
1_4eo965gorrk.js gzip N/A 70.8 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
10ptfhou44vg-.js gzip N/A 8.55 kB -
15jd43m54o-sg.js gzip N/A 8.62 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1iw767e5p8p9h.js gzip N/A 8.57 kB -
1nriczg0wexxf.js gzip N/A 155 B -
1paexeze5sdue.js gzip N/A 13.8 kB -
1rjx6ckymkohg.js gzip N/A 8.51 kB -
1scs8sswn9jsh.js gzip N/A 8.55 kB -
24wn2rl84sy0i.js gzip N/A 158 B -
2ge98-e9rtitz.js gzip N/A 154 B -
2ksgupm1an68t.js gzip N/A 157 B -
2l29pfu4351tc.js gzip N/A 154 B -
2pw2bw36yjhgh.js gzip N/A 154 B -
2qj5rro7dykxa.js gzip N/A 10.1 kB -
2ts1tavx8j3c1.js gzip N/A 12.9 kB -
2ywlepa0j45yc.js gzip N/A 155 B -
3_i7z3jxw05k5.js gzip N/A 5.67 kB -
30qsbrhnphwel.js gzip N/A 225 B -
36pnnu0pdgtsd.js gzip N/A 13.3 kB -
3iollk8wxspot.js gzip N/A 49.1 kB -
3mqhaxomxkmxj.js gzip N/A 154 B -
3z635snb92bnv.js gzip N/A 160 B -
4193narqgrim_.js gzip N/A 8.51 kB -
43eq_mlh8zxb0.js gzip N/A 155 B -
43jskxgkj3cju.js gzip N/A 9.23 kB -
43mmjowxr8jv8.js gzip N/A 8.58 kB -
444c-df85h-wn.js gzip N/A 10.4 kB -
turbopack-04..bsgn.js gzip N/A 4.18 kB -
turbopack-08..8bvm.js gzip N/A 4.18 kB -
turbopack-0a..mo7t.js gzip N/A 4.18 kB -
turbopack-0d..nwno.js gzip N/A 4.17 kB -
turbopack-0l..ekiu.js gzip N/A 4.18 kB -
turbopack-0x..3xvi.js gzip N/A 4.18 kB -
turbopack-0y..m_45.js gzip N/A 4.18 kB -
turbopack-1u..0ul8.js gzip N/A 4.18 kB -
turbopack-1z..xti_.js gzip N/A 4.18 kB -
turbopack-2_..ow6a.js gzip N/A 4.18 kB -
turbopack-27..7ec6.js gzip N/A 4.18 kB -
turbopack-2r..okt3.js gzip N/A 4.16 kB -
turbopack-2v..8ndz.js gzip N/A 4.18 kB -
turbopack-3b..wsac.js gzip N/A 4.19 kB -
Total 464 kB 464 kB ⚠️ +54 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 721 B 717 B
Total 721 B 717 B ✅ -4 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 428 B 435 B 🔴 +7 B (+2%)
Total 428 B 435 B ⚠️ +7 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 ✅ -621 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 ✅ -358 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 616 B 615 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 43.8 kB 44.3 kB 🔴 +534 B (+1%)
edge-runtime..pack.js gzip 842 B 842 B
Total 45.4 kB 45.9 kB ⚠️ +533 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.37 MB
index.pack gzip 114 kB 112 kB 🟢 2.02 kB (-2%)
index.pack.old gzip 113 kB 114 kB
Total 4.6 MB 4.6 MB ✅ -4.59 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 342 kB 342 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 kB 77 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.2 kB 52.2 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.4 kB 33.4 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 kB 39 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/ab31745886041d11ca5645256fe2b761e98ef929/next

@andrewimm andrewimm merged commit efc0905 into canary Apr 13, 2026
184 checks passed
@andrewimm andrewimm deleted the imm/primitivedefines branch April 13, 2026 19:00
andrewimm added a commit that referenced this pull request Apr 15, 2026
…#92731)

Expand `config.compiler.define` to support number and boolean primitives
as well.

The support is already in Turbopack's rewrite engine, as well as
Webpack's DefinePlugin. We just need to modify the zod schema to
actually support passing numbers and bools.

Added an E2E test that should check all supported types.
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Apr 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants