If install succeeds but `openclaw` is not found in a new terminal, see [Node.js troubleshooting](/install/node#troubleshooting).
install.sh
tip
Recommended for most interactive installs on macOS/Linux/WSL.
Flow (install.sh)
Detect OS
Supports macOS and Linux (including WSL). If macOS is detected, installs Homebrew if missing.
Ensure Node.js 24 by default
Checks Node version and installs Node 24 if needed (Homebrew on macOS, NodeSource setup scripts on Linux apt/dnf/yum). OpenClaw still supports Node 22 LTS, currently `22.14+`, for compatibility.
Ensure Git
Installs Git if missing.
Install OpenClaw
* `npm` method (default): global npm install
* `git` method: clone/update repo, install deps with pnpm, build, then install wrapper at `~/.local/bin/openclaw`
Post-install tasks
* Refreshes a loaded gateway service best-effort (`openclaw gateway install --force`, then restart)
* Runs `openclaw doctor --non-interactive` on upgrades and git installs (best effort)
* Attempts onboarding when appropriate (TTY available, onboarding not disabled, and bootstrap/config checks pass)
* Defaults `SHARP_IGNORE_GLOBAL_LIBVIPS=1`
Source checkout detection
If run inside an OpenClaw checkout (
text
package.json
+
text
pnpm-workspace.yaml
), the script offers:
use checkout (
text
git
), or
use global install (
text
npm
)
If no TTY is available and no install method is set, it defaults to
Designed for environments where you want everything under a local prefix
(default `~/.openclaw`) and no system Node dependency. Supports npm installs
by default, plus git-checkout installs under the same prefix flow.
Flow (install-cli.sh)
Install local Node runtime
Downloads a pinned supported Node LTS tarball (the version is embedded in the script and updated independently) to `/tools/node-v` and verifies SHA-256.
Ensure Git
If Git is missing, attempts install via apt/dnf/yum on Linux or Homebrew on macOS.
Install OpenClaw under prefix
* `npm` method (default): installs under the prefix with npm, then writes wrapper to `/bin/openclaw`
* `git` method: clones/updates a checkout (default `~/openclaw`) and still writes the wrapper to `/bin/openclaw`
Refresh loaded gateway service
If a gateway service is already loaded from that same prefix, the script runs
`openclaw gateway install --force`, then `openclaw gateway restart`, and
probes gateway health best-effort.
If missing, attempts install via winget, then Chocolatey, then Scoop. Node 22 LTS, currently `22.14+`, remains supported for compatibility.
Install OpenClaw
* `npm` method (default): global npm install using selected `-Tag`
* `git` method: clone/update repo, install/build with pnpm, and install wrapper at `%USERPROFILE%\.local\bin\openclaw.cmd`
Post-install tasks
* Adds needed bin directory to user PATH when possible
* Refreshes a loaded gateway service best-effort (`openclaw gateway install --force`, then restart)
* Runs `openclaw doctor --non-interactive` on upgrades and git installs (best effort)
Handle failures
`iwr ... | iex` and scriptblock installs report a terminating error without closing the current PowerShell session. Direct `powershell -File` / `pwsh -File` installs still exit non-zero for automation.