PHPackages                             drupal/tangler - 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. drupal/tangler

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

drupal/tangler
==============

0.1.9(11y ago)1718.6k9[7 issues](https://github.com/winmillwill/drupal-tangler/issues)[2 PRs](https://github.com/winmillwill/drupal-tangler/pulls)4PHP

Since Jun 22Pushed 11y ago1 watchersCompare

[ Source](https://github.com/winmillwill/drupal-tangler)[ Packagist](https://packagist.org/packages/drupal/tangler)[ RSS](/packages/drupal-tangler/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (4)Versions (11)Used By (4)

Drupal Tangler
==============

[](#drupal-tangler)

This library provides tools for an opinionated composer workflow with Drupal.

When invoked, it creates a Drupal root that can respond to requests routed to it from a web server. This allows you to develop at the module and/or project level and treat Drupal itself as a dependency.

Installation
============

[](#installation)

Use composer.

Usage
=====

[](#usage)

The algorithm is something like this:

1. copy `drupal/drupal` out of vendor and into the given drupal path (default: `./www`)
2. link modules and themes installed with composer from vendor into the drupal root
3. link directories from the `./modules` directory into `sites/all/modules`
4. link directories from the `./themes` directory into `sites/all/themes`
5. link files that look like module files into a directory in `sites/all/modules` according to the basename of the `*.info` file
6. link `cnf/settings.php` into `sites/default`
7. link `vendor` into `sites/default`
8. link `cnf/files` into `sites/default`

You have the choice of using a small commandline application or a script handler.

Commandline
-----------

[](#commandline)

```
vendor/bin/drupal_tangle -h
Usage:
 drupal:tangle [project] [drupal]

Arguments:
 project               path to project to tangle
 drupal                path to drupal in which to tangle (default: "www")

```

Composer Script Configuration
-----------------------------

[](#composer-script-configuration)

You can automate the use of the tangler in response to composer events like so:

```
{
...
    "scripts": {
        "post-install-cmd": [
          "Drupal\\Tangler\\ScriptHandler::postUpdate",
        ],
        "post-update-cmd": [
          "Drupal\\Tangler\\ScriptHandler::postUpdate"
        ]
    },
...
}

```

Note that you can just trigger the executable with these events, in which case the values for the different `*-cmd` events above would be like this:

```
[
  "vendor/bin/drupal_tangle"
]

```

Roadmap
-------

[](#roadmap)

- Allow appropriate configuration, such as name of drupal subdir, and origin of `settings.php`
- Support development of a theme or profile
- Support for placing things in the `sites/all/libraries` directory (not because this is ever a good idea, but because some projects require it)

Not Ever Going To Be On The Roadmap
-----------------------------------

[](#not-ever-going-to-be-on-the-roadmap)

- Support for multi-site

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance12

Infrequent updates — may be unmaintained

Popularity31

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 97% 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 ~9 days

Total

10

Last Release

4260d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3173507b9768a40544504e379117dc7c94f2ec6592bc3a96a6959fb6f1b411b3?d=identicon)[winmillwill](/maintainers/winmillwill)

---

Top Contributors

[![winmillwill](https://avatars.githubusercontent.com/u/873461?v=4)](https://github.com/winmillwill "winmillwill (32 commits)")[![dooug](https://avatars.githubusercontent.com/u/136539?v=4)](https://github.com/dooug "dooug (1 commits)")

### Embed Badge

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

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

###  Alternatives

[symfony/maker-bundle

Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.

3.4k111.1M568](/packages/symfony-maker-bundle)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[symplify/monorepo-builder

Not only Composer tools to build a Monorepo.

5205.3M82](/packages/symplify-monorepo-builder)[coenjacobs/mozart

Composes all dependencies as a package inside a WordPress plugin

4723.6M20](/packages/coenjacobs-mozart)[ramsey/conventional-commits

A PHP library for creating and validating commit messages according to the Conventional Commits specification. Includes a CaptainHook action!

1931.2M122](/packages/ramsey-conventional-commits)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

96374.6k23](/packages/friendsoftypo3-content-blocks)

PHPackages © 2026

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