Skip to content

perry

v0.5.581 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

Published 29d 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

Updates Other fixes, Net regression fixes, and Hono compile shake-out across a mixed release.

Full changelog

Highlights

The native package ecosystem v1 is complete (#466). All 34 in-tree wrappers ported to standalone perry-ext-* crates that depend only on perry-ffi. The well-known bindings flip is default-on — import { createConnection } from 'mysql2' (and 33 other wrappers) automatically routes to its standalone crate without any user install action, byte-identical to the old in-stdlib code path.

Hono / drizzle-orm shake-out (#421 / #420). Several pre-existing compile blockers cleared: primitive-literal exports (var X = "literal"; export { X }), class Foo {}; export { Foo } (#482), new Set(string), new Response(body, optsVar), duplicate-symbol fallback wrapper.

Net regression recovery (5 → 1). The v0.5.571 perry-ext-net port introduced reactor / event-pump / dispatch regressions that crashed every net program. All but one (test_net_upgrade_tls, environmental) recovered: tokio feature unification, pump registration, LTO black-box, issue #91 HANDLE_METHOD_DISPATCH for Map.get'd sockets.

Phase 5 — wrapper ports (#466)

All wrappers from the issue body's migration order, smallest-first, plus several net-new bindings:

  • v0.5.530 — perry-ffi extracted (Phase 1) + perry-ext-dotenv (acceptance test)
  • v0.5.531 — manifest spec frozen, abiVersion enforced (Phase 2)
  • v0.5.532–v0.5.555 — wrapper ports: nanoid / uuid / slugify / bcrypt / argon2 / jsonwebtoken / validator / lru-cache / better-sqlite3 / zlib / exponential-backoff / events / decimal / dayjs / moment / cheerio / sharp / rate-limit / commander
  • v0.5.543 + v0.5.544 — closes #424 (Tursodb) + closes #425 (Iroh P2P) as the first net-new wrappers (later moved to external repos in v0.5.557)
  • v0.5.556 — perry-ffi BigInt + Buffer surface, ported ethers
  • v0.5.558 — nodemailer
  • v0.5.559 — perry native init/validate/list CLI scaffolding (Phase 3)
  • v0.5.560 — release-workflow drift gate for auto-generated API docs (closes #465)
  • v0.5.561 — auto-generated .d.ts shipped to user editors via perry init
  • v0.5.562 — chained-method-call leak fix in unimplemented-API gate (closes #463)
  • v0.5.564–v0.5.572 — final wrapper batch: cron / ioredis / pg / mysql2 / fetch / mongodb / ws / net / http / streams / fastify
  • v0.5.573 — closes #466: well-known bindings flip default-on. Phase 4 user-visible behavior achieved.

Wrapper count: 32 in-tree + 2 external (@perryts/tursodb, @perryts/iroh).

Hono compile shake-out (#421)

  • v0.5.574 — primitive-literal exports + new Set(string) runtime fix
  • v0.5.575 — new Response(body, optsVar) extracts status/headers from runtime opts object
  • v0.5.576 — __perry_wrap_perry_unknown_func internal linkage (multi-module link fix)
  • v0.5.577 — closes #482: class Foo {}; export { Foo }; flips class.is_exported so importer's stub registers methods/fields

Net regression fixes (#421 / #420 / issue #91)

  • v0.5.578 — perry-stdlib tokio features unified to "full" (auto-optimize was creating divergent compilations)
  • v0.5.579 — perry_ffi::spawn_blocking[_with_reactor] calls ensure_pump_registered(); external-net-pump feature added; Handle::try_current() LTO black-box
  • v0.5.580 — perry_ffi::alloc_buffer routes through extern js_buffer_alloc so all wrappers share the same thread-local Buffer registry
  • v0.5.581 — js_ext_net_is_socket_handle + dispatch_external_net_socket close issue #91 for the well-known-flipped path

Documentation

  • v0.5.529 — markdown + .d.ts API reference auto-generated from manifest (closes #465)
  • v0.5.530 — docs/native-libraries/abi.md documenting perry-ffi v0.5 surface
  • v0.5.531 — docs/native-libraries/manifest-v1.md + JSON schema
  • v0.5.563 — cross-phase audit confirming #463 / #465 / #466 unified plan harmonious end-to-end (closes #469)

Other fixes

  • v0.5.512–v0.5.518 — security advisory cleanup (jsonwebtoken / lru / validator / redis / sqlx / rusqlite bumps; drop atty)
  • v0.5.519 — log #456 / unroll-pass aliased LocalIds + FuncIds across cloned iterations
  • v0.5.520–v0.5.521 — generator inlining + #456 unroll fixes
  • v0.5.522 — sanitize scoped package.json names (closes #467)
  • v0.5.523 — export { local as keyword } for TS contextual keywords (closes #460)
  • v0.5.524 — stub registry + first-call diagnostic for no-op stubs (closes #464)
  • v0.5.525 — fallback perry_fn_<mod>__<exported> for class-as-function exports (refs #461)
  • v0.5.526 — TypeError on property access against undefined/null (closes #462)
  • v0.5.527 — Buffer.{read,write}{U,}Int{BE,LE} variable-byteLength forms (closes #470)
  • v0.5.528 — compile-time error for unimplemented Node/Web APIs (closes #463)

Closed issues this release

#424 #425 #434 #443 #454 #456 #457 #460 #461 #462 #463 #464 #465 #466 #467 #469 #470 #482 — 18 issues closed.

Parity

98.5% (209 pass / 3 fail / 0 compile-fail / 13 skip). Three failures are pre-existing edge cases (test_edge_destructuring, test_edge_objects_records, test_gap_object_methods — strict-mode property descriptors).

Out of scope / followups

  • perry-ffi publication to crates.io (currently git-URL consumed) — v0.6.0 plan
  • spawn_async perry-ffi surface for cooperative async streaming — v0.6.0
  • test_net_upgrade_tls parity (needs TLS test fixture server)
  • hono full request/response dispatch chain (route registration works; deeper routing has lingering issues from class private fields + closures)
  • drizzle query execution against real Postgres (schema construction works)

Breaking Changes

  • All 34 in‑tree wrappers are removed; they now route automatically to standalone `perry-ext-*` crates with default‑on behavior.

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 →

Beta — feedback welcome: [email protected]