---
slug: proto-v0.6
title: proto v0.6 - Unused cleaning and improved global binaries
authors: [milesj]
tags: [proto, globals, clean, errors]
image: ./img/proto/v0.6.png
---

import Button from '@site/src/ui/Button';
import Image from '@site/src/components/Image';

With this release, we're expanding on our global binary support and providing quality of life
improvements.

<!--truncate-->

## RFC: Plugins system

Since proto's inception, plugins have been top of mind, but runtime based plugins in Rust are
_difficult_. The only viable solution to this problem is WASM, but most developers have never used
WASM before, nor are they familiar with WASM tooling (myself included).

However, we're at a point in proto's life-cycle where the core is rather stable, and it's time to
start investigating plugin support. To this end, we've introduced a small RFC outlining how plugins
will be used, enabled, and implemented. It's not very in-depth as we want to avoid implementation
details, but from a consumers perspective, we want to ensure that it makes sense.

We'd very much appreciate it if you could take a look at the RFC and provide feedback. If you have
any experience in Rust runtime plugins, we'd love to hear your thoughts as well.

<div class="flex justify-center">
  <Button label="View RFC" href="https://github.com/moonrepo/proto/issues/73" size="lg" />
</div>

## Cleaning stale and unused tools

Is your `~/.proto` installation growing out of control? Are there old versions of tools that you
don't use anymore? Or versions you never used? Unsure if you're using a tool at all or still need
it?

To help avoid these questions and problems, we're introducing a new command that will uninstall
stale and unused tools, [`proto clean`](/docs/proto/commands/clean). When ran, the command will
launch an interactive session and scan the file system for old tools, prompting you to remove them.

```shell
$ proto clean
```

By default the command will uninstall tools that haven't been used in over 30 days, but this can be
customized with the `--days` option.

:::info

Tools installed before v0.6 will most likely be considered stale, as we weren't tracking install and
last used timestamps. However, everything will work as intended after running a tool or simply
moving forward from this point.

:::

## Global binary improvements

In our [previous release](./proto-v0.5), we announced the `proto install-global` command for
installing global dependencies that are unique per tool. Thanks to the community, this command has
been updated to support installing multiple globals at once!

```shell
$ proto install-global node typescript webpack-cli
```

On top of this, we're also introducing another command that was requested by the community,
`proto list-global`, that can be used to list all currently installed globals.

```shell
$ proto list-global node
tsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc
tsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver
```

## Better error messages

We've spent most of the past week working on a new internal architecture called
[Starbase](https://github.com/moonrepo/starbase), which will be the new foundation for proto and
moon moving forward. One of the major benefits of this new architecture is a rewritten error system
that provides more context and better error messages.

Here's an example of this, albeit with a contrived situation:

<Image src={require('./img/proto/v0.6-errors.png')} width="90%" />
