phlak/semver

Semantic versioning helper library

Maintainers

👁 PHLAK

Package info

github.com/PHLAK/SemVer

pkg:composer/phlak/semver

Fund package maintenance!

PHLAK

Paypal

Statistics

Installs: 1 675 579

Dependents: 50

Suggesters: 0

Stars: 183

Open Issues: 1

6.1.1 2025-06-14 16:31 UTC

Requires

  • php: ^8.1 || ^8.2 || ^8.3 || ^8.4

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 5efaa9523cdf65ed740a1cb0a7c551a779ae21c6

  • Chris Kankiewicz <Chris.woop@ChrisKankiewicz.com>

README

👁 SemVer

Semantic versioning helper library • Created by Chris Kankiewicz (@phlak.dev)

👁 Join our Community
👁 Become a Sponsor
👁 One-time Donation

👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Tests Status

Requirements

Installation

composer require phlak/semver

Initializing

use PHLAK\SemVer;

$version = new SemVer\Version(); // Initilializes to '0.1.0'

Or initialize with a custom version by passing a version string on creation. Accepts any valid semantic version string with or without a preceding v.

$version = new SemVer\Version('v1.2.3-alpha.5+sha.8d31ff4');

Or parse an incomple version string with the static Version::parse() constructor.

$version = SemVer\Version::parse('v1') // Initializes to '1.0.0'
$version = SemVer\Version::parse('v1.2') // Initializes to '1.2.0'

Usage

Retrieve the version or individual values

$version = new SemVer\Version('v1.2.3-beta.4+007');

echo $version; // '1.2.3-beta.4+007'
echo $version->major; // 1
echo $version->minor; // 2
echo $version->patch; // 3
echo $version->preRelease; // 'beta.4'
echo $version->build; // '007'

Increment the version

$version = new SemVer\Version('v1.2.3');

$version->incrementMajor(); // v1.2.3 -> v2.0.0
$version->incrementMinor(); // v1.2.3 -> v1.3.0
$version->incrementPatch(); // v1.2.3 -> v1.2.4
$version->incrementPreRelease(); // v1.2.3-alpha.5 -> v1.2.3-alpha.6

Set (override) the version or individual values

$version = new SemVer\Version();

$version->setVersion('v1.2.3'); // v1.2.3
$version->setMajor(3); // v1.2.3 -> v3.0.0
$version->setMinor(5); // v1.2.3 -> v1.5.0
$version->setPatch(7); // v1.2.3 -> 1.2.7
$version->setPreRelease('rc.2'); // v1.2.3 -> v1.2.3-rc.2
$version->setBuild('007'); // v1.2.3 -> v1.2.3+007

Clear pre-release / build values

$version->setPreRelease(null); // v1.2.3-rc.2 -> v1.2.3
$version->setBuild(null); // v1.2.3+007 -> v1.2.3

Check for pre-release / build values

$version->isPreRelease();
$version->hasBuild();

Compare two SemVer objects

$version1 = new SemVer\Version('v1.2.3');
$version2 = new SemVer\Version('v3.2.1');

$version1->gt($version2); // false
$version1->lt($version2); // true
$version1->eq($version2); // false
$version1->neq($version2); // true
$version1->gte($version2); // false
$version1->lte($version2); // true
Limit comparison to the major version only

Ignores the minor, patch and pre-release versions completely

$version1 = new SemVer\Version('v1.2.3-alpha.4');
$version2 = new SemVer\Version('v1.3.4-alpha.5');

$version1->gt($version2, Compare::MAJOR); // false
$version1->lt($version2, Compare::MAJOR); // false
$version1->eq($version2, Compare::MAJOR); // true
$version1->neq($version2, Compare::MAJOR); // false
$version1->gte($version2, Compare::MAJOR); // true
$version1->lte($version2, Compare::MAJOR); // true
Limit comparison to the major and minor versions only

Ignores the patch and pre-release versions completely

$version1 = new SemVer\Version('v1.2.3-alpha.4');
$version2 = new SemVer\Version('v1.2.4-alpha.5');

$version1->gt($version2, Compare::MINOR); // false
$version1->lt($version2, Compare::MINOR); // false
$version1->eq($version2, Compare::MINOR); // true
$version1->neq($version2, Compare::MINOR); // false
$version1->gte($version2, Compare::MINOR); // true
$version1->lte($version2, Compare::MINOR); // true
Limit comparison to the major, minor and patch versions only

Ignores the pre-release version completely

$version1 = new SemVer\Version('v1.2.3-alpha.4');
$version2 = new SemVer\Version('v1.2.3-alpha.5');

$version1->gt($version2, Compare::PATCH); // false
$version1->lt($version2, Compare::PATCH); // false
$version1->eq($version2, Compare::PATCH); // true
$version1->neq($version2, Compare::PATCH); // false
$version1->gte($version2, Compare::PATCH); // true
$version1->lte($version2, Compare::PATCH); // true

Troubleshooting

For general help and support join our GitHub Discussions or reach out on Bluesky.

Please report bugs to the GitHub Issue Tracker.

Copyright

This project is liscensed under the MIT License.