Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Install

One script builds everything and leaves a working runtime on your machine.

git clone https://github.com/WeaveMindAI/weft.git
cd weft
./setup.sh

On a clean checkout the first run downloads the CLI, the extension and the container images from the latest published build, creates a local Kubernetes cluster, and starts the runtime; no Rust or Node toolchain needed. Once you change any file, the script compiles from source instead (which needs the toolchains below), and later runs redo only what changed.

What you need first

The script checks for what your run needs before it starts and names every missing tool at once.

ToolWhyGet it
dockerruns Postgres and the clusterdocs.docker.com
kubectltalks to the local clusterkubernetes.io
kindthe local cluster itselfkind.sigs.k8s.io
cargocompiles the CLI and the runtime, once you have local changesrustup.rs
node 20+ and pnpmbuilds the VS Code extension, once you have local changesnodejs.org, then npm i -g pnpm

If you are on macOS you also need a newer Bash than the one Apple ships: brew install bash.

And if you only want part of it, the flags below skip the rest and skip their checks with them. If a published binary turns out broken, --from-source compiles the CLI and the extension locally even on a clean checkout.

What you get

One binary, weft, symlinked into ~/.local/bin. If that is not on your PATH, the script prints the exact line to add to your shell config.

The runtime itself is not a binary on your machine: the dispatcher and the workers run as containers in the local cluster, which is why the script builds images as well as compiling. Plus the VS Code extension, where the graph view and the live execution view live.

The script leaves the runtime up, so by the time it finishes the daemon is listening on port 9999 and you can go straight to your first program.

Picking a subset

Flags combine, so --cli --daemon does both and skips the editor.

If you wantPass
just the weft command--cli
just the runtime rebuilt and restarted--daemon
just the VS Code extension--vscode
just the browser extension, which is opt-in because it signs with Mozilla and builds every browser target--browser
the CLI compiled much faster, while you are iterating--debug
the binary somewhere other than ~/.local--prefix PATH
everything but the daemon refresh--no-daemon
an extension release: bumps its version, which is what makes CI publish the pushed commit to the stores--bump (with --vscode and/or --browser; the default install covers --vscode)

Your settings file

Weft reads a .env next to your project, and there is nothing in it you need to get started. Two settings are worth knowing about before you store anything you care about: CREDENTIAL_ENCRYPTION_KEY, which seals stored credentials at rest and boots with a development key until you set it, and WEFT_PUBLIC_TUNNEL_TOKEN, if you want a permanent public address rather than a fresh random one each time. The full list is the environment.

A malformed .env fails the boot rather than being half applied.

Removing it

There are two levels of it, depending on whether you want your work back afterwards.

./setup.sh --uninstall            # take the tools away, keep the work
./setup.sh --uninstall --purge    # take everything

--uninstall stops the daemon, removes the VS Code extension, and drops the weft symlink. It deliberately keeps the cluster, the database, the object store and its volume, the built images, the BuildKit cache, and target/. Run ./setup.sh again and your projects and their whole execution history are back in seconds.

Neither is ever needed to apply an update. ./setup.sh brings an existing install to whatever the code now says: the schema, the images, the manifests, the ingress and gateway controllers, and the object store’s container. When the cluster’s shape or your kind version has moved, it rebuilds the cluster too, and says so first, because every project’s own database lives inside the cluster’s node and dies with it. Your system database survives a rebuild either way; its files live in ~/.local/share/weft/postgres-data rather than inside the cluster.

--purge is the real clean slate: the cluster goes, the images go, the database volume goes. Reach for it when you want to prove a fresh machine would work.

A note on the cluster

Weft runs your programs as pods on Kubernetes, including on your laptop, where the cluster is a single kind node inside Docker. That is what lets a project ask for a Postgres, a headless browser, or a model server as a node you drop on the graph, and get a real container with health checks and a lifecycle.

You never write YAML. You will not think about the cluster again until you read Infrastructure nodes.

Next: your first program.