Drupal 9 -> 10 Upgrades
reviewed 230530
Install the Drupal Upgrade Status module on your Drupal 9 site.
Review status /admin/reports/upgrade-status
Update Drupal core to 9.5 (or the latest version of 9 at the time of upgrade)
Permissions errors:
Uninstall the module with broken permission
Install it again
Configure permissions (re-save permissions form)
The error should be gone. More here
If the website is using
field_permissions
module, access each field on every content type, and save the field again.
Update your version of PHP to at least 8.1.6
Make sure your site is running on it
Run
composer why-not php 8.1
to see if any packages need updates (only works if PHP 8.1 is a composer dependency in your composer.json). I recommend including it as a dev dependency and removing it after an upgrade.Deprecated modules
CKEditor has been replaced with CKEditor 5 in core. If you don’t use any modules that provide CKEDitor4 plugins that haven’t been updated yet, upgrade to CKEditor5. If you rely on older plugins, you can install the contrib module
Color has been moved to contrib
The Classy, Seven, Bartik, and Stable themes have moved to contrib so install those if you rely on those themes. See the step below for details on transitioning away from Classy.
Unless your site really relies on them for some reason, it is probably best to remove: Quick Edit and RDF.
If your theme uses Classy as a base theme, determine if you’d like to keep Classy as a contrib dependency or if you’d like to transition off Classy. Read this change record to figure out the steps or download and install the contrib module. Keep in mind that Stable is deprecated as well and it’s a Classy dependency.
Steps to transition off Classy
Copy these templates from classy to custom theme templates directory:
themes/custom/THEMENAME/templates/block/block--system-menu-block.html.twig
themes/custom/THEMENAME/templates/block/block.html.twig
themes/custom/THEMENAME/templates/form/checkboxes.html.twig
themes/custom/THEMENAME/templates/form/container.html.twig
themes/custom/THEMENAME/templates/form/fieldset.html.twig
themes/custom/THEMENAME/templates/form/form-element.html.twig
themes/custom/THEMENAME/templates/form/form.html.twig
themes/custom/THEMENAME/templates/form/radios.html.twig
themes/custom/THEMENAME/templates/form/select.html.twig
themes/custom/THEMENAME/templates/form/textarea.html.twig
themes/custom/THEMENAME/templates/layout/region.html.twig
themes/custom/THEMENAME/templates/navigation/links.html.twig
themes/custom/THEMENAME/templates/navigation/menu-local-action.html.twig
themes/custom/THEMENAME/templates/navigation/menu-local-task.html.twig
themes/custom/THEMENAME/templates/navigation/menu-local-tasks.html.twig
themes/custom/THEMENAME/templates/navigation/menu.html.twigSet base_theme value to false (for D9 requirement):
base_theme:false
or remove base_theme property if on Drupal 10.Visually QA theme to check if there are other elements or markup form Classy that your styles depended on.
Remove uninstalled incompatible modules and themes
Update contrib modules to their compatible latest versions and test the functionality
Scan custom modules for deprecations and fix with Rector or manually
Documentation to remove deprecated jQuery.once calls: https://www.drupal.org/node/3158256
Documentation to remove deprecated jQuery.cookie calls: https://www.drupal.org/node/3104677
If the site is on Pantheon, update pantheon.yml with the correct version of PHP
Push your changes to the multidev, test the functionality, and ask PM and the client to test
Merge changes with Dev branch, and retest. Move them to test and test with the client
Schedule the deployment, make the backup, and deploy to live
Review History
Who | When | Status |
---|---|---|
 |  |  |
Bob | 20230530 | Updated. Current |