Skip to content

Paket Versioning

Identifier

paket

References

Ranges/Constraints

✅ Ranges are supported.

Valid rangeStrategy values are: bump, widen, replace, update-lockfile, pin

Description

Paket versioning implements the version constraint syntax of the paket.dependencies file.

Paket versions are NuGet versions, so version parsing and comparison match the nuget versioning module. But the range syntax differs from NuGet ranges and the two conflict where they overlap: a plain version like 1.2.3 is an exact pin in Paket, while NuGet range syntax treats it as "at least 1.2.3". This is why Paket needs its own versioning module.

The following constraints are supported:

Constraint Meaning
1.2.3 or = 1.2.3 exactly version 1.2.3
== 1.2.3 exactly version 1.2.3, overriding conflicts
>= 1.2.3 at least version 1.2.3
> 1.2.3 greater than version 1.2.3
<= 1.2.3 at most version 1.2.3
< 1.2.3 less than version 1.2.3
~> 1.2.3 pessimistic constraint, >= 1.2.3 and < 1.3
>= 1.2.3 < 1.5 combined bounds
~> 1.2 >= 1.2.3 pessimistic constraint with a floor

Prerelease channels may follow the constraint, like >= 1.2.3 alpha or ~> 1.2 prerelease. Stable versions always match, while prerelease versions only match when their channel is listed, or when the prerelease keyword allows all of them. A constraint written with a prerelease version, like ~> 1.2.3-alpha001, allows its own channel implicitly. Following Paket, the literal prerelease suffix sorts below any other prerelease of the same version, so 1.2.3-prerelease acts as a floor under all prereleases of 1.2.3.

The resolver strategy prefixes ! and @, like !~> 1.2, do not change which versions match and are preserved when Renovate updates a range.

When Renovate replaces a range, it keeps the shape of the constraint:

  • exact pins stay exact pins, and == keeps its operator
  • ~> 1.2 becomes ~> 2.0 at the same precision
  • upper bounds move up just far enough, so >= 1.2.3 < 2.0 becomes >= 1.2.3 < 2.2 for version 2.1.4
  • a ~> 1.2 >= 1.2.3 pair follows the new version as a pair, dropping a floor that becomes redundant
  • if the new version is a prerelease which the rewritten range would block, its channel is appended, like >= 1.2 beta

The bump strategy raises the floor to the exact new version where the syntax allows it, for example ~> 1.2 becomes ~> 1.2 >= 1.2.5. The widen strategy keeps the lower bound and only extends the upper bound, decomposing ~> 1.2 into >= 1.2 < 3 when needed.