Quick Tip: Set up Drupal 8 with Composer!

By Daniel Sipos

Working with PHP 7.1? Download our FREE PHP 7.1 Cheat Sheet!

Drupal 8 logo

The recommended approach to getting started with Drupal 8 is now via Composer. An official project template has been created for this. We will create our project directly using the template, which is also available on Packagist.

To create a new project based on this template we can run the following Composer command:

composer create-project drupal-composer/drupal-project:8.x-dev my_project --stability dev --no-interaction

This Composer command will pull in the template from Packagist and run a few Drupal specific scripts to prepare our project for installation. The only thing left to do is point our browser to the web/ directory (since that is where the index.php file is) and run the installer as usual.

This template comes with a /web folder that contains, among other things, the main folders of a Drupal installation that are no longer considered part of Drupal core (such as the index.php file or the modules and themes folders). Additionally, it comes with an autoload.php file used by Drupal that simply points to the Composer vendor/ directory, one folder up. So all PHP libraries are now handled from one single place.

The template’s composer.json file requires the latest stable Drupal core + some additional helper tools such as Drush and the Drupal Console. Additionally, it adds the Drupal specific Packagist repository from where we can install Drupal contributed modules, themes and profiles (that get automatically installed in the right place).

If we want to add a Drupal contributed module, we need to find it on the Drupal Packagist and require it in our project via Composer:

composer require drupal/ctools

This will add the Ctools module directly to our web/modules/ directory and update our composer.json file.

The project template also comes with a .gitignore file that keeps Drupal core and all the contributed packages outside of Git, similar to the regular vendor/ packages. So based on an updated composer.json file, we can maintain a smaller Git repository and recreate our project any time. A lot of the benefits of Drush Make have now been incorporated into a Composer flow.


Drupal 8 has come a long way in catching up with other major PHP software. The possibility of fully managing it via Composer, either as a main project or even just as part of a bigger set of applications, is a testament to the community effort that went in.

  • developermitesh

    Very Well explained, the article is pretty good, and I think Drupal commerce is also offering the same kind of structure with packages. I see the benefit of using this structure that we don’t loose the already downloaded packages on each core update. But the question I have is –

    Is there any other benefit of using ‘vendor’ outside of Drupal root directory?

  • sailendra shakya

    Can I follow above instruction for my project?

    I have got problem when working in same project with different people using git and composer. Do this solve my problem?

  • Peter Stub

    Tks a lot for this article – SO GREAT. My local environment was up
    and running within minutes. Using MAMP/Mac – and there I was able to set
    Document root to web directory.

    BUT – how do I do that on a cheap
    webhotel – without access to any conf files. Did try to add some
    rewrite rules to .htaccess – but Drupal complains a lot…

    Anybody fixed this?

    /Peter Stub

Get the latest in PHP, once a week, for free.