Check if your changes are a major change, minor change or just a patch.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Check your changes against semantic versions

Build Status Coverage

Install it via composer

composer require sourcerer-mike/phpsemver

and test your code by comparing two versions

phpsemver compare 3.2.0 HEAD

or the last commit with your current work:

phpsemver compare HEAD .

| Level | Message                                                           |
| major | phpsemver_get_composer_config() removed.                          |
| major | PHPSemVer\Specification removed.                                  |
| minor | PHPSemVer\Config added.                                           |
| minor | PHPSemVer\Wrapper\AbstractWrapper::mergeTrees() added.            |
| patch | PHPSemVer\Wrapper\Directory::getAllFileNames() body changed.      |
| patch | PHPSemVer\Wrapper\Git::getAllFileNames() body changed.            |

Total time: 0.94

You're welcome!



Try the several possibilities:

  • Use compare to check for changes.
  • Use vcs:message to enhance your commit messages.


Choose between those wrapper(phpsemver compare --type ...):

  • GIT
  • Filesystem / Directories

If one argument is a directory, then the system will work on the file system.


Make assertions on:

  • Functions
    • IsAdded: Check if a function is new.
    • IsRemoved: Check if a function is removed.
    • BodyChanged: Check if someone changed the behaviour of a function.
  • Classes
    • IsAdded: Check if a classes is new.
    • IsRemoved: Check if a classes is removed.
  • Methods
    • IsAdded: Check if a method is new.
    • IsRemoved: Check if a method is removed.
    • BodyChanged: Check if someone changed the behaviour of a method.
    • ReturnTypeChanged: Watch for changed return types.
    • ReturnTypeRemoved: Watch for incompatible changes on methods.
  • Interfaces
    • IsAdded: Check if an interface is new.
    • IsRemoved: Check if an interface is removed.

Combine them as you like in your own configuration file.


Configure which assertions are used in a XML-File. The delivered XSD file makes it easy to write your own configuration (in a proper IDE).

<?xml version="1.0"?>
        title="My own rules">
    <RuleSet name="major">
                <IsRemoved />
    <RuleSet name="minor">
                <IsAdded />
    <RuleSet name="patch">


Write your own and use it with the --ruleset option. See the wiki entry for more information:

Prepared rule sets

Those projects do semantic versions in different ways. So a special config is written for them which can be used via the --ruleSet option:

  • Drupal-Core
  • SemVer2
  • WordPress

Just write phpsemver --ruleSet Drupal-Core and see the latest changes in Drupal. There are other companies that follow some semantics in their rules like Symfony. Don't drag behind - catch up with PHPSemVer.