v0.5.1219
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_threadsWorkers from inline source (#5799) - Promise spec-compliance batch — then/finally SpeciesConstructor + error propagation (#5767), user-defined own
thenhonored (#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.stdinas a functional raw-mode Readable (#5733);gc()exposed on globalThis (#5712); old-gen arena included inprocess.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:vmrunInContext 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)
switchinside async/generator state machines no longer miscompiles (#5885)- Intl additions:
Intl.DisplayNames(#5512),Intl.DurationFormat(#5405),NumberFormat.formatRange(#5771), Locale info methods (#5602), BigInttoLocaleString(#5879) - WeakMap/WeakSet are now actually weak (#5468);
Symbol.hasInstancehonored ininstanceof(#5667);new.targetin 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_64target triple (#5743) - BloomView embedding with live-render plumbing on every backend (#5518, #5538);
perry/adsend-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-3feature 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.setPrototypeOfcycle-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-undefinedtag preservation (#5648)