This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+5 more
Summary
AI summaryBroad release touches Highlights, runtime, codegen, and hir.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Windows builds now include the `windows-core` direct dependency for COM authoring, shipping for the first time. Windows builds now include the `windows-core` direct dependency for COM authoring, shipping for the first time. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Performance | High |
Dense‑array growth is now linear instead of quadratic; 10 M‑element fill goes from never finishing to ~3.3 s. Dense‑array growth is now linear instead of quadratic; 10 M‑element fill goes from never finishing to ~3.3 s. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Release platform builds are no longer broken; all 19 build jobs pass. Release platform builds are no longer broken; all 19 build jobs pass. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Android `perry-ui-android` drag & drop borrow-lifetime error (E0597) is fixed for aarch64- and x86_64-linux-android builds. Android `perry-ui-android` drag & drop borrow-lifetime error (E0597) is fixed for aarch64- and x86_64-linux-android builds. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Performance regression gate now correctly runs and fails on regressions; `compare.sh --json-out` resolved relative path issue, added `pipefail`, and refreshed baselines. Performance regression gate now correctly runs and fails on regressions; `compare.sh --json-out` resolved relative path issue, added `pipefail`, and refreshed baselines. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
`String.match` no‑match now returns `null` instead of a boxed null pointer. `String.match` no‑match now returns `null` instead of a boxed null pointer. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Stale Apple cross runtimes no longer break iOS/tvOS link steps. Stale Apple cross runtimes no longer break iOS/tvOS link steps. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Generator ID scans now see closures in every `Expr` variant. Generator ID scans now see closures in every `Expr` variant. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
`OutgoingMessage` and server defaults are now exposed via the HTTP API. `OutgoingMessage` and server defaults are now exposed via the HTTP API. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
`CFBundleVersion` in tvOS/WatchOS builds is emitted from `perry.toml` with GM DT* SDK keys. `CFBundleVersion` in tvOS/WatchOS builds is emitted from `perry.toml` with GM DT* SDK keys. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Low |
Class subclass with async method passes definition test262 tail case. Class subclass with async method passes definition test262 tail case. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Stripe protoExtend regression fixed; unhandled rejections are now readable and false‑positive handled‑rejection cases resolved. Stripe protoExtend regression fixed; unhandled rejections are now readable and false‑positive handled‑rejection cases resolved. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
Full changelog
Highlights
- Release pipeline is green end-to-end again. v0.5.1150 shipped with 5 of 19 platform build jobs red (so npm/homebrew/apt/winget publish never ran) and a Regression Check that had hung at the 6-hour timeout on every run since v0.5.1129. All root causes fixed (#4857).
- Android builds fixed — borrow-lifetime error (E0597) in
perry-ui-androiddrag & drop broke bothaarch64-andx86_64-linux-androidjobs. - Windows builds fixed —
windows-coredirect dependency for#[implement]COM authoring (#4837) ships in a release for the first time. - Dense-array growth no longer quadratic — #4648's absolute 1M dense cap routed sequential large-array fills through string-keyed sparse properties (linear scan per insert). A 10M-element fill went from never finishing (6h CI timeouts) to ~3.3s. Sparse storage is now gated on the jump a write makes past the current length (engine-style dictionary-mode heuristic); reads consult sparse storage only past capacity.
- Performance regression gate actually works now —
compare.sh --json-outresolved relative to the wrong directory, so the comparison had silently crashed (and| teeswallowed the exit) on every run since at least v0.5.1122; release-mode "hard-fail" gates were comparing nothing. Fixed, pluspipefail, a 100-minute job timeout, and both the performance and binary-size baselines refreshed from current measured runs.
Fixes
- fix(ci): unbreak release platform builds + lint gates (#4857)
- fix(codegen): String.match no-match returns null, not a boxed null pointer (#4858, #4860)
- fix(codegen,ci): keep stale Apple cross runtimes from breaking iOS/tvOS links (#4856, #4859)
- fix(transform): generator id scans must see closures in every Expr variant (#4851, #4854)
- fix(runtime): class subclass + async-method + definition test262 tail (#4853)
- test(#4841): Stripe protoExtend regression + readable unhandled rejections + handled-rejection false-positive fix (#4852)
- fix(hir): operator-expression semantics test262 tail — inc/dec ToNumber, != bigint/object, instanceof (#4850)
- fix(http): expose OutgoingMessage and server defaults (#4503)
- fix(codegen): non-arrow function expressions get fresh identity (#4831 follow-up, #4849)
- fix(tvos/watchos): CFBundleVersion from perry.toml + emit GM DT* SDK keys (#4848)
- fix(hir): private-member brand-check on access + class-element tail v3 (#4847)
- fix(hir): class destructuring (dstr) test262 tail v2 (#4846)
- fix(codegen): guard cyclic inheritance walks against non-termination (#4845)
- fix(runtime): new WeakMap()/Map/Set from a constructor value no longer throws "requires 'new'" (#4844)
- fix(runtime): honor JSON reviver prototype lookups (#4665)
- fix(runtime): low-hanging test262 tails — URI/parse/Number/collections/Reflect (#4843)
- fix(hir): expression-semantics test262 tail — object-literal NamedEval/gen-method dstr, delete, interleaved spread (#4842)
- fix(runtime): built-ins/Array iteration/mutation methods test262 parity v3 (#4839)
- fix(runtime): Promise static-method receiver + combinator/reflection/unhandled-rejection parity (#4838)
- fix(windows): WebView2 COM init + dropped-init-result so WebView renders (#4835, #4837)
- fix(codegen): dispatch Stripe-style cross-module
extendthrough runtime method call (#4831, #4836) - fix(stdlib): emit one header line per array-valued header in node:http (#4826, #4829)
- style/refactor: unbreak the lint gate on main — cargo fmt after #4853 + body_stmt.rs file-size split (#4855)
Known issues
date::tests::test_full_year_setters_revive_invalid_date_onlyfails when run in a non-UTC local timezone (CI is UTC): local-time revive of an invalid Date viasetFullYearreturns NaN.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About perry
A native TypeScript compiler written in Rust. Compiles TypeScript directly to executables using SWC and LLVM.
Related context
Related tools
Earlier breaking changes
- v0.5.1158 `cluster` workers share a listening port using SO_REUSEPORT and IPC round‑trip.
- v0.5.1158 Streams now support BYOB readers and real `ByteLengthQueuingStrategy` accounting.
- v0.5.1158 `Atomics.wait`, `notify`, and `waitAsync` now block and wake across agents using a shared `SharedArrayBuffer`.
- v0.5.1158 `node:dns` and `node:dgram` perform real network I/O instead of stub behavior.
- v0.5.1158 `AsyncLocalStorage` and `async_hooks` now propagate context across await, microtasks, timers, and `process.nextTick`.
Beta — feedback welcome: [email protected]