# Updating Varbase to work with Composer 2.0

Recommended to read:

* [Composer 2.0 is now available!](https://blog.packagist.com/composer-2-0-is-now-available/)
* [Upgrade guides for Composer 1.x to 2.0](https://github.com/composer/composer/blob/2.0.0/UPGRADE-2.0.md)

{% hint style="success" %}
**As for** [**Varbase 8.8.8**](https://www.drupal.org/project/varbase/releases/8.x-8.8) **and** [**Varbase 9.0.0-rc1**](https://www.drupal.org/project/varbase/releases/9.0.0-rc1)**, Varbase works with both Composer 1.0 and Composer 2.0**&#x20;

Recommended to build all new **Varbase Projects** with **Composer 2.0**
{% endhint %}

{% hint style="success" %}
If the site was built recently with the listed latest releases [**Varbase 8.8.8**](https://www.drupal.org/project/varbase/releases/8.x-8.8) or [**Varbase 9.0.0-rc1**](https://www.drupal.org/project/varbase/releases/9.0.0-rc1), but the project was built using the **Composer 1.0** version. The site is ready to start using **Composer 2.0**

Only update the **Composer** from **1.0** to **2.0**

Do a`composer update`to update the autoloaders, namespaces map, and classes map.
{% endhint %}

{% hint style="warning" %}
If the site was built with **Varbase 8.8.7** and olde&#x72;**,** Follow the following steps:
{% endhint %}

> **Step #1:** Update composer to latest composer 1.0 by
>
> ```
> composer self-update --1
> ```
>
> **Step #2:** Update **Varbase project**`composer.josn` file
>
> Change the following:
>
> ```
>     "composer/installers": "~1.0",
>     "oomphinc/composer-installers-extender": "~1.0",
>     "cweagans/composer-patches": "~1.0",
>     "drupal/drupal-library-installer-plugin": "^0.3",
> ```
>
> To:
>
> ```
>     "composer/installers": "~2.0",
>     "oomphinc/composer-installers-extender": "~2.0",
>     "cweagans/composer-patches": "~1.0",
> ```
>
> Remove **drupal/drupal-library-installer-plugin**
>
> **Step #3:** Update **Varbase** to **8.8.8**  or **9.0.0-rc1** with **Composer 1.0**
>
> ```
> cd /PATH_TO_THE_PROJECT
> composer update -vvv
> ```
>
> Repeat this composer update 2 or 3 times to make sure that their are no updates
>
> **Step #4:** Update composer to latest **composer 2.0** by
>
> ```
> composer self-update --2
> ```
>
> **Step #5:** Rebuild the autoloader for map of classes and namespaces
>
> ```
> cd /PATH_TO_THE_PROJECT
> rm -rf composer.lock bin/ vendor/ docroot/modules/contrib/ docroot/themes/contrib/ docroot/profiles/varbase/ docroot/libraries/
> composer install -vvv
> cd docroot/
> drush cr
> ```
>
> At this point the autoload and real autoload files + mapping should be changed.

Check the complete changelog.\
<https://github.com/composer/composer/releases/tag/2.0.0>

When having any custom composer plugins or still having issues.\
Or if modules are using the old way of autoloading

> Custom **Composer** plugins must have\
> `"composer-plugin-api": "^1.1 || ^2"`

> Make sure that the root `composer.json` file do not have invalid **`PSR-0`** / **`PSR-4`** . And the class configurations will not autoload anymore in `optimized-autoloader` mode, as per the warnings introduced in 1.10

**Known issues:**

[**Composer 2.0** issue for **bower-asset/jqueryui-touch-punch** library default branch](https://www.drupal.org/project/varbase/issues/3190703)

After [**Composer 2.2.1**](https://github.com/composer/composer/releases/tag/2.2.1) was released **2021-12-22**

* Fixed plugin autoloading including files autoload rules from the root package ([#10382](https://github.com/composer/composer/issues/10382))

Update the root `composer.json` file with the following composer config

```
  "config": {
    "bin-dir": "bin/",
    "secure-http": false,
    "optimize-autoloader": true,
    "preferred-install": {
      "drupal/core": "dist"
    },
    "allow-plugins": {
      "composer/installers": true,
      "cweagans/composer-patches": true,
      "oomphinc/composer-installers-extender": true,
      "drupal/core-composer-scaffold": true,
      "drupal/core-project-message": true,
      "vardot/varbase-updater": true
    }
  },
```

Rebuild the autoloader for map of classes and namespaces

```
cd /PATH_TO_YOUR_PROJECT
rm -rf composer.lock bin/ vendor/ docroot/modules/contrib/ docroot/themes/contrib/ docroot/profiles/varbase/ docroot/libraries/
composer install -vvv
cd docroot/
drush cr
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.varbase.vardot.com/10.1.x/developers/updating-varbase/updating-varbase-to-work-with-composer-2.0.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
