Upgrading from Drupal 10 to Drupal 11 requires several important steps to ensure compatibility and stability. Here’s a step-by-step guide to help you upgrade smoothly.
✅ 1. Backup Your Site
Before doing anything:
- Backup your codebase
- Backup your database
- Backup your
files/
directory
✅ 2. Check System Requirements
Ensure your environment meets the Drupal 11 requirements:
- PHP 8.2 or 8.3 (Drupal 11 requires PHP 8.2+)
- Composer 2.4+
- MySQL 8.0.17+, MariaDB 10.4+, or PostgreSQL 12+
✅ 3. Update Contributed Modules and Themes
Run:
composer outdated "drupal/*"
Then update everything to the latest Drupal 10-compatible versions:
composer update drupal/core-recommended drupal/core-composer-scaffold drupal/core-project-message drupal/* --with-dependencies
Ensure all modules are Drupal 11-ready. Use:
drush pm:list --status=enabled --type=module --no-core
And consult the module pages or issue queues to confirm Drupal 11 compatibility.
✅ 4. Check for Deprecated Code
Use the Upgrade Status module:
composer require 'drupal/upgrade_status:^4.0'
drush en upgrade_status -y
Then visit /admin/reports/upgrade-status
to scan for deprecated APIs used by your site.
Also consider using:
composer require mglaman/phpstan-drupal
vendor/bin/phpstan analyse
✅ 5. Update composer.json
for Drupal 11
Edit your composer.json
to allow Drupal 11:
"require": {
"drupal/core-recommended": "^11",
"drupal/core-composer-scaffold": "^11",
"drupal/core-project-message": "^11"
}
Or run:
composer require drupal/core-recommended:^11 drupal/core-composer-scaffold:^11 drupal/core-project-message:^11 --update-with-dependencies
✅ 6. Run Database Updates
drush updb -y
✅ 7. Export Configuration
drush cex -y
✅ 8. Clear Cache and Rebuild
drush cr
✅ 9. Test Your Site
- Test all functionality
- Review theme compatibility
- Confirm contributed and custom module behavior
✅ 10. Commit & Deploy
Once tested locally or in staging:
- Commit changes
- Deploy to production carefully
Optional: Use drupal/core-dev
for Better Dev Tools
composer require --dev drupal/core-dev:^11
Here’s a Bash script to automate most of the Drupal 10 → 11 upgrade process, assuming you’re using Composer and Drush in a typical Drupal 10 project.
🔧 upgrade-to-drupal11.sh
#!/bin/bash
set -e
echo "=== 🧱 Backing up current site ==="
NOW=$(date +"%Y%m%d_%H%M%S")
tar czf backup_code_$NOW.tar.gz .
drush sql-dump --ordered-dump --gzip --result-file=db_backup_$NOW.sql.gz
echo "=== 🧼 Clearing caches ==="
drush cr
echo "=== 🧪 Updating contrib modules ==="
composer update drupal/* --with-dependencies
echo "=== 🚦 Checking for deprecated code ==="
composer require --dev mglaman/phpstan-drupal
vendor/bin/phpstan analyse > phpstan-output.txt || true
echo "Check 'phpstan-output.txt' for deprecated code issues."
echo "=== ✍️ Updating composer.json to allow Drupal 11 ==="
composer require \
drupal/core-recommended:^11 \
drupal/core-composer-scaffold:^11 \
drupal/core-project-message:^11 \
--update-with-dependencies
echo "=== 📦 Running database updates ==="
drush updb -y
echo "=== 💾 Exporting config ==="
drush cex -y
echo "=== ♻️ Rebuilding cache ==="
drush cr
echo "=== ✅ Drupal 11 upgrade script completed ==="
💡 How to Use
- Save as
upgrade-to-drupal11.sh
-
Make executable:
chmod +x upgrade-to-drupal11.sh
-
Run it from your Drupal root:
./upgrade-to-drupal11.sh
🔐 Notes
- This script does not verify module compatibility. You should run
drush pm:list
or use the Upgrade Status module manually to confirm. - Your hosting environment must support PHP 8.2+.