diff --git a/website/blog/2023-09-18_proto-v0.18.mdx b/website/blog/2023-09-18_proto-v0.18.mdx
index 8d76aeba604..84fc74a1d11 100644
--- a/website/blog/2023-09-18_proto-v0.18.mdx
+++ b/website/blog/2023-09-18_proto-v0.18.mdx
@@ -2,8 +2,8 @@
slug: proto-v0.18
title: proto v0.18 - List installed tools and configure HTTP client
authors: [milesj]
-tags: [proto, http]
-# image: ./img/proto/v0.17.png
+tags: [proto, http, registry, index]
+image: ./img/proto/v0.18.png
---
Today we've got a small release that includes some helpful features.
@@ -58,6 +58,17 @@ proxies = ["http://intra.net/proxy"]
root-cert = "/path/to/root/cert.pem"
```
+## Index for third-party tools
+
+Now that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a
+third-party index, a registry of all available tools. We've updated the official
+[Supported tools](/docs/proto/tools) documentation to now include third-party tools.
+
+At this time, the list of tools is powered by a JS/JSON object,
+[which can be found here](https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx).
+In the future, we may move this to a database, add filtering, sorting, and everything else necessary
+for showcasing tools maintained by the community!
+
## Other changes
View the [official release](https://github.com/moonrepo/proto/releases/tag/v0.18.0) for a full list
diff --git a/website/blog/img/proto/v0.18.png b/website/blog/img/proto/v0.18.png
new file mode 100644
index 00000000000..dc7c82fe621
Binary files /dev/null and b/website/blog/img/proto/v0.18.png differ
diff --git a/website/docs/proto/tools.mdx b/website/docs/proto/tools.mdx
index 9bec3d2cd16..a1854ecc705 100644
--- a/website/docs/proto/tools.mdx
+++ b/website/docs/proto/tools.mdx
@@ -2,125 +2,24 @@
title: Supported tools
---
-import WasmLink from '@site/src/components/Docs/WasmLink';
+import Button from '@site/src/ui/Button';
+import ToolCards from '@site/src/components/Products/Proto/ToolCards';
+import { BUILT_IN_TOOLS, THIRD_PARTY_TOOLS } from '@site/src/data/proto-tools';
-The following tools are supported natively in proto's toolchain. Additional tools can be supported
-through [plugins](./plugins).
+## Built-in
-## Bun
+The following tools are supported natively in proto's toolchain.
-
+
-[Bun](https://bun.sh/) is an all-in-one runtime and toolset for JavaScript and TypeScript, powered
-by Zig and Webkit.
+## Third-party
-- **Available binaries** - `bun`, `bunx`
-- **Globals directory** - `~/.bun/bin`
+
-## Deno
+Additional tools can be supported through [plugins](./plugins).
-
-
-[Deno](https://deno.land/) is a secure runtime for JavaScript and TypeScript, powered by Rust and
-Chrome's V8 engine.
-
-- **Available binaries** - `deno`
-- **Globals directory** - `$DENO_INSTALL_ROOT/bin`, `~/.deno/bin`
-- **Detection sources** - [`.dvmrc`](https://github.com/justjavac/dvm)
-
-## Go
-
-
-
-[Go](https://go.dev/) is a simple, secure, and fast systems language.
-
-- **Available binaries** - `go`
-- **Globals directory** - `$GOBIN`, `~/go/bin`
-- **Detection sources** - [`go.work`](https://go.dev/doc/tutorial/workspaces),
- [`go.mod`](https://go.dev/doc/modules/gomod-ref)
-
-#### Post-install hook
-
-After installation, we'll inject a `GOBIN` environment variable into your shell, pointing to
-`~/go/bin`, if it does not already exist. This variable will be used to locate Go binaries across
-all installed versions. This functionality can be skipped by passing `--no-gobin` during
-installation.
-
-```shell
-$ proto install go -- --no-gobin
-```
-
-## Node.js
-
-
-
-[Node.js](https://nodejs.org/) is a JavaScript runtime built on Chrome's V8 engine.
-
-- **Available binaries** - `node`, `npx`
-- **Globals directory** - `~/.proto/tools/node/globals/bin`
-- **Detection sources** - [`.nvmrc`](https://github.com/nvm-sh/nvm),
- [`.node-version`](https://github.com/nodenv/nodenv), `package.json` engines
-
-#### Post-install hook
-
-After installation, the version of npm that came bundled with Node.js will also be installed. This
-functionality can be skipped by passing `--no-bundled-npm` during installation.
-
-```shell
-$ proto install node -- --no-bundled-npm
-```
-
-### npm, pnpm, yarn
-
-
-
-proto supports all popular Node.js package managers: `npm`, `pnpm`, `yarn`.
-
-- **Available binaries** - `*`, `node-gyp`
-- **Detection sources** - `package.json` engines / package manager
-
-### corepack
-
-Corepack _is not supported_ by proto, and never will be. Use [`proto use`](./commands/use) instead,
-which is a far more poweful alternative.
-
-## Python (experimental)
-
-
-
-[Python](https://www.python.org/) is a high-level, general-purpose programming language.
-
-- **Available binaries** - `python`, `pip`
-- **Globals directory** - `~/.local/bin`
-- **Detection sources** - [`.python-version`](https://github.com/pyenv/pyenv)
-
-## Rust
-
-
-
-[Rust](https://www.rust-lang.org/) (`rust`) is blazingly fast and memory-efficient systems language.
-
-:::caution
-
-If you're familiar with Rust, you most likely use [rustup](https://rustup.rs), a Rust specific
-toolchain manager. This overlaps heavily with how proto works, so instead of proto reinventing the
-wheel here, we simply call `rustup` under the hood. Because of this, be aware of the following when
-using Rust in proto:
-
-- Rust and Cargo must be pre-installed on your system.
-- The `~/.cargo/bin` directory must be in your `PATH`.
-- We don't install Rust to `~/.proto/tools/rust` but instead reference `~/.rustup/toolchains`.
-- We don't create shims for `cargo`, `rustup`, etc.
-
-:::
-
-Since we don't create shims for `cargo`, `rustup`, etc, we can't detect Rust versions at runtime.
-However, `rustup` supports this through the
-[`rust-toolchain.toml`](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file) file.
-We suggest using this file.
-
-```toml title="rust-toolchain.toml"
-[toolchain]
-profile = "default"
-channel = "1.68.0"
-```
+
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index f982afdb8a8..7eb8d9187b4 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -92,7 +92,7 @@ const config = {
items: [
{
to: '/moon',
- html: 'moon
System for managing codebases
',
+ html: 'moon
Build system for managing codebases
',
},
{
to: '/moonbase',
@@ -100,7 +100,7 @@ const config = {
},
{
to: '/proto',
- html: 'proto
Multi-language toolchain manager
',
+ html: 'proto
Multi-language version manager
',
},
{
to: 'https://espresso.build',
diff --git a/website/src/components/Docs/TomlLink.tsx b/website/src/components/Docs/TomlLink.tsx
new file mode 100644
index 00000000000..c084a140795
--- /dev/null
+++ b/website/src/components/Docs/TomlLink.tsx
@@ -0,0 +1,21 @@
+import React from 'react';
+import { faPuzzle } from '@fortawesome/pro-regular-svg-icons';
+import Label from '../../ui/typography/Label';
+
+export interface TomlLinkProps {
+ to: string;
+ noMargin?: boolean;
+}
+
+export default function TomlLink({ to, noMargin }: TomlLinkProps) {
+ return (
+
+
+
+ );
+}
diff --git a/website/src/components/Docs/WasmLink.tsx b/website/src/components/Docs/WasmLink.tsx
index 97280b6c1f3..fa5bad87743 100644
--- a/website/src/components/Docs/WasmLink.tsx
+++ b/website/src/components/Docs/WasmLink.tsx
@@ -4,12 +4,18 @@ import Label from '../../ui/typography/Label';
export interface WasmLinkProps {
to: string;
+ noMargin?: boolean;
}
-export default function WasmLink({ to }: WasmLinkProps) {
+export default function WasmLink({ to, noMargin }: WasmLinkProps) {
return (
-
-
+
+
);
}
diff --git a/website/src/components/Products/Proto/ToolCard.tsx b/website/src/components/Products/Proto/ToolCard.tsx
new file mode 100644
index 00000000000..612ad87e47d
--- /dev/null
+++ b/website/src/components/Products/Proto/ToolCard.tsx
@@ -0,0 +1,89 @@
+import React from 'react';
+import Link from '@docusaurus/Link';
+import Heading from '@site/src/ui/typography/Heading';
+import Text from '@site/src/ui/typography/Text';
+import CodeBlock from '@theme/CodeBlock';
+import Code from '@theme/MDXComponents/Code';
+import { ProtoTool } from '../../../data/proto-tools';
+import TomlLink from '../../Docs/TomlLink';
+import WasmLink from '../../Docs/WasmLink';
+
+export interface ToolCardProps {
+ id: string;
+ tool: ProtoTool;
+}
+
+export default function ToolCard({ id, tool }: ToolCardProps) {
+ const bins = tool.bins ?? [];
+ const dirs = tool.globalsDirs ?? [];
+ const detect = tool.detectionSources ?? [];
+ const usageId = tool.usageId ?? id;
+ let usage = `proto install ${usageId}`;
+
+ if (tool.pluginLocator) {
+ usage = `proto add-plugin ${usageId} "${tool.pluginLocator}"\n${usage}`;
+ }
+
+ return (
+