Skip to main content

proto v0.14 - Node.js and Rust now powered by WASM plugins

· 2 min read
Miles Johnson

With this release, we've finished our migration to a WASM based plugin architecture.

Full migration to WASM

In our last release, we migrated the Bun, Deno, and Go plugins to WASM. In this release, we're excited to announce that we have completed our WASM migration by also converting Node.js (and npm, etc) and Rust to WASM plugins. We've also updated our TOML plugin layer to use WASM under the hood.

With this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the consumers, to build your own plugins! We have plans for additional APIs in the next release, primarily installing and uninstall globals, and a hooks system, so look forward to that! To learn more about our official plugins, check out the their repositories!

This release may seem light, but we rewrote the entire core from the ground up to support a pure plugin based architecture. This was a lot of work, but our implementation is far easier to work with, and more robust. As part of this process, we improved version and range handling, archive unpacking, and much more!

Because of the rewrite, we may have introduced a few bugs. Please report any issues!

Breaking changes for TOML plugins

In preparation for the next release, and as clean up during the rewrite, we've made a few breaking changes to the TOML schema, primarily around global handling. To start, this old code:

globals-dir = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]
global-args = ["install", "--force", "{dependency}"]

Can now be rewritten as:

lookup-dirs = ["$PROTOSTAR_HOME/bin", "$HOME/.protostar/bin"]
install-args = ["install", "--force", "{dependency}"]

And lastly, the install.unpack setting has been removed. We believe our installation layer is smart enough to unpack or move files automatically.

Other changes

View the official release for a full list of changes.

  • 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 in package.json.
  • Rust
    • Will now detect a version/channel from rust-toolchain.toml and rust-toolchain.