PHPackages                             tormjens/workbench - 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. tormjens/workbench

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

tormjens/workbench
==================

Simple local Composer development that does not mess up your lock file.

1.0.8(1y ago)1921[1 PRs](https://github.com/tormjens/workbench/pulls)MITPHPPHP &gt;=7.0

Since Mar 29Pushed 1y agoCompare

[ Source](https://github.com/tormjens/workbench)[ Packagist](https://packagist.org/packages/tormjens/workbench)[ RSS](/packages/tormjens-workbench/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (6)Dependencies (4)Versions (12)Used By (0)

Composer Workbench
==================

[](#composer-workbench)

A workbench for Composer that allows you to symlink your "offline" packages without writing them to the `composer.lock`file.

**!!Please note!!** This package has only been tested on macOS. It should work fine for Linux, but probably not for Windows.

Installation
------------

[](#installation)

Workbench is a plugin for Composer and installs like so:

`composer global require tormjens/workbench`

Usage
-----

[](#usage)

Once installed you'll notice a `workbench.json` file in your root composer directory (create it if you can't find it). On a mac that's usually `/Users/username/.composer`.

The file should look like this:

```
{
    "sources": [],
    "targets": []
}
```

Inside the `sources` key, you'll place the absolute paths to where your local packages are located. It will search using a glob so if you have many packages you may specify the "top level".

For example if you have packages at

- `/Users/username/packages/myfirstpackage`
- `/Users/username/packages/mysecondpackage`
- `/Users/username/packages/mythirdpackage`

You would then only add the path `/Users/username/packages` and all of your packages would be found.

Inside the `targets` key, you'll place the absolute paths to where this plugin should be enabled. This will also search using a glob. A few examples:

- `/Users/username/*` Plugin is enabled for all paths inside your home folder
- `*` Plugin is enabled everywhere
- `/Users/username/webapps/awesomeapp` Plugin is constrained to just the awesomeapp folder

So your `workbench.json` could look like:

```
{
    "sources": [
        "/Users/username/packages"
    ],
    "targets": [
        "/Users/username/webapps"
    ]
}
```

### Run Composer without Workbench

[](#run-composer-without-workbench)

Some times, for various reasons, you may want to run `composer install` and other commands without triggering workbench. In that case you may prefix the command with `WORKBENCH=0`. This will deactivate Workbench for that run.

`WORKBENCH=0 composer install`

Caveats
-------

[](#caveats)

While Workbench solves the issue of your custom local packages not being written to your project's `.lock` file, it will not be able to detect local changes to your `composer.json` during install. Hence you'll need to push and update for every of those changes.

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance35

Infrequent updates — may be unmaintained

Popularity12

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 92.9% 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 ~250 days

Recently: every ~463 days

Total

9

Last Release

603d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/16b2089f55ff5ab3154ef21caec78446d23b1515cc074d2d1c2bf184a9e64603?d=identicon)[tormjens](/maintainers/tormjens)

---

Top Contributors

[![tormjens](https://avatars.githubusercontent.com/u/3974889?v=4)](https://github.com/tormjens "tormjens (13 commits)")[![piperone](https://avatars.githubusercontent.com/u/351744?v=4)](https://github.com/piperone "piperone (1 commits)")

---

Tags

composerworkflowdevelopment

### Embed Badge

![Health badge](/badges/tormjens-workbench/health.svg)

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

###  Alternatives

[franzl/studio

Develop your Composer libraries with style

1.1k634.5k15](/packages/franzl-studio)[ergebnis/composer-normalize

Provides a composer plugin for normalizing composer.json.

1.1k37.3M2.1k](/packages/ergebnis-composer-normalize)[bamarni/composer-bin-plugin

No conflicts for your bin dependencies

52722.0M859](/packages/bamarni-composer-bin-plugin)[cybercog/laravel-paket

Composer personal web interface. Manage Laravel dependencies without switching to command line!

1753.3k](/packages/cybercog-laravel-paket)[gossi/composer-localdev-plugin

Composer Plugin for local development

333.3k](/packages/gossi-composer-localdev-plugin)

PHPackages © 2026

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