Caching Composer dependencies in GitHub Actions is easy thanks to the lock file. But what about a tool like PHPStan that has no lock file to hash? https://t.co/Y8vQt21xw3
Before: oh, the Symfony DIC changed slightly, let’s nuke the whole result cache
Now: we changed parameter X in Symfony config, the result cache will reanalyse only the files asking about it
I wanted to stop controllers calling external services, however deep in the call graph.
So I built a PHPStan extension: mark external calls as 'slow', forbid 'slow' in controllers, and let it flag violations. Probably has many other uses too.
https://t.co/hOUvZsVaq3
Same performance, smaller package
PHPStan 2.3.0 was chonky! It weighed 104 MB when downloaded and 268 MB after being unzipped in your vendor/.
I just released PHPStan 2.3.1 that weighs just under 28 MB when downloaded and 87 MB unzipped. While preserving all the Turbo binaries.
PHPStan analysing the WordPress codebase took 60.51 seconds back in december.
With PHPStan 2.3 + Turbo: 7.93 seconds.
That’s the kind of dev improvement I get excited about💪
Tried PHPStan 2.3.0 on our Laravel 13 project: cold analysis dropped from 40.86s to 17.88s with Turbo enabled — 2.29× faster! Same code/config, up to 6 workers.
Thanks for the release!
** switched PHP 8.4 ZTS → NTS to enable Turbo. Warm cache: ~1.6s in both.
@OndrejMirtes Ran PHPStan 2.3.0 on my work codebase, a large funeral services ERP (5,600+ files, 550k lines of Laravel), and asked the AI to chart the difference.
Full cold analysis: 52.7s → 14.8s. 3.6× faster
That's impressive work. It also caught 5 new real errors.