symplify/monorepo-builder
Toolkit for managing PHP monorepos: merge package composer.json files into the root, validate dependency versions, bump interdependencies, propagate versions back, manage package aliases, and automate releases. Configured via monorepo-builder.php; requires PHP 8.2+.
sebastian/diff ^9.0, which unblocks upgrading to PHPUnit 13 / Pest 5. The previous cap at ^8.0 transitively blocked any project that wanted PHPUnit 13 while keeping monorepo-builder installed. sebastian/diff 9.0 removed UnifiedDiffOutputBuilder, so CompleteUnifiedDiffOutputBuilderFactory now picks the right output builder at runtime and returns the shared DiffOutputBuilderInterface. Console diff output is byte-identical across sebastian/diff 6, 7, 8, and 9. Note that sebastian/diff 9.0 requires PHP 8.4, so it is only selected on PHP 8.4+; older PHP keeps the existing builder. (#120)sebastian/diff 9 on PHP 8.4, so both output builder paths are covered. (#120)readonly promotions flagged by rector 2.5. (#120)Full Changelog: https://github.com/symplify/monorepo-builder/compare/12.7.1...12.7.2
$container error on Symfony Console 8.1 (#119)Full Changelog: https://github.com/symplify/monorepo-builder/compare/12.7.0...12.7.1
disableAutoloadMerge(sections, forTypes) API — independently control which composer.json autoload sections (autoload, autoload-dev) get skipped from root merge, optionally filtered by package type. New Symplify\MonorepoBuilder\Config\AutoloadSection and Symplify\MonorepoBuilder\Config\PackageType enums power the API; mixing enum cases and plain strings in the same call is supported (escape hatch for composer/installers ecosystem types like wordpress-plugin, drupal-module, symfony-bundle, and for user-defined custom types). Multiple types are OR-matched. Two filter channels are intentionally distinct: pass forTypes: [] to skip every package regardless of type; pass a non-empty list to skip ONLY packages whose composer.json declares the matching type literally. (#117)MBConfig::shouldSkipAutoload(?string $packageType): bool and MBConfig::shouldSkipAutoloadDev(?string $packageType): bool let custom mergers consult the configured rules per package. The bundled AutoloadComposerKeyMerger and AutoloadDevComposerKeyMerger now consult them symmetrically. (#117)MBConfig::disableAutoloadMerge() continues to work but now emits an E_USER_DEPRECATED notice. It maps to skipping both sections for all packages — equivalent to disableAutoloadMerge(sections: [AutoloadSection::Autoload, AutoloadSection::AutoloadDev], forTypes: []). Update existing config files at your convenience.MBConfig::isAutoloadMergeDisabled() getter is marked [@deprecated](https://github.com/deprecated); prefer shouldSkipAutoload($packageType) and shouldSkipAutoloadDev($packageType) for new code.Full Changelog: https://github.com/symplify/monorepo-builder/compare/12.6.2...12.7.0
Full Changelog: https://github.com/symplify/monorepo-builder/compare/12.5.0...12.5.2
scripts-aliases, abandoned, readme, and any other non-standard keys in root composer.json are no longer silently dropped during merge (#105, #106)dataToAppend supports arbitrary composer.json keys — No longer limited to the 24 hardcoded sections (#105)composer.json is preserved by default — New sections are appended at the end; custom ordering is available via composerSectionOrder() (#107)ComposerJson::sortItemsByOrderedListOfKeys() and ArraySorter::recursiveSortBySchema()FilterOutDuplicatedRequireAndRequireDevJsonDecorator which was a no-op due to array_intersect comparing values instead of keysMergedAndDecoratedComposerJsonFactory (was merging object with itself)webmozart/assert ^2 (#103)ComposerJsonMerger and decoratorDECORATOR_ORDER constant for decorator execution orderingRequireRequireDevDuplicateCleaner, src-deps/composer-json-manipulator/Full Changelog: https://github.com/symplify/monorepo-builder/compare/12.4.5...12.5.0
How can I help you explore Laravel packages today?