Tool 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 tool and 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.
Backendsv0.47.0
A backend is an internal system that allows proto to use plugins from 3rd-party package/version managers within proto, greatly expanding the amount of tools that proto can install and support. This functionality is achieved through special WASM plugins under the hood.
To make use of a backend, prefix the version in .prototools
with the backend's unique identifier.
For example, we can install Zig via asdf.
zig = "asdf:0.13.0"
The approach above only utilizes the backend for that specific version. If you want to utilize the
backend for all versions (without using the version prefix), you can use the
tools.*.backend
setting.
zig = "0.13.0"
[tools.zig]
backend = "asdf"
asdf
The asdf
backend will utilize the asdf version manager for downloading and
installing a tool, loading versions, and locating executables. This backend implementation does
not use the asdf
binary itself, and instead emulates the environment as best we can. Because of
this, some tools may not be usable through proto.
The
latest-stable
,exec-env
,exec-path
,post-*
,pre-*
, andhelp.*
asdf scripts are currently not supported by this backend.
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.
tool = "1.2.3"
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