SWC v1.15.43, veröffentlicht am 2026-06-22 mit swc_core v71.0.3, ist die erste SWC-Release, die den Rust-React-Compiler als konfigurierbare Transformation ausliefert, einen stillen Template-Literal-Minifier-Bug behebt, der jeden rspack- und rsbuild-Nutzer betraf, und das unsafe_math-Minifier-Flag mit terser v4.3.11+ in Einklang bringt. Die Release ist der siebzehnte 1.15.x-Patch im SWC-1.15-Zyklus, der seit Anfang 2026 läuft, und der erste, der auf swc_core v71 landet.
Die Hauptarbeit verteilt sich auf drei Bereiche: die swc_ecma_react_compiler-Bridge, die den React Compiler zu einer erstklassigen SWC-Transformation macht, die concat_tpl-Korrektur für Template-Literale, die den stillen Minifier-Bug schließt, und die unsafe_math-Verhaltensänderung, die die Parität mit terser wiederherstellt. Sieben interne React-Compiler-Korrekturen, eine ES2022-Brand-Check-Scope-Korrektur, eine Parser-Korrektur für No-Default-Builds, ein Docs-Eintrag zum Sicherheitsumfang nicht vertrauenswürdiger Eingaben und die Entfernung der Production-Tracing-Hooks runden die Release ab.
Der Template-Literal-Minifier-Bug
Die nutzerwirksamste Änderung in v1.15.43 ist fix(es/minifier): Preserve cooked when concatenating template literals (#11939, kdy1). Die concat_tpl-Pass vor v1.15.43 faltete a + b, wenn beide Seiten Template-Literale waren, indem sie die Quasi-Grenzen zusammenführte: Das letzte Quasi des linken Templates wurde mit dem ersten Quasi des rechten Templates verkettet, und das zusammengeführte Quasi wurde mit raw gleich der Konkatenation der beiden raw-Strings emittiert. Der cooked-Slot blieb unangetastet.
Diese Asymmetrie war der Bug. Nachgelagerte Pässe (eval_tpl_as_str, eval_nested_tpl, compress_tpl) werten das Template über cooked zu einem String aus, sodass der Text nach der letzten Interpolation des linken Templates stillschweigend abgeschnitten wurde. Das Ergebnis war falsch, aber kein Syntaxfehler, also wurde es ausgeliefert.
Der Reproduzierer in der PR-Beschreibung ist `<b>${1}</b>` + `<i>${2}</i>`. Vor v1.15.43 emittierte der Minifier <b>1<i>2</i> (Anmerkung: Das schließende </b> fehlt). Die erwartete Ausgabe ist <b>1</b><i>2</i>. Dasselbe Muster betrifft jede Verkettung zweier Template-Literale, die beide mindestens eine Interpolation enthalten: `${1}px` + `${2}px` wurde mit dem falschen Trennzeichen zu ${1}${2}px minifiziert. Der Bug wurde nur ausgelöst, wenn compress: true gesetzt war, was der Default im optimization.minimize-Pfad von rspack und im output.overrideBrowserslist-Minify-Pfad von rsbuild ist.
Die Korrektur aktualisiert cooked im Tpl + Tpl-Zweig von concat_tpl auf dieselbe Weise wie raw, und fällt auf None zurück, wenn das cooked einer Seite None ist (was eine ungültige Escape-Sequenz signalisiert). Die Schwesterzweige Tpl + Str und Str + Tpl führten cooked bereits korrekt zusammen; nur der Tpl + Tpl-Zweig vermisste die Zusammenführung. Die PR fügt einen Exec-Regressionstest hinzu, der den Original- und den minifizierten Code ausführt und die Ausgabe vergleicht, plus 49 Lib-Tests und 481 Exec-Tests im betroffenen swc_ecma_minifier-Crate.
Die PR-Beschreibung merkt an, dass der Bug auch über jeden Bundler auftauchte, der den JS-Minifier von SWC umschließt, einschließlich rspack und rsbuild. Nutzer, die die Korrektur an einer bekanntermaßen defekten Eingabe verifizieren möchten, können den kleinsten Reproduzierer aus der PR ausführen:
require("@swc/core").minifySync("x = `a${0}]` + `${0}b`", { compress: true }).code
// vor v1.15.43: x="a00b";
// nach v1.15.43: x="a0]0b";
Der React Compiler als erstklassige SWC-Transformation
Die Hauptfunktion ist feat(es/react-compiler): Add React Compiler (#11917, kdy1), die PR mit 12.986 Hinzufügungen und 54 Dateien, die den Rust-React-Compiler als konfigurierbare SWC-Transformation ausliefert. Die Integration fügt das Bridge-Crate swc_ecma_react_compiler, die Konvertierungsschicht für AST und Scope zwischen SWC und React Compiler, das Konfigurationsfeld .swcrc jsc.transform.reactCompiler, die Weiterleitung von Diagnosen aus der HIR des React Compilers an SWC:s Handler und die JS-/WASM-Optionstypen hinzu. Die Transformation ist hinter dem Feature-Flag react_compiler in swc_core v71.0.3 verriegelt und ist derzeit experimentell.
Der Rust-React-Compiler selbst ist die Arbeit in facebook/react#36173 (gemerged am 2026-06-09, von Mofei Z und dem React-Compiler-Team), das den ursprünglichen TypeScript-React-Compiler nach Rust portierte als Babel-AST-in / Babel-AST-out-Bibliothek mit drei Beispielintegrationen (Babel, Oxc, SWC). Die Architektur verwendet eine Babel-artige AST als öffentliche API und konvertiert zur und von der nativen Darstellung jeder Integration; SWC:s Bridge konvertiert zwischen SWC:s ESTree-geschmackter AST und der Rust-Babel-AST des React Compilers.
Die PR-Beschreibung ist eindeutig bezüglich der noch nicht veröffentlichten Crates-Abhängigkeit:
Wait for the React Compiler Rust crates to be published, then replace the temporary git dependencies with published crate versions.
Bis dahin verwendet die Integration Git-Referenzen auf den vorgelagerten facebook/react-Rust-Workspace, was bedeutet, dass nachgelagerte Konsumenten (rspack, rsbuild, individuelle SWC-Nutzer) swc_core aus einer Git-Quelle bauen müssen, wenn sie experimentieren wollen. Der PR-Titel lautet Add React Compiler und der Eintrag im CHANGELOG ist feat(es/react-compiler): Add React Compiler; das Feature ist die dritte React-Compiler-Integrationsgeschichte in der Tooling-Presse, nach Buns Bundler-Integration am 2026-06-20 (PR bun#32504) und den Oxc-v0.137-React-Compiler-Treeshake-Hooks am 2026-06-18 (PR oxc#23471, oxc#23586).
Das nutzerseitige Konfigurationsfeld ist jsc.transform.reactCompiler in .swcrc. Die Form ist in der PR dokumentiert, aber noch nicht in den veröffentlichten Docs des swc-Crates; das experimentelle Flag ist die Art, sie zu aktivieren.
Die unsafe_math-Verhaltensänderung
Die dritte Hauptänderung ist fix(es/minifier): Gate Number(x) -> +x on unsafe flag (#11944, mit dem Follow-up in #11949). Der SWC-Minifier vor v1.15.43 schrieb Number(x) zu +x um, sobald unsafe_math: true gesetzt war, selbst mit unsafe: false. Terser verlangt seit v4.3.11 SOWOHL unsafe: true ALS AUCH unsafe_math: true für dieselbe Umschreibung.
Die Asymmetrie ist in #11944 dokumentiert: Eine TypeScript-Quelle export function foo(x) { return Number(x) } mit unsafe: false, unsafe_math: true wird in SWC zu +x und in terser zu Number(x) minifiziert. Die beiden Ausgaben unterscheiden sich in jedem Bundle, das die Unsafe-Math-Only-Konfiguration verwendet, was die dokumentierte Terser-Option für eine « ausreichend sichere » Minifizierung mathematischer Ausdrücke ist.
Die Korrektur in v1.15.43 koppelt die Umschreibung an beide Flags, in Übereinstimmung mit terser. Die Änderung ist verhaltensbrechend für Nutzer, die auf das SWC-Verhalten vertraut hatten: Mit unsafe: false, unsafe_math: true behält der Minifier nun Number(x) bei. Die Korrektur ist im CHANGELOG dokumentiert und der Docs-Eintrag zum Sicherheitsumfang nicht vertrauenswürdiger Eingaben (#11937) fügt dem README einen Abschnitt hinzu, der die Sicherheitsgrenze für die parse- und process_print-Eintrittspunkte von SWC verdeutlicht.
Die internen React-Compiler-Korrekturen
Sieben interne React-Compiler-Korrekturen landen neben der Bridge-Integration. Die Korrekturen sind kleiner als die Bridge selbst, aber sie sind die Arbeit, die die Bridge für reale Codebases nutzbar macht.
fix(es/react-compiler): Skip TypeScript this pseudo-params in scope collector(#11940, mofeiZ) weist den Scope-Collector an, die synthetischenthis-Parameter zu ignorieren, die tsserver TypeScript-Methoden hinzufügt.fix(es/react-compiler): Scope ClassStaticBlock and TsModuleBlock as var boundaries(#11943, mofeiZ) behandeltClassStaticBlock(denstatic { ... }-Block in ES2022-Klassenrümpfen) undTsModuleBlock(den Rumpf vonnamespace foo { ... }undmodule foo { ... }) als Scope-Grenzen, sodass Deklarationen darin nicht in den umschließenden Scope leaken.fix(react-compiler): Avoid reporting non-fatal success errors as diagnostics(#11951, mofeiZ) hindert den React Compiler daran, seine eigenen Erfolgsmarkierungen als sichtbare Fehler zu melden, was eine geräuschvollecargo test-Ausgabe erzeugte.fix(react-compiler): React compiler AST conversion for wrapped assignment targets(#11952, mofeiZ) behandelt Zuweisungen an umschlossene Ausdrücke wie(a.b).c = 1, die die Bridge zuvor nicht konvertieren konnte.fix(react-compiler): Disable parser default features(#11957, mofeiZ) zieht den Feature-Umfang des Parsers enger, damit die Bridge keine Parser-Features hineinzieht, die mit dem Scope-Modell des React Compilers in Konflikt stehen.chore(es/react-compiler): Update forked react compiler to 0.2.0(#11946) aktualisiert den intern geforkten React Compiler auf 0.2.0, was die Bridge mit dem vorgelagerten Rust-Compiler in Einklang bringt.refactor(es/react-compiler): Preserve TS metadata during AST roundtrip(#11950, mofeiZ) behält die TypeScript-spezifischen Metadaten auf der AST, wenn die Bridge zwischen SWC:s ESTree-geschmackter AST und der HIR des React Compilers hin- und hergeht.
Das Feature-Flag für den Re-Export der React-Compiler-Transformation ist feat(swc): Gate react compiler re-export (#11941), was bedeutet, dass das react_compiler-Modul des swc-Crates hinter demselben Feature-Flag react_compiler steht wie das Bridge-Crate. Nachgelagerte Nutzer, die die JS-/WASM-Bindings wollen, müssen beide aktivieren.
Die ES2022-Brand-Check-Scope-Korrektur
fix(es/es2022): Correct scope for private property brand checks (#11953) zieht das Scope-Tracking für den ES2022-Privatfeld-Brand-Check enger. Die #field in obj-Syntax ist der Laufzeit-Check, der entscheidet, ob ein Privatfeld von einer gegebenen Aufrufstelle aus zugänglich ist; die Implementierung vor v1.15.43 verfolgte Brand-Checks auf der falschen Scope-Ebene, was dazu führte, dass einige Privatfeld-Zugriffe fälschlicherweise als Fehler gemeldet wurden und andere fälschlicherweise erlaubt waren. Die Korrektur scoped den Brand-Check auf die Klasse, in der das Feld deklariert ist, entsprechend der Spezifikation.
Die Korrektur ist die dritte ES2022-Korrektheitskorrektur im SWC-1.15-Zyklus, nach der super-Umschreibungskorrektur für private Methoden in v1.15.39 und der Scope-Korrektur für statische Initialisierungsblöcke in v1.15.41. ES2022-Privatfelder sind im Tooling weiterhin eine laufende Arbeit; die Korrektur ändert nicht die Parser-Oberfläche, nur die Transformations-Pass.
Was v1.15.43 nicht ändert
Die Release ändert nicht die Parser-Oberfläche, die öffentliche API des React Compilers jenseits der neuen Transformation oder die öffentlichen APIs der swc_ecma_*-Crates. Die CompressOptions-Defaults des Minifiers bleiben die von v1.15.41; das neue unsafe_math-Verhalten ist an das bestehende unsafe-Flag gekoppelt. Der swc_core-v71.0.3-Bump ist die Arbeit, die das react_compiler-Feature-Flag in den veröffentlichten swc_core-Crates ausliefert; die v71-Linie ist die erste, die es trägt.
Die Release entfernt auch die Production-Tracing-Hooks (refactor: Remove production tracing hooks, #11945, kdy1). Das SWC-Binary vor v1.15.43 lieferte Tracing-Hooks aus, die über die Umgebungsvariable SWC_TRACE für Production-Debugging aktiviert werden konnten; die Hooks fügten einen kleinen, aber messbaren Overhead bei jedem Parse-/Transform-Aufruf hinzu. Die Release v1.15.43 entfernt die Hooks vollständig, mit dem Trade-off, dass Production-Tracing nicht mehr ohne einen Debug-Build verfügbar ist.
Was zu beobachten ist
Drei Folgeereignisse sind in den nächsten zwei bis sechs Wochen wahrscheinlich. Das erste ist die Veröffentlichung der React-Compiler-Rust-Crates auf crates.io, die die Integration von der temporären Git-Abhängigkeit zu einer veröffentlichten Version entkoppelt und rspack und rsbuild ermöglicht, die Transformation in ihren nächsten stabilen Releases auszuliefern. Das zweite ist die nächste swc_core-Minor-Release (v71.0.4 oder v71.1.0), die wahrscheinlich weitere HIR-Pässe des React Compilers als SWC-Transformationen exponieren wird. Das dritte ist die nächste Oxc-Crates-Release, die für Montag, den 2026-06-29 geplant ist und die erste Crates-Release außerhalb des v0.137-Zyklus sein wird; sie wird wahrscheinlich weitere React-Compiler-Hooks tragen, die die SWC-Bridge ergänzen.



