This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+5 more
Summary
AI summaryUpdates 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-ffiextracted (Phase 1) +perry-ext-dotenv(acceptance test) - v0.5.531 — manifest spec frozen,
abiVersionenforced (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/listCLI scaffolding (Phase 3) - v0.5.560 — release-workflow drift gate for auto-generated API docs (closes #465)
- v0.5.561 — auto-generated
.d.tsshipped to user editors viaperry 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_funcinternal linkage (multi-module link fix) - v0.5.577 — closes #482:
class Foo {}; export { Foo };flipsclass.is_exportedso 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]callsensure_pump_registered();external-net-pumpfeature added;Handle::try_current()LTO black-box - v0.5.580 —
perry_ffi::alloc_bufferroutes through externjs_buffer_allocso all wrappers share the same thread-local Buffer registry - v0.5.581 —
js_ext_net_is_socket_handle+dispatch_external_net_socketclose issue #91 for the well-known-flipped path
Documentation
- v0.5.529 — markdown +
.d.tsAPI reference auto-generated from manifest (closes #465) - v0.5.530 —
docs/native-libraries/abi.mddocumenting 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 —
TypeErroron 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-ffipublication to crates.io (currently git-URL consumed) — v0.6.0 planspawn_asyncperry-ffi surface for cooperative async streaming — v0.6.0test_net_upgrade_tlsparity (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
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]