Drupal 9 was launched this week. So if your modules are ready it's time to update.
Updating betweeen major versions can be tricky, sometimes Composer won't update a package because another package have a common dependency, but with another version. And sometimes the conflicting package is the one you try to update.
That happened to me when I tried to update
drupal/core from 8.8.6 to 9.0.0.
Drupal 9 required a version of a package that was not compatible with Drupal 8, and that stopped Composer from updating.
Are you ready?
I recommend using the Upgrade Status module to check if your site is ready for Drupal 9. It can scan both custom modules and contributed moduls for problems.
Be aware that unsupported modules won't stop composer from updating, so you could crash your site by updating if some of your code is not compatible.
Here are the steps I did to update. My project was made from Drupal Project and contained
drupal/core-composer-scaffold, all with
^8.8.6 as the version.
First I updated
composer.json without actually running the updates:
composer require drupal/core-recommended:^9.0.0 drupal/core-composer-scaffold:^9.0.0 drupal/core:^9.0.0 --update-with-dependencies --no-update
composer require drupal/core-dev:^9.0.0 --dev --update-with-dependencies --no-update
Since it's a new major version,
composer require is needed instead of update. The option
--update-with-dependecies makes composer update dependecies of the specified packages.
--no-update prevents Composer from actually updating the packages.
Then it should be safe to run
After this you should remove
drupal/core-recommended is installed.
composer remove drupal/core
And that's it, run database updates and enjoy Drupal 9.