goofi v3.0.0

Install and run

Three tools have to be on PATH: rustup, Node.js, and uv. The compiler version is pinned in rust-toolchain.toml at 1.97.1, so rustup fetches the right one on the first build.

a fresh clone
# rustup, Node.js and uv must be on PATH.
# The Rust toolchain itself is pinned in rust-toolchain.toml (1.97.1),
# so rustup fetches the right one on the first build.

git clone https://github.com/KairosHive/goofi
cd goofi

cargo run -p goofi-init   # once per clone
cargo run                 # prints the URL

cargo run -p goofi-init prepares the build environment and creates the Python virtual environments goofi needs. Re-run it after any version change.

cargo run then compiles goofi's backend and builds the browser-based frontend. It is also the command to start goofi once it is built; in a future release, that will simply be the goofi CLI. When it is done, it prints the URL to open in a browser.

Indexing custom node directories

Every node goofi ships lives in node-bundles/, one directory per bundle, and every bundle is built into goofi, so cargo run carries all 165 types without a flag.

--extra-nodes adds a root of your own, scanned after the shipped bundles:

cargo run -- --extra-nodes ~/my-nodes

goofi-init installs every shipped bundle's requirements. At startup goofi checks every scanned root's requirements against both interpreters. A terminal is asked before anything is installed, and without one the nodes that need them are listed as unavailable. See Bundles.

Disabling the graphical interface

GOOFI_HEADLESS=1 is --headless spelled as an environment variable, and it applies to the build as well. Set for cargo build, it leaves the app out of the binary entirely: Node.js is not needed, and the binary is headless without the flag at run time.

GOOFI_HEADLESS=1 cargo build --release   # the app is left out of the binary entirely

A headless instance serves the API alone: /control, /data, /term and /mcp. The app is not served, and the layout ops go with it.