Getting Started
SemVer is a complete implementation of Semantic Versioning 2.0.0 for PHP, providing parsing, comparison, constraints, and version operations with full Laravel integration.
Requirements
Section titled “Requirements”Requires PHP 8.4+
Installation
Section titled “Installation”composer require cline/semverThe package auto-registers with Laravel via package discovery.
Quick Example
Section titled “Quick Example”use Cline\SemVer\Version;use Cline\SemVer\Constraint;
// Parse a version string$version = Version::parse('2.1.0-beta.1+build.456');
echo $version->major; // 2echo $version->minor; // 1echo $version->patch; // 0echo $version->preRelease; // beta.1echo $version->build; // build.456
// Check constraints$constraint = Constraint::parse('^2.0.0');$constraint->isSatisfiedBy($version); // true
// Compare versions$v1 = Version::parse('1.0.0');$v2 = Version::parse('2.0.0');$v1->lessThan($v2); // trueLaravel Facade
Section titled “Laravel Facade”use Cline\SemVer\Facades\SemVer;
// Parse and validate$version = SemVer::parse('1.2.3');$isValid = SemVer::valid('1.2.3'); // true
// Compare versionsSemVer::gt('2.0.0', '1.0.0'); // trueSemVer::lt('1.0.0', '2.0.0'); // trueSemVer::eq('1.0.0', '1.0.0'); // true
// Check constraintsSemVer::satisfies('1.5.0', '^1.0.0'); // true
// Increment versions$next = SemVer::incMajor('1.2.3'); // 2.0.0$next = SemVer::incMinor('1.2.3'); // 1.3.0$next = SemVer::incPatch('1.2.3'); // 1.2.4Core Classes
Section titled “Core Classes”| Class | Purpose |
|---|---|
Version | Immutable version representation with parsing and comparison |
Constraint | Version constraint matching (^, ~, ranges, wildcards) |
VersionCollection | Collection with filtering and sorting |
PreRelease | Pre-release identifier handling |
Build | Build metadata handling |
SemVerManager | Unified API for all operations |
SemVer 2.0.0 Compliance
Section titled “SemVer 2.0.0 Compliance”This package fully implements the SemVer 2.0.0 specification:
- Version Format:
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD] - Pre-release Precedence: Numeric identifiers compare numerically; alphanumeric compare lexically
- Build Metadata: Ignored in version precedence comparisons
- Leading Zeros: Not allowed in numeric version components
Next Steps
Section titled “Next Steps”- Version Operations - Parsing, comparison, and manipulation
- Constraints - Tilde, caret, ranges, and wildcards
- Collections - Filtering and sorting version lists
- Laravel Integration - Facade, casting, and service container