diff --git a/composer.json b/composer.json
index 6192b0ab500cdd0b8bbe8c98fad8a056759ef6cb..95a8512c5841f3dd4e018777afeef4a992f10cb6 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,7 @@
         "behat/mink": "^1.8",
         "behat/mink-goutte-driver": "^1.2",
         "behat/mink-selenium2-driver": "^1.4",
-        "composer/composer": "^1.9.1",
+        "composer/composer": "^2.0.2",
         "drupal/coder": "^8.3.7",
         "mikey179/vfsstream": "^1.6.8",
         "phpunit/phpunit": "^8.4.1 || ^9",
diff --git a/composer.lock b/composer.lock
index 8c6000c89aed4138e730175f0ab0febf7611bffc..4f265c6b805e3b5ca907adde17972de1e37edf63 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "09de613d0e44689de15282c33d3d700e",
+    "content-hash": "4e5fce0517520b4e4adeb0505f0642b1",
     "packages": [
         {
             "name": "asm89/stack-cors",
@@ -183,42 +183,33 @@
                 "zend",
                 "zikula"
             ],
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
             "time": "2020-04-07T06:57:05+00:00"
         },
         {
             "name": "composer/semver",
-            "version": "1.7.1",
+            "version": "3.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/semver.git",
-                "reference": "38276325bd896f90dfcfe30029aa5db40df387a7"
+                "reference": "4089fddb67bcf6bf860d91b979e95be303835002"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/38276325bd896f90dfcfe30029aa5db40df387a7",
-                "reference": "38276325bd896f90dfcfe30029aa5db40df387a7",
+                "url": "https://api.github.com/repos/composer/semver/zipball/4089fddb67bcf6bf860d91b979e95be303835002",
+                "reference": "4089fddb67bcf6bf860d91b979e95be303835002",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5"
+                "phpstan/phpstan": "^0.12.19",
+                "symfony/phpunit-bridge": "^4.2 || ^5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -268,7 +259,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-09-27T13:13:07+00:00"
+            "time": "2020-10-14T08:51:15+00:00"
         },
         {
             "name": "doctrine/annotations",
@@ -400,20 +391,6 @@
                 "parser",
                 "php"
             ],
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
-                    "type": "tidelift"
-                }
-            ],
             "time": "2020-05-25T17:44:05+00:00"
         },
         {
@@ -500,11 +477,11 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "493f34276d92722b600d8cf70f7852260a87afd5"
+                "reference": "0809224944e41d0a5d03f65e1f7a179512647923"
             },
             "require": {
                 "asm89/stack-cors": "^1.1",
-                "composer/semver": "^1.0",
+                "composer/semver": "^3.0",
                 "doctrine/annotations": "^1.4",
                 "doctrine/reflection": "^1.1",
                 "egulias/email-validator": "^2.0",
@@ -4559,39 +4536,37 @@
         },
         {
             "name": "composer/composer",
-            "version": "1.10.15",
+            "version": "2.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "547c9ee73fe26c77af09a0ea16419176b1cdbd12"
+                "reference": "74e8c71026edba786290047199619ac6b6490094"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/547c9ee73fe26c77af09a0ea16419176b1cdbd12",
-                "reference": "547c9ee73fe26c77af09a0ea16419176b1cdbd12",
+                "url": "https://api.github.com/repos/composer/composer/zipball/74e8c71026edba786290047199619ac6b6490094",
+                "reference": "74e8c71026edba786290047199619ac6b6490094",
                 "shasum": ""
             },
             "require": {
                 "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
+                "composer/semver": "^3.0",
                 "composer/spdx-licenses": "^1.2",
                 "composer/xdebug-handler": "^1.1",
                 "justinrainbow/json-schema": "^5.2.10",
-                "php": "^5.3.2 || ^7.0",
+                "php": "^5.3.2 || ^7.0 || ^8.0",
                 "psr/log": "^1.0",
+                "react/promise": "^1.2 || ^2.7",
                 "seld/jsonlint": "^1.4",
                 "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
+                "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0"
             },
             "require-dev": {
                 "phpspec/prophecy": "^1.10",
-                "symfony/phpunit-bridge": "^4.2"
+                "symfony/phpunit-bridge": "^4.2 || ^5.0"
             },
             "suggest": {
                 "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -4601,7 +4576,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.10-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
@@ -4617,12 +4592,12 @@
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "homepage": "https://www.naderman.de"
                 },
                 {
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "homepage": "https://seld.be"
                 }
             ],
             "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
@@ -4646,7 +4621,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-13T13:59:09+00:00"
+            "time": "2020-10-25T22:03:59+00:00"
         },
         {
             "name": "composer/spdx-licenses",
@@ -4834,20 +4809,6 @@
                 "constructor",
                 "instantiate"
             ],
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
-                    "type": "tidelift"
-                }
-            ],
             "time": "2020-05-29T17:27:14+00:00"
         },
         {
@@ -5886,17 +5847,53 @@
                 "testing",
                 "xunit"
             ],
