- 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.