NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #2558 most downloaded on Packagist
Prefixes dependencies namespaces so they are unique to your plugin
Last release today
07 Oct 2026
Ships on a steady schedule
a new release about every 4 weeks
Most releases are documented
notes for 41 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
72 releases · first in 2017
Fix: Do not update call sites in the target directory by @BrianHenryIE in #350 , fix #344 , thanks @ @arjen-mediasoep
strauss dump-autoload command for use with include_root_autoload by @BrianHenryIE in #353Full Changelog: 0.30.0...0.31.0
strauss dump-autoload for when include_root_autoload is enabledv0.31.0 Latest
Latest
Compare
One column per quarter.
Fix: PHP 8.6 deprecation warning "Returning from a finally block is deprecated" by @BrianHenryIE in #340
exclude_from_string_rename config option by @BrianHenryIE in #338Prefixer by @BrianHenryIE in #339 (I was hoping this PR would come with a performance improvement but it does not)builtinsymbols.php by @BrianHenryIE in #341, fix #324Full Changelog: 0.29.2...0.30.0
exclude_from_string_rename to exclude symbols from false-positive matches in stringsstrauss dump-autoload command to regenerate the target directory's autoloader, e.g. after adding a class when include_root_autoload is enabledFileSymbolScanner → PhpFileAnalyzer), into a FileCodeMap on the File listing the symbols it defines and every symbol it uses, by typeChangePlanner pipeline step determines every edit to every file before any file is modified; Prefixer only applies the planned editsparallel config / --parallel=N), one per spare CPU; --debug logs how long each pipeline step took'Acme\\Widget\\'update_call_sites no longer treats the target directory as call sites when the project's autoload key lists it (e.g. "classmap": ["vendor-prefixed"]), which double-prefixed docblocksComposer\InstalledVersions etc.) are planned with every other change, so prefixing Composer's autoload files no longer rewrites every file a second timeFix: composer prefix-namespace script by @Xilonz in #327
composer prefix-namespace script by @Xilonz in #327Unable to realpath() when delete_vendor_packages and delete_vendor_files are both enabled by @BrianHenryIE in #337, thanks @leewillis77InstalledVersions entry in autoloader by @BrianHenryIE in #336Full Changelog: 0.29.1...0.29.2
realpath() failure when delete_vendor_packages and delete_vendor_files both enabledInstalledVersions in autoload_classmap.php, autoload_static.php was incorrectFix: After prefixing vendor-prefixed/composer/* , update references to InstalledVersions etc. throughout project
vendor-prefixed/composer/*, update references to InstalledVersions etc. throughout projectFile::setParsedAst(), ::getParsedAst())::isDoRename() on ::isAutoloaded(); improve AutoloadedEnumeratorstrauss.phar creation (allow list of known errors added)Full Changelog: 0.29.0...0.29.1
vendor-prefixed/composer/*, update references to InstalledVersions etc. throughout projectstrauss.phar creation (allow list of known errors added)File::setParsedAst(), ::getParsedAst())We copy all files, then enumerate all files and symbols that are autoloaded, apply exclusion rules, perform renames. Previously all defined namespaces were assumed to be renamed, now only those that are autoloaded are. One odd concession is when a function is defined in a global namespace in a file with an autoloaded class, everything in the file is renamed. We don't want to modify classes with custom autoloaders, e.g. Action Scheduler, or polyfills for other namespaces.
Add: Increase php-parser use by @BrianHenryIE in #278 Fix #112 , #300 . Thanks @Dartui , @paymentplugins
php-parser use by @BrianHenryIE in #278 Fix #112, #300. Thanks @Dartui, @paymentpluginsenum support by @BrianHenryIE in #317PrefixComposerAutoloadFilesCommand to prefix files generated by composer dump-autoloadSymlinkProtectFilesystemAdapter for extra protection from inadvertently deleting symlinked filesexclude_files_from_update configexclude_from_prefix – namespace was updating in class that matched file patternReadOnlyFileSystem to brianhenryie/bh-php-flysystem-readonly … by @BrianHenryIE in #313analyze-strict Composer script by @BrianHenryIE in #321Full Changelog: 0.28.1...0.29.0
exclude_files_from_updatePrefixComposerAutoloadFilesCommand to prefix files generated by composer dump-autoloadexclude_from_prefix – namespace was updating in class that matched file patternphp-parser more widelyenum supportWiden the versions of dependencies Strauss can be installed alongside. Mute deprecation warnings. Increase the PHP version tested in GtiHub Actions. I…
Widen the versions of dependencies Strauss can be installed alongside. Mute deprecation warnings. Increase the PHP version tested in GtiHub Actions. Improve performance when scanning symlinked packages.
Full Changelog: 0.28.0...0.28.1
.gitignore and .gitattributeAdd: Skip .git directory and .gitignore and .gitattributes . export-ignore referenced files when enumerating by @BrianHenryIE in #297 , fix #254
.git directory and.gitignore and .gitattributes.export-ignore referenced files when enumerating by @BrianHenryIE in #297, fix #254Dependencies:
Full Changelog: 0.27.4...0.28.0
.gitignore, .gitattributes and exclude .git in symlinked packagesFix: mute deprecation warnings. 3436550 . Thanks @dingo-d , @DevinWalker
installed.json autoload key for symlinked packages in #292, thanks @DevinWalkerFull Changelog: 0.27.3...0.27.4
installed.json autoload key for symlinked packagesbrianhenryie/php-codecoverage-markdown in CIcomposer show in matrix to display installed versionsBugfix: Reindex installed.json package lists before writing by @paulgoodchild in #283
composer require composer/composer:"^2.10" -W by @BrianHenryIE in #287. Fix #285, #286. Thanks @defunctl @JUVOJustinFull Changelog: 0.27.2...0.27.3
Fix fatal error when scanning template files with placeholder tokens by @iruzevic in #267
Full Changelog: 0.27.1...0.27.2
exclude_from_copy packagesFix #258 Duplicated classmap prefix by @BrianHenryIE in #259 thanks @remyperona
exclude_from_copy by @BrianHenryIE in #265 thanks @DevinWalkervendor in regexes in exclude_from_copy.file_patterns by @BrianHenryIE in #263Full Changelog: 0.27.0...0.27.1
exclude_from_copyexclude_from_copy.file_patternsFix: Only replace constants that are marked for renaming (isDoRename) by @AndrewJDawes in #245
installed.json by @BrianHenryIE in #250optimize_autoloader with backward-compatible config interface handling by @paulgoodchild in #255Full Changelog: 0.26.5...0.27.0
installed.jsoninstalled.json entries for exclude_from_copy packagesoptimize_autoloader with backward-compatible config interface handlingFix: Incorrectly prefixing final class StatefulGeocoder implements Geocoder -> final class StatefulGeocoder implements BrianHenryIE\Geocoder
final class StatefulGeocoder implements Geocoder -> final class StatefulGeocoder implements BrianHenryIE\GeocoderIntegrationTestCase base class from tests/integration/util to testsFix: leading forward slash breaking Windows paths
exclude_from_copy incorrectly deleted when delete_vendor_packages is enabledexclude_from_copy.packages are still prefixedconstant_prefix key to plural setting* Refactoring * PHPStan fixes
Fix: namespaces not updated in non-autoloaded files
Fix: implicitly nullable warning
exclude_from_prefixing code from AutoloadedFilesEnumerator to MarkSymbolsForRenaming to fix buganalyze-changes, cs-changes-strict...Add: include_root_autoload option
include_root_autoload optionpreg_match(): Delimiter must not be alphanumeric or backslash for exclude regexp patternsvendor-prefixed/composer/autoload_classmap.php for packages not directly includedCopy all files from packages (previously only copied autoloaded files)
Fix: inadvertently removing autoload keys from installed.json when target_directory is not vendor-prefixed
installed.json when target_directory is not vendor-prefixedexclude_from_prefix config option not working correctlyInstalledJson::cleanTargetDirInstalledJson()conflict to allow newer jsonmapper versions.gitattributesAdd: functions_prefix string|false config option
functions_prefix string|false config optioncomposer.json's autoload key when generating the vendor-prefixed autoloaderAdd: use COMPOSER=custom.json environmental variable
COMPOSER=custom.json environmental variablesimple-php-code-parser ^0.15.3Fix: Use monolog (to avoid implementing LoggerInterface)
LoggerInterface)Fix: Reliable prefixing of global functions
Require simple-php-code-parser ^0.15.1
simple-php-code-parser ^0.15.1Filter 'implements' nodes on FullyQualified + add issue test
"elazar/flystream": "^0.5.0|^1"performReplacementsInProjectFiles() to only PHP filesfile_exists() check in edited vendor/autoload.phpextends Composer\Autoload\AutoloadGeneratorFix: psr-0 autoloaders were no longer autoloaded because the directory structure did not match
psr-0 autoloaders were no longer autoloaded because the directory structure did not matchfiles autoloaders failed when not unique (the whole point of this tool)Fix: jsonmapper latest version caused problems with PhpDoc
Add: --info, --debug and --silent verbosity levels
--info, --debug and --silent verbosity levels--dry-run which runs with --debug output but does not write filesautoload_aliases.php file for dev dependencies to load modified classes using their original fqdncomposer.jsonthephpleague/Flysystem and elazar/flystream for file operationsREADME.mdFix: global functions prefixed too liberally when defined as strings
* Add: prefix global functions
Fix: vendor-prefixed subdirectories' permissions being copied as 0700 instead of 0755
vendor-prefixed subdirectories' permissions being copied as 0700 instead of 0755Fix: Generic<\namespaced\class-type> not prefixed
Generic<\namespaced\class-type> not prefixedstrauss replace command (e.g. if you fork a project and want to change its namespace)Fix: use GlobalClass as Alias; not prefixed
use GlobalClass as Alias; not prefixed.gitattributes file to exclude dev files from distributionbin/strauss version number is out of syncDiscoveredFiles.phpREADME.mdFix: out of sync version number in bin/strauss
bin/straussFix: handle @ symbol for error suppression
@ symbol for error suppressionpreg_replace... returning null in LicenserFix: available CLI arguments were overwriting extra.strauss config
league/flysystem changed the default directory permissionsFix: was incorrectly deleting autoload keys from installed.json
Fix: check for array before loop
bin/strausssymfony/console & symfony/finder ^7 for Laravel 11 compatibilityscripts/createphar.shAdd: GitHub Action to update bin version number from CHANGELOG.md
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add: delete_vendor_packages option (delete_vendor_files is maybe deprecated now)
in-situ branch (bugs expected)delete_vendor_packages option (delete_vendor_files is maybe deprecated now)psr/* from file_patterns prefixingNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →