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)