PHPackages                             symplify/monorepo-builder-prefixed - 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. symplify/monorepo-builder-prefixed

Abandoned → [symplify/monorepo-builder](/?search=symplify%2Fmonorepo-builder)Library[Utility &amp; Helpers](/categories/utility)

symplify/monorepo-builder-prefixed
==================================

Prefixed scoped version of "symplify/monorepo-builder" package

9.0.19(5y ago)06.0k↓100%1MITPHPPHP &gt;=7.3CI failing

Since Jun 15Pushed 5y ago1 watchersCompare

[ Source](https://github.com/deprecated-packages/monorepo-builder-prefixed)[ Packagist](https://packagist.org/packages/symplify/monorepo-builder-prefixed)[ RSS](/packages/symplify-monorepo-builder-prefixed/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (131)Used By (0)

Not only Composer tools to build a Monorepo
===========================================

[](#not-only-composer-tools-to-build-a-monorepo)

[![Downloads total](https://camo.githubusercontent.com/5dc91e0266e06abd90ccd8d84e1ca0a118271d7967e642df54cc620f4f45580a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73796d706c6966792f6d6f6e6f7265706f2d6275696c6465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/symplify/monorepo-builder/stats)

Do you maintain [a monorepo](https://tomasvotruba.com/blog/2019/10/28/all-you-always-wanted-to-know-about-monorepo-but-were-afraid-to-ask/) with more packages?

**This package has few useful tools, that will make that easier**.

Install
-------

[](#install)

```
composer require symplify/monorepo-builder --dev
```

Usage
-----

[](#usage)

### 0. Are you New to Monorepo?

[](#0-are-you-new-to-monorepo)

The best to lean-in fast is to read basic intro at blog post [All You Always Wanted to Know About Monorepo](https://www.tomasvotruba.com/blog/2019/10/28/all-you-always-wanted-to-know-about-monorepo-but-were-afraid-to-ask/#what-is-monorepo). We also made a simple command to make that easy for you:

```
vendor/bin/monorepo-builder init
```

And the basic setup is done!

### 1. Merge local `composer.json` to the Root One

[](#1-merge-local-composerjson-to-the-root-one)

Merges configured sections to the root `composer.json`, so you can only edit `composer.json` of particular packages and let script to synchronize it.

Sections that are needed for monorepo to work will be merged:

- 'require'
- 'require-dev'
- 'autoload'
- 'autoload-dev'
- 'repositories'
- 'extra'

To merge run:

```
vendor/bin/monorepo-builder merge
```

Typical location for packages is `/packages`. But what if you have different naming or extra `/projects` directory?

```
// File: monorepo-builder.php

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\MonorepoBuilder\ValueObject\Option;

return static function (ContainerConfigurator $containerConfigurator): void {
    $parameters = $containerConfigurator->parameters();

    // where are the packages located?
    $parameters->set(Option::PACKAGE_DIRECTORIES, [
        // default vaulue
        __DIR__ . '/packages',
        // custom
        __DIR__ . '/projects',
    ]);

    // how skip packages in loaded direectories?
    $parameters->set(Option::PACKAGE_DIRECTORIES_EXCLUDES, [__DIR__ . '/packages/secret-package']);

    // "merge" command related

    // what extra parts to add after merge?
    $parameters->set(Option::DATA_TO_APPEND, [
        'autoload-dev' => [
            'psr-4' => [
                'Symplify\Tests\\' => 'tests',
            ],
        ],
        'require-dev' => [
            'phpstan/phpstan' => '^0.12',
        ],
    ]);

    $parameters->set(Option::DATA_TO_REMOVE, [
        'require' => [
            // the line is removed by key, so version is irrelevant, thus *
            'phpunit/phpunit' => '*',
        ],
    ]);
};
```

### 2. Bump Package Inter-dependencies

[](#2-bump-package-inter-dependencies)

Let's say you release `symplify/symplify` 4.0 and you need package to depend on version `^4.0` for each other:

```
vendor/bin/monorepo-builder bump-interdependency "^4.0"
```

### 3. Keep Synchronized Package Version

[](#3-keep-synchronized-package-version)

In synchronized monorepo, it's common to use same package version to prevent bugs and WTFs. So if one of your package uses `symfony/console` 3.4 and the other `symfony/console` 4.1, this will tell you:

```
vendor/bin/monorepo-builder validate
```

### 4. Keep Package Alias Up-To-Date

[](#4-keep-package-alias-up-to-date)

You can see this even if there is already version 3.0 out:

```
{
    "extra": {
        "branch-alias": {
            "dev-master": "2.0-dev"
        }
    }
}
```

**Not good.** Get rid of this manual work and add this command to your release workflow:

```
vendor/bin/monorepo-builder package-alias
```

This will add alias `3.1-dev` to `composer.json` in each package.

If you prefer [`3.1.x-dev`](https://getcomposer.org/doc/articles/aliases.md#branch-alias) over default `3.1-dev`, you can configure it:

```
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\MonorepoBuilder\ValueObject\Option;

return static function (ContainerConfigurator $containerConfigurator): void {
    $parameters = $containerConfigurator->parameters();
    // default: ".-dev"
    $parameters->set(Option::PACKAGE_ALIAS_FORMAT, '..x-dev');
};
```

### 5. Split Directories to Git Repositories

[](#5-split-directories-to-git-repositories)

Thanks to GitHub Actions, this was never simpler to set up. Use [symplify/github-action-monorepo-split](https://github.com/symplify/github-action-monorepo-split).

How to configure it? See our local setup at [.github/workflows/split\_monorepo.yaml](https://github.com/symplify/symplify/blob/6f24c4e2e38de76ab09a4dceb28d48672296bfd2/.github/workflows/split_monorepo.yaml)

### 6. Release Flow

[](#6-release-flow)

When a new version of your package is released, you have to do many manual steps:

- bump mutual dependencies,
- tag this version,
- `git push` with tag,
- change `CHANGELOG.md` title *Unreleated* to `v - Y-m-d` format
- bump alias and mutual dependency to next version alias

But what if **you forget one or do it in wrong order**? Everything will crash!

The `release` command will make you safe:

```
vendor/bin/monorepo-builder release v7.0
```

And add the following release workers to your `monorepo-builder.php`:

```
// File: monorepo-builder.php

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\AddTagToChangelogReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\PushNextDevReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\PushTagReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\SetCurrentMutualDependenciesReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\SetNextMutualDependenciesReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\TagVersionReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateBranchAliasReleaseWorker;
use Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateReplaceReleaseWorker;

return static function (ContainerConfigurator $containerConfigurator): void {
    $services = $containerConfigurator->services();

    # release workers - in order to execute
    $services->set(UpdateReplaceReleaseWorker::class);
    $services->set(SetCurrentMutualDependenciesReleaseWorker::class);
    $services->set(AddTagToChangelogReleaseWorker::class);
    $services->set(TagVersionReleaseWorker::class);
    $services->set(PushTagReleaseWorker::class);
    $services->set(SetNextMutualDependenciesReleaseWorker::class);
    $services->set(UpdateBranchAliasReleaseWorker::class);
    $services->set(PushNextDevReleaseWorker::class);
};
```

Are you afraid to tag and push? Use `--dry-run` to see only descriptions:

```
vendor/bin/monorepo-builder release v7.0 --dry-run
```

Do you want ot release next [patch version](https://semver.org/), e.g. current `v0.7.1` → next `v0.7.2`?

```
vendor/bin/monorepo-builder release patch
```

You can use `minor` and `major` too.

### 7. Set Your Own Release Flow

[](#7-set-your-own-release-flow)

There is set of few default release workers - classes that implement `Symplify\MonorepoBuilder\Release\Contract\ReleaseWorker\ReleaseWorkerInterface`.

You need to register them as services. Feel free to start with default ones:

```
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $services = $containerConfigurator->services();

    // release workers - in order to execute
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\SetCurrentMutualDependenciesReleaseWorker::class);
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\AddTagToChangelogReleaseWorker::class);

    // you can extend with your own
    $services->set(App\SendPigeonToTwitterReleaseWorker::class);

    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\TagVersionReleaseWorker::class);
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\PushTagReleaseWorker::class);
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\SetNextMutualDependenciesReleaseWorker::class);
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\UpdateBranchAliasReleaseWorker::class);
    $services->set(Symplify\MonorepoBuilder\Release\ReleaseWorker\PushNextDevReleaseWorker::class);
};
```

Report Issues
-------------

[](#report-issues)

In case you are experiencing a bug or want to request a new feature head over to the [Symplify monorepo issue tracker](https://github.com/symplify/symplify/issues)

Contribute
----------

[](#contribute)

The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on [symplify/symplify](https://github.com/symplify/symplify).

###  Health Score

32

—

LowBetter than 71% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity67

Established project with proven stability

 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 ~1 days

Total

130

Last Release

1960d ago

Major Versions

8.3.48 → 9.0.0-BETA12020-11-14

PHP version history (3 changes)v8.0.1PHP ^7.2

9.0.0-BETA1PHP &gt;=7.2

9.0.0-rc1PHP &gt;=7.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/924196?v=4)[Tomas Votruba](/maintainers/TomasVotruba)[@TomasVotruba](https://github.com/TomasVotruba)

---

Top Contributors

[![TomasVotruba](https://avatars.githubusercontent.com/u/924196?v=4)](https://github.com/TomasVotruba "TomasVotruba (874 commits)")

### Embed Badge

![Health badge](/badges/symplify-monorepo-builder-prefixed/health.svg)

```
[![Health](https://phpackages.com/badges/symplify-monorepo-builder-prefixed/health.svg)](https://phpackages.com/packages/symplify-monorepo-builder-prefixed)
```

PHPackages © 2026

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