PHPackages                             metadrop/drupal-boilerplate - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. metadrop/drupal-boilerplate

ActiveProject[DevOps &amp; Deployment](/categories/devops)

metadrop/drupal-boilerplate
===========================

Project template for Drupal 9 projects with a relocated document root

v3.3.0(2y ago)281.0k24[9 issues](https://github.com/Metadrop/drupal-boilerplate/issues)GPL-2.0+PHPCI failing

Since Jan 20Pushed 1mo ago5 watchersCompare

[ Source](https://github.com/Metadrop/drupal-boilerplate)[ Packagist](https://packagist.org/packages/metadrop/drupal-boilerplate)[ RSS](/packages/metadrop-drupal-boilerplate/feed)WikiDiscussions 3.x Synced today

READMEChangelog (10)Dependencies (21)Versions (66)Used By (0)

Metadrop's Drupal Boilerplate
=============================

[](#metadrops-drupal-boilerplate)

Important notice
----------------

[](#important-notice)

This project has reached the end of its life and is now obsolete. We are no longer providing updates or support.

Please consider using [DDEV Aljibe](https://github.com/Metadrop/ddev-aljibe/).

Introduction
------------

[](#introduction)

This repository is a boilerplate to create Drupal 8/9/10 projects with many tools already preconfigured with minimal effort. You can have a Drupal site running in your local in less than 3 minutes.

Tools included out-of-the-box:

- A Docker infrastructure.
- A boilerplate folder structure that fits all project needs.
- A working and preconfigured Drush, the Drupal shell.
- MkDocs to document your project using Markdown files.
- Grumphp to enforce [Drupal coding standards](https://www.drupal.org/docs/develop/standards/coding-standards). It is configured to use [phplint](https://github.com/overtrue/phplint), yamlint, [jsonlint](https://github.com/Seldaek/jsonlint), [drupalcheck](https://github.com/mglaman/drupal-check) and [phpcs](https://github.com/PHPCSStandards/PHP_CodeSniffer).
- Phpqa for static analysis.
- Behat BDD testing configured and working.
- PHPUnit for unit testing configured and working.
- [BackstopJS](https://github.com/garris/BackstopJS) for visual regression testing.
- [Stylelint](https://stylelint.io/) for checking style files.
- [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) for checking performance, accessibility, PWA, SEO and more.
- [Pa11y](https://pa11y.org) for in-depth accessibility checks.
- [Scripthor](https://github.com/Metadrop/scripthor) toolset with some helper scripts for development.
- Optionally, a Solr container ready to be used by Drupal.

It is based on [Docker4Drupal](https://wodby.com/docs/1.0/stacks/drupal/local/), which uses Docker and Docker Compose. To get all the information about available webservers, databases, PHP versions and other containers check their [wodby/docker4drupa repository](https://github.com/wodby/docker4drupal).

Because it uses Docker under the hood, you can customize whatever you want, add new containers or use any standard Docker functionality to accommodate your project needs.

Quickview
---------

[](#quickview)

    Drupal.Boilerplate.demo.mp4    Requisites
----------

[](#requisites)

- [Docker](https://docs.docker.com/get-docker/)
- [Docker Compose](https://docs.docker.com/compose/install/), version [V2](https://www.docker.com/blog/announcing-compose-v2-general-availability/).

**Optionally**

- Python 3 with PyYAML installed for the `make info` command

Usage
-----

[](#usage)

To create a new project based on this boilerplate, the recommended method is using Composer's create-project command:

```
composer create-project  --ignore-platform-reqs metadrop/drupal-boilerplate my-project

```

Depending in the Drupal release you want you should use a different branch.

Drupal releaseBoilerplate branchExample command10.x3.x branchcomposer create-project --ignore-platform-reqs metadrop/drupal-boilerplate my-project9.x2.x branchcomposer create-project --ignore-platform-reqs metadrop/drupal-boilerplate:^2 my-projectNOTE: 2.x branch is minimally maintained because Drupal9 support ends November, 2023.

Because this boilerplate uses drupal/core-recommended under the hood you will get an updated release of the chosen core.

Once Composer finalizes the project creation an assistant will be automatically run. It will ask you a few questions:

- The project name: this a machine name for the project. It will be used for Docker container names, project URL and some other places. Please, use only letters, numbers and underscores.
- Setup a git repository? If yes, the assistant will initialize a git repository and make the initial commit.
- Install Drupal? If yes, the assistant will configure and install a Drupal site.
- Radix sub-theme: the assistant can create a [Radix](https://www.drupal.org/project/radix) subtheme for you. We quite often use Radix as the base theme of our projects. You can skip this and use your own theme, of course.

After the assistant finished, if you have selected to install Drupal your project will be running and the assistant will print the URL to access it.

!!! NOTE By default, drupal-boilerplate is installed with a minimal profile. If you want to install another profile, you must not install Drupal during the composer create-project installation problem, when the question 'Do you want to install Drupal?' appears.

After that, just install the profile you need with the `drush site-install` command into the PHP container, after the project creation has finished.

Example:

```
   drush site-install standard

```

Please note that if you install a profile that implements the hook\_install the `make setup` command won't work as it makes a installation from configuration, and those installations requires the hook install to not be present.

FAQ
---

[](#faq)

### Is this for me?

[](#is-this-for-me)

This boilerplate is a good choice for medium to advanced users that want to have a full local environment with a complete set of tools ready to use for their Drupal projects in matter of minutes. However, you should be comfortable using Docker, Drush and another tools without a managing layer like DDEV provides.

### Why not Lando/DDEV/whatever?

[](#why-not-landoddevwhatever)

We love them! However, we have had some issues trying to adapt them to a certain edge case projects. Those tools allows to handle complex topics like docker thanks to a managing layer. However, that layer imposes some limits. It is not easy to hit them, but when you do it is a hard limit. That's when this boilerplate can be helpful.

Troubleshoting
--------------

[](#troubleshoting)

### 'make info' command doesn't work

[](#make-info-command-doesnt-work)

Python 3 with PyYML installed is needed.

### Unit tests are not working

[](#unit-tests-are-not-working)

You may encounter several errors when running the `make test` command. For example:

```
PHP Fatal error:  Declaration of Drupal\Tests\ultimate_cron\Kernel\UltimateCronQueueTest::setUp() must be compatible with Drupal\Tests\system\Kernel\System\CronQueueTest::setUp(): void in /var/www/html/web/modules/contrib/ultimate_cron/tests/src/Kernel/UltimateCronQueueTest.php on line 26

```

Or

```
Fatal error: Uncaught Error: Class 'Drupal\Tests\group\Functional\GroupBrowserTestBase' not found in /var/www/html/web/modules/contrib/webform/modules/webform_group/tests/src/Functional/WebformGroupBrowserTestBase.php:13

```

This is due `make test`tries to run all Unit tests and some modules have issues. For example, first error comes from this issue "[Kernel test not compatible with core \[9.x\]](https://www.drupal.org/project/ultimate_cron/issues/3208608)", while second error is handled on this other issue: "[Group Testing Fails in PHPUnit for Webform Group submodule](https://www.drupal.org/project/webform/issues/3132204)".

If you want to run all tests you need to address all those issues. But what for? You probably just want to run the test from a certain module. For that, just pass the proper path in the `make` command, like this:

```
make test web/modules/contrib/devel/tests/src/Unit

```

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance61

Regular maintenance activity

Popularity28

Limited adoption so far

Community27

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~41 days

Recently: every ~195 days

Total

47

Last Release

51d ago

Major Versions

v2.5.2 → 3.0.0-beta32023-07-28

v2.5.3 → 3.0.0-beta42023-08-02

v2.6.0 → v3.0.0-beta62023-08-28

v2.7.0 → v3.0.0-beta72023-09-12

2.x-dev → v3.0.12023-10-23

### Community

Maintainers

![](https://www.gravatar.com/avatar/a6c8174187fc6e70e05033737d17d5c2c7f8eafb8b02d317e58e64c5a40518bc?d=identicon)[Metadrop](/maintainers/Metadrop)

![](https://www.gravatar.com/avatar/4511a621228296bd8c6841c6765e35d89a499a25c4458c63f5dbb6db3b25152f?d=identicon)[Eduardo-Morales-Alberti](/maintainers/Eduardo-Morales-Alberti)

![](https://avatars.githubusercontent.com/u/3202817?v=4)[Omar Mohamad - El Hassan Lopesino](/maintainers/omarlopesino)[@omarlopesino](https://github.com/omarlopesino)

---

Top Contributors

[![rsanzante](https://avatars.githubusercontent.com/u/776453?v=4)](https://github.com/rsanzante "rsanzante (170 commits)")[![omarlopesino](https://avatars.githubusercontent.com/u/3202817?v=4)](https://github.com/omarlopesino "omarlopesino (156 commits)")[![Eduardo-Morales-Alberti](https://avatars.githubusercontent.com/u/24698482?v=4)](https://github.com/Eduardo-Morales-Alberti "Eduardo-Morales-Alberti (51 commits)")[![jorgetutor](https://avatars.githubusercontent.com/u/1230268?v=4)](https://github.com/jorgetutor "jorgetutor (30 commits)")[![juanjol](https://avatars.githubusercontent.com/u/4212917?v=4)](https://github.com/juanjol "juanjol (26 commits)")[![albeortev](https://avatars.githubusercontent.com/u/46744901?v=4)](https://github.com/albeortev "albeortev (22 commits)")[![Furyhuntardita](https://avatars.githubusercontent.com/u/48945445?v=4)](https://github.com/Furyhuntardita "Furyhuntardita (13 commits)")[![franrou](https://avatars.githubusercontent.com/u/27700987?v=4)](https://github.com/franrou "franrou (9 commits)")[![Esrohym](https://avatars.githubusercontent.com/u/35486575?v=4)](https://github.com/Esrohym "Esrohym (5 commits)")[![lpeidro](https://avatars.githubusercontent.com/u/63868167?v=4)](https://github.com/lpeidro "lpeidro (5 commits)")[![keopx](https://avatars.githubusercontent.com/u/537583?v=4)](https://github.com/keopx "keopx (4 commits)")[![albefer](https://avatars.githubusercontent.com/u/87694304?v=4)](https://github.com/albefer "albefer (4 commits)")[![alzz](https://avatars.githubusercontent.com/u/4226911?v=4)](https://github.com/alzz "alzz (3 commits)")[![idiazroncero](https://avatars.githubusercontent.com/u/3958741?v=4)](https://github.com/idiazroncero "idiazroncero (2 commits)")[![orodicio](https://avatars.githubusercontent.com/u/46745120?v=4)](https://github.com/orodicio "orodicio (1 commits)")[![rodrigoprimo](https://avatars.githubusercontent.com/u/77215?v=4)](https://github.com/rodrigoprimo "rodrigoprimo (1 commits)")

---

Tags

backstopjsbehatboilerplatedockerdrupaldrushstarter-kitstatic-code-analysistemplate

### Embed Badge

![Health badge](/badges/metadrop-drupal-boilerplate/health.svg)

```
[![Health](https://phpackages.com/badges/metadrop-drupal-boilerplate/health.svg)](https://phpackages.com/packages/metadrop-drupal-boilerplate)
```

###  Alternatives

[drupalwxt/wxt

Project template for Drupal 10 sites built with the WxT distribution.

29159.8k8](/packages/drupalwxt-wxt)[govcms/govcms

GovCMS Drupal Distribution

18997.1k3](/packages/govcms-govcms)[thunder/thunder-distribution

The thunder distribution

50634.8k3](/packages/thunder-thunder-distribution)[voidagency/vactory_starter_kit

Vactory is a custom Drupal profile which is developed and released by VOID Agency.

1019.7k](/packages/voidagency-vactory-starter-kit)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
