NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #2522 most downloaded on Packagist
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.
Last release 9 days ago
28 Sep 2026
Release timing varies
gaps range from 2 weeks to 12 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
208 releases · first in 2017
allow patch to target the autoloader root (instead of targeting package root) by configuring 'cwd' key to 'autoload'
follow-up to incorrectly released version (3.39.1); no extra changes done
One column per quarter.
patches not applied when dealing with requires that use dev branches (even when version available in package config or when dev branch aliased as prop
added --brief to list command (skips over description, etc)
hide all information on previously applied patches by default (when patches for certain package are re-applied) and only show the ones that changed, a
some patches that patched multiple files applied only half-way through on certain OS's without returning with proper exit code on failure (or failed h
new flag introduced for patch:list to allow including patches that have been ruled out due to mismatch with certain constraint: --excluded
allow '@type bundle' to be used for bundle package instead of using somewhat cryptic '@package *'
backwards compatibility problems with composer.lock contents for projects that upgraded to latest releases of the plugin and had patches previously ap
lock management reworked (again) to make sure that under no circumstances does the plugin crash while sanitizing the lock
lock management reworked to use built-in methods for locating a package to avoid issues with potential aliases, etc
list command added (allows listing all registered patches and their state)
conflicting project applied patches state when doing a --no-dev call and a filtered undo/redo after that
allow patch path strip level to be defined in patch's embedded target-info declaration (@level )
improved error reporting when encountering issues on composer lock cleanup
allow patch applied root to be configured per patch to allow patching of files that are mapped by other composer plugins to project root (see more at
definition list validation command returning with false failures when using #skip on patch paths
allow comments on any level and with any keyword as long as it starts with underscore (_)
halt applying patches when encountering package with local changes to avoid developer from losing their work (allow override with env flag or command
patch apply failure on fresh projects under certain conditions when loading the 'patches-applied' from .lock file (which in-between the run is set to
allow @type tag in embedded target info to indicate that patch should only be applied when running composer without --no-dev
patch validation command failing on bundle patches when owned by non-root package
split the --undo and --redo options of main command into separate commands - 'patch:undo' and 'patch:redo' (the functionality will still also be acces
patch link/issue moved to be presented after the label/description
allow patches information to be extracted from the patch file (see: patch declaration with embedded meta-data)
allow multiple 'patches-depend' declarations for different kind of patches (bundle VS normal patch)
allow multiple patch-base's to be defined based on vendor or full package name
### Fix * missing file added Links: src diff
array-based values ended up being treated as version constraints (issue with label-version exploder)
label-version definition exploder not handling a list of multiple versions correctly
new definition format that consists of description/filename and version restriction
### Maintenance * debug code removed (shame!) Links: src diff
allow patch base path variables to have partial value extractors defined against them
wrong error message when bundle patch is not found from defined path
minor modifications to patch filtering logic
fix to a crash that happened when resetting targets that relate to bundle patches
minor change to constant naming to make it match up with patch command. COMPOSER_PATCHES_PREFER_OWNER renamed to COMPOSER_PATCHES_FROM_SOURCE. Backwar
bundled patches reset mechanism targeting wrong packages (where root package as owner was being sent to 'patches reset' which caused a crash)
allow default indirect dependency to be defined for a package version restriction
package meta-data fixes. syntax error in composer.json
bundled patch targets resolver failing due to patch info loaders being re-arranged and certain array values no longer being available (patch path not
minor architecture changes around filtering patch files / packages
allow patch exclusions based on partial paths
patcher configuration overrides that depend on the OS
make it possible to allow patch download from HTTP (separate config from allowing this for packages)
re-apply remote patch when it's contents have changed (download remote patches beforehand and make the decision based on the contents of the patch)
documentation re-organized and simplified
minor readme and package description updates
documentation changes. Some explanations re-written. Added example for bundle-patch
documentation re-organized to prioritize quick comprehension on the basics of the module's functionality
added new operation to check if applier is available (can be used to exclude certain appliers on certain systems)
several config keys renamed (patchers => appliers, patcher-config => patcher). Backwards compatible
switched to using PHP constants for OS-related values like newline and path separator
patches not registered for patch target packages when 'COMPOSER_PATCHES_FATAL_FAIL' enabled and error is encountered
composer patch command option 'undo' not working correctly when patching explicitly set to be enabled in composer.json of the project
don't force bundle patches to have 'vendor' in their paths as it's a customizable value
auto-resolve bundle patch targets when 'targets' not defined
allow multiple patch files to be defined to enable high-level patch grouping (or to allow occasional cleanup where really old legacy patches could be
crash when trying to declare path stripping level for version-branched sources
allow certain patches to be processed only with very strict path strip options and patcher type
Your coding agent can read these notes before it upgrades. Set up the MCP server →