Composer is a great tool for Drupal and in general PHP developers, but in some cases, it might take some effort to accomplish what you want. I tried to install Drupal 9 (dev version) and Drush 10 today and here's what I had to do to make it work.
I'm using Docker4Drupal for my local environment, so the first step was to configure a new project according to the documentation. After that, I just cloned Drupal 9 using GIT and executed composer install. Starting with Drupal 8.8, we have the template projects provided directly by Drupal core so we don't have to use drupal-composer/drupal-project anymore.
Now the fun part. To install Drush 10 in theory you just have to execute:
composer require drush/drush:^10
But if you do that you will see the following error:
That looks scary!
Fortunately, fixing it is easy. This is happening because of symfony/var-dumper component. Drupal 9 has the following constraint:
while Drush 10 has this one:
"symfony/var-dumper": "^3.4 || ^4.0",
Running composer install after you clone Drupal core will install version v5.0.0 of symfony/var-dumper. That's not good because Drush is not supporting that version.
The fix is to find the common ground and add the following line to the composer.json file:
Version 4.x is supported by both Drupal 9 and Drush 10, so you will now be able to install the latest version of Drush. After adding this line first downgrade var-dumper and then install Drush:
composer update symfony/var-dumper composer require drush/drush:^10
Note: This will probably be fixed soon by Drush using the same versions of symfony/var-dumper as Drupal, but let this blog post be of educational value.
You can also read my blog post on how to make your site Drupal 9 ready.