Skip to main content

Introducing proto, a next-generation toolchain manager!

· 2 min read
Miles Johnson
Founder, developer

We are proud to announce the launch of proto, a next-generation toolchain manager for all of your favorite programming languages.

proto is a Rust based multi-language toolchain manager that will download and install tools by version, and immediately make them available on PATH. proto is launching with initial support for Bun, Deno, Node.js (and npm, pnpm, yarn), and Go, with more languages on the way!

proto install node 18
proto install go 1.20
proto install deno 1.30

Unlike other version managers that pin their global binary to a default version, proto will contextually detect an applicable version from the environment or the language's ecosystem (like package.json), ensuring the correct tool is always being ran.

# Will detect a version before running
bun run ./script.ts

Furthermore, with proto's .prototools file, you can pin versions of all required tools on a per-project or per-repository basis, allowing for near instant setup of developer environments. Perfect for onboarding new developers!

.prototools
node = "18.12.0"
yarn = "3.3.0"
# Install all the things!
proto use

And lastly, moon's toolchain is built on proto, so if you're using moon, you might as well use proto. This will enable a single toolchain for both tools (in v0.26)!

How to get started?

In a terminal that supports Bash, run:

curl -fsSL https://moonrepo.dev/install/proto.sh | bash

In Powershell or Windows Terminal, run:

irm https://moonrepo.dev/install/proto.ps1 | iex

Jump to the documentation for more information on getting started and available commands!

Why another version manager?

To start, proto powers moon's toolchain and integrated developer environment. We believed that moon's toolchain would be extremely beneficial for developers as a whole, and so we extracted proto out into a standalone Rust CLI and Rust crates that moon inherits.

Furthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each with different workflows, CLI commands, and configuration files, is a poor developer experience.

Our goal is to unify all of these into a single performant interface. A toolchain manager is the next step in the version manager evolution.