Upgrades for Symfony applications with API Platform and Doctrine, at a fixed price
Symfony 5.4 or 6.4 to 7.4, API Platform 2 or 3 to 4, Doctrine ORM 2 to 3, annotations to attributes. Every step is a separate pull request that can go live on its own. You keep your repository, we work through PRs.
Request an assessment (€750) Run the free scan first
Also in Deutsch Nederlands
Why the upgrade keeps getting postponed
Upgrading Symfony itself is rarely the problem: 7.4 to 8 is mostly fixing deprecations. The work is in the layer around it. API Platform 2 and 3 to 4 means rewriting data providers into state providers and processors. Doctrine ORM 2 to 3 and annotations to attributes touch every entity. Abandoned bundles such as SensioFrameworkExtra, security-guard, Swiftmailer and FOSRest have no upgrade path, only a replacement. That is architecture work, not something Rector fixes for you. It is exactly the work we do.
What is on the clock
Bug fixes end November 2026. Security fixes continue until November 2027.
Security support ends December 2026. PHP 8.1 is already end of life.
End of life February 2027. ORM 3 is required by current bundles.
No longer maintained. Only 4.x receives fixes.
Symfony 5.4 still receives security fixes until 2029, but no bug fixes, and the bundles around it have moved on. Running it on PHP 8.3 or 8.4 gets harder every release.
How we work
Upload your composer.lock. You see your upgrade path, blocking packages, cliffs and a readiness score. No account, no source code.
Read access to your repository. Rector dry run, deprecation inventory, bundle replacement plan, step plan with PHP versions, and a fixed quote. Includes a one-hour call. Credited in full against the upgrade.
One major version per stage, each stage a mergeable PR, tests green before we move on. Where coverage is missing we add characterization tests first. No downtime.
Monthly composer update PR, deprecation count kept at zero, security advisories handled, one minor upgrade per year. Cancel monthly.
Prices
All prices ex VAT. Fixed prices are set in the assessment; ranges below are what most projects land on. Payment per stage: 40% at start, 60% at merge of the final step.
Upgrade assessment
Credited in full against the upgrade.
- Rector dry run and PHPUnit deprecation inventory
- Bundle replacement plan
- Step plan with required PHP version per step
- Fixed quote and a one-hour call
Symfony 6.4 → 7.4
Clean codebase, attributes already in use.
- Deprecations to zero on 6.4 first
- Composer, configuration, CI
- PHP 8.3 or 8.4
Symfony 5.4 → 7.4
The project everyone has been postponing.
- Guard → authenticators
- Swiftmailer → Mailer
- SensioFrameworkExtra and annotations → attributes
- Via 6.4, each major its own PR
API Platform 2.x / 3.x → 4.3
Or €3,000 – 6,000 on top of a Symfony upgrade.
- Resources and attributes, new metadata system
- Data providers and persisters → state providers and processors
- Filters, serializer groups, OpenAPI, GraphQL
- Tests migrated with it
FOSRestBundle → API Platform
Priced per resource set.
- Controllers become resources
- Serialization groups preserved
- Existing clients keep working
Add-ons
- Doctrine ORM 2 → 3: €1,500 – 3,500
- PHPUnit → 12/13: €750 – 1,500
- PHP version jump: €500 – 1,500
- EasyAdmin, Sonata: on quote
Upgrade Care
Keeps the upgrade from being needed again.
- Monthly composer update PR
- Deprecation count kept at zero
- Security advisories handled same week
- One minor upgrade per year included
Several services or codebases?
| Landscape | Model |
|---|---|
| One service | Assessment €750, then a fixed price per stage. |
| Two to five services | Landscape assessment: €750 plus €250 per extra service, max €1,750. Dependency graph, order, one target stack for everything. Then fixed price per service, 10% off from the third. Shared internal packages go first, as an add-on. |
| More than five, or many unknowns | Upgrade programme: fixed monthly fee of €4,000 – 6,000 for fixed capacity, milestone per service, minimum three months, cancel monthly after that. |
| After delivery | Upgrade Care per service, tiered from three services. |
Environments (dev, staging, production) do not count: one codebase is one unit. Only the deploy pipeline is tested per environment.
Runtime and tooling around the app
Many Symfony applications depend on sidecars that are stuck for the same reason: Python scripts for PDF generation, wkhtmltopdf, headless Chrome, a Node build chain, Docker base images, database versions. Nobody touches them because the output might look different. We take these along as a separate layer, with a visual regression harness: golden-master PDFs from production, rendered before and after, diffed per page. That is how we prove the PDFs still look the same.
| Add-on | What | Price per component |
|---|---|---|
| S | Version bump with existing tests (Node, Docker image, DB client, PHP extension) | €500 – 1,000 |
| M | Bump with visual regression harness (PDF, reporting, Python plugin) | €1,500 – 3,000 |
| L | Replacing a dead tool, harness included | from €4,000 |
What we do not do
Greenfield builds, ongoing feature development, frontend migrations (Encore to AssetMapper only as an add-on), Laravel, Drupal. We upgrade runtimes and tooling; we do not redesign templates.
Questions
Why not just use Rector?
We do use Rector, for everything it can do. It handles syntax and known deprecations. It does not turn a data provider into a state provider, replace Guard with authenticators, or decide which bundle replaces an abandoned one. The assessment tells you exactly how much of your upgrade is Rector work and how much is not.
Do you need production access?
No. Read access to the repository for the assessment, and a branch to open pull requests against for the upgrade. Your team reviews and deploys.
What if test coverage is low?
We add characterization tests around the parts we change before we change them. That is part of the fixed price, not a surprise later.
Can we do only part of it?
Yes. Every stage is priced and delivered separately. Doing Symfony 5.4 to 6.4 now and API Platform later is a normal order.
Where are you based?
The Netherlands. We work remotely with teams in the EU, in English, German and Dutch.
Start with the assessment
€750, ex VAT, credited in full against the upgrade. Within one business day you hear back with a proposed time for the call.
Request the assessment or e-mail info@kwiktech.nl