Version specification
Since proto is a toolchain for multiple tools, each with differing version formats, we must align them on a standard specification that can resolve and store safely. To handle this, we've implemented our own solution called the version specification. This specification currently supports semantic and calendar based versions, each with their own guidelines and caveats.
If you're implementing a plugin for a specific tool that has a different version format, you'll need to re-format it into one of the specifications below.
Semantic versions
The most common format is semver, also known as a semantic version. This format requires major, minor, and patch numbers, with optional pre-release and build metadata. The following formats are allowed:
Syntax
<major>.<minor>.<patch>
- 1.2.3<major>.<minor>.<patch>-<pre>
- 1.2.3-alpha.0<major>.<minor>.<patch>-<pre>+<build>
- 1.2.3-alpha.0+nightly456<major>.<minor>.<patch>+<build>
- 1.2.3+nightly456
Guidelines
- major, minor, patch -
0-9
of any length - pre, build -
a-z
,0-9
,-
,.
Calendar versionsv0.37.0
Another popular format is calver, also known as a calendar version, which uses the calendar year, month, and day as version numbers. This format also supports pre-release and build metadata, but with different syntax than semver. The following formats are allowed:
Syntax
<year>-<month>
- 2024-02<year>-<month>-<day>
- 2024-02-26<year>-<month>-<day>.<build>
- 2024-02-26.123<year>-<month>-<day>_<build>
- 2024-02-26_123<year>-<month>-<day>.<build>-<pre>
- 2024-02-26.123-alpha.0<year>-<month>-<day>_<build>-<pre>
- 2024-02-26_123-alpha.0<year>-<month>-<day>-<pre>
- 2024-02-26-alpha.0
Guidelines
- year -
0-9
of 1-4 length- If the year is not YYYY format, it will use the year 2000 as the base. For example,
24
becomes2024
, and124
becomes2124
.
- If the year is not YYYY format, it will use the year 2000 as the base. For example,
- month -
0-9
of 1-2 length- Supports with and without a leading zero (
02
vs2
). - Does not support invalid months (
0
or13
).
- Supports with and without a leading zero (
- day -
0-9
of 1-2 length- Can be omitted, even with build/pre.
- Supports with and without a leading zero (
02
vs2
). - Does not support invalid days (
0
or32
).
- build -
0-9
of any length- Also known as a "micro" number.
- The leading dot
.
format is preferred.
- pre -
a-z
,0-9
,-
,.
Requirements and ranges
Besides an explicit version, we also support partial versions known as version requirements or version ranges. These are quite complex as we need to support both semver and calver in unison, as well as support partial/incomplete numbers (missing patch/day, missing minor/month, etc). We do our best to support as many combinations as possible, but we suggest aligning with the following formats:
Syntax
- Requirement -
[<op>]<pattern>
-1.2.3
,>4.5
,~3
,^2000-10
, etc - AND range -
<requirement>[,] <requirement> ...
->=1, <2
,^1.3 <=1.3.9
, etc - OR range -
<requirement> || <requirement> ...
-^1.2 || ^2.3
,~2000-10 || ~2010-2
, etc
Guidelines
- op -
=
,>
,>=
,<=
,<
,~
,^
- If omitted, defaults to
~
when not in a range.
- If omitted, defaults to
- pattern
- Dot-separated semver, with optional major and patch numbers.
- Dash-separated calver, with optional month and day numbers.
- Pre-release and build metadata are only supported when suffixed to full versions.