---
title: "Oxc v0.137 bringt dem Minifier das Treeshaken reiner Typed Arrays und Set/Map-Literale bei, liefert ein inkrementelles Scoping-Refresh und behebt einen React-Compiler-Randfall"
description: "Der Oxc-Release crates_v0.137.0, veröffentlicht am 2026-06-18, liefert zwei neue Minifier-Treeshaking-Pässe (Treeshake reiner Typed Arrays und Set/Map-Array-Literale über #23469, sowie Inlining von Const-Werten für Read-Only-Variablen über #22593), ein lang angelegtes inkrementelles Scoping-Refresh, das den LiveUsageCollector-Kollektor vollständig entfernt (#23197), einen freundlichen Parser-Fehler für benachbarte JSX-Elemente (#23378), einen React-Compiler-Fix für Imports, auf die nur über einen berechneten Schlüssel verwiesen wird (#23586), sowie zwei Breaking Changes an der ESTree-Config-API (#23573, #23574). Die Minifier-Passliste bekommt zusätzlich einen Proxy-bewussten Fix für Object-Introspection-Aufrufe (#23483) und eine neue Erhaltungsregel für Map/WeakSet/WeakMap mit String-Argument (#23470). v0.137 ist der erste Crates-Release seit v0.135 am 2026-06-08 und der zweite seit Buns nativer React-Compiler-Integration, die am 2026-06-20 landete."
date: 2026-06-22
image: "/images/heroes/2026-06-22--oxc-v0-137-react-compiler-treeshake-perf.png"
author: lschvn
tags: ["tooling", "performance"]
tldr:
  - "Oxc Crates v0.137.0, veröffentlicht am 2026-06-18, liefert zwei neue Minifier-Treeshaking-Pässe: « treeshake pure typed arrays and Set/Map array literals » (#23469, Dunqing) und « inline const value for read-only vars » (#22593, Dunqing). Der zweite Pass verwandelt ein `const FOO = computeFoo()` mit späteren `FOO`-Referenzen in den inlineten Wert, was dem Rest des Minifiers die Chance gibt, das Ergebnis zu falten, und der erste Pass entfernt Array-Literale von `Uint8Array`, `Map`, `Set` und Co., deren Werte rein und ungenutzt sind."
  - "Der Minifier erhält außerdem ein lang angelegtes inkrementelles Scoping-Refresh, das den LiveUsageCollector-Kollektor vollständig entfernt (#23197). Kombiniert mit den reinen Perf-Patches im selben Release (im Voraus dimensionierte Statement-Vecs im TS-Enum/Namespace-Lowering, im Voraus dimensionierte JSX-Props-Vecs, Template-Literal-Inlining-Prüfungen in einem einzigen Durchgang, einmalige Auswertung der Ternary-Zweige, korrigierte und im Mangler-Build wiederverwendete Semantic::stats-Knotenzählungen) ist v0.137 eine der dichtesten Perf-Crates des Projekts bisher."
  - "Der Release trägt zwei ESTree-Breaking-Changes (« Make whether to include TS fields a runtime option » #23574 und « ESTree config use methods not consts » #23573), einen React-Compiler-Fix für Imports, auf die nur über einen berechneten Schlüssel verwiesen wird (#23586), der in derselben Woche wie Buns native React-Compiler-Integration landet, einen freundlichen Parser-Fehler für benachbarte JSX-Elemente und einen Parser-Fix, der einen Zeilenkommentar nach `:` als führend statt nachgestellt behandelt."
