PHPackages                             shudd3r/toolshed - 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. shudd3r/toolshed

ActiveComposer-plugin

shudd3r/toolshed
================

Composer plugin orchestrating global dev tool packages

00PHPCI passing

Since Aug 1Pushed 1w agoCompare

[ Source](https://github.com/shudd3r/toolshed)[ Packagist](https://packagist.org/packages/shudd3r/toolshed)[ RSS](/packages/shudd3r-toolshed/feed)WikiDiscussions develop Synced 1w ago

READMEChangelog (1)DependenciesVersions (1)Used By (0)

Shudd3r/Toolshed
================

[](#shudd3rtoolshed)

[![Latest stable release](https://camo.githubusercontent.com/a184135e38a7eae64e68d2507d67c4196d11e94b164dc17b77c2f051bfe3eab2/68747470733a2f2f706f7365722e707567782e6f72672f736875646433722f746f6f6c736865642f76657273696f6e)](https://packagist.org/packages/shudd3r/toolshed)[![Build status](https://github.com/shudd3r/toolshed/workflows/build/badge.svg)](https://github.com/shudd3r/toolshed/actions)[![Coverage status](https://camo.githubusercontent.com/687e75ba02070e0a7690175f35b6e31cdea08150e37c42d55a5214483dd81976/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f736875646433722f746f6f6c736865642f62616467652e7376673f6272616e63683d646576656c6f70)](https://coveralls.io/github/shudd3r/toolshed?branch=develop)[![PHP version](https://camo.githubusercontent.com/646c9e3303170c678e88490da0c868cd502d677065251a5f2fb72e65884cde67/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f736875646433722f746f6f6c736865642e737667)](https://packagist.org/packages/shudd3r/toolshed)[![LICENSE](https://camo.githubusercontent.com/73f1f79576f52145819478113f685d5462ff50336f7caffb33f5009ffe8b10d3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f736875646433722f746f6f6c736865642e7376673f636f6c6f723d626c7565)](LICENSE)

### Composer plugin orchestrating global dev tool packages

[](#composer-plugin-orchestrating-global-dev-tool-packages)

Most dev dependencies listed in `composer.json` of your projects are not an integral part of these projects. At best, they are common libraries, like testing frameworks, that your dev environment depends on. These tools could be installed in shared locations and used remotely. This is the whole idea behind **Toolshed** plugin.

##### Core features:

[](#core-features)

- **Avoid multiple installations of the same tool**, which might reduce filesystem clutter by thousands of files. Tools are installed, updated &amp; synchronized in Composer's global subdirectories, so multiple versions of the same tool would still be available for different projects.
- **Isolate the project's dev environment** - "dirty" tool dependencies such as autoloaded polyfill functions might make your IDE behave as if your target PHP version supported them (which would remain true until the project reaches no-dev stage on production).
- **Neutral to non-plugin environments** - use dev tools as if they were installed as the project's local `require-dev` packages. Environments with the plugin installed shouldn't notice any difference beside reduced number of libraries within the `vendor` directory. The plugin maintains only *redirect binaries* to shared tool executables.

### Installation with [Composer](https://getcomposer.org/)

[](#installation-with-composer)

```
composer global config allow-plugins.shudd3r/toolshed true
composer global require shudd3r/toolshed
```

### Basic Usage

[](#basic-usage)

Select commonly used tools from `require-dev` section of `composer.json`that are not specific to your project's dev environment and add their package names to `extra.shared-tools` list. For example:

```
{
    "require-dev": {
        "phpunit/phpunit": "^12.0",
        "friendsofphp/php-cs-fixer": "^3.90",
        "project/template-builder": "2.4.*"
    },
    "extra": {
        "shared-tools": ["phpunit/phpunit", "friendsofphp/php-cs-fixer"]
    }
}
```

You can add this section directly to project's `composer.json` file or use the following command (quotes might need escaping on Windows):

```
composer config --json --merge extra.shared-tools '["friendsofphp/php-cs-fixer"]'
```

Now, running `composer update` or `install` will remove the listed tool files from project's `vendor` directory and move them to `shared-tools` in Composer's global `home` location, leaving only short *redirect binaries*in your `vendor/bin` directory instead. The goal is to make the tools work as if the plugin was not installed.

### TODO &amp; Known issues

[](#todo--known-issues)

Warning

Links to shared tools are not removed after tool is removed from list or plugin is deactivated (either globally or `shared-tools` removed from `composer.json`. Composer doesn't overwrite existing binary files.

**TODO:** Requires reorganizing link creation control flow

Warning

IDE integrations (PhpStorm):

- Tool namespace references require adding external libraries, which would import unwanted classes and polyfill functions, defeating the isolation goal.
- Configuration for PHPUnit tests requires either the `.phar` location or the path to composer's `autoload.php`, which might change dynamically due to version updates.

**Possible solution**: Merged `autoload.php` for main namespaces or static redirect file

Warning

Relative paths for tool commands that directly or indirectly refer to resources from `vendor` directory will no longer be valid.

**Possible solution**: Custom binaries (outside plugin scope)

Warning

Faulty path resolution in binary files. For example Composer autoload.php` lookup based on current working directory.

**Possible solution**: Fixing PRs or custom binaries

###  Health Score

20

—

LowBetter than 12% of packages

Maintenance64

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/9908030?v=4)[shudd3r](/maintainers/shudd3r)[@shudd3r](https://github.com/shudd3r)

---

Top Contributors

[![shudd3r](https://avatars.githubusercontent.com/u/9908030?v=4)](https://github.com/shudd3r "shudd3r (89 commits)")

---

Tags

composercomposer-pluginin-development

### Embed Badge

![Health badge](/badges/shudd3r-toolshed/health.svg)

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

PHPackages © 2026

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