Versioning
Every release carries a version in Package.Version. Rux uses strict
Semantic Versioning 2.0.0, without a leading v.
[Package]
Version = "1.2.3"
What the numbers mean
MAJOR.MINOR.PATCH, incremented by the kind of change you made:
| Part | Increment when |
|---|---|
MAJOR | You made an incompatible change to your public API |
MINOR | You added functionality that existing code keeps working with |
PATCH | You fixed something without changing the API |
Below 1.0.0 the leading zero absorbs the meaning: a 0.x release may break compatibility on a minor
bump, which is why ^0.2.3 only allows <0.3.0. See
version requirements.
Prereleases
A prerelease suffix marks a version as not yet ready:
Version = "2.0.0-alpha.1"
Prereleases sort before their release — 2.0.0-alpha.1 precedes 2.0.0 — and are never selected by
an ordinary requirement. A resolver picks one only when a comparator names the same
major.minor.patch and carries a prerelease of its own, so ^1.0.0 will never quietly upgrade you to
2.0.0-beta.1.
Build metadata
A + suffix carries build metadata:
Version = "1.0.0+linux"
Metadata is ignored when ordering versions but is part of publication identity. 1.0.0+linux
and 1.0.0+windows are two distinct releases that compare as equal for requirement matching. Most
packages never need this; reach for it only when one logical version genuinely ships as several
artifacts.
Immutability
A published version can never be replaced. Publishing a version that already exists is rejected:
error: version 1.0.0 of Acme/Widget is already published; published versions are
immutable, so publish a new version
Immutability is what makes a build reproducible: a dependency resolved today resolves to the same bytes next year. It also means a mistake ships. If you published something broken, publish a fixed patch release and yank the bad one — there is no way to overwrite or delete it.
Because build metadata is part of identity, 1.0.0+fix counts as a different version from 1.0.0 and
will be accepted. Do not use that as a substitute for a patch bump: resolvers treat the two as equal
precedence, so which one a build selects is not something you control.
Choosing MinRux
Manifest.MinRux is the oldest compiler release that can build your package, and it is required to
publish. Set it to the earliest version you have actually tested against, not to whatever you happen to
have installed — a compiler older than the declared minimum refuses to build the package at all.
Raising MinRux in a new release is a compatibility change for anyone on an older toolchain, so treat
it like any other breaking change when choosing the version number.
Publishing
Publishing uploads a package release to the registry, where anyone can depend on it. A published version is permanent.
Table of Contents
Reference documentation for the Rux packages — the cross-platform Format, Io, Math, Memory, Std, and Text, and the platform-dependent bindings for BSD, illumos, Linux, macOS, and Windows.