semver ~master

Semantic Versioning Library


To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:

semver

Semantic Versioning and Minimal Version Selection Library

Implementation

This library parses, validates and compares version numbers and version ranges, and resolves dependency graphs using Minimal Version Selection.

It uses the following formats:

  • Semantic Versioning 2.0.0 - http://semver.org
  • Semantic Versioning Range - https://github.com/isaacs/node-semver
  • Minimal Version Selection - https://research.swtch.com/vgo-mvs

Usage

import semver;
import mvs;

auto version1 = SemVer("1.0.0");
assert(version1.isValid);
assert(version1.isStable);

auto version2 = SemVer("1.0.0-rc.1");
assert(version2.isValid);
assert(!version2.isStable);

auto version3 = SemVer("1.2.3-rc.42");
assert(version3.major == 1);
assert(version3.minor == 2);
assert(version3.patch == 3);

assert(SemVer("1.0.0") > SemVer("1.0.0+build.1"));
assert(SemVer("1.0.0").differAt(SemVer("1.0.0+build.1")) == VersionPart.BUILD);

auto versionRange = SemVerRange(">=1.0.0");
assert(versionRange.isValid);

assert(SemVer("1.0.1").satisfies(versionRange));
assert(SemVer("1.1.0").satisfies(versionRange));

auto semVers = [SemVer("1.1.0"), SemVer("1.0.0"), SemVer("0.8.0")];
assert(semVers.maxSatisfying(SemVerRange("<=1.0.0")) == SemVer("1.0.0"));
assert(semVers.maxSatisfying(SemVerRange(">=1.0")) == SemVer("1.1.0"));
assert(semVers.minSatisfying(SemVerRange(">=1.0")) == SemVer("1.0.0"));
assert(semVers.minSatisfying(SemVerRange("<=0.8.0")) == SemVer("0.8.0"));

semVers = [SemVer("1.0.0+build.3"), SemVer("1.0.0+build.1"), SemVer("1.1.0")];
assert(semVers.maxSatisfying(SemVerRange("<=1.0.0")) == SemVer("1.0.0+build.3"));
assert(semVers.maxSatisfying(SemVerRange(">=1.0")) == SemVer("1.1.0"));

auto roots = [
    "A": SemVerRange(">=1.0.0"),
    "C": SemVerRange(">=1.2.0"),
];

auto available = [
    "A": [SemVer("1.0.0"), SemVer("1.1.0"), SemVer("2.0.0")],
    "B": [SemVer("1.0.0"), SemVer("1.1.0"), SemVer("2.0.0")],
    "C": [SemVer("1.0.0"), SemVer("1.2.0")],
];

auto dependencies = [
    ModuleVersion("A", SemVer("1.0.0")): ["B": SemVerRange(">=1.0.0")],
    ModuleVersion("A", SemVer("1.1.0")): ["B": SemVerRange(">=1.1.0")],
    ModuleVersion("A", SemVer("2.0.0")): ["B": SemVerRange(">=2.0.0")],
    ModuleVersion("B", SemVer("1.0.0")): ["C": SemVerRange(">=1.0.0")],
    ModuleVersion("B", SemVer("1.1.0")): ["C": SemVerRange(">=1.2.0")],
    ModuleVersion("B", SemVer("2.0.0")): ["C": SemVerRange(">=1.2.0")],
];

auto selected = minimalVersionSelection(roots, available, dependencies);
assert(selected["A"] == SemVer("1.0.0"));
assert(selected["B"] == SemVer("1.0.0"));
assert(selected["C"] == SemVer("1.2.0"));
Authors:
  • Dragoş Carp
Dependencies:
none
Versions:
0.8.0 2026-Mar-24
0.7.1 2026-Mar-01
0.7.0 2026-Feb-28
0.6.0 2025-Sep-21
0.5.0 2023-Mar-30
Show all 19 versions
Download Stats:
  • 151 downloads today

  • 384 downloads this week

  • 1523 downloads this month

  • 33295 downloads total

Score:
3.8
Short URL:
semver.dub.pm