How to upgrade Drupal 8, 9 or 10 to Drupal 11
A Drupal 11 upgrade is the next major step for many sites still on Drupal 8, 9 or 10. Security support for older releases ends on a fixed schedule, and each new version brings better performance, updated dependencies and a more maintainable codebase. In this guide I walk through the full upgrade path: from legacy Drupal 8 and 9 through Drupal 10.3+ to Drupal 11, including PHP planning, contributed modules, custom code checks and Composer commands. For background on what Drupal 11 brings, see our Drupal 11 release overview. If you are still scoping the work, read how to prepare for a Drupal version upgrade.
In this article:
- Why upgrade to Drupal 11?
- Can you upgrade directly to Drupal 11?
- What changed between Drupal 10 and Drupal 11?
- How do you prepare for a Drupal upgrade?
- What should you check before a Drupal 11 upgrade?
- How do you upgrade from Drupal 8?
- How do you upgrade from Drupal 9 to Drupal 10?
- How do you upgrade from Drupal 10 to Drupal 11?
- What problems can appear during a Drupal upgrade?
- Which Composer commands help with a Drupal upgrade?
- Want help planning a safe path to Drupal 11?
Why upgrade to Drupal 11?
Drupal 11 was released in 2024 and continues the modern Drupal line built on Symfony 6 and PHP 8.3+. Staying on unsupported versions means no security fixes from Drupal.org. Drupal 9 reached end of life in November 2023; Drupal 10 will eventually follow the same path. An upgrade is not only about new features - it keeps your site on a supported stack and aligned with current web standards.
Drupal 11 builds on Drupal 10 with further dependency updates, removed legacy code and ongoing performance work. If you are comparing long-term options from very old versions, our Drupal 7 vs Drupal 11 comparison shows how far the platform has moved. Sites still on Drupal 7 should read how to prepare for Drupal 7 end of life first.
Can you upgrade directly to Drupal 11?
In most real projects, the safest Drupal 11 upgrade path is not a single jump from an old site to the newest release. A Drupal 8 or Drupal 9 website should first be brought to a supported Drupal 10 version. Drupal.org's upgrade guide for Drupal 11 points teams to Drupal 10.3 or later before moving to Drupal 11, because older update steps are no longer present in Drupal 11.
This matters when you estimate the work. The main task is not only changing the core version in Composer. The team needs to check hosting requirements, update contributed modules, remove deprecated APIs from custom code and test the website after each major step.
What changed between Drupal 10 and Drupal 11?
Drupal 11 refines the platform rather than reinventing it. Expect dependency bumps, cleanup of deprecated APIs and a few modules removed from core. The transition from Drupal 10 is usually smoother than older major jumps, but planning still matters.
Platform requirements
- PHP 8.3 or later is required for Drupal 11 (Drupal 10 required PHP 8.1+).
- Symfony 6.4+ and updated JavaScript libraries ship with core.
- Database versions remain similar to Drupal 10: MariaDB 10.3.7+, MySQL 5.7.8+, PostgreSQL 12+, SQLite 3.26+.
Removed core modules and themes
Several extensions deprecated in Drupal 10 are removed in Drupal 11, including Actions UI, Activity Tracker, Book, Forum, Statistics and Tour. Single Directory Components (SDC) and Help Topics moved into core differently and are treated as obsolete in their old form. Before upgrading, either stop using these modules in Drupal 10 or install their contributed replacements on Drupal 10.3+.
Themes removed earlier (Classy, Bartik, Stable, Seven) remain available as contributed projects if your site still depends on them.
For a recent point-release summary, see what's new in Drupal 11.4.
How do you prepare for a Drupal upgrade?
Start with a full backup of files and database. Confirm that hosting supports the PHP and database versions required by your target Drupal release. Set up a local or staging copy where you can run Upgrade Status, apply Composer updates and test without affecting production traffic.
Document any customizations to scaffold files (for example .htaccess or settings.php). Drupal 11 replaces all core scaffold files during the upgrade, so you will need to reapply intentional changes afterward.
What should you check before a Drupal 11 upgrade?
Use this checklist before you schedule the Drupal 11 upgrade window:
- confirm the PHP version and hosting stack before planning dates,
- update Drupal core to the required intermediate version (Drupal 10.3+),
- run Upgrade Status on the current site before the major upgrade,
- update contributed modules to Drupal 11-compatible releases,
- scan custom modules and themes with Upgrade Status and Rector,
- review Composer constraints, patches and Drush version,
- test editorial workflows, forms, integrations and cache behavior after the upgrade.
How do you upgrade from Drupal 8?
Drupal 8 reached end of life in November 2021. There is no supported path from Drupal 8 straight to Drupal 11. Plan a staged upgrade: Drupal 8 → Drupal 9 → Drupal 10.3+ → Drupal 11.
For the first step, see our article on Drupal 8 vs Drupal 9 and the general website migration process overview. Treat each major version as its own project phase with separate testing and deployment.
How do you upgrade from Drupal 9 to Drupal 10?
If your site is on Drupal 9, upgrading to Drupal 10 is the required intermediate step before Drupal 11. The process has several phases. Our Drupal 10 features and upgrade guide covers what changed in that release.
1. Upgrade PHP to version 8.1 or higher
Drupal 10 requires PHP 8.1+. Before changing PHP on the server, verify that contributed modules and custom code support the target version. PHP_CodeSniffer and PHP Compatibility tools help catch syntax and extension issues early.
2. Upgrade Drupal 9 to the latest 9.x release
Move to at least Drupal 9.4.4; the latest 9.5.x release is recommended before jumping to Drupal 10:
composer update "drupal/core-*" --with-all-dependencies
drush cr -y
drush updb -y
drush cex -y3. Uninstall deprecated core themes
Classy, Bartik, Stable and Seven were removed from Drupal 10 core. Uninstall them at /admin/appearance if they are still enabled. If custom themes extend them, install contributed replacements:
composer require drupal/seven
composer require drupal/classy
composer require drupal/bartik
composer require drupal/stable4. Migrate to CKEditor 5
Drupal 10 defaults to CKEditor 5. The new editor was rewritten from scratch, so not every CKEditor 4 plugin has a direct equivalent. Check plugin compatibility in the CKEditor 5 documentation before switching formats at /admin/config/content/formats. After migration, uninstall the old CKEditor module.
5. Update modules with Upgrade Status
Install and enable Upgrade Status, then scan at /admin/reports/upgrade-status:
composer require drupal/upgrade_status
drush en upgrade_status -yFix reported issues in custom code. Update contributed modules to versions that support Drupal 10. When a module has no compatible release yet, check the issue queue, apply patches or use the Drupal Lenient Composer plugin:
composer require mglaman/composer-drupal-lenient
composer config --merge --json extra.drupal-lenient.allowed-list '["module_name"]'Resolve compatibility problems until Upgrade Status reports a clean result for the Drupal 10 target.
6. Upgrade Drupal core to version 10
Review composer.json and remove outdated patches. Then update core constraints:
composer require 'drupal/core-recommended:^10' 'drupal/core-composer-scaffold:^10' 'drupal/core-project-message:^10' --update-with-dependencies --no-update
composer require 'drush/drush:^12' --no-update
composer update
drush cr -y
drush updb -y
drush cex -yIf you use drupal/core-dev, add --dev to the core-dev require line. Run composer update --dry-run first when dependency conflicts appear.
7. Test locally, then deploy
Test forms, navigation, editorial workflows, integrations and cache behavior in a local or staging environment. Deploy to a test server before production. Re-check hosting requirements and backups immediately before the production cutover.
How do you upgrade from Drupal 10 to Drupal 11?
Once the site runs Drupal 10.3.0 or later, you can prepare the Drupal 11 upgrade. Drupal.org removes update hooks from releases before 10.3, so skipping this intermediate version is not supported.
1. Confirm PHP 8.3+ and hosting
Drupal 11 requires PHP 8.3.0 or later. Update PHP on staging first and rerun your test suite before touching production.
2. Resolve deprecated modules and scaffold changes
Uninstall or replace core modules that Drupal 11 removes (Book, Forum, Statistics and others listed above). Note any custom rules in scaffold files so you can restore them after the upgrade.
3. Update contributed and custom code
Run Upgrade Status again against the Drupal 11 target. Update each contributed module to a compatible release:
composer require drupal/webform:^6.2 --no-updateFor custom code, use Drupal Rector alongside Upgrade Status to replace deprecated APIs. When a module needs a bridge version, you can widen constraints, for example "drupal/linkit": "^6.1 || ^7.0".
4. Update core and Drush with Composer
From the Drupal root, open write permissions on settings files, then update constraints:
chmod u+w web/sites/default
chmod u+w web/sites/default/*settings.php
chmod u+w web/sites/default/*services.yml
composer require 'drupal/core-recommended:^11' \
'drupal/core-composer-scaffold:^11' \
'drupal/core-project-message:^11' --no-update
composer require 'drupal/core-dev:^11' --dev --no-update
composer require 'drush/drush:^13' --no-update
composer update --dry-run
composer update
drush updatedb:status
drush updatedb
drush cex -y
chmod 755 web/sites/default
chmod 644 web/sites/default/*settings.php
chmod 644 web/sites/default/*services.yml5. Post-upgrade testing
Export configuration, run automated tests if available, browse critical paths and tail logs with drush watchdog:tail. Run cron and verify search, cache and form submissions.
What problems can appear during a Drupal upgrade?
Even with preparation, upgrades surface predictable issues. Knowing them in advance saves debugging time.
Deprecated and removed functions
Code that worked in Drupal 9 may call removed APIs in Drupal 10 or 11. Upgrade Status and Rector help locate and fix these; contributed modules may need patches from their issue queues.
accessCheck() required on entity queries
Drupal 10+ requires ::accessCheck() on content entity queries before execution. Missing calls cause runtime errors in custom and contributed code.
jQuery once removed
The jQuery once plugin was removed from core. Replace core/jquery.once with core/once in libraries.yml files and use the once() function in JavaScript instead of $.once().
Incompatible contributed modules
When no Drupal 11 release exists, check the module's issue queue, apply a community patch or temporarily use the Lenient Composer endpoint. Read also: why upgrading from old Drupal versions pays off even when module gaps slow the timeline.
Composer dependency conflicts
Patches, explicit core pins and outdated constraints often block composer update. Use composer why-not drupal/core ^11 to find blockers and resolve them before the dry run.
Which Composer commands help with a Drupal upgrade?
These commands appear repeatedly during a Drupal 11 upgrade path:
- composer why-not drupal/core ^11 - lists packages blocking a core bump.
- composer require 'drush/drush:^13' --no-update - stages Drush without installing yet.
- composer update --dry-run - simulates the update and surfaces conflicts.
- composer update "drupal/core-*" drush/drush --with-all-dependencies - limits the update scope to core and Drush when needed.
Want help planning a safe path to Drupal 11?
Upgrading from Drupal 8, 9 or 10 to Drupal 11 is a multi-step project: intermediate core versions, PHP upgrades, module compatibility and staged testing. Teams that skip planning often underestimate the custom code and contributed module work between major releases.
If you need help scoping or executing the upgrade, our team runs Drupal 10 and Drupal 11 readiness audits, Composer updates and production deployments. Visit our Drupal 10/11 readiness and upgrade services page or explore Drupal development services for ongoing support after go-live.