This release adds 5 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+5 more
ReleasePort's take
Light signalThis release introduces multiple feature enhancements across npm packages, platform widgets, performance improvements, and critical bug fixes.
Why it matters: Test these changes in development before production to capture byte‑identical SQL CRUD, in‑process GET round‑trip, new widget components, promise_all_chains speedup, GC reduction, and ws panic fixes.
Summary
AI summaryBroad release touches Release sweep at HEAD, Terminal UI, Real-world npm packages, and Real widgets across platforms.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
drizzle-orm with better-sqlite3 achieves byte-identical SQL CRUD round-trip drizzle-orm with better-sqlite3 achieves byte-identical SQL CRUD round-trip Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
axios with node:http enables in-process GET round-trip axios with node:http enables in-process GET round-trip Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
iOS and watchOS widget targets auto-invoke swiftc, emit .appex iOS and watchOS widget targets auto-invoke swiftc, emit .appex Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Android widget target support path established under #676 Android widget target support path established under #676 Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Terminal UI ink-style ergonomics with hooks, JSX intrinsics added Terminal UI ink-style ergonomics with hooks, JSX intrinsics added Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Effect Schema supports nested-class static-field initialization Effect Schema supports nested-class static-field initialization Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Android widgets: Chart, TreeView, RichTooltip, Combobox, Calendar Android widgets: Chart, TreeView, RichTooltip, Combobox, Calendar Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
iOS visionOS widgets: TreeView, RichTooltip, Combobox added iOS visionOS widgets: TreeView, RichTooltip, Combobox added Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
HarmonyOS ArkUI codegen: Calendar, Select, RichEditor, bindPopup HarmonyOS ArkUI codegen: Calendar, Select, RichEditor, bindPopup Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Release-readiness test harness with 13 verification tiers added Release-readiness test harness with 13 verification tiers added Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
Release‑readiness test harness added with 13 verification tiers covering builds, parity, real npm packages, GC stress, threading, docs, UI matrix, simulators, emulators, Windows smoke, and link smoke Release‑readiness test harness added with 13 verification tiers covering builds, parity, real npm packages, GC stress, threading, docs, UI matrix, simulators, emulators, Windows smoke, and link smoke Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Performance | Medium |
promise_all_chains improved from 8.1× to 1.82× Bun baseline promise_all_chains improved from 8.1× to 1.82× Bun baseline Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Performance | Medium |
GC try_mark_value self-time reduced from 28% to 8% GC try_mark_value self-time reduced from 28% to 8% Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Performance | Medium |
macOS setjmp replaced with _setjmp, 60% kernel reduction macOS setjmp replaced with _setjmp, 60% kernel reduction Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
ws tokio runtime panic fixed ws tokio runtime panic fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
sigv4 webcrypto implementation working sigv4 webcrypto implementation working Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
drizzle axios codegen blockers cleared drizzle axios codegen blockers cleared Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Map<K,V>|undefined iteration bug fixed Map<K,V>|undefined iteration bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
redis createClient implementation fixed redis createClient implementation fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
try/finally codegen bug fixed try/finally codegen bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
generator-transform bug fixed generator-transform bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
TypeError throw helpers bug fixed TypeError throw helpers bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
state.text() macOS updates bug fixed state.text() macOS updates bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
watchOS simulator symbols bug fixed watchOS simulator symbols bug fixed Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
cross-module tagged-template rest params working cross-module tagged-template rest params working Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
__dirname require rest-param AOT working __dirname require rest-param AOT working Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
NavStack visibility bug fixed NavStack visibility bug fixed Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
arr.entries() Any-typed receivers bug fixed arr.entries() Any-typed receivers bug fixed Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
JSON.stringify date ISO format bug fixed JSON.stringify date ISO format bug fixed Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
NaN equality indexOf includes SameValueZero fixed NaN equality indexOf includes SameValueZero fixed Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
FetchGetWithAuth DateToLocaleString LLVM arms support FetchGetWithAuth DateToLocaleString LLVM arms support Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Cross‑module tagged‑template rest‑parameter handling fixed (issue #608) Cross‑module tagged‑template rest‑parameter handling fixed (issue #608) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
NavStack visibility issue resolved (issue #535) NavStack visibility issue resolved (issue #535) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
Array.prototype.entries() on Any‑typed receivers corrected (issue #597) Array.prototype.entries() on Any‑typed receivers corrected (issue #597) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Medium |
FetchGetWithAuth and DateToLocaleString LLVM code paths stabilized (issue #600) FetchGetWithAuth and DateToLocaleString LLVM code paths stabilized (issue #600) Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
Full changelog
Stability checkpoint release. 311 commits and 105 closed issues since v0.5.585. Most significant patch-version jump since v0.5.337. Headline themes: real npm packages now compile natively, a huge async/promise/GC performance overhaul, and the TUI + widget-target frontier.
Highlights
Real-world npm packages
- drizzle-orm + better-sqlite3: byte-identical SQL CRUD round-trip under Perry (#488 path, #585/#588/#590 codegen blockers all cleared)
- axios + node:http: in-process GET round-trip; #598 (NaN-box body), #589 (node:http runtime), #604 (event-loop drain) all landed
- Effect Schema (#685, #687): nested-class static-field init +
ClassRef.staticMethoddispatch through the BigIntFromSelf.pipe chain - hono, redis, ws: real binding work; full round-trip still tracked under followups #603 (hono
:idroutes) and #604-family (event-loop after close)
New platform targets (#676 ladder)
--target ios-widget/watchos-widgetauto-invoke swiftc and emit a built.appex(v0.5.809) — refs #676 phase 1--target android-widgetpath stays under #676 ladder for the next iteration
Terminal UI (#679 / #358)
- Full ink-style ergonomics layer for
perry/tui— hooks, Box/Text JSX intrinsics, focus management, all 5 phases shipped in v0.5.810 - GC root scanners + state slot pools (v0.5.812)
Performance — promise_all_chains from 8.1× Bun → 1.82× (v0.5.816, v0.5.820)
- (P1) Fuse
__nextbody into async step closure - (P2) Reuse in-flight
nextPromise for done-case - (P3) Pack INLINE_TRAP_NEXT + CURRENT_STEP_CLOSURE into one TLS slot
- (P5) Swap macOS
setjmp(3)→_setjmp(3)— 60% kernel reduction (the single biggest win) - (GC-1) Hashset-backed valid-pointer
contains()—try_mark_value28% → 8% self-time - (GC-2/3/4) PtrHasher + lazy MallocState lookup-set + trace-phase mark specialization
Real widgets across platforms
- Android: Chart (#474), TreeView (#480), RichTooltip (#479), RichText (#478), Combobox (#475), Calendar (#481)
- iOS / visionOS: TreeView, RichTooltip, Combobox
- ArkUI codegen (HarmonyOS path): Calendar, Select, RichEditor, bindPopup
Release-readiness harness (scripts/release_sweep.sh)
- New
tests/release/RELEASE_READINESS.mddoc +.claude/skills/release-readiness-test/Claude skill - 13 tiers covering cargo build/test, parity, real npm packages, GC stress, threading, doc-tests, UI matrix, Apple sims, Android emu, Windows, link-smoke
Notable fixes
- #535 NavStack visibility, #536 try/finally codegen, #542/#543 Map<K,V>|undefined iteration, #561 sigv4/webcrypto, #585/#588/#589/#590 drizzle/axios codegen, #594 generator-transform, #596 TypeError throw helpers, #597 arr.entries() on Any-typed receivers, #599 state.text() macOS updates, #600 FetchGetWithAuth / DateToLocaleString LLVM arms, #601 perry-ext-fetch lib tests, #602 drizzle-better-sqlite3 link, #605 redis createClient, #606 ws tokio runtime panic, #607 watchos-simulator symbols, #608 cross-module tagged-template rest params, #613/#614/#615 baseline parity gaps, #665 cjs-wrap class identity, #667/#668/#672 AOT __dirname/require/rest-param, #680 type-only imports + namespace-member map, #685/#687 nested-class static init, JSON.stringify(date) ISO format, typeof new Date() returns "object", NaN equality (indexOf/includes/SameValueZero)
Release sweep at HEAD (macOS arm64)
- Tier 0 build_matrix: PASS
- Tier 1 cargo_workspace: PASS (133/133)
- Tier 2 parity: PASS (277/325, 85.2% — +53 tests vs v0.5.714)
- Tier 3 real_packages: 3/6 PASS (axios / drizzle / fastify green; hono / redis / ws tracked under #603/#604)
- Tier 4 gc_stress: PASS (18/18)
- Tier 5 threading: PASS (4/4)
- Tier 6 doc_tests: 183/240 (small slip from 185)
- Tier 7 ui_host_smoke: PASS
- Tier 8/9/10 sim/emu: precondition gap (per-target runtime not pre-built on this host)
- Tier 11 windows_smoke: SKIP (host gate)
- Tier 12 link_smoke: PASS (6 targets linked, 7 SKIP for precondition, 0 regressions)
Composition
- 171 fix • 36 feat • 21 docs • 20 perf • 12 test • 8 bench • 4 chore
This is a stability checkpoint. v0.6.0 comes next, gated on tier 3 fixtures going fully green + tier 8/9/10/12 cross-target preconditions met.
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
Beta — feedback welcome: [email protected]