Drupal 10 has an end-of-life date now: December 9, 2026. That turns upgrade inventory into real delivery work, not a placeholder for later. The official Drupal 11 path makes it clear where projects usually get stuck first: module compatibility, custom code, scaffold changes, PHP, and Composer readiness.
As of June 12, 2026, the old Drupal.org Automatic Updates API is retired and its legacy hash files have expired. If your site still depends on first-generation Automatic Updates assumptions, now is the time to clean up Composer, hosting, and deployment workflows before the next security advisory.
Drupal 9 has been unsupported since November 1, 2023. This guide shows how to audit an inherited site, keep the useful Composer and Drush habits, and plan a realistic Drupal 10 upgrade without underestimating risk.
If Drush is throwing a Symfony EventDispatcher fatal error, the usual cause is a dependency mismatch between a global Drush binary and your project’s own Symfony stack. This guide shows the safest modern fix, how to diagnose legacy environments, and what teams should standardise to prevent repeat deployment failures.
A practical way to keep composer.json clean, reviewable, and CI-friendly using Composer's own validation tools plus the maintained composer-normalize workflow.