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