- Fixed an issue where the globals directory may not exist for the
pre_run
hook. - Fixed invalid Nushell syntax generated from
proto activate
.
- Fixed invalid PowerShell syntax generated from
proto activate
.
- Added a system that allows plugins to require other plugins to be installed, before they will install.
- Added an
--on-init
option toproto activate
, which will trigger the activation hook immediately in the shell, instead of waiting for a directory/prompt change to occur.- If you were manually executing
_proto_hook
before, this will now fail. Please remove!
- If you were manually executing
- Added support for loading
.env
files through the specialenv.file
andtools.*.env.file
settings.[env] file = ".env"
- Added support for
~/.netrc
configuration to all HTTP requests. - Improved implementation of HTTP request/response caching. Now takes into account HTTP cache semantics.
- Updated
proto install
to multi-install tools in topological order. - Updated
proto upgrade
to error if there's another process of proto currently running. - Updated
proto setup
to default to a fallback shell if none could be detected, instead of erroring. - WASM API
- Added
ToolMetadataOutput.requires
, allowing the plugin to require other plugins. For example, npm requires node.
- Added
- Fixed the order of shell profiles/configs when applicable.
- Updated
proto setup
to inheritPROTO_HOME
if already set, instead of defaulting to$HOME/.proto
.
- Updated
node_depman_tool
to v0.14.1.- Added
node
as a required plugin.
- Added
- Updated
python_tool
to v0.12.1.- Fixed an issue where our bin linking would point to an invalid executable path.
- Updated
schema_tool
to v0.16.2.- Added
metadata.requires
, for defining plugin requirements.
- Added
- Updated identifiers, versions, and locators to use compact strings.
- Updated wasmtime to v26 (from v23).
- Updated Rust to v1.83.
- When adding or viewing a plugin, we now display any deprecation messages from the plugin to the user.
- WASM API
- Added
ToolMetadataOutput.deprecations
.
- Added
- Updated
schema_tool
to v0.16.1.- Brought back
platform.*.bin-path
to support legacy plugin configs.
- Brought back
- When installing many tools with
proto install|use
, a failed install for a single tool will no longer abort the install of the other tools. - Added more logging to debug the "File exists (os error 17)" issue.
- Fixed the wrong
proto_version
being passed to WASM function calls. - When usign the Bash shell, will avoid using
.bash_profile
unless it explicitly exists. This is to support Ubuntu.profile
setups.
- Each tool's primary executable file name is no longer based on the plugin's identifier, and is now based on what's configured in the new
LocateExecutablesOutput.exes
setting. - We've reworked how the
~/.proto/bin
directory works. Instead of only symlinking globally pinned versions (from~/.proto/.prototools
), we now create a symlink for every tool executable, and every major + minor version installed within that tool. For example, when we installnode
, we may have the following:~/.proto/bin/node
- Points to the highest installed version.~/.proto/bin/node-<major>
- Points to the highest version within that major range (~major
). Is created for each separate major version, for example:node-20
,node-22
.~/.proto/bin/node-<major>.<minor>
- Points to the highest version within that major + minor range (~major.minor
). Is created for each separate major + minor version, for example:node-20.1
,node-22.4
.~/.proto/bin/node-canary
- Points to a canary install, if it exists.
- WASM API
- Deprecated
LocateExecutablesOutput.primary
andLocateExecutablesOutput.secondary
(useexes
instead). - Updated
ToolMetadataOutput.plugin_version
to aVersion
type instead ofString
.
- Deprecated
- Added support for JSON and YAML based configurations for non-WASM schema based plugins. This is an alternative to TOML, but supports all the same settings.
- We now cache all text-based HTTP requests made from WASM plugins for 12 hours. This should greatly reduce the overhead cost of making requests, and will help for situations where an internet connection is lost.
- WASM API
- Added
ExecutableConfig.primary
. - Added
LocateExecutablesOutput.exes
. - Added
ToolMetadataOutput.minimum_proto_version
. - Added
ParseVersionFileInput.path
.
- Added
- Fixed an issue where
proto upgrade
would pinproto
to~/.proto/.prototools
.
- Updated
bun_tool
to v0.14. - Updated
deno_tool
to v0.13. - Updated
go_tool
to v0.14. - Updated
node_tool
to v0.13. - Updated
node_depman_tool
to v0.14.- Added support for
volta.extends
: https://docs.volta.sh/advanced/workspaces - Updated
volta
to take precedence overengines
inpackage.json
.
- Added support for
- Updated
python_tool
to v0.12.- Removed
python<major>
andpip<major>
executables. Use the new bins feature instead. - Added
~/.local/bin
as a globals lookup directory.
- Removed
- Updated
rust_tool
to v0.12. - Updated
schema_tool
to v0.16.- Removed
platform.*.bin-path
support (useexe-path
instead). - Deprecated
install.primary
andinstall.secondary
. - Added
install.exes
for defining primary and secondary executables.
- Removed
- Updated Rust to v1.82.
- Fixed an issue where command lookup within
PATH
may return an invalid result.
- Added more internal logging when executing commands or making requests.
- Updated
PROTO_DEBUG_COMMAND
environment variable to support streaming the output of a running command to the terminal if set to "stream".
- Added a
--log verbose
level, which includes span information on top of the trace level.
- Fixed an issue where
--dump
can be interrupted.
- Added support for bz2 archives.
- Updated
schema_tool
(TOML) to v0.15.1.- Added
{versionMajor}
,{versionMajorMinor}
,{versionYear}
,{versionYearMonth}
,{versionPrerelease}
, and{versionBuild}
tokens.
- Added
- Updated dependencies.
- Attempted fix for a panic that occurs when unlocking a directory on Windows Server.
- Added a
--force
option toproto install
that can force a reinstall of an existing tool.
- Fixed an issue where
canary
versions could not be ran as they would always be reported as not installed.
- Updated
node_tool
to v0.12.2.- Fixed "bundled" npm overwriting the pinned npm version.
- Updated
node_depman_tool
to v0.13.1.- Updated shared globals injection to work for all npm commands and not just add/remove.
- Updated dependencies.
- Updated
node_tool
to v0.12.1.- Fixed arm64 -> x64 compatibility not working correctly for versions < 16.
- Added support for updating the
~/.prototools
file (root of user home directory). - Added
--pin=user
toproto install
. - Added
--to=global|local|user
toproto alias
,pin
, andplugin add
. - Added
--from=global|local|user
toproto unalias
,unpin
, andplugin remove
. - Added aliases for pin locations.
cwd
->local
home
->user
store
->global
- Added new
settings.offline
settings that control how offline checks work. - Deprecated the
--global
flag.
- Updated Rust to v1.81.
- Updated WASM runtime.
- Re-released as previous deploy failed.
- Added a new
settings.http.secure-proxies
setting that always handleshttps
requests.
- Fixed an issue where partially downloaded files would trigger checksum failures.
- Fixed a regression where
all
no longer worked for--config-mode
.
- Improved Nushell generated syntax.
- Fixed
--help
not showing possible values for--config-mode
.
- Removed
--include-global
and--only-local
flags from all applicable commands. Use the new--config-mode
instead. - WASM API
- Removed the
ToolMetadataOutput.inventory.disable_progress_bars
field. - Removed the
is_musl
function. Use the host environment instead. - Migrated testing APIs to async instead of sync.
- Deprecated many functions.
- Removed the
- Added a new
--config-mode
(-c
) global option that controls how configuration are loaded.- Supports the following values:
global
- Only load~/.proto/.prototools
.local
- Only load./.prototools
in the current directory.upwards
(default) - Load.prototools
while traversing upwards, but do not load~/.proto/.prototools
.upwards-global
- Load.prototools
while traversing upwards, and do load~/.proto/.prototools
.
- When not provided, the default mode is dependent on the command being ran.
- For
activate
,install
,outdated
,status
->upwards
- Everything else ->
upwards-global
- For
- Supports the following values:
- Updated
proto install
to show detailed progress bars.- Includes downloaded bytes / total bytes stats.
- Displays the current phase of the install (download, unpack, etc).
- Displays multiple progress bars when installing many tools.
- Updated HTTP requests that occur from WASM to utilize the same HTTP client that proto does. This allows for the
[settings.http]
settings to be used, which weren't previously. - WASM API
- Added
ToolMetadataOutput.config_schema
, which can be used to define a JSON schema for the plugins configuration. - Added a new
send_request
host function, that uses the same HTTP client as proto does. - Added
fetch_bytes
,fetch_json
, andfetch_text
functions that use this new host function.
- Added
- Updated
bun_tool
to v0.13. - Updated
deno_tool
to v0.12. - Updated
go_tool
to v0.13. - Updated
node_tool
to v0.12. - Updated
node_depman_tool
to v0.13. - Updated
python_tool
to v0.11. - Updated
rust_tool
to v0.11. - Updated
schema_tool
to v0.15.
- We now provide a plugin for proto itself, so you can now do
proto install proto
. However, this doesn't link bins/shims and is primarily used internally for upgrade/install flows.
- We rewrote our self-upgrade to account for more edge cases and based its functionality on other implementations in the Rust ecosystem. It should be more reliable moving foward, but if you're on a broken version of proto that can't self-upgrade, reinstall proto entirely to pull the latest version.
- Fixed a "Failed to copy" or "Text file busy" error when self-upgrading proto.
- Fixed a potential race condition with the auto-clean that was triggering a file rename/move error.
- We've discovered a bug with the new "pin proto version" feature that will require non-trivial amount of work to resolve correctly. However, to resolve the bug at this time, the pinning functionality will now only work if you run
proto activate
in your shell.
- Improved performance slightly for
proto activate
. - Improved the logic around cleaning the
~/.proto/tools/proto
directory. - Updated the
auto-clean
setting to automatically run in more contexts.
- Fixed an issue where
proto activate --include-global
would not pass arguments down to its child processes.
- Added
--check
and--json
options toproto upgrade
. - Added an explicit version argument to upgrade/downgrade to for
proto upgrade
.
- Fixed an issue where
proto upgrade
may error with access denied when renaming binaries.
- Updated
node_tool
to v0.11.8.- Fixed macOS nightly detection.
- Updated
proto diagnose
to check the current proto version.
- Disabled the version check requests for
proto activate
.
- Updated
deno_tool
to v0.11.4.- Updated canary to find an applicable release based on the current os/arch combination.
- Updated
node_tool
to v0.11.7.- Updated canary to find an applicable release based on the current os/arch combination.
- Updated
proto activate
to setPROTO_HOME
if it is not defined in the current shell.
- Fixed a performance regression on
proto activate
. Should exit immediately now.
- Updated
proto activate
to not include tools without a configured version and to not include global tools found in~/.proto/.prototools
by default.- If you would like to include global tools, pass
--include-global
. - Do be aware that having a lot of global tools will cause considerable performance loss when activation is triggered.
- If you would like to include global tools, pass
- Added a new setting to
.prototools
,settings.builtin-plugins
, that can be used to disable all built-in plugins, or only allow a few select plugins.- Supports a boolean or list of plugin names.
- All are enabled by default for backwards compatibility.
- Added
PROTO_NO_MODIFY_PROFILE
andPROTO_NO_MODIFY_PATH
environment variables toproto setup
(for automated workflows). - Updated
proto status
to display and include versions from ecosystem files (.nvmrc
, etc). - Updated
github://
plugin locators to support monorepos. Append the project name (that tags are prefixed with) to the path:github://moonrepo/tools/node_tool
- Merged
proto use
andproto install
commands. If no arguments are provided toproto install
, it will install all configured tools. - You can now pin a version of proto itself within
.prototools
, and proto shims will attempt to run proto using that configured version, instead of the global version.proto = "0.38.0"
- Updated
go_tool
to v0.12.- Changed the
gobin
setting tofalse
by default.
- Changed the
- Updated
node_depman_tool
to v0.12.- Added a
dist-url
config setting, allowing the download host to be customized.
- Added a
- Updated Rust to v1.80.
- Attempted fix for some certificate issues when making requests.
- Updated
go_plugin
to v0.11.4.- Fixed
go.mod
/go.work
version detection/parsing on Windows.
- Fixed
- Updated
node_depman_plugin
to v0.11.6.- Fixed the shared globals directory not resolving correctly.
- Improved our logic around "update shell profile if not already setup".
- Fixed powershell syntax when joining paths and environment variables.
- Support
.x
when parsing versions. Will be treated as*
.
- Fixed and removed some "unreachable" branches when parsing versions.
- While not a direct breaking change, we've added escaping/quoting logic to shell injected values, which was required for the new activation workflow. Please report an issue on GitHub or Discord if the value we injected has incorrect syntax!
- Added an experimental command called
proto activate
that can be ran within your shell profile to "activate the proto environment", by setting necessary environment variables and paths when changing directories.- Globally installed packages will now be available automatically. This wasn't possible through shims alone.
- Binaries that come pre-installed with a tool (and are not shims) will also be available automatically.
- Added support for murex shells.
- Added a
--include-global
flag toproto use
, that will also install globally configured tools. - WASM API
- Added
LocateExecutablesOutput.exes_dir
field.
- Added
- Updated
node_plugin
andnode_depman_plugin
to v0.11.4. - Updated
python_plugin
to v0.10.4. - Updated
rust_plugin
to v0.10.5.- Respect
CARGO_HOME
during rustup installation.
- Respect
- Updated
schema_plugin
(TOML) to v0.14.0.- Added
platform.*.exes_dir
. - Renamed
platform.*.bin_path
toexe_path
.
- Added
- Fixed
proto upgrade
not working correctly when the release is in progress, or not available yet.
- Updated
bun_plugin
to v0.12.2. - Updated
deno_plugin
to v0.11.2. - Updated
go_plugin
to v0.11.2. - Updated
node_plugin
andnode_depman_plugin
to v0.11.3. - Updated
python_plugin
to v0.10.2. - Updated
rust_plugin
to v0.10.3.- Updated
RUSTUP_HOME
to support relative paths.
- Updated
- Updated
schema_plugin
(TOML) to v0.13.1.- Updated
resolve.aliases
to support ranges, requirements, and aliases. - Updated
resolve.version-pattern
andresolve.git-tag-pattern
to support year/month/day regex group names (for calver support).
- Updated
- Updated
node_plugin
andnode_depman_plugin
to v0.11.2.- Fixed yarn "2.4.3" not resolving or downloading correctly.
- Updated
python_plugin
to v0.10.2.- Will now create a pip shim that includes the major version, for example,
pip3
.
- Will now create a pip shim that includes the major version, for example,
- WASM API
- Changed
SyncManifestOutput
versions
field to theVersionSpec
type instead ofVersion
. - Changed
LoadVersionsOutput
canary
,latest
, andaliases
fields to theUnresolvedVersionSpec
type instead ofVersion
. - Changed
LoadVersionsOutput
versions
fields to theVersionSpec
type instead ofVersion
. - Renamed
VersionSpec::Version
toVersionSpec::Semantic
. The innerVersion
must also be wrapped in aSemVer
type.
- Changed
- Added experimental support for the calver (calendar versioning) specification. For example: 2024-04, 2024-06-10, etc.
- There are some caveats to this approach. Please refer to the documentation.
- This should be backwards compatible with existing WASM plugins and tools, but in the off chance it is not, please pull in the new PDKs and publish a new release, or create an issue.
- Added a new command,
proto diagnose
, that can be used to diagnose any issues with your current proto installation.- Currently diagnoses proto itself, but in the future will also diagnose currently installed tools.
- WASM API
- Added
VersionSpec::Calendar
andUnresolvedVersionSpec::Calendar
variant types.
- Added
- Improved command execution. May see some slight performance gains.
- Updated wasmtime to v21 (from v17).
- Updated Rust to v1.79.
- Added Nushell support to
proto completions
.
- Improved logic to detect the
proto-shim
binary when proto is installed in non-standard locations.
- Added a
proto plugin search
command that can be used to search for community created plugins. - Added a
proto unpin
command, for removing a pinned version from a.prototools
file. - Updated
proto uninstall
to also remove entries from.prototools
if the version was uninstalled. - Updated plugin locator strings to use common protocol syntax. The custom
source:
syntax is deprecated.source:./file.wasm
->file://./file.wasm
source:https://url.com/file.wasm
->https://url.com/file.wasm
github:org/repo
->github://org/repo
- Updated some error messages to include copy for work arounds.
- Fixed invalid
PATH
syntax for Elvish shell.
- Updated
bun_plugin
to v0.12.1. - Updated
deno_plugin
to v0.11.1. - Updated
go_plugin
to v0.11.1. - Updated
node_plugin
andnode_depman_plugin
to v0.11.1. - Updated
python_plugin
to v0.10.1. - Updated
rust_plugin
to v0.10.1. - Updated
schema_plugin
(TOML) to v0.13.0.- Added
resolve.aliases
andresolve.versions
settings, allowing an explicit list of aliases and versions to be defined.
- Added
- We now lock the bin/shims directory when creating/removing files.
- This is an experiment to help avoid race conditions where multiple proto processes are all trying to write to the same location.
- If this results in too large of a performance hit, we'll remove the locking.
- Reworked how serde defaults are applied for input/output plugin function types.
- Fixed version parsing when ranges included a leading
v
, for example>=v18.0.0
.
- Fixed some scenarios where the shims were unnecessarily being created.
- Attempted fix for the "inventory directory has been overridden" error (primarily happens with the Rust plugin).
- Added a
PROTO_DEBUG_SHIM
environment variable, which will output some debug information for the shim executable. This will help uncover issues with the shim itself.
- Updated
go_plugin
to v0.11.1.- Added
gofmt
as a secondary shim/binary. - Updated
go.mod
version parsing to use better ranges.
- Added
- Added experimental support for the following shells: ion, nu, xonsh.
- Added a global
--dump
flag, that will dump a trace profile that can be inspected inchrome://tracing
.- Is not supported for
proto run
or when running a tool shim.
- Is not supported for
- Updated
proto setup
to prompt the user to select a shell if one could not be detected.
- Updated
bun_plugin
to v0.12.0. - Updated
deno_plugin
to v0.11.0. - Updated
go_plugin
to v0.11.0. - Updated
node_plugin
andnode_depman_plugin
to v0.11.0. - Updated
python_plugin
to v0.10.0. - Updated
rust_plugin
to v0.10.0. - Updated
schema_plugin
(TOML) to v0.12.
- Updated Rust to v1.78.
- Started on "build from source" APIs.
- Added
.zshenv
as a valid shell profile option.
- Fixed
proto outdated --update
erasing other content in the file.
- Fixed some edge cases around version resolving.
- Another attempted fix for
proto outdated
latest checks.
- Added a lot of trace logs around version resolving.
- Fixed an issue where global versions would overwrite local versions in
proto status
andproto outdated
. - Fixed an issue where the "latest" alias would sometimes not be resolved.
- Updated
node_plugin
andnode_depman_plugin
to v0.10.3.- Fixed yarn "latest" alias pointing to the v1 latest, instead of v4 (berry) latest.
- Updated
proto install --pin
to pin to the local.prototools
by default, instead of the global~/.proto/.prototools
. This now aligns with the other pinning commands and args.
- Added a new option for the
detect-strategy
setting,only-prototools
, that only reads versions from.prototools
, and not tool related files. - Added a new command,
proto status
, that shows the status of active tools.- An active tool is one that has been configured in
.prototools
. - Includes the resolved version, install path, configured path, and more.
- An active tool is one that has been configured in
- Updated
proto outdated
with a better developer experience.- Displays all tools and available updates as a table of data.
- Includes newest (matching range) and latest versions available.
- Includes the config file that the tool + version was loaded from.
- When
--update
is passed, will now prompt to confirm the update. - When updating versions, versions are now written to their original config file, instead of local.
- Updated the
--latest
flag to use the latest version when updating, instead of newest.
- Updated
proto setup
(which is ran during proto installation) to modify thePATH
system environment variable on Windows. To disable this functionality, pass--no-modify-path
.
- Added a
dist-url
setting, allowing the distribution download URL to be customized, for the following plugins:- bun, deno, go, node
- Updated
bun_plugin
to v0.11.1. - Updated
deno_plugin
to v0.10.2. - Updated
go_plugin
to v0.10.2. - Updated
node_plugin
andnode_depman_plugin
to v0.10.2.
- Fixed
proto clean
accidentally deleting older proto version shims.
This version failed to build correctly, so had to bump another minor.
- Updated
bun_plugin
to v0.11.0.- Added Windows support.
- Will now use the baseline build on x64 Linux when available.
- Fixed an issue where the version suffix was being stripped from non-version folders in the tool directory. Primarily affects Rust.
- Updated Rust to v1.77.
- Removed the
PROTO_INSTALL_DIR
environment variable, usePROTO_HOME
instead. - Removed the deprecated
/workspace
virtual path prefix, use/cwd
instead. - Rewrote the
proto_pdk_test_utils
crate from the ground up to be easier to use.
- Cleaned up command stdout and stderr messaging.
- Updated some commands to exit with a non-zero code when data or requirements are missing.
- Implemented a new store structure/layout system for better reliability.
- Updated
bun_plugin
to v0.10.1. - Updated
deno_plugin
to v0.10.1. - Updated
go_plugin
to v0.10.1. - Updated
node_plugin
andnode_depman_plugin
to v0.10.1. - Updated
python_plugin
to v0.9.- Will now create a secondary executable that includes the major version in the file name, for example,
python3
.
- Will now create a secondary executable that includes the major version in the file name, for example,
- Updated
rust_plugin
to v0.9.1. - Updated
schema_plugin
(TOML) to v0.11.- Added
install.primary
andinstall.secondary
settings, for advanced configuring executables. - Updated
platform.*.bin-path
to support interpolation.
- Added
- Updated dependencies.
- Fixed an issue where incorrect newlines were being written to PowerShell profiles.
- Fixed
proto clean
andproto setup
hanging in CI or Docker waiting for input.
- Updated plugin IDs to support underscores.
- Fixed
.gz
wrapped files not being executable after being unpacked.
- Fixed non-tar associated
.gz
archives not being unpacked correctly. - Fixed musl checks failing on Alpine Linux.
- Updated
schema_plugin
(TOML) to v0.10.1.- Added an
install.libc
setting, to customize the libc wording used.
- Added an
- Fixed the globals directory not always being populated correctly. This is required for
shared-globals-dir
.
In preparation for an official v1 release, improved stability, and overall developer experience, we're renaming some commands, and removing the "global packages" functionality.
- Renamed the
proto tool
commands toproto plugin
. - Removed the
proto tool list-plugins
command, and merged its functionality intoproto plugin list
. - Removed the
proto install-global
,proto list-global
, andproto uninstall-global
commands. - Removed support for the old user config feature (
~/.proto/config.toml
) which was removed in v0.24. - Removed support for
aliases
anddefault_version
in the tool manifest, which was also removed in v0.24. - Removed the
proto migrate 0.20
andproto migrate 0.24
commands. - WASM API
- Removed
get_tool_id
andget_proto_environment
helper functions. - Removed
install_global
anduninstall_global
plugin functions. - Removed
InstallGlobalInput
,InstallGlobalOutput
,UninstallGlobalInput
,UninstallGlobalOutput
types.
- Removed
- Added a
--resolve
option toproto pin
, which will resolve the version to a valid value before pinning. - Added
--aliases
and--versions
options toproto plugin list
. - Added aliases to
proto plugin info
. - Updated
--pin
option inproto install
to support "local" and "global" values, allowing the config location to be customized.- When
--pin
is passed without a value, will default to "global" for backwards compatibility.
- When
- WASM API
- Updated the
pre_run
hook to return a result, allowing args/env vars to be injected into the running command.
- Updated the
- Fixed an issue where empty version strings were being parsed, causing failures.
- Updated
bun_plugin
to v0.10. - Updated
deno_plugin
to v0.10. - Updated
go_plugin
to v0.10. - Updated
node_plugin
andnode_depman_plugin
to v0.10.- Removed the
intercept-globals
config setting. - Added a new
shared-globals-dir
setting, which injects args/env vars into npm/pnpm/yarn commands when they attemp to install global packages.
- Removed the
- Updated
python_plugin
to v0.8. - Updated
rust_plugin
to v0.9. - Updated
schema_plugin
(TOML) to v0.10.- Removed
globals
andshims
settings. - Added a
platform.*.archs
setting, to limit what architectures are supported for that OS. - Added a
packages
setting for managing global packages. Supportsglobals_lookup_dirs
andglobals_prefix
sub-settings.
- Removed
- Updated
deno_plugin
to v0.9.1.- Added Linux ARM64 support (requires Deno >= v1.41).
- Updated dependencies.
- Updated
rust_plugin
to v0.8.1.- Uses the full triple target when installing and uninstalling toolchains.
- Updated
schema_plugin
(TOML) to v0.9.1.- Updated our regex to support Perl syntax like
\d
.
- Updated our regex to support Perl syntax like
- Updated Rust to v1.76.
- WASM API
- Updated
VirtualPath::real_path
to return anOption
if conversion fails.
- Updated
- Updated
proto setup
(which is ran during proto installation) to be interactive.- Will now prompt you to choose which shell profile to modify, or not at all.
- Improved the output messages based on the state of the install.
- Added
--no-profile
and--yes
arguments to control this.
- Attempted fix for PowerShell profile updates when using Windows 11 and OneDrive folders.
- Updated
node_plugin
andnode_depman_plugin
to v0.9.1.- Added version detection support for
volta
inpackage.json
.
- Added version detection support for
- Updated dependencies.
- Fixed virtual path conversion issues on Windows (mostly affected
rust-plugin
).
- WASM API
- Renamed
err!
macro toplugin_err!
. - Renamed
get_tool_id
toget_plugin_id
. - Renamed
get_proto_environment
toget_host_environment
. - Renamed
/workspace
virtual path to/cwd
. - Renamed
ExecCommandInput.env_vars
toenv
. - Removed
HostEnvironment.proto_dir
field. - Updated
plugin_err!
result to not be wrapped inErr
. - Updated
VirtualPath::join
to returnVirtualPath
instead ofPathBuf
.
- Renamed
- Added
env
andtools.*.env
settings to.prototools
to support environment variables.- Will automatically set variables when a tool is executed.
- Allows for directory-level and tool-specific variables.
- Added support for environment based config files, like
.prototools.production
.- Takes higher precedence than
.prototools
. - Can be enabled with the
PROTO_ENV
environment variable.
- Takes higher precedence than
- Updated
proto tool info
to display aliases and environment variables. - Updated WASM logs to be shown alongside proto's
--log
output (under theextism::pdk
namespace). - WASM API
- Added color support to error and host log messages through an HTML-like tag syntax.
- Added
real_path!(buf, ..)
andvirtual_path!(buf, ..)
macro variants for working withPath
andPathBuf
. - Added a
fetch_url_bytes
function. - Improved the implementation of many PDK macros.
- Updated
bun_plugin
to v0.9. - Updated
deno_plugin
to v0.9. - Updated
go_plugin
to v0.9. - Updated
node_plugin
andnode_depman_plugin
to v0.9.- Changed the
bundled-npm
andintercept-globals
settings to befalse
by default (instead oftrue
).
- Changed the
- Updated
python_plugin
to v0.7. - Updated
rust_plugin
to v0.8. - Updated
schema_plugin
(TOML) to v0.9.- Added
globals.bin
setting, for customizing the bin used for installs/uninstalls.
- Added
- Updates in preparation for the v0.29 release.
- WASM API
- Updated the
set_env_var
host function (andhost_env!
macro) to appendPATH
instead of overwriting it, and to also support virtual paths.
- Updated the
- Fixed
proto upgrade
moving the old binary to the wrong location.
- Updated
rust_plugin
to v0.7.1.
This release primarily upgrades our WASM runtime. For plugin authors, you'll need to update to the latest PDK and publish a new version. Old plugins are incompatible.
- WASM API
- Refactored the
HostLogInput
enum into a struct (this should be transparent if using thehost_log!
macro). - Removed support for old and deprecated APIs:
locate_bins
,create_shims
. - Removed
get_proto_user_config
andformat_bin_name
functions. - Updated
get_tool_id
to return aResult<String>
instead ofString
.
- Refactored the
- WASM test utils
- Removed
WasmTestWrapper::set_environment()
method. Usecreate_plugin_with_config
and pass a config object instead.
- Removed
// Before
let mut plugin = create_plugin("test-id", sandbox.path());
plugin.set_environment(HostEnvironment {
arch: HostArch::Arm64,
os: HostOS::Linux,
..Default::default()
});
// After
let plugin = create_plugin_with_config(
"test-id",
sandbox.path(),
HashMap::from_iter([map_config_environment(HostOS::Linux, HostArch::Arm64)]),
);
- Will now display an upgrade message when the current proto version is out of date.
- Improved error messages when a system command does not exist.
- Improved error messages to include the plugin identifier when applicable.
- Updated our "last used at" logic to avoid race conditions with the tool manifest.
- WASM API
- Added
from_virtual_path
andto_virtual_path
host functions. - Added
virtual_path!
andreal_path!
macros. - Added
ExecCommandInput.working_dir
field.
- Added
- Fixed an issue where command executions from the context of a plugin weren't taking virtual paths into account.
- Updated
bun_plugin
to v0.8. - Updated
deno_plugin
to v0.8. - Updated
go_plugin
to v0.8. - Updated
node_plugin
andnode_depman_plugin
to v0.8. - Updated
python_plugin
to v0.6. - Updated
rust_plugin
to v0.7. - Updated
schema_plugin
(TOML) to v0.8.
- Updated Extism (plugin runtime) to v1 (from v0.5).
- Fixed broken
proto regen
output.
- Added a
proto regen
command, that can be used to regenerate shims, and optionally relink bins. - Updated
proto setup
and the installation script to support PowerShell profiles.- Will no longer use
setx
commands on Windows.
- Will no longer use
- Updated
schema_plugin
(TOML) to v0.7.1.- Now uses named regex captures for better version parsing.
- Updated Rust to v1.75.
- Fixed an issue where shims wouldn't work when executing with a different file string case.
- Added more lookup directories when locating the
proto-shim
file. - Updated the CLI to set the
PROTO_VERSION
environment variable.
- Avoid force creating shims in CI when not necessary.
- Fixed the
bun_plugin
being set to an incorrect version. - Temporarily fixed "Access is denied" errors on Windows when creating shims.
- More improvements for the Elvish shell.
- Added a
proto debug env
command, for debugging basic env/store information. - Updated version resolve errors to include the tool that failed.
- Updated missing install errors to include the file that a version was detected from.
- Fixed
proto setup
injecting incorrect shell configuration for Elvish.
- Temporarily clean old binaries that are no longer supported.
- Removed old and deprecated CLI commands.
- WASM API
- Removed the
post_run
hook.
- Removed the
- Implemented a new shim strategy for both Unix and Windows.
- No longer creates Bash scripts on Unix, or PowerShell scripts on Windows.
- Instead creates a new Rust based executable that is truly native.
- Handles stdin, pipes, and redirects efficiently and correctly.
- Better compatibility and portability.
- WASM API
- Added a
ToolContext.proto_version
field. - Added a
ExecutableConfig.shim_env_vars
field. - Updated
ExecutableConfig.shim_before_args
andExecutableConfig.shim_after_args
to support a list of strings.
- Added a
- Fixed an issue where binaries were being symlinked with broken versions in their file name (most commonly for Python).
- Updated
bun_plugin
to v0.7.- Will now symlink a
bunx
binary to~/.proto/bin
.
- Will now symlink a
- Updated
deno_plugin
to v0.7. - Updated
go_plugin
to v0.7. - Updated
node_plugin
andnode_depman_plugin
to v0.7.- Will no longer symlink binaries (
~/.proto/bin
) for all package managers. - You'll most likely need to delete any old bins manually.
- Will no longer symlink binaries (
- Updated
python_plugin
to v0.5. - Updated
rust_plugin
to v0.6. - Updated
schema_plugin
(TOML) to v0.7.
- Added basic telemetry to track tool install/uninstall metrics.
- Added
--include-global
toproto outdated
to include versions from~/.proto/.prototools
. - Added
--only-local
toproto outdated
to only checks versions from.prototools
in current directory. - Improved the messaging of
proto outdated
.
- Fixed
proto outdated
checking global versions in~/.proto/.prototools
by default.
- Updated dependencies.
- Fixed
proto debug config
printing an invalid config structure. - Fixed
proto install
displaying the incorrect version labels. - Fixed
proto install
not always pinning a version on 1st install.
- Added Linux arm64 gnu and musl support (
aarch64-unknown-linux-gnu
andaarch64-unknown-linux-musl
). - Added a
proto debug config
command, to debug all loaded configs and the final merged config. - Added a
PROTO_BYPASS_VERSION_CHECK
environment variable, to bypass loading and checking of versions. Useful when internet is unreliable.
- Deferred loading of the HTTP client until it's needed. This should improve execution times.
- Fixed an issue where
proto use
would install tools from~/.proto/.prototools
. - Fixed an issue where our directory locking would fail on Windows when the inventory path was overwritten.
- Fixed stable being considered a latest alias.
- Updated dependencies.
- Added an
--aliases
flag toproto list
andproto list-remote
. - Updated
proto tool list
to include remote aliases provided by the tool. - Updated
proto tool info
to include local configuration and installed versions.
- Updated
node_plugin
andnode_depman_plugin
to v0.6.1.
To ease the migration process, we've added a new migrate command. Simply run
proto migrate v0.24
after upgrading proto!
- Standardized configuration files.
- Merged
~/.proto/config.toml
functionality into.prototools
under a new[settings]
table. This means settings likeauto-clean
can be defined anywhere now. - Removed
~/.proto/config.toml
. Use~/.proto/.prototools
instead, which is now the new global config (via--global
arg). - Moved
node-intercept-globals
setting totools.node.intercept-globals
.
- Merged
- Reworked user configured aliases and default/global version.
- Moved values to
.prototools
(user managed) from~/.proto/tools/<name>/manifest.json
(internally managed). - Aliases are now stored in the
[tools.<name>]
, while the default version is at the root.node = "20.10.0" [tools.node.aliases] work = "^18"
- Moved values to
- Updated
proto alias
andproto unalias
to longer write to the global config by default. Now requires a--global
flag.- This change was made to align with
proto pin
,proto tool add
, andproto tool remove
.
- This change was made to align with
- Added a
proto migrate v0.24
command for migrating configs. We'll also log a warning if we detect the old configuration.- For some scenarios, we'll attempt to auto-migrate under the hood when applicable.
- Added support for defining configuration that can be passed to WASM plugins.
- Can be added to
.prototools
under a[tools.<name>]
table. - Moved Node.js specific settings into this new format.
[tools.node] bundled-npm = false intercept-globals = false
- Can be added to
- Updated non-latest plugins to be cached for 30 days, instead of forever.
- Updated cleaning to also remove old proto versions from
~/.proto/tools/proto
. - WASM API
- Added a
get_tool_config
function. Can be typed with a serde compatible struct. - Deprecated the
get_proto_user_config
function.
- Added a
- Fixed an issue where resolving canary versions wouldn't work correctly.
- Updated
bun_plugin
to v0.6. - Updated
deno_plugin
to v0.6. - Updated
go_plugin
to v0.6. - Updated
node_plugin
andnode_depman_plugin
to v0.6. - Updated
python_plugin
to v0.4. - Updated
rust_plugin
to v0.5. - Updated
schema_plugin
(TOML) to v0.6.
- Added a
PROTO_SHELL_PROFILE
environment variable, to control which shell profile to modify (when applicable). - Added a
PROTO_INSTALL_DIR
environment variable, to control where theproto
binary is located. Works for both installing and upgrading.
- Fixed
proto upgrade
not working on Linux musl.
- Actually fixed
proto use
this time.
- Enabled wasmtime caching, which should improve performance of WASM plugins by 10-20%.
- Fixed an issue where
proto use
(or parallel processes) would run into file system collisions when attempting to download and install multiple TOML schema based tools.
- Updated dependencies.
- Updated parent execution to prefer
proto run <tool>
over<tool>.exe
on Windows.
- Updated tools that require execution through a parent tool, to avoid using shims.
- Updated
.cmd
shims to no longer prompt with "Terminate batch job?".
- Fixed executable extension checks on Windows.
- Fixed
.cmd
and.ps1
shims not exiting correctly.
- Updated dependencies.
- Fixed
proto list-global
not resolving a version.
- Updated
node_plugin
andnode_depman_plugin
to v0.5.3.- Updated globals install to use a
--prefix
arg instead ofPREFIX
env var. - Fixed an incorrect globals directory on Windows.
- Updated globals install to use a
- Updated
python_plugin
to v0.3.0 (from v0.2.0).- Removed
--user
from global package installation viaproto install-global
. Packages are now installed into the tool directory for the current Python version.
- Removed
- Updated
proto install-global
andproto uninstall-global
to detect/resolve a version first, as some package managers require it. - Updated Windows to not use symlinks for binaries, and instead copy the
.exe
file. This is required to solve "A required privilege is not held by the client" errors, because symlinks require admin privileges.
- Fixed an issue where
proto list-global
would panic when canonicalizing paths. - Fixed multi-version ranges (
||
) not resolving locally installed versions correctly.
- Fixed an issue where checksum verification would fail if the
.sha256
file prefixed the file name with*
. - Fixed an issue where installing a global would fail to find a proto shim on Windows.
- Fixed an issue where broken symlinks would fail to be removed. This would result in subsequent "File exists (os error 17)" errors.
- Updated Rust to v1.74.
- Updated dependencies.
- Updated logs to now include nanoseconds.
- Deprecated and moved tool/plugin commands to
proto tool
subcommand.- Moved
proto add-plugin
toproto tool add
. - Moved
proto remove-plugin
toproto tool remove
. - Moved
proto plugins
toproto tool list-plugins
. - Moved
proto tools
toproto tool list
.
- Moved
- Added a
proto tool info
command for viewing information about a tool and its plugin. - Added a
detect-strategy
setting to~/.proto/config.toml
to configure which strategy to use when detecting a version. Accepts:first-available
(default) - Will use the first available version that is found. Either from.prototools
or a tool specific file (.nvmrc
, etc).prefer-prototools
- Prefer a.prototools
version, even if found in a parent directory. If none found, falls back to tool specific file.
- Added support to plugins to ignore certain paths when detecting a version.
- Updated Windows to create 3 shim files for each tool:
.cmd
(cmd.exe),.ps1
(powershell), and no extension (bash). - WASM API
- Added
DetectVersionOutput.ignore
field.
- Added
- Updated
node_plugin
andnode_depman_plugin
to v0.5.2. - Node
- Will now ignore detecting versions from
node_modules
paths. - Fixed Yarn v1.22.x archive not unpacking correctly.
- Will now ignore detecting versions from
- Fixed an issue where version detection would read files found in
node_modules
(which you usually don't want).
- Fixed an issue where
proto clean
orproto use
(with auto-clean) would crash.
- Refactored and standardized how executables (bins and shims) are managed.
- Binaries (
~/.proto/bin
) and shims (~/.proto/shims
) now share the same internal data structures. - For the most part, is a 1:1 relation. There will be a shim for every binary, and vice versa.
- Reduced the amount of WASM calls to locate executables to 1 call.
- Removed the concept of local shims (was a hidden implementation detail).
- Binaries (
- Reworked the
proto bin
command.- By default returns an absolute path to the real executable (
~/.proto/tools/<tool>/<version>/bin
). - Pass
--bin
to return the~/.proto/bin
path. - Pass
--shim
to return the~/.proto/shims
path.
- By default returns an absolute path to the real executable (
- Updated
proto clean --purge
andproto uninstall
to accurately delete all executables. - Updated
proto uninstall
to support removing the tool entirely (simply omit the version). - Updated internet connection checks to only check during critical workflows.
- Will no longer happen if we have a fully-qualified version (primarily for
proto run
). - Will still happen for partial versions, as we need to resolve to a fully-qualified.
- Will always happen for install, upgrade, and other flows that must download files.
- Will no longer happen if we have a fully-qualified version (primarily for
- TOML API
- Added
install.no_bin
andinstall.no_shim
fields.
- Added
- WASM API
- Added
locate_executables
function. - Added
LocateExecutablesInput
,LocateExecutablesOutput
,ExecutableConfig
structs. - Deprecated
locate_bins
andcreate_shims
functions. - Deprecated
LocateBinsInput
,LocateBinsOutput
,CreateShimsInput
,CreateShimsOutput
,ShimConfig
structs.
- Added
- Fixed an issue where config files in the user home directory were not loaded.
- Updated
bun_plugin
to v0.5. - Updated
deno_plugin
to v0.5. - Updated
go_plugin
to v0.5. - Updated
node_plugin
andnode_depman_plugin
to v0.5. - Updated
python_plugin
to v0.2. - Updated
rust_plugin
to v0.4. - Updated
schema_plugin
(TOML) to v0.5. - Node
- Updated the
npm
tool to create thenpx
shim instead of thenode
tool. - Updated symlinked binaries to use the shell scripts instead of the source
.js
files (when applicable).
- Updated the
- Plugin versions are now pinned and tied to proto releases to avoid unintended drift and API changes.
- Fixed an issue where uninstalling the "default version" doesn't delete the symlinked binary.
- Fixed an issue where the versions cache was not being read.
- Fixed an issue where installing a tool would write to the wrong temporary directory.
- WASM API
- Removed
input.context
fromLoadVersionsInput
andResolveVersionInput
.
- Removed
- Added Linux x64 musl support (
x86_64-unknown-linux-musl
). - Improved file and directory locking. Will now work correctly across processes and signals, especially for those killed/dropped.
- Updated WASM functions to use explicit Rust enum types for versions to properly handle all variations (version, alias, requirement, range).
- WASM API
- Uses
VersionSpec
enum:ResolveVersionOutput.version
ToolContext.version
- Uses
UnresolvedVersionSpec
enum:LoadVersionsInput.initial
ParseVersionFileOutput.version
ResolveVersionInput.initial
ResolveVersionOutput.candidate
SyncManifestOutput.default_version
ToolMetadataOutput.default_version
- Uses
- Fixed an issue where auto-install would keep re-installing a tool.
- Fixed more WASM memory issues.
- Added a
PROTO_OFFLINE_TIMEOUT
environment variable to control the timeout for offline checks (in milliseconds). - Added a
PROTO_OFFLINE_HOSTS
environment variable to customize additional hosts/IPs to check for offline status. - WASM API
- Updated
host_log!
to support writing to stdout/stderr.
- Updated
- Fixed
proto migrate
failing on Windows.
- Added more logging to WASM functions.
- Improved offline checks and behaviors.
- Fixed a WASM memory issue that would error with "extism_call failed".
- Fixed an issue where virtual paths would be mis-prefixed.
- Renamed
/home
virtual path to/userhome
to avoid conflicts. - Updated dependencies.
- Updated
proto use
to load plugins in parallel.
- Fixed an issue where
proto use
would not bubble up errors for tools that fail to install.
- Increased the timeout for WASM function calls from 30s to 90s.
- Improved and clarified some error messages.
To ease the migration process, we've added a new migrate command. Simply run
proto migrate v0.20
after upgrading proto!
-
The generated shims have moved to
~/.proto/shims
from~/.proto/bin
. You'll need to manually updatePATH
in your shell profile if you'd like to continue using the "runtime version detection" functionality.export PROTO_HOME="$HOME/.proto" -export PATH="$PROTO_HOME/bin:$PATH" +export PATH="$PROTO_HOME/shims:$PROTO_HOME/bin:$PATH"
Furthermore, we suggest deleting all files in
~/.proto/bin
except forproto(.exe)
. -
WASM API
- Removed
env_vars
fromToolMetadataOutput
andToolContext
. Usehost_env!
macro instead.
- Removed
- Reworked the
~/.proto/bin
directory to now contain symlinks to the original tool executables. This is a non-shim based alternative that can be used stand-alone or in unison with our shims.- The globally pinned version is the version that's symlinked. This can be updated with
proto install --pin
. - This approach does not detect a version at runtime.
- The globally pinned version is the version that's symlinked. This can be updated with
- Added a
proto migrate
command for easily applying changes between breaking releases. - Added support for minisign checksum files. Can now verify
.minisig
signatures for downloaded tools. - Updated
proto use
to install tools in parallel. - Updated
proto plugins
andproto tools
to load plugins in parallel. - Updated
proto run
to error when the tool attempts to self-upgrade outside of proto. - TOML API
- Added a
metadata
setting. - Added a
install.checksum-public-key
setting.
- Added a
- WASM API
- Added a
self_upgrade_commands
field toToolMetadataOutput
. - Added a
checksum_public_key
field toDownloadPrebuiltOutput
. - Removed
checksum
fromVerifyChecksumInput
.
- Added a
- Minor performance improvements to runtime version detection.
- Improved error handling and messages.
- Ensures the installation directory is empty before unpacking/moving files during an install.
- WASM API
- Added
install_dir
toDownloadPrebuiltInput
andNativeInstallInput
.
- Added
- Updated dependencies.
- Updated
proto clean
to also clean the~/.proto/temp
directory. - Updated
proto install
to unpack installs to a temporary directory, before moving to the final store location.
- The file loaded for
proto outdated
is now output in the terminal. - WASM API
- Added
get_env_var
andset_env_var
host functions. - Added
host_env!
macro.
- Added
- Removed
proto global
, useproto pin --global
instead. - Removed
proto local
, useproto pin
instead.
- Added a
proto outdated
command that'll check for new versions of configured tools. - Added a
proto pin
command, which is a merge of the oldproto global
andproto local
commands. - Added a
pin-latest
setting to~/.proto/config.toml
that'll automatically pin tools when they're being installed with the "latest" version. - Updated
proto install
to auto-clean stale plugins after a successful installation.
- Added
PROTO_WASM_LOG
environment variable to toggle the logging of messages from Extism and WASM plugins. Useful for debugging.
- Added
PROTO_DEBUG_COMMAND
to include all output when debugging command execution. - Added more logs to bubble up important information.
- Attempts to fix "Failed to parse JSON" errors in relation to the manifest or cached versions.
- Another attempt at fixing WASM memory issues.
- Fixed an issue where binaries sometimes could not be located for "installed" tools.
- Hopefully fixed an isse where WASM memory was running out of bounds.
- Fixed an issue where failed installs/uninstalls would exit with a zero exit code.
- Fixed an issue where install/uninstall events weren't always firing.
- Update our rustls dependency to use OS native certificates.
- Added a
proto tools
command for listing all installed tools and their versions. - Added an
http
setting to~/.proto/config.toml
to control proxies and certificates when making http/https requests, primarily for downloading tools.- New
allow-invalid-certs
setting for allowing invalid certificates (be careful). - New
proxies
setting for customizing internal proxy URLs. - New
root-cert
setting for providing a root certificate (great for corporate environments).
- New
- Fixed
load_git_tags
by automatically filtering tags that end with^{}
(dereferenced tags).
- Updated
proto install --pin
to also pin even if the tool has already been installed. - Updated Windows to use
pwsh
when available.
- Fixed an issue where
proto install
andproto list-remote
would read from the cache and be unaware of newly released versions upstream.
- WASM API
- Updated
exec_command!
to no longer throw on non-zero exit codes. You'll now need to handle failure states manually.
- Updated
- Added Python language support via the
python
identifier. - Added colors to command line
--help
menus. - Added canary support to all applicable tools.
- New
--canary
flag forproto install
. - Canary release will always be the latest, and can be re-installed.
- New
- Updated the following locations to support partial versions and aliases:
- Tool versions in
.prototools
. - Pinning a default version with
proto install --pin
. - Setting global version with
proto global
. - Setting local version with
proto local
.
- Tool versions in
- TOML API
- Added
install.download_url_canary
andinstall.checksum_url_canary
settings.
- Added
- WASM API
- Added
command_exists
,is_musl
, andget_target_triple
helper functions. - Added
skip_install
field toNativeInstallOutput
. - Added
skip_uninstall
field toNativeUninstallOutput
.
- Added
- Now supports
.zst
(or.zstd
) archive formats. - Improved version, alias, and requirement handling.
- Fixed an issue where
proto clean --purge
would not delete shims.
- WASM API
- Requires
extism
>= v0.5. - Requires
extism-pdk
>= v0.3.4.
- Requires
- We now include the current proto version in logs.
- Added a
proto add-plugin
command for adding a plugin to a config file. - Added a
proto remove-plugin
command for removing a plugin from a config file. - Updated
proto clean
with--purge
to completely remove a tool from proto. - Updated
proto clean
with--purge-plugins
to remove all installed plugins. - Updated
proto clean
to also remove stale/unused plugins.
- Fixed some commands where their shorthand alias was not being registered correctly.
- Added folder locking during tool installation to avoid colliding processes.
- Renamed
PROTO_ROOT
toPROTO_HOME
, but we'll supportPROTO_ROOT
for the time being.
- Improved file locking logic and scenarios.
- Improved logging to pinpoint slow operations.
- Updated Rust to v1.72.
- WASM API
- Removed
env
from all inputs. Useget_proto_environment
function orcontext
input instead.
- Removed
- Added a
proto uninstall-global
command for uninstalling a global dependency from a tool. - Updated the
proto plugins
command to include the plugin's version when applicable. - TOML API
- Added
globals.uninstall-args
to schema, allowing globals to be uninstalled.
- Added
- WASM API
- Added
install_global
,uninstall_global
,native_uninstall
, andsync_shell_profile
plugin functions. - Added
pre_install
,post_install
,pre_run
, andpost_run
plugin hooks. - Added
plugin_version
field toToolMetadataOutput
. - Added a
VirtualPath
enum for working with virtual and real paths. AllPathBuf
inputs have been updated to this new type. - Added a
context
field to some inputs, that includes the plugin ID, tool directory, and current version. - Added a
get_tool_id
function for accessing the current plugin ID. - Added a
get_proto_environment
function for accessing information about the host and proto environment.
- Added
- Fixed an issue where some error messages would be obfuscated.
- The
proto_cli
crate can no longer be used as a library, useproto_core
instead.
- Added file locking around the remote versions cache to avoid fs race conditions.
- Fixed an issue where
proto setup
would sometimes not initialize.
- Versions defined in
.prototools
must be fully-qualified semantic versions. Partial versions (missing patch or minor) are no longer supported. This may change in the future based on feedback. - Tool and plugin names must now be in kebab-case.
- Node
- Yarn 2+ is now installed using
@yarnpkg/cli-dist
. We no longer downgrade to the latest v1. - Will no longer detect a version from
engines
inpackage.json
(too problematic).
- Yarn 2+ is now installed using
- TOML API
- Moved
install.global-args
toglobals.install-args
. - Moved
install.globals-dir
toglobals.lookup-dirs
. - Removed
install.unpack
(proto should be smart enough now to figure this out).
- Moved
- WASM API
- Renamed host function
trace
tohost_log
.
- Renamed host function
- Node.js (and package managers) and Rust are now powered by WASM plugins, and have been removed from core.
- Please report any issues you encounter or discrepancies from the previous release!
- Improved version detection and requirement resolution.
- Rust
- Will now detect a version/channel from
rust-toolchain.toml
andrust-toolchain
.
- Will now detect a version/channel from
- TOML API
- Added new
globals
section.
- Added new
- WASM API
- Added
host_log!
andexec_command!
macros for working with host functions. - Added
default_version
andinventory
fields toToolMetadataOutput
. - Added
home_dir
field toToolMetadataInput
andLocateBinsInput
. - Added
globals_prefix
field toLocateBinsOutput
. - Updated
exec_command
with stream/inherit support. - Updated
bin_path
inLocateBinsOutput
andShimConfig
to aPathBuf
.
- Added
- WASM API
- Added the plugin
id
to everyenv
field. - Added
initial
toLoadVersionsInput
.
- Added the plugin
- Fixed an issue where version requirements using
>
,>=
,<
, or<=
wouldn't parse correctly.
- Bun, Deno, and Go are now powered by WASM plugins, and have been removed from core.
- This is an experiment before we migrate Node.js and Rust to WASM.
- Please report any issues you encounter or discrepancies from the previous release!
- Added a new plugin configuration locator,
github:org/repo
. - Added a
proto plugins
command, for listing all active and configured plugins. - Updated
proto clean
andproto use
to load and merge all.prototools
from the current directory and upwards. - WASM API
- Added a
format_bin_name
function. - Added a
check_supported_os_and_arch
function. - Added a
checksum
field toVerifyChecksumInput
. - Renamed
ParseVersion*
toParseVersionFile*
. - Published a
proto_pdk_test_utils
package for writing tests.
- Added a
- Rewrote the plugin downloading and registry layers.
- Updated Rust to v1.71.
- WASM API
- Added a
trace
host function, for logging trace messages via the host machine. - Added an
exec_command
host function, for executing system commands on the host machine. - Added an
fetch_url_with_cache
function, for making an HTTP request and caching the response. - Added
fallback_last_globals_dir
field toLocateBinsOutput
. - Updated
load_git_tags
to use the newexec_command
function.
- Added a
- Fixed an issue where shims were always being created.
- Removed
schema:
as a prefix for TOML based plugins. Usesource:
instead.
- Added experimental support for WASM based plugins.
- Added
source:
as a plugin prefix.
- Updated Cargo dependencies.
- Updated to
cargo-dist
v0.0.6.
- Fixed an args escaping issue for Unix based shims.
- Fixed an issue where
--log
would fail with an invalid value when running a tool.
- Added shim support for
bunx
(bun),pnpx
(pnpm), andyarnpkg
(yarn). - Added a global
--log
option to all commands. - Improved tracing log messages.
- Updated Cargo dependencies.
- Refactored shims from the ground up for easier maintenance.
- Added
PROTO_CACHE
environment variable to control whether to read from temporary cache or not.
- Added
PROTO_AUTO_CLEAN
,PROTO_AUTO_INSTALL
, andPROTO_NODE_INTERCEPT_GLOBALS
environment variables. - Added a
node-intercept-globals
setting to control the Node.js/npm/etc globals behavior.
- Updated Node.js to use x64 on arm64 machines when arm64 is not available (<16).
- Fixed an issue where writing to shells would omit a trailing newline.
- Improved error messages for missing or unsupported downloads.
- Fixed an issue where
proto upgrade
would fail on Windows. - Fixed an issue where version requirement
>=0.0.0 <0.0.0
would fail to parse.
- Fixed a bad release.
- Fixed an issue where
proto install-global
for Node.js would recursively call and fail.
- Updated Windows
~/.proto/bin
shims to use.cmd
files instead of.ps1
files. This will interop better with the defaultPATHEXT
environment variable.
- Fixed an index out of bounds issue with
yarn
. - Fixed an issue with Windows shims not being ran correctly.
- An attempt to fix "proto killed" errors after running
proto upgrade
.
- Updated npm/pnpm/yarn to error when attempting to install a global binary. Use
proto install-global
instead.
- Improved handling of alternate tool binaries, like
npx
andnode-gyp
.
- Added
install.unpack
setting to TOML plugin schema. - Updated
npm
to also create anode-gyp
global shim.
- Updated Cargo dependencies.
- Fixed an issue where shim files would sometimes not be found.
- Updated Cargo dependencies.
- Updated to
cargo-dist
v0.0.6.
- Fixed an issue where "is installed" checks would sometimes fail.
- Fixed an issue where it would load the manifest cache from the wrong path.
- Migrated to a new sandbox implementation for testing.
- Installed versions are now sorted during detection, so that latest versions are always used first.
- Updated
proto clean
to properly handle cleaning installed plugins.
- Improved version detection to scan locally installed versions more often, instead of resolving to the latest remote version.
- This will result in far less "version not installed" errors.
- Fully-qualified semantic versions are still used as-is.
- Updated
proto use
to also install tools based on environment/ecosystem config in the current working directory.- For example, will install a
packageManager
frompackage.json
. - This is pseudo replacement for
corepack
.
- For example, will install a
- Updated shims to only be created on initial install, or when the internal API changes, instead of always.
- Fixed an issue with
npx
not handling args correctly. - Fixed an issue where
moon clean
would fail on an empty/missing plugin.
- Temporary fix for "text file busy" error when creating shims.
- Attempt to fix an issue where
manifest.json
would fail to parse while running concurrent processes.
- Added TOML schema based plugins support, allowing for custom tools/CLIs to be managed in proto.
- Added a
[plugins]
section to~/.proto/config.toml
and.prototools
. - Added a
--yes
option toproto clean
, allowing prompts to be bypassed. - Added a
auto-clean
setting to~/.proto/config.toml
, enabling automatic cleaning whenproto use
is ran. - Updated
proto use
to also install configured plugins.
- Updated Rust to v1.69.
- Updated tool and plugin names to be kebab-case.
- Added read/write file locking for the
manifest.json
file.
- Added a
proto clean
command for removing old/stale tool installations. - Added a
proto list-global
command for listing all installed global packages for a tool. - Updated
proto install-global
to support installing multiple globals.
- Greatly improved error messages.
- We now track install/last used timestamps for future functionality.
- Added a
proto install-global
command for installing global packages for a tool. - Added
proto alias
andproto unalias
commands for creating custom version aliases.
- Fixed an issue where
PROTO_LOG
logs were not always shown.
- Updated cargo dependencies.
- Added Rust as a supported language.
- Requires
rustup
to be installed globally.
- Requires
- Added a global user config at
~/.proto/config.toml
.- Added a new setting
auto-install
, that will automatically install a missing tool whenproto run
is executed.
- Added a new setting
- Added a
proto upgrade
command for upgrading the proto binary to latest. - Added spinners and progress bars to install, uninstall, and upgrade flows.
- Updated Node.js to download
.tar.xz
archives, resulting in smaller files and less bandwidth.
- Updated
proto setup
on Windows to use the Windows registry when updatingPATH
.
- Added support for
.tar.xz
archives.
- Fixed
proto setup
to fallback to a shell instead of failing.
- Fixed the
npx
shim not being created. - Fixed Windows installation issues.
- When detecting a version and proto encounters a range/requirement using
^
,~
,>=
, etc, proto will now resolve the version against the currently installed versions in~/.proto
, instead of resolving to an arbitray fixed version.
- Added "bundled" as a supported alias for
npm
. - Updated
proto local
andproto global
to support aliases as well as versions. - Updated
go
to automatically setGOBIN
in your shell profile if has not been. - Updated
node
to automatically install thenpm
version that comes bundled with Node.js.
- Another attempt to fix SSL issues.