Week in review: 20 Apr 2026
A recap of what shipped during the week of 20 April. Six items this week, and a heavy one: brick/math at a full pass, bcmath wired into the runtime, numeric conversion and coercion finalized across the board, PCRE put through a comprehensive testing pass, the Laravel roadmap published on the case studies page, and the Foundations phase of that roadmap completed.
brick/math at 100%
brick/math now passes its full test suite under Pext. Every BigInteger, BigDecimal, BigRational, and BigNumber operation behaves identically to native PHP, across the full range of numeric inputs the library accepts. Getting there required fixes spread across the transpiler, the runtime, and the math module: the int/float distinction, static variables in function bodies, integer overflow and promotion, PREG_UNMATCHED_AS_NULL, scope resolution for non-static methods, and the operator coercion matrix. The full write-up walks through each one.
bcmath support
PHP's other arbitrary precision library, bcmath, is now supported in the runtime. bcadd, bcsub, bcmul, bcdiv, bcmod, bcpow, bccomp, and bcscale are all wired up and behave as PHP does, including scale handling and the global default scale. This appears alongside the rest of the math coverage on the features page. Together with brick/math, this closes the gap on the two main paths that PHP codebases use for arbitrary precision arithmetic.
Numeric conversion and coercion
Numeric type conversion and coercion are now fully tested and fully operational. PHP has two numeric types where JavaScript has one, and Pext's runtime tracks the PHP type alongside the value so that is_int, is_float, gettype, and every coercion rule behave correctly. Conversion paths ((int), (float), intval, floatval, string-to-number) and operator coercion (arithmetic, comparison, concatenation, mixed operands) were exercised cell-by-cell against native PHP and brought into agreement.
The visible payoff is that brick/math reached 100% and a long tail of subtle numeric divergences across other transpiled codebases disappeared at the same time. The less visible payoff is that this is no longer a category of bug we expect to keep chasing — the matrix is covered, and additions to it are guarded by tests.
PCRE comprehensively tested
PCRE — the preg_* family that backs every regular expression call in PHP — went through a full testing pass this week. Edge cases were enumerated and checked against native PHP, the long tail of small divergences was closed out, and the loose ends that had been deferred over previous sprints are all resolved. Pattern parsing, delimiters and modifiers, character classes, lookarounds, named captures, backreferences, and the full set of PREG_* flags now behave identically to PHP's PCRE2 binding.
The module is state of the art: there is no class of regex behaviour we know to be wrong, and the test coverage is dense enough that anything new we introduce will trip a check before it reaches a transpiled codebase. Like the numeric work above, this moves PCRE out of the "things we keep finding bugs in" column and into the "stable, tested, done" column.
Laravel roadmap
The Laravel roadmap is now public on the case studies page. Laravel transitively pulls in over a hundred open-source packages, and every one of them is listed and tracked there, organised into five phases: Foundations, Pure Utilities, HTTP & Infrastructure, Symfony Core, and the Laravel Ecosystem itself. Each package shows its current status (not started, converted, or supported) and links to a case study or blog post where one exists. The destination is laravel/framework running in JavaScript, tested to a >95% unit-test pass rate.
Publishing the roadmap puts the dependency tree in the open: nothing is hidden, the order of work is justified, and progress can be checked against it without taking our word for anything.
Foundations phase complete
The first phase of that roadmap is done. Every package in Foundations — the PSR interfaces (psr/cache, psr/clock, psr/container, psr/event-dispatcher, psr/http-client, psr/http-factory, psr/http-message, psr/log, psr/simple-cache), the Symfony polyfills, and the Symfony contracts — is converted. These are pure interfaces and compatibility shims with no runtime logic, exactly the kind of code Pext resolves almost automatically, but they are also the foundation that everything else in the Laravel tree builds on.
With Foundations cleared, attention moves into Phase 2, Pure Utilities: self-contained libraries with no I/O or side effects. brick/math is already at 100% there. The next targets are composer/semver, doctrine/inflector, doctrine/lexer, dragonmantank/cron-expression, and the rest of the phase. The roadmap tracks them all.