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

Weft The book

Install

This gets you a weft runtime on your own machine, the weft command, and the graph editor in VS Code. It is mostly waiting, so keep reading while it runs.

Docker has to be there first. weft’s runtime is a program on your machine. Its database, its file store and the infrastructure your programs ask for (a database, a model server) run in Docker containers next to it, and your programs themselves run as plain processes, each in its project’s folder. If Docker is missing, the installer stops and prints the link to install it.

You also need Rust whenever weft has to compile something on your machine: a project with nodes of its own or with a standard node you edited (under nodes/base_catalog/), a project you build with --referenced, a live node test, and ./setup.sh --rebuild. The install itself needs it on a branch’s install, which always builds the CLI and the standard worker from source. The default install needs it whenever it cannot use what CI published for your exact checkout: you have local changes, CI has not finished building the commit you just pulled, you passed --debug or --from-source, or the release has nothing for your kind of machine. The installer says which one it hit, then compiles what it could not download. For which projects compile and which share the standard worker, go and read the worker.

The installer is a bash script, so on Windows run it inside WSL.

Install

curl -fsSL https://weft.weavemind.ai/install.sh | bash

It downloads weft into ~/weft and runs the installer from there. To put it somewhere else, start the line with WEFT_DIR=<folder>. Leave that folder where it is afterwards: weft reads its standard library and its assistant templates from it.

On a fresh machine the installer asks no questions: the first run starts the database and pulls images, then sets the runtime up as a service of your user (systemd on Linux, launchd on macOS), so it comes back on its own after a reboot. Each long step shows a spinner with the last line it printed; if you want to see everything as it happens, add bash -s -- --verbose in place of the final bash.

Put your keys in

Fill in the services you expect to use often, and leave the rest alone. We recommend at least OpenRouter, because a single key there reaches most models.

A service you set up here becomes one click forever after: a node that calls it picks the key up on its own, and your AI assistant can wire one in without stopping to ask you for anything. A service you skip asks you for a credential the first time you need it, which is fine for the ones you touch once.

cd ~/weft
cp access-apps.example.json access-apps.json

Open it and edit in place, leaving the services you are not using on their placeholder values. weft ignores an entry it cannot use, and reads the file each time it needs a key, so a change takes effect at once.

  "openrouter": [{
    "kind": "api_key",
    "label": "Runtime key",
    "key": "sk-or-REPLACE_WITH_YOUR_KEY"
  }],

The file also ships entries for Slack, Google, Notion, Airtable, fal, ElevenLabs, Exa, Firecrawl and Mistral. Most of them just need a key pasted in. Slack and Google want you to register an application with that provider first, which is a longer job, so do those only if they are services you will live in. For the whole format, go and read the apps file.

Check it came up

weft daemon status

A healthy answer counts your projects:

weft: running at http://127.0.0.1:14111 (install 'default'); 0 project(s)
public address: closed

closed there is the normal state and not a fault. It means nothing of yours is reachable from the internet, which is what you want until you need a public address.

If it says weft: unreachable at ..., run weft daemon logs to see how the runtime’s log ends (the line also names the log file), then run the install line again and read the last block it prints. If that block has scrolled away, every run writes the same thing to ~/.local/share/weft/setup-runs.log.

Two things that can go differently.

If weft is not found, the installer warned that its directory is not on your PATH and printed an export PATH=... line. Put that line in your shell’s startup file (~/.bashrc for bash, ~/.zshrc for zsh) and open a new terminal.

If VS Code was closed, or code is not on your PATH, the installer built the editor extension but could not install it, and printed the exact code --install-extension ... command to finish the job. Without the extension everything the weft command does still works; you just will not see the graph.

The installer also needs Rust when it cannot download a prebuilt weft for your machine, and Node 22.12 or newer with pnpm when it cannot download a prebuilt editor extension. It tells you which, up front, and stops rather than half-installing.

Add the browser extension

When a program stops to ask a person something, the question shows up in a browser extension called Weft tasks. Install it now, from Firefox Add-ons or the Chrome Web Store, and close it again. It has nothing to show you yet. You connect it to your runtime in putting a person in the loop.

Keep your projects elsewhere

Your projects do not belong inside ~/weft. Go wherever you keep code:

cd ~/code

Then build your first program.

When you come back to this page

To change your keys, edit ~/weft/access-apps.json; the change takes effect at once (the apps file).

To update, run weft maintenance on first, which takes down every trigger that is on and stops your programs’ infrastructure, then run the install line again, then weft maintenance off, which builds those projects again on the new weft and brings back exactly what on took down. The install line updates ~/weft and runs the installer, the same as git pull and ./setup.sh in that folder, and the installer refuses to replace the running weft while something is on. Your projects and their history stay where they are. Before you do, check the changelog for anything that needs you. For what each step does, go and read updating weft.

If something in a project does not come back with weft maintenance off, everything else is back anyway, and off says what went wrong. If the message says the project’s copy of the standard nodes is older than this weft, run weft catalog update in that folder (it replaces nodes/base_catalog/, so any edits you made in there are lost); otherwise fix what it says. Then run weft resync there, which builds the project and brings back what the update took down.

If you installed weft before it stopped running on Kubernetes, that update is the exception: its database cannot come along. ./setup.sh finds the old install and asks before wiping it. The wipe deletes the old cluster, your run history, versions and stored connections, and every container and image weft made, along with every named install on the machine (the question lists them). Your project folders stay, and weft run registers them again. If ./setup.sh has no terminal to ask on, run scripts/scrub-old-install.sh yourself first.

If your install’s database was built before executions were renamed runs, that update starts it over too. ./setup.sh asks before wiping that one install’s database: its run history, versions and stored connections go, and so does everything only that database gave a meaning to (the files the install stored, and the workers and infra of its projects). Your project folders, the install’s settings and every other install stay. Without a terminal to ask on, run ./setup.sh --yes.

To remove it, run ./setup.sh --uninstall in ~/weft. It stops the runtime and removes the CLI and the editor extension. Your database, stored connections and your programs’ infrastructure stay, so a later ./setup.sh brings everything back. Adding --purge deletes all of that too, your programs’ own databases included.