Back to blog

Week in review: 6 July 2026

A recap of what shipped during the week of 6 July. Three items this week: a new series asking why a PHP migration lands specifically on JavaScript and TypeScript, ramsey/uuid reaching 100% coverage across every UUID version the library supports, and a searchable function index added to the docs site.

A new series: why PHP migrations land on JS/TS

The ten-part Leaving PHP series wrapped up recently, and it spent ten posts on one question: why leave PHP at all, across hiring, runtime behaviour, types, ecosystem, async, deployment, tooling, and migration cost. It never argued for a specific destination. This week opens a follow-up series that does: Porting to JS, Part 1: why JS, which starts from the assumption that a team has already decided to leave and asks why the landing spot is JavaScript and TypeScript specifically, not Go, Rust, or Python.

That's a different question from the one the first series answered, and it deserves its own treatment rather than a paragraph tacked onto the finale. The first post lays out the shape of the argument: the languages a PHP team would consider are all reasonable engineering choices, so the deciding factors are the ones that are easy to skip past, like what a PHP-shaped mental model maps onto cleanly and what a transpiler can actually preserve automatically versus what has to be rewritten by hand.

ramsey/uuid reaches 100%

ramsey/uuid is now passing at 100%, covering every UUID version the library supports. The v4 (random) path had to match PHP's CSPRNG output byte for byte rather than just producing a valid-looking random UUID. The time-based and namespace-based variants (v1, v3, v5, v6, v7) needed 128-bit arithmetic that doesn't fit natively in a JS number, so the conversion routes through the same big-integer handling used elsewhere in the runtime. The more interesting detail is in RFC 4122 itself: when a v1 UUID can't read a real MAC address for the node id, the spec calls for falling back to a random node id with the multicast bit set, and that fallback had to be replicated exactly to avoid producing node ids that looked like real hardware addresses.

A smaller item, and a fitting one for a quieter week after a long stretch of larger pushes: the docs site now has a searchable index across its function reference pages. Every shipped runtime function gets its own page, organised by module (strings, arrays, math, and so on), which is good for browsing a module you already know but slow when you just want to check the signature of one specific function.

The search index fixes that by name lookup instead of navigation. It's the kind of polish item that tends to get picked up between bigger features rather than scheduled on its own, and this was that kind of week: the last few weeks shipped Bun support, the closed-world conversion flag, and a pext-viz POC, and this week's list is a lighter one before the next push.