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
Emscripten 5.0.6 / LLVM 23 toolchain upgrade — current state
Research snapshot compiled 2026-06-18 for the WASM/Browser toolchain bump.
Sources: runtime PR #129299, tracking issue #113786, the VMR source-manifest.json,
this repo on branch emsdk-upgrade, and live Maestro/BAR data via authenticated darc (build IDs, channels, last-applied builds verified).
1. Goal
Bring the new WebAssembly toolchain (Emscripten 5.0.6, LLVM 23 + transports)
onto dotnet11/main only. Older versions (.NET 10 / 9 / 8, release branches and
their VMR equivalents) must keep the old toolchain (Emscripten 3.1.56, LLVM 19).
emsdk.NET 11 → dotnet/dotnet main (VMR) + dotnet/performance main.
node/cpython/binaryen/emscripten.NET 11 → emsdk main (cpython/node also → VMR).
4. Verified channel model — per-branch → per-.NET-version
dotnet/main→**.NET 11**; release/10.0→.NET 10; release/9.0→.NET 9; release/8.0→.NET 8
(for every toolchain repo). The .NET 11 channel only flows into main /
VMR-main / runtime-main. .NET 10/9/8 channels flow only into the consumers' release branches. ➡️ Containment to dotnet11/main is structural.
5. Cut-over state — VERIFIED build-level audit (2026-06-18)
All seven repos already build the new content from dotnet/main onto the .NET 11
channel. Latest .NET 11 builds:
The new builds are on .NET 11, but consumers have only partially applied them:
Subscription
Last APPLIED build
= content
Latest on .NET 11
llvm → dotnet/dotnet main (everyWeek)
313447, branch dotnet/main-19.x, 5/6
LLVM 19
318623 = LLVM 23 (pending)
node → dotnet/dotnet main (everyWeek)
317102, dotnet/main, 6/3
Node v24.7 (applied)
318579
cpython → emsdk main (everyDay)
318526, dotnet/main
3.13.3 (applied)
318526
binaryen → emsdk main (everyDay)
317882, dotnet/main
5.0.6 (applied)
317882
emscripten → emsdk main (everyDay)
318637, dotnet/main
5.0.6 (applied)
318637
emsdk → dotnet/dotnet main (everyDay)
317682, main, 6/8 (= VMR emsdk SHA)
emsdk (applied)
318639
icu → dotnet/runtime main (everyDay)
316564, dotnet/main, 5/31
3.1.56 (old)
316564
Interpretation:
node/cpython/binaryen/emscripten/emsdk new builds are already flowing into emsdk main and the VMR main (= .NET 11). The VMR's emsdk is the bumped line.
LLVM is the laggard in the FLOW: the VMR last applied LLVM 19 (from dotnet/main-19.x, 5/6). But dotnet/main-19.x (LLVM 19) AND dotnet/main
(LLVM 23) are BOTH publishing to .NET 11. The everyWeek llvm→VMR subscription
will pull the latest.NET 11 build = LLVM 23 (318623) on its next run —
automatically, regardless of Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299.
icu is not bumped (dotnet/main still 3.1.56); runtime main ICU = old.
Runtime source is gated: dotnet/runtime mainEmsdkVersion = 3.1.56 and the
mono mini-llvm.c LLVM-23 patches are a hardcoded source property / source code
updated only by PR Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299, independent of
the package flow.
6. The real risk picture
No leak to older versions — .NET 11 only feeds main/VMR-main. .NET 10/9/8
use independent release branches. The new toolchain reaches older versions only if
a bump is merged to a release/* branch or a build is assigned to a .NET 10/9/8
channel. Neither has happened.
🔴 LLVM 23 is about to auto-flow into the VMR .NET 11 (everyWeek) BEFORE the
runtime source changes (Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299) land —
VMR/runtime main could fail to build (needs mini-llvm.c LLVM-23 patches + EmsdkVersion=5.0.6). This is a .NET 11 self-consistency/sequencing hazard, not a
cross-version leak.
Dual LLVM on .NET 11 — dotnet/main-19.x (LLVM 19) should be removed from .NET 11 so the channel carries only LLVM 23; otherwise consumers can flip-flop.
Emscripten 5.0.6 / LLVM 23 toolchain upgrade — current state
1. Goal
Bring the new WebAssembly toolchain (Emscripten 5.0.6, LLVM 23 + transports)
onto
dotnet11/mainonly. Older versions (.NET 10 / 9 / 8, release branches andtheir VMR equivalents) must keep the old toolchain (Emscripten 3.1.56, LLVM 19).
2. Toolchain components: old → new
54f9f7af)6ea9c28c)3. Topology — VMR vs. non-VMR
VMR
source-manifest.json: onlyemsdkis a VMR component (commitSha ab6c174e…).Not in VMR:
llvm-project,binaryen,emscripten,node,cpython,icu.Reach into runtime/VMR (verified subscriptions):
.NET 11→dotnet/dotnet main(VMR), +binaryen/node/wasi-sdk dotnet/main.(cross-platform blast radius; Mono AOT regressions
MonoAOT: LLVM 23 regressions in Half NaN handling #129507,
MonoAOT: LLVM 23 regressions in FullAOT JIT test outcomes #129508,
MonoInterp/Minijit win-x64: COM interop (SafeArray/Variant/struct reverse-pinvoke) test failures #129581,
[wasm] Wasm.Build.Tests EventPipeDiagnosticsTests CPU-sampling tests fail after emsdk 5.0.6 / LLVM 23 legacy-EH change #129584).
.NET 11→dotnet/runtime maindirectly..NET 11→dotnet/dotnet main(VMR) +dotnet/performance main..NET 11→emsdk main(cpython/node also → VMR).4. Verified channel model — per-branch → per-.NET-version
dotnet/main→**.NET 11**;release/10.0→.NET 10;release/9.0→.NET 9;release/8.0→.NET 8(for every toolchain repo). The
.NET 11channel only flows intomain/VMR-
main/ runtime-main. .NET 10/9/8 channels flow only into the consumers'release branches. ➡️ Containment to
dotnet11/mainis structural.5. Cut-over state — VERIFIED build-level audit (2026-06-18)
All seven repos already build the new content from
dotnet/mainonto the.NET 11channel. Latest
.NET 11builds:.NET 11builddotnet/main921a6f0cdotnet/maind9340929dotnet/main5a0efb2bdotnet/mainfce4570edotnet/main5a7cb4e9dotnet/maind94093d6mainc9ecee1e(
emsdk maineng/Versions.props=EmscriptenVersion 5.0.6, confirmed.)The new builds are on
.NET 11, but consumers have only partially applied them:.NET 11dotnet/dotnet main(everyWeek)dotnet/main-19.x, 5/6dotnet/dotnet main(everyWeek)dotnet/main, 6/3emsdk main(everyDay)dotnet/mainemsdk main(everyDay)dotnet/mainemsdk main(everyDay)dotnet/maindotnet/dotnet main(everyDay)main, 6/8 (= VMR emsdk SHA)dotnet/runtime main(everyDay)dotnet/main, 5/31Interpretation:
emsdk mainand the VMRmain(= .NET 11). The VMR's emsdk is the bumped line.dotnet/main-19.x, 5/6). Butdotnet/main-19.x(LLVM 19) ANDdotnet/main(LLVM 23) are BOTH publishing to
.NET 11. TheeveryWeekllvm→VMR subscriptionwill pull the latest
.NET 11build = LLVM 23 (318623) on its next run —automatically, regardless of Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299.
dotnet/mainstill 3.1.56); runtimemainICU = old.dotnet/runtime mainEmsdkVersion = 3.1.56and themono
mini-llvm.cLLVM-23 patches are a hardcoded source property / source codeupdated only by PR Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299, independent of
the package flow.
6. The real risk picture
.NET 11only feedsmain/VMR-main. .NET 10/9/8use independent release branches. The new toolchain reaches older versions only if
a bump is merged to a
release/*branch or a build is assigned to a.NET 10/9/8channel. Neither has happened.
.NET 11(everyWeek) BEFORE theruntime source changes (Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299) land —
VMR/runtime
maincould fail to build (needsmini-llvm.cLLVM-23 patches +EmsdkVersion=5.0.6). This is a.NET 11self-consistency/sequencing hazard, not across-version leak.
.NET 11—dotnet/main-19.x(LLVM 19) should be removed from.NET 11so the channel carries only LLVM 23; otherwise consumers can flip-flop.dotnet/mainstill 3.1.56; the ICU side needs[wasm] Bump ICU transport for Emsdk 5.0.6 / LLVM 23 icu#764.
7. PR / branch status
dotnet/main= LLVM 23; on.NET 11(not yet applied to VMR).NET 11; applied to emsdk main.NET 11; applied to emsdk main.NET 11; applied to VMR.NET 11; applied to emsdk main11.0.0-preview.6.26314.102+general-testingfeedmain= emsdk 5.0.6; on.NET 11; flowing to VMRgeneral-testing/ci.dot.net/devfeed; source patches (LLVM23, EmsdkVersion=5.0.6) gated here.browser_mtsplit to #129503 (lands first)8. Decisions / open items
dotnet/mainand flowing).general-testing/ci.dot.net/devfeed wiring inUpgrade Emscripten to 5.0.6 & LLVM to 23 #129299 is temporary — revert to production
feeds before merge.
land Upgrade Emscripten to 5.0.6 & LLVM to 23 #129299 (with production repins) in
lockstep with the LLVM-23
.NET 11flow; removemain-19.xfrom.NET 11; merge[wasm] Bump ICU transport for Emsdk 5.0.6 / LLVM 23 icu#764.