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.