Skip to content

vcpkg Versioning

Identifier

vcpkg

References

Ranges/Constraints

❌ No range support.

Description

Renovate vcpkg versioning targets the per-port version schemes used by the vcpkg package manager.

A vcpkg port declares one of four version fields, each with its own comparison rules:

  • version is a relaxed dotted-number scheme that allows extra components, like 3.1.4 or 1.2.3.4
  • version-semver is strict Semantic Versioning, like 3.1.4-rc.1
  • version-date is an ISO calendar date in YYYY-MM-DD form, optionally followed by dot-separated disambiguation identifiers like 2024-01-15.1.2
  • version-string is opaque text without a defined ordering, like bla-bla-2024-08-fixed-typo

Renovate detects which scheme applies by inspecting the input, then delegates to the matching underlying versioning module (semver, loose, or a direct date comparison). vcpkg itself takes the scheme from the field a version is published under, not from its text, so the two can disagree. A port that publishes dotted text under version-string, like 2.3.1, is treated as a version here and ordered against the port's other dotted versions, which vcpkg would refuse to compare.

A vcpkg port can also carry a port-version integer for changes that affect packaging without changing the upstream source. The canonical text form combines the base version and port-version with a # separator, like 1.2.3#1, and the port-version is omitted when zero. Renovate treats the port-version as a tie-breaker after the base versions compare equal, so 1.2.3#1 is greater than 1.2.3#0, while 1.2.4 is still greater than 1.2.3#1 because the base version wins.

vcpkg has no range expression syntax. Manifest dependencies carry a single version>= lower bound, and overrides carry an exact pin. In both cases the value is a bare version, with no operator, so Renovate compares values for equality like other versioning modules without ranges.