Since 2014, I take PHP projects stuck on old versions and frameworks, and bring them to the current stable one. Not a workshop, not a report you file away β the actual upgrade, delivered and merged.
"If you really want to do something, you'll find a way.
If you don't, you'll find an excuse."
Full upgrade service, end to end:
- PHP 5.3 β 8.5 β version by version, your test suite green at every step
- Framework jumps β Symfony 2 β 7, Laravel 5 β 12, CakePHP, Yii, Nette, Zend 1 β Laminas
- Custom frameworks β the homegrown one only your team knows, moved to something maintained
- Legacy β framework β from no-framework spaghetti to a structure you can hire for
- PHPUnit, Doctrine, and the rest of your
composer.jsonβ the dependencies that block everything else - Static analysis from zero β PHPStan running in CI, at a level your team can hold
You keep shipping features while the upgrade runs. Your team learns the tooling, so the next upgrade is yours to do.
π Let's talk about your project
Instant upgrades of hundreds of thousands of lines are only possible with automation. So I build it:
- π Rector β the instant upgrade and refactoring tool for PHP
- πΉ Recongo (private, in the works) β Rector-like automated refactoring, written in Go
- π lines β measure project size and used PHP features, zero dependencies
- π type-coverage β PHPStan extension to require minimal type coverage
- π§Ή unused-public and class-leak β find the dead code before you migrate it
- π©Ί phpstan-bodyscan β error count per PHPStan level, so you know where you stand
- ποΈ I blog weekly about upgrades, static analysis and PHP at tomasvotruba.com
- π I wrote The Power of Automated Refactoring with my childhood hero
- π¦ I post ideas worth learning at @votrubaT
- β€οΈ Do you enjoy the tasty fruits of my work? Support me at GitHub Sponsors
Legacy code isn't a problem β it's the code that made your business money. Let's make it fun to work with again.







