Skip to content

perry

v0.5.1151 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

Published 1mo Build & Package
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

android compile harmonyos ios llvm macos
+5 more
native smc typescript watchos windows

Summary

AI summary

Broad release touches Highlights, runtime, codegen, and hir.

Changes in this release

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-android drag & drop broke both aarch64- and x86_64-linux-android jobs.
  • Windows builds fixedwindows-core direct 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 nowcompare.sh --json-out resolved relative to the wrong directory, so the comparison had silently crashed (and | tee swallowed the exit) on every run since at least v0.5.1122; release-mode "hard-fail" gates were comparing nothing. Fixed, plus pipefail, 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 extend through 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_only fails when run in a non-UTC local timezone (CI is UTC): local-time revive of an invalid Date via setFullYear returns 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

Track perry

Get notified when new releases ship.

Sign up free

About perry

A native TypeScript compiler written in Rust. Compiles TypeScript directly to executables using SWC and LLVM.

All releases →

Related context

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]