-            "funding": [
-                {
-                    "url": "https://phpunit.de/donate.html",
-                    "type": "custom"
+            "time": "2020-06-22T07:06:58+00:00"
+        },
+        {
+            "name": "react/promise",
+            "version": "v2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Promise\\": "src/"
                 },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com"
                 }
             ],
-            "time": "2020-06-22T07:06:58+00:00"
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "keywords": [
+                "promise",
+                "promises"
+            ],
+            "time": "2020-05-12T15:16:56+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index e992c061d982ad24d2f21155ff54baf073a7d10e..f4dc2fbf2e61d2604d626722529cf47c7d689d91 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -9,7 +9,7 @@
     "require": {
         "drupal/core": "9.2.x-dev",
         "asm89/stack-cors": "1.3.0",
-        "composer/semver": "1.7.1",
+        "composer/semver": "3.2.2",
         "doctrine/annotations": "1.10.4",
         "doctrine/lexer": "1.2.1",
         "doctrine/reflection": "1.2.1",
diff --git a/composer/Metapackage/DevDependencies/composer.json b/composer/Metapackage/DevDependencies/composer.json
index ace515f3938631baea28c171e5e9caa94313adfb..453059fb7a45bb26dd9df770f7cf7004e2d1e9e9 100644
--- a/composer/Metapackage/DevDependencies/composer.json
+++ b/composer/Metapackage/DevDependencies/composer.json
@@ -10,7 +10,7 @@
         "behat/mink": "^1.8",
         "behat/mink-goutte-driver": "^1.2",
         "behat/mink-selenium2-driver": "^1.4",
-        "composer/composer": "^1.9.1",
+        "composer/composer": "^2.0.2",
         "drupal/coder": "^8.3.7",
         "easyrdf/easyrdf": "^0.9 || ^1.0",
         "justinrainbow/json-schema": "^5.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 85caa875706653d0bca6558178e44e097f835164..b882eb5a36e6b4998d98ee188f382d25239b4960 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -13,7 +13,7 @@
         "behat/mink-goutte-driver": "v1.2.1",
         "behat/mink-selenium2-driver": "v1.4.0",
         "composer/ca-bundle": "1.2.8",
-        "composer/composer": "1.10.15",
+        "composer/composer": "2.0.2",
         "composer/spdx-licenses": "1.5.4",
         "composer/xdebug-handler": "1.4.3",
         "doctrine/instantiator": "1.3.1",
@@ -36,6 +36,7 @@
         "phpunit/php-timer": "2.1.2",
         "phpunit/php-token-stream": "3.1.1",
         "phpunit/phpunit": "8.5.8",
+        "react/promise": "v2.8.0",
         "sebastian/code-unit-reverse-lookup": "1.0.1",
         "sebastian/comparator": "3.0.2",
         "sebastian/diff": "3.0.2",
diff --git a/core/composer.json b/core/composer.json
index 7302f7e066c7de75b5fdca7b778cd34b57f36a85..4ef79995f56d05b90479adbbd07130d30e5178a4 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -42,7 +42,7 @@
         "masterminds/html5": "^2.1",
         "symfony/psr-http-message-bridge": "^2.0",
         "laminas/laminas-diactoros": "^2.1",
-        "composer/semver": "^1.0",
+        "composer/semver": "^3.0",
         "asm89/stack-cors": "^1.1",
         "pear/archive_tar": "^1.4.9",
         "psr/log": "^1.0"
diff --git a/core/drupalci.yml b/core/drupalci.yml
index 6d04a45a75e20fc6122cff81c2298e341926432f..8d6ce5a3767cf2cd371fd4c966be50fa03f811ec 100644
--- a/core/drupalci.yml
+++ b/core/drupalci.yml
@@ -48,9 +48,3 @@ build:
       # Run nightwatch testing.
       # @see https://www.drupal.org/project/drupal/issues/2869825
       nightwatchjs:
-      # Re-run Composer plugin tests after installing Composer 2
-      container_command.composer-upgrade:
-        commands:
-          - "sudo composer self-update --snapshot"
-          - "./vendor/bin/phpunit -c core --group VendorHardening,ProjectMessage,Scaffold"
-        halt-on-fail: true
diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
index c407c84bf0229ec07b88c246a049d1a86fe70a57..28e6eb5dc60953eaa811f29dd062898a160974e0 100644
--- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
+++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
@@ -98,12 +98,6 @@ public function testVerifyTemplateTestProviderIsAccurate() {
    * @dataProvider provideTemplateCreateProject
    */
   public function testTemplateCreateProject($project, $package_dir, $docroot_dir) {
-    $composer_version_line = exec('composer --version');
-    if (strpos($composer_version_line, 'Composer version 2') !== FALSE) {
-      // @todo Remove in https://www.drupal.org/project/drupal/issues/3128631
-      $this->markTestSkipped("Composer 2 not supported for this test yet.");
-    }
-
     // Make a working COMPOSER_HOME directory for setting global composer config
     $composer_home = $this->getWorkspaceDirectory() . '/composer-home';
     mkdir($composer_home);