faq:
  - question: "Was ist die Hauptfunktion von Oxc Crates v0.137.0?"
    answer: "Zwei neue Minifier-Treeshaking-Pässe: « treeshake pure typed arrays and Set/Map array literals » (#23469) und « inline const value for read-only vars » (#22593). Der Pure-Array-Pass entfernt Array-Literale von `Uint8Array`, `Map`, `Set` und Co., deren Inhalt rein und ungenutzt ist, und der Inline-Const-Pass substituiert den Wert von Read-Only-`const`-Bindings an den Verwendungsstellen, was dem Rest des Minifiers erlaubt, das Ergebnis zu falten. Beide sind standardmäßig deaktiviert; die Voreinstellung in oxc_minifier v0.137 entspricht v0.136, die Gewinne sind also Opt-in über `CompressOptions`."
  - question: "Was ändert das inkrementelle Scoping-Refresh?"
    answer: "Der `LiveUsageCollector`-Kollektor war die einzige Struktur in `oxc_minifier`, die bei jedem Minifier-Pass den gesamten Scope-Baum durchlief, um zu ermitteln, welche Symbole noch lebendig waren. Das inkrementelle Scoping-Refresh (#23197) teilt das in pro-Statement-Updates auf und überspringt den vollständigen Durchlauf, wenn keine stromabwärtige Änderung den Cache invalidiert. Der Autor Dunqing merkt in der PR an, dass der Kollektor der größte konstante Kostentreiber in großen Minifier-Läufen war, und seine Entfernung beseitigt den einzigen Pass in `oxc_minifier`, der noch in O(scope) bei jedem Eintritt in einen Funktionskörper lief. Die Perf-Gewinne sind real, hängen aber von der Eingabegröße ab; die Änderung zeigt sich am meisten bei minifizierten Bundles im Bereich einiger hundert Kilobytes."
  - question: "Wie hängt dieser Release mit dem React Compiler zusammen?"
    answer: "Zwei der elf Performance-Einträge des Releases liegen in `react_compiler`. Der größte ist « Borrow binding names in prefilter instead of allocating » (#23471, Yunfei He), der eine `String`-Allokation pro Prefilter-Treffer auf einer Funktionsdeklaration entfernt. Der Fix ist « Keep imports referenced only by a computed key » (#23586, Boshen), der eine echte Korrektheitslücke im Import-Tracking des React Compilers schließt. Diese Änderungen landen in derselben Woche wie [Buns native React-Compiler-Integration](/articles/2026-06-21--bun-react-compiler-bundler-integration-20x) (PR #32504, gemergt am 2026-06-20), und Buns Port zieht den Upstream-Rust-Workspace aus `facebook/react` direkt, statt über einen Oxc-Adapter zu gehen, also fließen die Oxc-Änderungen weiterhin in den Upstream-Compiler zurück."
  - question: "Was sind die ESTree-Breaking-Changes in v0.137?"
    answer: "Zwei: « Make whether to include TS fields a runtime option » (#23574, overlookmotel) und « ESTree config use methods not consts » (#23573, overlookmotel). Der erste verschiebt die Entscheidung, ob der ESTree-AST TypeScript-spezifische Felder (TS-Annotationen, Typparameter, TS-spezifische Knoten) freilegt, von einem `Cargo`-Build-Feature zu einer Runtime-Option am ESTree-Builder. Der zweite ersetzt öffentliche `const`-Items auf der `ESTree`-Config-Struktur durch Methoden, sodass sich Aufrufstellen von `config.include_ts_fields` zu `config.include_ts_fields()` ändern. Beides sind echte Breaking Changes für nachgelagerte Crates, die einen benutzerdefinierten ESTree-AST bauen und ihre Config-Aufrufe anpassen müssen. Der Compiler selbst bleibt unverändert; die Breaking Changes betreffen nur die optionale ESTree-Kompatibilitätsschicht."
  - question: "Beschleunigt v0.137 den Parser?"
    answer: "Marginal. « Reduce code bloat from verify_modifiers monomorphization » (#23576, Boshen) reduziert Monomorphisierungs-Bloat im Hot Path des Parsers, und der zugehörige Semantic/Mangler/Minifier-Fix in #23352 sorgt dafür, dass `Semantic::stats` korrekte Knotenzählungen zurückgibt, die der Mangler wiederverwenden kann, statt sie neu zu berechnen. Das sind echte Gewinne bei großen Eingaben, aber sie sind im Release nicht benchmarkt; der Release-Body liest sich eher wie eine Patch-Liste als wie ein Benchmark-Bericht. Nutzer der eigenständigen `oxc_parser`-Crate werden wahrscheinlich keinen messbaren Wandzeit-Unterschied bemerken; Nutzer von `oxc_minifier` auf großen Eingaben sind diejenigen, die die Gewinne sehen werden, vor allem durch die Entfernung von `LiveUsageCollector` und die im Voraus dimensionierten Vecs."
  - question: "Wird oxlint 1.71 auf diesen Crates ausgeliefert?"
    answer: "Die Apps oxlint und oxfmt folgen einem wöchentlichen Rhythmus am Montag und ziehen die neueste `crates_v0.x`-Linie zum Release-Zeitpunkt. v0.137 wurde am 2026-06-18 (Donnerstag) veröffentlicht, und der letzte Apps-Release (oxlint v1.70.0 und oxfmt v0.55.0) wurde am 2026-06-15 ausgeliefert, sodass der nächste Apps-Release am 2026-06-22 die Perf-Gewinne von v0.137 in den Parser-, Minifier- und React-Compiler-Crates sowie die Entfernung von `LiveUsageCollector` in `oxc_minifier` aufgreifen sollte."
