Skip to main content

proto v0.45 - New built-in tools and build from source

· 3 min read
Miles Johnson
Founder, developer

In this release, we're very excited to introduce building tools from source, a feature that's been in development for over a year.

New built-in tools

It's been quite some time since we've introduced a new official built-in tool, so in this release, we have 3!

moon

This was a no-brainer, and honestly, we probably should have done it much sooner. We were quite surprised to see that moon is the 3rd most installed tool in proto, right behind pnpm and node respectively. We felt that it was now time to make it official.

$ proto install moon

If you were using the moon TOML plugin before (below), you can now remove this entry from your .prototools.

.prototools
[plugins]
moon = "https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml"

uv

Additionally, Python interest has grown over recent months, especially with the introduction of Python support in moon, so we felt it was time to support the new hotness, uv! We plan to bring uv integration into moon in the near future.

$ proto install uv
info

Although uv can also manage Python installations, we suggest using proto to keep everything streamlined and isolated.

ruby

And lastly, we now support Ruby, a popular general purpose programming language. Ruby was extremely difficult to support, primarily because Ruby does not support the concept of pre-builts, and must be compiled from source files.

But thanks to our new build from source install strategy (below), Ruby support is now possible.

$ proto install ruby

Build from source (unstable)

Up until now, tools could only be installed if they supported pre-built binaries, which was typically more than enough. However, there are many languages that do not support pre-builts and must be built from source, such as Ruby, PHP, and up until recently, Python. Building binaries from source code is actually quite complicated, as the instructions for doing so is different across operating systems, architectures, and even system package managers.

Regardless, we've spent the past year slowly working on a solution and have finally managed to implement something usable, all through a powerful WASM API. And with that, the following tools now support build from source.

  • deno
  • go
  • moon
  • node
  • python (via python-build)
  • ruby (via ruby-build)

To actually build from source instead of downloading a prebuilt, simply pass --build to proto install. For tools that only support build (like Ruby), the --build flag is optional.

$ proto install python --build

To demonstrate how this works, here's Go being built from source. We start by grouping operations into steps, with the first step being the installation of system dependencies (via Homebrew or something similar). We then check that certain requirements are met, or abort if unmet. Up next, we need to acquire the source code, either by downloading an archive, or cloning a Git repository. And lastly, running through and executing the build instructions/commands.

info

While this feature is very exciting, it is extremely unstable, so please report any issues, and provide any and all feedback!

Other changes

View the official release for a full list of changes.