Skip to content

perry

v0.5.1219 Feature

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

Published 23d 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, Node.js compatibility, Language & conformance, and Platforms, UI, packaging.

Full changelog

394 commits since v0.5.1182.

Highlights

  • Native NestJS support — express adapter, DI container, decorators + reflect-metadata, rxjs interceptor interop, guards/pipes/filters (#5739, #5758–#5760, #5721)
  • New current-thread async runtime — JS-loop-driven runtime with wait-driver and gated fast-native-drive; native I/O and JS interleave on one thread, Node's model, eliminating the cross-thread lost-wakeup family (#5831, supersedes #5779). A link-order bug that could strand the new runtime (test-only perry_ffi shims shadowing the real bridge) was found and fixed in the same release (#5892, #5911)
  • CPS async lowering for async class methods, capturing-closure functions, and nested async closures (#5854)
  • Representation-aware type lowering with a native-ABI material-evidence gate in CI (#5466)
  • Embed static assets into standalone executables (#5754) and eval-mode worker_threads Workers from inline source (#5799)
  • Promise spec-compliance batch — then/finally SpeciesConstructor + error propagation (#5767), user-defined own then honored (#5748), own-property dispatch fixes (#5865), reaction-slot clobber fix for the webpack/Turbopack shared-chunk-promise hang (#5867)

Node.js compatibility

  • fetch: AbortSignal cancel/timeout (#5690), byte-exact binary request/response bodies (#5661, #5778, #5660), Request-init header merge (#5704)
  • http: IncomingMessage.pipe() so node-fetch/gaxios bodies flow (#5787), streamed-body chunks carried as Bytes (#5419), requestTimeout validation (#5670)
  • process.stdin as a functional raw-mode Readable (#5733); gc() exposed on globalThis (#5712); old-gen arena included in process.memoryUsage() (#5713)
  • net/tls: TCP_NODELAY by default + socket.setNoDelay (#5658), zero-copy socket reads (#5623), SSO short-string value conversion (#5638)
  • zlib late-attaching stream consumers (#5809), truly-async live Readable consumption (#5810), node:vm runInContext against the context global (#5722)
  • fastify performance batch: O(1) static-route lookup, per-request context caching, SIMD WebSocket frame unmasking, SO_REUSEPORT for cluster workers (#5691–#5699, #5644, #5646)

Language & conformance (test262)

  • Large conformance waves across Object, String, JSON, Function, Promise, Proxy, WeakMap/WeakSet, RegExp, Temporal, Intl, annexB, and eval/global-scope semantics (#5579–#5592 clusters, #5824, #5842–#5849, #5876–#5883)
  • switch inside async/generator state machines no longer miscompiles (#5885)
  • Intl additions: Intl.DisplayNames (#5512), Intl.DurationFormat (#5405), NumberFormat.formatRange (#5771), Locale info methods (#5602), BigInt toLocaleString (#5879)
  • WeakMap/WeakSet are now actually weak (#5468); Symbol.hasInstance honored in instanceof (#5667); new.target in registered-class constructors (#2768/#5656)
  • Regex: Unicode 16 scripts, lone surrogates, quantified lookaround, Annex B.1.4 under /u, cached-pattern revalidation skips (#5781, #5629, #5749, #5808)

Performance

  • Typed-array element access fast path (~2× bcrypt) (#5525 cluster)
  • O(1) wide-object property insertion and lookup (#5528, #5738)
  • Oversized-module codegen: full-outlined dispatch towers and IC diamonds, -Os instead of -O0 for oversized IR units (#5674–#5682)

Platforms, UI, packaging

  • Windows plugin support (#5409) + wgpu-on-win64 link/ABI fixes (#5814); arm64_32 watchOS startup crash fix (#5801); android-x86_64 target triple (#5743)
  • BloomView embedding with live-render plumbing on every backend (#5518, #5538); perry/ads end-to-end (#5578); window-less menu-bar app launch (#5813)
  • sharp: AVIF encode, EXIF auto-orient, extend/trim/composite, SIMD resize (#5448–#5456)
  • Configurable compile cache dir, defaulting to node_modules/.cache/perry (#5416)
  • Dependencies: bson 3.1 (with the mongodb bson-3 feature migration, #5887), cairo-rs 0.22, sha3 0.12, sqlite stack on libsqlite3-sys 0.35 (#5802)

Stability

  • CI/test-infra hardening: production ext archives no longer carry test-only perry_ffi shims that could shadow the real async bridge at link time and strand the event loop (#5892, #5911)
  • Segfault/SIGBUS fixes: JSON.stringify on handle-band values (#5723), class extends <Proxy> (#5634), string-coercing a class method (#5633), new C(...spread) (#5710), dayjs timestamp computed-member get (#5465)
  • Object.setPrototypeOf cycle-detection walked past the chain end, making every set on a ≥2-deep prototype chain throw (#5866)
  • GC: dead old-gen block reclamation under pressure (#5734), full collection on explicit gc() (#5714)
  • Next.js/webpack bundle correctness cluster (#5437): capture snapshots for cross-module member-new, class/local shadowing, boxing analysis descending into labeled blocks (#5871), captured-undefined tag preservation (#5648)

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]