PHPackages                             claudiu-cristea/drupal-project - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. claudiu-cristea/drupal-project

ActiveComposer-plugin[Utility &amp; Helpers](/categories/utility)

claudiu-cristea/drupal-project
==============================

Allows to keep all Drupal code outside of web root

1.x-dev(7mo ago)027GPL-2.0-or-laterPHPCI passing

Since Oct 20Pushed 5mo agoCompare

[ Source](https://github.com/claudiu-cristea/drupal-project)[ Packagist](https://packagist.org/packages/claudiu-cristea/drupal-project)[ RSS](/packages/claudiu-cristea-drupal-project/feed)WikiDiscussions 1.x Synced today

READMEChangelog (2)Dependencies (4)Versions (4)Used By (0)

[![ci](https://github.com/claudiu-cristea/drupal-project/actions/workflows/ci.yml/badge.svg)](https://github.com/claudiu-cristea/drupal-project/actions/workflows/ci.yml)

Allows to keep all Drupal code outside of web root.

The package provides a Composer plugin that scaffolds the custom code directories and settings for a Drupal project. The main idea is to keep all custom code outside the web root.

When running Composer install or update, the following directories and files will be created, if they don't exist. Under web root symlinks are created in the proper location. For instance `src/Drupal/Modules` is symlinked as `web/modules/custom`, `files/public` is symlinked as `web/sites/default/files` and so on.

```
Directory/file                 Symlinked as
├─ files
│  ├─ private
│  ├─ public                   -> web/sites/default/files
│  └─ .gitignore                  Both, private and public, are ignored
...
├─ src
│  └─ Drupal
│     ├─ Modules               -> web/modules/custom
│     ├─ Profiles              -> web/profiles/custom
│     ├─ Settings
│     │  ├─ settings.php       -> web/sites/default/settings.php
│     │  ├─ settings.local.php -> web/sites/default/settings.local.php
│     │  └─ .gitignore            settings.local.php is ignored
│     └─ Themes                -> web/themes/custom

```

The webroot directory (`web/`) is also added to the project's `.gitignore` if it isn't yet there.

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance66

Regular maintenance activity

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity24

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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 ~13 days

Total

3

Last Release

230d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/473868?v=4)[Claudiu Cristea](/maintainers/claudiu-cristea)[@claudiu-cristea](https://github.com/claudiu-cristea)

---

Top Contributors

[![claudiu-cristea](https://avatars.githubusercontent.com/u/473868?v=4)](https://github.com/claudiu-cristea "claudiu-cristea (11 commits)")

---

Tags

drupaldocrootwebroot

###  Code Quality

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/claudiu-cristea-drupal-project/health.svg)

```
[![Health](https://phpackages.com/badges/claudiu-cristea-drupal-project/health.svg)](https://phpackages.com/packages/claudiu-cristea-drupal-project)
```

###  Alternatives

[symfony/runtime

Enables decoupling PHP applications from global state

74798.8M1.0k](/packages/symfony-runtime)[drupal/core-composer-scaffold

A flexible Composer project scaffold builder.

5445.2M564](/packages/drupal-core-composer-scaffold)[drupal/core-project-message

Adds a message after Composer installation.

2124.7M203](/packages/drupal-core-project-message)[mnsami/composer-custom-directory-installer

A composer plugin, to help install packages of different types in custom paths.

1465.4M62](/packages/mnsami-composer-custom-directory-installer)[sandersander/composer-link

Adds ability to link local packages for development with composer

98457.9k](/packages/sandersander-composer-link)[phpro/grumphp-shim

GrumPHP Phar distribution

294.7M340](/packages/phpro-grumphp-shim)

PHPackages © 2026

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