Skip to main content

proto v0.39 - Mid-year quality of life improvements

· 3 min read
Miles Johnson
Founder, developer

This is a small release that includes many quality of life improvements.

Improved proto activate performance

In v0.38 we released the proto activate command as a means of bootstrapping your shell with necessary paths and variables. Since then, we've fixed a handful of bugs and focused on performance for this release.

In this release, we've reduced the time it took to execute activation from 200-300ms down to 10-20ms. We've also fixed some syntax issues around Bash and Zsh shells.

Merged proto install and proto use commands

When proto was first built we had separate commands for installing all tools (proto use), and installing a single tool (proto install). For historical reasons, this was loosely based off of nvm, but we have diverged heavily since then.

Going forward, the proto use command is now deprecated, and all of its functionality has been merged into proto install. To install all tools, simply don't pass arguments to the command!

# Install all tools
$ proto install

# Install a single tool
$ proto install node

We like this change, as it aligns with package/dependency manager based workflows.

Customize built-in tools

proto ships with a handful of official built-in plugins for popular tools like Node.js, Go, and more. While this is great as it reduces configuration boilerplate, it may cause an inconvenience for adoption or migration related reasons. To support these workflows, we're introducing a new setting, settings.builtin-plugins, that can be used to disable all built-in plugins, or only allow a few select plugins.

.prototools
[settings]
# Disable all
builtin-plugins = false
# Enable some
builtin-plugins = ["node", "bun"]

Pin proto itself

proto has yet to reach an official v1 release, as we're constantly fine-tuning and reworking APIs. Because of this, we may accidentally introduce unexpected changes, or introduce breaking changes that you were relying on. To help mitigate these issues, you can now pin the version of proto itself in .prototools.

.prototools
proto = "0.39.0"

When this pin exists, all proto shims will attempt to execute proto using that exact version. This allows for the global proto binary to differ in version from what is executed.

Other changes

View the official release for a full list of changes.

  • Added PROTO_NO_MODIFY_PROFILE and PROTO_NO_MODIFY_PATH environment variables to proto 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