Back to blog

Eight case studies in, and a new home for them on pext.dev

Since April, eight external PHP libraries have gone through a full case study on this blog: transpiled with Pext, run against their own test suite, and pushed to (or right up against) 100% parity. None of them were picked for being easy. Here is the full set, in publication order.

The eight

  • PHPUnit: 54k lines and 4,500+ tests, and the testing framework the rest of this case study series runs on.
  • sebastian/exporter: small but demanding, with destructor timing, object-to-array casting, and property visibility all in play.
  • brick/math: keeping PHP int and float distinct in JavaScript, backed by bcmath-driven arbitrary precision.
  • composer/semver: a PHPUnit 9 bootstrap quirk and eval-generated version_compare code.
  • egulias/email-validator: a new multibyte-string module plus real DNS lookups.
  • dragonmantank/cron-expression: timezone and DST arithmetic, with a cache in front of Intl.DateTimeFormat.
  • voku/portable-ascii: transliteration with no ICU available on the JS side.
  • ramsey/uuid: RFC 4122 UUID versions and a matching CSPRNG, published this week.

Why the spread matters

Put together, these eight cover testing infrastructure, arbitrary-precision math, semver parsing, string and DNS validation, datetime arithmetic, string transliteration, and now cryptographic random identifier generation. That is deliberate. Each one exercises a different corner of the runtime: a different set of PHP built-ins, a different failure mode when types or timing drift from native PHP.

A single large framework conversion tends to concentrate risk in one architectural style. Eight unrelated libraries, chosen for different reasons, is closer to a real stress test of the runtime's breadth. If Pext only handled one kind of PHP well, this set would have found it by now.

A new home for them

Browsing eight write-ups by scrolling the blog index was never going to scale, so the open source showcase has been updated. It now lists each library with its current pass rate and a direct link to the write-up, all in one place, instead of requiring anyone to hunt through blog pages by date.

Eight libraries, eight write-ups, one updated showcase page. More libraries are already queued for conversion, and they will land on the showcase the same way: pass rate first, write-up linked next to it.