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(9mo ago)027GPL-2.0-or-laterPHPCI passing

Since Oct 20Pushed 7mo 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 1w ago

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

25

—

LowBetter than 35% of packages

Maintenance61

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

276d 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

[drupal/core-composer-scaffold

A flexible Composer project scaffold builder.

5346.5M600](/packages/drupal-core-composer-scaffold)[symfony/runtime

Enables decoupling PHP applications from global state

740103.0M1.2k](/packages/symfony-runtime)[drupal/core-project-message

Adds a message after Composer installation.

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

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

1435.5M65](/packages/mnsami-composer-custom-directory-installer)[phpro/grumphp-shim

GrumPHP Phar distribution

284.9M348](/packages/phpro-grumphp-shim)[automattic/jetpack-autoloader

Creates a custom autoloader for a plugin or theme.

566.3M167](/packages/automattic-jetpack-autoloader)

PHPackages © 2026

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