Week in review: 13 July 2026
A recap of what shipped during the week of 13 July. Three items this week: the second Porting to JS/TS post looks at Node.js versus Bun as a landing runtime, pext-viz graduates from POC to a real module, and closing out ramsey/uuid surfaced a handful of small parity fixes in pext-strings and pext-math.
Porting to JS/TS, Part 2: Node.js or Bun
The second post in the Porting to JS/TS series asks the question a team planning a migration usually asks early: Node.js or Bun? Now that Bun runs Pext-converted output at parity with Node, thanks to the WASM PCRE and LibXML swap covered in an earlier recap, the honest answer is that the question does not have to gate the conversion decision at all. Pext's generated application code is plain JS/TS with no runtime-specific assumptions baked in.
The layer that actually had to be made dual-compatible is the runtime modules, not the code a converted project runs. Those modules absorbed the N-API bindings, the inliner quirks, and the engine-specific edge cases so the output above them doesn't have to know which engine it's on. That means the Node-or-Bun decision can be made (or deferred, or revisited later) on its own merits, as an infrastructure choice rather than a constraint the conversion imposes.
pext-viz ships as a real module
The pext-viz proof of concept teased at the end of June is now a CLI-driven module. It reads the closed-world pipeline's call graph, the async coloring results, and the escape edges from the closure analysis, and renders all of it as an interactive graph instead of a static picture.
The interactive part is what makes it useful day to day. Deciding migration order for a large codebase is easier with a graph you can filter and drill into than with a text report, and tracing why a specific handler got colored async is now a matter of clicking through the reverse call graph to the awaitable call that justified it, rather than reading logs.
Small parity fixes surfaced by ramsey/uuid
Closing out ramsey/uuid to 100% the prior week left a short tail of edge-case fixes that landed this week: a few byte-level hex and binary formatting bugs in pext-strings that the UUID codec exercises directly, and some BigInt-path rounding fixes in pext-math that the library's 128-bit arithmetic depends on for the time-based and namespace UUID variants.
None of these are headline items on their own. They're the kind of small parity debt a case-study conversion tends to surface along the way, the codec and arithmetic paths a library leans on hard enough that any remaining gap shows up as a test failure rather than staying latent.