proto v0.50 - URL rewrites, on-init activation, preserved comments, and more
In this release, we're landing a handful of quality of life improvements that have been requested by the community.
Rewrite URLs for better interoperability
proto is heavily reliant on URLs, as they power everything from tool and plugin downloading to version resolving. Many URLs are hard-coded into proto but most of them come from plugins. For the most part this is fine, but if you work within a corporate environment, or have a firewall, you may have to deal with proxy servers, mirrors, or other factors.
Until now, this was very difficult to circumvent, so we wanted to provide a built-in solution to
this problem, and as such, we're introducing the new
url-rewrites
configuration setting. This setting accepts a map
of regex patterns to replacements, and will rewrite URLs that match the pattern.
[settings.url-rewrites]
"github.com/(\\w+)/(\\w+)" = "gh-mirror.corp.com/$1/$2"
"mo+n" = "lunar"
For example, in the configuration above, any URL that contains github.com
will be replaced with
gh-mirror.corp.com
, and any URL that contains the word "moon" (with different length o's) will be
replaced with "lunar". Learn more about URL rewriting in the settings documentation!
Activation flow now triggers immediately
Our activation flow (shell hooks) is seeing more and more usage, with improved stability, but based on feedback we've received, there was still some pain points. One of these pain points was that activation would not trigger immediately (new terminal window/tab), and would only trigger after changing directories.
There was a way around this using the --on-init
flag, but that was not easily discoverable, and
the setup as a whole was not very intuitive. With this release, that flag has been deprecated and
the activation flow now triggers immediately, so you can start using your tools right away.
Historically we've been hesitent to do this, as we were worried about potential performance hits when having to download WASM plugins, or refetch caches. However in practice this has not been an issue.
Comments are now preserved in .prototools
This has been a long standing issue and a long requested feature, and it's finally here! Comments
are now preserved in .prototools
files, and they'll no longer be removed when running proto
commands that modify these files (like proto alias
or
proto pin
).
Historically this has been a hard problem to solve, as Rust serde (serialization/deserialization library) strips comments when deserializing (reading) the file. To solve this problem, we had to avoid serde, and operate on an AST-like structure instead. Because of this, we lose type-safety and there may be some edge cases not accounted for.
Plugin commands are now executed within a shell
When a plugin executes a command (child process) on the host system (your computer), it now executes
it within a shell, e.g. bash -c "command"
. This change was made to ensure environment variables
(like PATH
), aliases, and other shell features that you have configured are available to the
plugin.
By default the shell to use is detected from the parent host process, but you can override it with
the PROTO_SHELL
environment variable. For example, to use zsh
you can set:
PROTO_SHELL=zsh
Other changes
View the official release for a full list of changes.
- Added
--dir
and--all
options to theproto bin
command. - Added environment variable support to many non-tool related
.prototools
settings. - Updated
proto install <tool>
(without version) to install a version pinned in.prototools
, instead of the latest version.