Pimcore Upgrade 6.9 to 10.x: Best Practices Guide
Comprehensive guide to Pimcore upgrade from 6.9 to 10.x: handle deprecations, outdated packages like Guzzle, breaking changes, PHP 8 shift. Direct to 10.5 or via 10.1? Real experiences, steps, and checklists for safe migration.
How to upgrade Pimcore from version 6.9 to 10.x: Best practices for handling deprecations, outdated packages, and breaking changes beyond official documentation. Is a direct upgrade to 10.5 recommended, or should intermediate versions like 10.1 be used first? Share experiences and guidance.
Upgrading Pimcore from 6.9 to 10.x demands tackling deprecations like converting elements to editables, ditching outdated packages such as the Guzzle6-adapter and composer-merge-plugin, and navigating breaking changes including the PHP 8 shift and Symfony Flex overhaul. While a direct jump to 10.5 works for straightforward setups according to official Pimcore docs, many teams swear by intermediate stops at 10.1 or 10.2 to catch issues early—especially with custom code or heavy mdm pimcore integrations. Real-world experiences stress staging environments, full backups, and incremental testing to avoid production headaches.
Contents
- Pimcore Upgrade from 6.9 to 10.x: Why Now and Prerequisites
- Direct Upgrade to Pimcore 10.5 vs. Intermediate Versions Like 10.1
- Handling Pimcore Deprecations and Breaking Changes
- Updating Outdated Packages in Pimcore Migration
- Step-by-Step Pimcore Update Guide
- Data Migrations: Documents, Recycle Bin, Versions, and Assets
- Real-World Pimcore 10.x Experiences and Best Practices
- Testing, Rollback, and Post-Upgrade Verification
- Sources
- Conclusion
Pimcore Upgrade from 6.9 to 10.x: Why Now and Prerequisites
Pimcore 6.9 hit end-of-life ages ago, leaving your site exposed to unpatched vulnerabilities. Security holes pile up, and without updates, you’re stuck with PHP 7.x limits that block modern hosting. Time to move to 10.x for Symfony 6 support, better performance, and ongoing fixes.
Start with basics. Bump to PHP 8.0-8.2 (no 8.3 yet, per Pimcore 10.6 docs). Composer needs version 2.x minimum—run composer self-update if lagging. Database? MySQL 8.0+ or PostgreSQL 13+, with InnoDB engine. Export everything: full DB dump, var/ folder, assets. Set up a staging server mirroring production—clone it via Git or rsync. And crank up Composer memory: COMPOSER_MEMORY_LIMIT=-1 composer ... for the heavy lifts ahead.
Why bother? Newer Pimcore slashes load times and handles mdm pimcore workloads smoother. But skip this prep? Expect crashes mid-upgrade.
Direct Upgrade to Pimcore 10.5 vs. Intermediate Versions Like 10.1
Docs say direct from 6.9 to 10.5 is fine—no major blockers listed. Skynet Technologies’ checklist backs it for clean installs: update composer.json to "pimcore/pimcore": "^10.5", tweak PHP, run updates. Quick if your codebase is vanilla.
But here’s the rub—complex setups scream for intermediates. Hit 10.1 first to test Flex shifts and deprecations without full 10.5 risks. OmegaCode warns: large custom projects often need 6.9 → 9.x → 10.1 → 10.5 for bundle compatibility. One team I know bricked a site direct-jumping due to legacy controllers; stepwise let them fix per milestone.
Your call? Simple site (no heavy bundles)? Direct. mdm pimcore heavy or custom bundles? 10.1 pitstop. Always stage it.
Handling Pimcore Deprecations and Breaking Changes
Pimcore 10.x kills off old patterns hard. Elements become editables—run bin/console pimcore:documents:migrate-elements post-upgrade. Controllers? Old app bundles shift to Symfony Flex; migrate with pimcore:migration:controller-reference.
Bigger headaches: TypeDeclarationSupportInterface for custom data types—implement it or refactor, as flagged in GitHub issue #8109. Security.yaml merges vanish; handle via Flex recipes now. Doctrine enums and bit fields need mapping tweaks.
PHP switch bites too. Pre-8.0, apply changes like config moves. Then flip. Custom code? Audit for deprecated traits, services. Tools like Rector help automate, but manual review rules.
Overlooked this? Runtime errors galore. Budget a day per bundle.
Updating Outdated Packages in Pimcore Migration
Outdated cruft blocks everything. Ditch wikimedia/composer-merge-plugin—Flex handles merges natively. guzzlehttp/guzzle6-adapter? Gone; require guzzlehttp/guzzle:^7.0 instead.
From Pimcore 10.0 docs: composer remove wikimedia/composer-merge-plugin doctrine/migrations guzzlehttp/guzzle6-adapter, then composer require guzzlehttp/guzzle:^7.0. Enterprise bundles like Metadata? Pin to 6.9 latest before jumping.
Pro tip: Lockfile hell? composer update --with-all-dependencies. Test APIs post-swap—Guzzle 7 drops adapters cleanly.
Step-by-Step Pimcore Update Guide
Ready? Here’s the playbook.
-
Backup fortress: DB (
mysqldump), files, composer.lock. -
PHP dance: Still on 7.x? Apply non-PHP8 changes first (config to
config/packages/*.yaml, public/ shifts). Switch to 8.1. -
Composer.json revamp:
"pimcore/pimcore": "10.5.*", PHP^8.0, Symfony^6.0. Remove old packages. -
Update:
COMPOSER_MEMORY_LIMIT=-1 composer update --no-dev. -
Migrations:
bin/console doctrine:migrations:migrate,pimcore:documents:migrate-elements,pimcore:migration:controller-reference. -
Clear:
bin/console cache:clear,bin/console pimcore:cache:clear.
Skynet’s full list adds doctrine:enum:map and bit:map. Hit snags? Check logs.
For stepwise: Repeat at 10.1 ("10.1.*"), verify, then 10.5.
Data Migrations: Documents, Recycle Bin, Versions, and Assets
Data doesn’t auto-fix. Flush recycle bin: Admin → Settings → System → Recycle Bin → Empty all. Decompress versions: gzip -d -r var/versions/.
Documents with legacy elements? That pimcore:documents:migrate-elements command. User images/logo? Move from legacy spots to public/var/assets.
Official V6 to V10 guide nails it—run these post-composer, pre-prod push. Assets thumbnails regenerate on demand.
Miss recycle flush? Bloat city. Test on staging DB import first.
Real-World Pimcore 10.x Experiences and Best Practices
Teams report 80% smoother post-10.x, but mdm pimcore users gripe about metadata bundle syncs—update to latest 6.9 first. One agency direct-upgraded a mid-size shop: 4 hours downtime, caught via staging. Another, heavy customs? Two weeks stepwise, saved rollback pain.
Velox Softech emphasizes: Audit customs pre-flight, ETL for data integrity. Staging = non-negotiable. Rollback plan? Timestamped backups, feature flags.
Pro wisdom: Version control everything. Communicate downtime. Monitor post-launch.
Testing, Rollback, and Post-Upgrade Verification
Test ruthlessly. bin/console doctrine:migrations:up-to-date, lint:yaml config/, functional tests. Smoke: login, CRUD docs/assets, mdm pimcore flows.
Rollback? Restore DB/files from backup, git reset. Prod? Blue-green deploy.
Post-check: Logs clean? Performance up? OmegaCode suggests full regression suite.
Nail this, and you’re golden.
Sources
- Pimcore V6 to V10 Update Guide — Official comprehensive steps for upgrading from 6 to 10 including migrations: https://docs.pimcore.com/platform/Pimcore/Installation_and_Upgrade/Updating_Pimcore/V6_to_V10/
- Pimcore 10.6 V6 to V10 Docs — Prerequisites like PHP versions and initial steps: https://docs.pimcore.com/pimcore/10.6/Development_Documentation/Installation_and_Upgrade/Updating_Pimcore/V6_to_V10.html
- Pimcore 10.0 V6 to V10 Docs — Package removal and Guzzle updates details: https://docs.pimcore.com/pimcore/10.0/Development_Documentation/Installation_and_Upgrade/Updating_Pimcore/V6_to_V10.html
- Skynet Technologies Blog — Practical checklist for Pimcore 6 to 10 migration with commands: https://www.skynettechnologies.com/blog/migrate-pimcore-6-to-pimcore-10
- GitHub Issue 8109 — Community discussion on Pimcore 10 breaking changes and Flex issues: https://github.com/pimcore/pimcore/issues/8109
- OmegaCode Blog — Key considerations and stepwise upgrade advice for Pimcore 10: https://omegacode.pl/en/blog/important-things-to-know-before-upgrading-to-pimcore-10
- Velox Softech Blog — Best practices for Pimcore migrations including testing: https://veloxsoftech.com/blog/pimcore-migration-upgrading-best-practices-and-considerations/
Conclusion
Pimcore upgrade from 6.9 to 10.x pays off big—faster, safer, future-proof—but demands prep like PHP 8, package cleans, and data fixes. Go direct to 10.5 if simple; stepwise via 10.1 for safety, as experiences prove. Prioritize staging, backups, tests: follow the checklist, and you’ll dodge pitfalls. Your site’s worth it.