PHPackages                             socialengine/composer-symlinker - 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. socialengine/composer-symlinker

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

socialengine/composer-symlinker
===============================

A composer plugin to install packages as local symbolic links

1.0.3(10y ago)3640.6k1[1 PRs](https://github.com/SocialEngine/composer-symlinker/pulls)MITPHP

Since Sep 30Pushed 7y ago5 watchersCompare

[ Source](https://github.com/SocialEngine/composer-symlinker)[ Packagist](https://packagist.org/packages/socialengine/composer-symlinker)[ RSS](/packages/socialengine-composer-symlinker/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (2)Versions (6)Used By (0)

Composer Symlinker Plugin
=========================

[](#composer-symlinker-plugin)

This [Composer](http://getcomposer.org/) plugin allows you to install packages as local symbolic links, with the option to fallback to other install options. This allows you to locally develop a package and its dependencies in parallel.

This has been discussed as a possible improvement to Composer, but movement has been slow. See Composer issues [\#1299](https://github.com/composer/composer/issues/1299), and [\#4011](https://github.com/composer/composer/issues/4011)for example discussions.

This is a fork of [piwi/composer-symlinker](https://github.com/piwi/composer-symlinker) with some enhancements. Specifically:

- Allow for relative paths (helpful if you develop in a virtual machine, but edit code on your host machine)
- Fall back to other install options, if a package can't be found locally.
- Allow for other installers to give the correct install path. (Useful when using packages that install to non-vendor locations)

Setup
-----

[](#setup)

First, add the plugin as a dependency in your `composer.json`:

```
"socialengine/composer-symlinker": "~1.0"
```

Next, define local paths to your packages in an `extra` section of your `composer.json`. You have two options on how to declare the paths:

- `local-dirs`: list out directories to look in for packages. When scanning, these paths will be combined with `vendor/package`.
- `local-packages`: a key-value object, where the key is the package name, and the value is a path to that package. The paths can be relative to the `composer.json`.

If you want to restrict which vendors to scan for locally, you can add a `local-vendors` list.

If a package is not found locally, the plugin will fall back to other install methods (like packagist/git).

### Example Extra Section

[](#example-extra-section)

```
"extra": {
    "local-dirs": [
        "/my/absolute/local/path1",
        "../../relative/local/path2"
    ],
    "local-vendors": [
        "vendor1",
        "vendor2"
    ],
    "local-packages": {
        "vendor/package1": "/my/absolute/path/to/vendor/package1",
        "vendor/package2": "../relative/path/to/vendor/package2"
    }
}
```

Example Setup
-------------

[](#example-setup)

Let's say we want to work on a project named `MyProject` base on three dependencies: `MyPackage1` and `MyPackage2` which are some of our packages, and a third-party `ExternalPackage` which is not.

Further, `MyPackage1` is located at `/opt/php/MyVendor/MyPackage1` and `MyPackage2` can be found at `../my-package-2`.

We can configure our `composer.json` like so:

```
"require": {
    "MyVendor/MyPackage1": "3.6.1",
    "MyVendor/MyPackage2": "0.10",
    "OtherVendor/ExternalPackage": "2.4.6"
},
"require-dev": {
    "socialengine/composer-symlinker": "~1.0"
},
"extra": {
    "local-dirs": "/opt/php/",
    "local-packages": {
        "MyVendor/MyPackage2": "../my-package-2"
    }
}
```

So, when developing on our local box, `composer install` will install our packages as symlinks to their respective paths. If use the same `composer.json` on a box where the paths aren't valid, the packages will be installed normally.

Windows users warning
---------------------

[](#windows-users-warning)

The plugin uses the internal [`symlink()`](http://php.net/symlink) PHP function. See *Windows* restrictions on the manual.

License
-------

[](#license)

This is released under the [MIT License](https://github.com/SocialEngine/composer-symlinker/blob/master/LICENSE).

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity35

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 80% 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

4

Last Release

3903d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1575c8d57d54e6709709892218dc0d5ae14b16bcf8c3ace23cf4cad39deecff1?d=identicon)[Danno040](/maintainers/Danno040)

---

Top Contributors

[![e-picas](https://avatars.githubusercontent.com/u/1021199?v=4)](https://github.com/e-picas "e-picas (12 commits)")[![smazurov](https://avatars.githubusercontent.com/u/21636?v=4)](https://github.com/smazurov "smazurov (2 commits)")[![ralphschindler](https://avatars.githubusercontent.com/u/76674?v=4)](https://github.com/ralphschindler "ralphschindler (1 commits)")

### Embed Badge

![Health badge](/badges/socialengine-composer-symlinker/health.svg)

```
[![Health](https://phpackages.com/badges/socialengine-composer-symlinker/health.svg)](https://phpackages.com/packages/socialengine-composer-symlinker)
```

###  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.

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

Adds a message after Composer installation.

2124.7M203](/packages/drupal-core-project-message)[vaimo/composer-patches

Applies a patch from a local or remote file to any package that is part of a given composer project. Patches can be defined both on project and on package level. Optional support for patch versioning, sequencing, custom patch applier configuration and patch command for testing/troubleshooting added patches.

3014.6M26](/packages/vaimo-composer-patches)[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)