---

[Der Oxc-Release crates_v0.137.0](https://github.com/oxc-project/oxc/releases/tag/crates_v0.137.0), veröffentlicht am 18. Juni 2026, liefert zwei neue Minifier-Treeshaking-Pässe, ein lang angelegtes inkrementelles Scoping-Refresh, einen freundlichen Parser-Fehler für benachbarte JSX-Elemente und einen React-Compiler-Fix für Imports, auf die nur über einen berechneten Schlüssel verwiesen wird. Der Release bringt außerdem zwei Breaking Changes an der ESTree-Config-API und die dichteste Perf-Patch-Liste des Projekts bisher: elf Performance-Einträge verteilt auf Parser, Minifier, Mangler, Transformer und React Compiler.

Es ist der erste Crates-Release seit v0.135 am 8. Juni und der zweite seit [Buns nativer React-Compiler-Integration](/articles/2026-06-21--bun-react-compiler-bundler-integration-20x), die am 20. Juni in `oven-sh/bun` gemergt wurde. Buns Port zieht den Upstream-Rust-Workspace aus `facebook/react` direkt, also fließen die Oxc-Änderungen hier weiterhin über Metas Port und den `react_compiler_oxc`-Adapter, den andere Bundler aufgreifen, in den Upstream-Compiler zurück.

## Das Highlight: zwei neue Minifier-Treeshaking-Pässe

Der neue Pass, den Anwender zuerst spüren werden, ist `treeshake pure typed arrays and Set/Map array literals` ([#23469](https://github.com/oxc-project/oxc/pull/23469), Dunqing). Der Minifier vor v0.137 konnte bereits ein `const x = [1, 2, 3]` mit reinem Inhalt treeshaken, stoppte aber an der Grenze der Typed Arrays: Ein `new Uint8Array([1, 2, 3])` mit ungenutzten Bytes blieb in der Ausgabe, ebenso ein `new Map([["a", 1], ["b", 2]])`, dessen Einträge nie gelesen wurden. Der v0.137-Pass erkennt diese Konstruktoren, durchläuft das innere Array-Literal und behandelt es genauso wie der reguläre Array-Literal-Pass: rein + ungenutzt => wegwerfen.

Die Ergänzung ist `inline const value for read-only vars` ([#22593](https://github.com/oxc-project/oxc/pull/22593), ebenfalls Dunqing). Der Minifier vor v0.137 inlinete ein `const`-Binding nur, wenn das Binding genau einmal verwendet wurde; v0.137 inlinet den Wert an jeder Verwendungsstelle, wenn das Binding ein `const` ist und der Wert von der typbewussten Analyse als Read-Only behandelt wird. Das gibt dem Rest des Minifiers (Constant Folding, Bedingungsauswertung, Return-Statement-Vereinfachung) die Chance, das Ergebnis zu falten. Die PR-Beschreibung geht ein ausgearbeitetes Beispiel durch: Ein `const FOO = computeFoo()` gefolgt von einem späteren `if (FOO > 0)` kollabiert zum inlineten Vergleich, wenn `computeFoo` ein reiner Pfeil ist, der ein Literal zurückgibt, und zu einem Konstant-Bedingungs-Zweig, wenn es ein reiner Pfeil ist, der eine Konstante zurückgibt.

Beide Pässe sind durch `CompressOptions`-Flags gated, in v0.137 standardmäßig deaktiviert. Die Release-Notes sind explizit: Der `CompressOptions`-Standard in oxc_minifier v0.137 entspricht v0.136, die Gewinne sind also Opt-in.

## Die größte Perf-Änderung: inkrementelles Scoping-Refresh

Die größte einzelne Perf-Änderung in v0.137 ist `Incremental scoping refresh, delete LiveUsageCollector` ([#23197](https://github.com/oxc-project/oxc/pull/23197), Dunqing). `LiveUsageCollector` war die einzige Struktur in `oxc_minifier`, die bei jedem Minifier-Pass den gesamten Scope-Baum durchlief, um zu ermitteln, welche Symbole noch in Gebrauch waren. Das inkrementelle Scoping-Refresh teilt das in pro-Statement-Updates auf und überspringt den vollständigen Durchlauf, wenn keine stromabwärtige Änderung den Cache invalidiert.

Dunqings PR-Beschreibung ist direkt: `LiveUsageCollector` war der größte konstante Kostentreiber in großen Minifier-Läufen und der einzige Pass in `oxc_minifier`, der noch in O(scope) bei jedem Eintritt in einen Funktionskörper lief. Seine Entfernung eliminiert das einzige Minifier-Interne, das den vollen Scope-Baum bei jedem Eintritt benötigte, und der Rest des Minifiers kann nun ein günstigeres pro-Statement-Refresh nutzen. Die Release-Notes liefern keine Zahl, aber die zugehörigen Perf-Patches im selben Release erzählen dieselbe Geschichte:

- `Mangler: compile slot sort once instead of per CAPACITY` ([#23577](https://github.com/oxc-project/oxc/pull/23577), Boshen)
- `Parser: reduce code bloat from verify_modifiers monomorphization` ([#23576](https://github.com/oxc-project/oxc/pull/23576), Boshen)
- `ESTree: remove pointless mem::take` ([#23572](https://github.com/oxc-project/oxc/pull/23572), overlookmotel)
- `Transformer: pre-size statement vecs in TS enum & namespace lowering` ([#23516](https://github.com/oxc-project/oxc/pull/23516), Yunfei He)
- `Minifier: compute template-literal inline checks in a single pass` ([#23467](https://github.com/oxc-project/oxc/pull/23467), Yunfei He)
- `Semantic, mangler, minifier: fix Semantic::stats node count and reuse stats in mangler builds` ([#23352](https://github.com/oxc-project/oxc/pull/23352), Boshen)
- `Minifier: evaluate ternary branches once in minimize_conditional_expression` ([#23479](https://github.com/oxc-project/oxc/pull/23479), Yunfei He)
- `Transformer: pre-size JSX props vec to attribute count` ([#23466](https://github.com/oxc-project/oxc/pull/23466), Yunfei He)
- `React Compiler: borrow binding names in prefilter instead of allocating` ([#23471](https://github.com/oxc-project/oxc/pull/23471), Yunfei He)

Der Semantic/Mangler/Minifier-Fix in #23352 ist der, auf dem die anderen Perf-Einträge aufbauen: `Semantic::stats` lieferte bisher Knotenzählungen, die nicht dem entsprachen, was der Mangler gleich berechnen würde, sodass der Mangler die Arbeit wiederholen musste. Der Fix sorgt dafür, dass die Zählungen übereinstimmen, und der Rest des Releases kann sie wiederverwenden. v0.137 ist der erste Release, in dem die Semantic/Mangler/Minifier-Pipeline hinsichtlich Stats konsistent ist.

## Zwei Breaking Changes der ESTree-Config

Die beiden Breaking Changes liegen beide in der optionalen ESTree-Kompatibilitätsschicht, nicht im Compiler selbst. `Make whether to include TS fields a runtime option` ([#23574](https://github.com/oxc-project/oxc/pull/23574), overlookmotel) verschiebt die Entscheidung, ob der ESTree-AST TypeScript-spezifische Felder (TS-Annotationen, Typparameter, TS-spezifische Knoten) freilegt, von einem `Cargo`-Build-Feature zu einer Runtime-Option am ESTree-Builder. `ESTree config use methods not consts` ([#23573](https://github.com/oxc-project/oxc/pull/23573), overlookmotel) ersetzt öffentliche `const`-Items auf der `ESTree`-Config-Struktur durch Methoden, sodass sich Aufrufstellen von `config.include_ts_fields` zu `config.include_ts_fields()` ändern.

Nachgelagerte Crates, die einen benutzerdefinierten ESTree-AST bauen, müssen ihre Config-Aufrufe anpassen. Der Compiler selbst, der Parser, der Transformer, der Minifier und der React Compiler bleiben durch die ESTree-Überarbeitung unverändert. Die ESTree-Schicht ist die, die Oxc erlaubt, einen AST zu emittieren, der der [ESTree-Spec](https://github.com/estree/estree) entspricht, was Tools wie Rollup, esbuild und die `acorn`-basierte Loader-Kette von webpack konsumieren.

## Die React-Compiler-Einträge

Die beiden React-Compiler-Einträge sind die, die für die Nachricht des Vortags am relevantesten sind. `Keep imports referenced only by a computed key` ([#23586](https://github.com/oxc-project/oxc/pull/23586), Boshen) schließt eine echte Korrektheitslücke im Import-Tracking des React Compilers: Ein Import, dessen einzige Verwendung die rechte Seite eines berechneten Schlüssels ist (zum Beispiel `obj[SomeImport]`, wobei `SomeImport` ein umbenannter Default-Import ist), wurde fallengelassen, was sich in der HIR des React Compilers zu undefiniertem Verhalten kompilierte. Der Fix hält den Import am Leben, sobald ein berechneter Schlüssel auf ihn auflöst.

`Borrow binding names in prefilter instead of allocating` ([#23471](https://github.com/oxc-project/oxc/pull/23471), Yunfei He) ist ein Perf-Eintrag, kein Fix. Der Prefilter ist der erste Pass des React Compilers über einen Funktionskörper, um zu entscheiden, ob der Körper ein Kandidat für die Kompilierung ist; der Prefilter allokierte bisher eine `String` pro Treffer, was sich auf einer großen React-Codebasis mit vielen Komponenten summiert. Das Borrow entfernt die Allokation.

Diese Änderungen fließen in den Upstream-Rust-Workspace aus `facebook/react`, nicht nur in den Oxc-Fork. [Buns native React-Compiler-Integration](/articles/2026-06-21--bun-react-compiler-bundler-integration-20x) portiert den Upstream-`compiler/crates/`-Workspace direkt, also landen die React-Compiler-Einträge von v0.137 in der nächsten Bun-Synchronisierung. Oxlint und oxfmt ziehen die neuesten Crates nach ihrem wöchentlichen Release-Rhythmus, und der [oxlint-1.70-Release](/articles/2026-06-12--oxc-v0-135-react-compiler-ast-breaking) vor zwei Wochen war der erste, der den Upstream-Port des React Compilers als Rust-Crate auslieferte; v0.137 ist der zweite Crates-Release, der React-Compiler-Performance- und Korrektheitsarbeit trägt.

## Die Parser-UX-Arbeit

Zwei Parser-Änderungen zielen auf Developer-Ergonomie statt auf rohe Perf. `Parser: add friendly error for adjacent JSX elements` ([#23378](https://github.com/oxc-project/oxc/pull/23378), sapphi-red) ersetzt den kryptischen « unexpected token »-Fehler, den der Parser bisher emittierte, wenn zwei benachbarte JSX-Elemente (z. B. `<a /><b />` am Anfang einer Datei ohne expliziten Fragment-Wrapper) nicht geparst werden konnten, durch eine Meldung, die das Problem benennt und auf das fehlerhafte Token zeigt. `Parser: treat a line comment after ':' as leading, not trailing` ([#23515](https://github.com/oxc-project/oxc/pull/23515), Dunqing) behebt einen lange bestehenden Kommentar-Zuordnungs-Bug, bei dem ein `// foo`-Kommentar nach einem `:` an das vorhergehende Token statt an das nächste gehängt wurde, was Source Maps in manchen Fällen falsch machte.

## Zwei Minifier-Korrektheitsfixes, die es wert sind, erwähnt zu werden

Die beiden Minifier-Bugfixes sind klein, aber genau die Sorte, die in der Produktion zuschlägt:

- `Minifier: keep Object introspection calls on a possible Proxy` ([#23483](https://github.com/oxc-project/oxc/pull/23483), Dunqing) hindert den Minifier daran, `Object.keys(obj)`, `Object.values(obj)`, `Object.entries(obj)` und `Object.getOwnPropertyDescriptor(obj, key)` zu entfernen, wenn `obj` ein `Proxy` sein könnte, weil der Aufruf den `ownKeys`- oder `getOwnPropertyDescriptor`-Trap des Proxys auslösen und beliebige Werte zurückliefern kann.
- `Minifier: keep new Map/WeakSet/WeakMap with a string argument` ([#23470](https://github.com/oxc-project/oxc/pull/23470), Dunqing) hindert den Minifier daran, ein `new Map([["a", 1]])` zu entfernen, dessen Literal-Argument ein String-schlüsseliges Array reiner Einträge ist, weil die Iterationsreihenfolge des Konstruktors zählt und der Minifier es als No-Op behandelte.

Beide gehören zur selben Familie wie der neue `treeshake pure typed arrays`-Pass, nur in umgekehrter Richtung: Der neue Pass ist eine Opt-in-Erweiterung dessen, was der Minifier als sicher zu entfernen beweisen kann, und die beiden Fixes sind Korrekturen an Stellen, an denen der Minifier vor v0.137 zu aggressiv war.

## Was v0.137 nicht ändert

Der Release ändert weder die Parser- oder Minifier-Standards noch die Transformer-Oberfläche oder die öffentliche API des React Compilers. Die Breaking Changes sind auf die optionale ESTree-Config-Schicht beschränkt. Die APIs der Crates `oxc_ast`, `oxc_parser`, `oxc_semantic`, `oxc_transformer`, `oxc_minifier`, `oxc_mangler` und `oxc_react_compiler` sind alle rückwärtskompatibel mit v0.136. Der nächste [Release der Apps oxlint und oxfmt](https://github.com/oxc-project/oxc/releases) im wöchentlichen Montags-Rhythmus wird die Perf-Gewinne von v0.137 in den Parser-, Minifier- und React-Compiler-Crates sowie die Entfernung von `LiveUsageCollector` in `oxc_minifier` aufgreifen.

Der Release ist auch der zweite, der die neue Konvention des Oxc-Teams trägt, den Body in Abschnitte mit Emoji-Überschriften zu gliedern (`💥 BREAKING CHANGES`, `🚀 Features`, `🐛 Bug Fixes`, `⚡ Performance`, `📚 Documentation`), die [Oxc v0.135](/articles/2026-06-12--oxc-v0-135-react-compiler-ast-breaking) eingeführt hat. Das Muster entspricht dem [Changelog-Format von Biome](https://github.com/biomejs/biome/releases) und den [Vite-8-Release-Notes](/articles/2026-04-08--vite-8-stable-seven-patches-in-three-weeks) und erleichtert es, einen Release nach dem zu scannen, was für Ihren Code auf einen Blick zählt.
