Which Node.js version does OpenClaw need?
Node 24.16+ or 26.1+, with 26 recommended; Node 22 and 25 were dropped in OpenClaw 2026.9.3. How to check yours, what OpenClaw offers when it is too old, the npm --allow-scripts flag, and updating Node without breaking other projects.
Since OpenClaw 2026.9.3, its install docs require Node 24.16+ or 26.1+, and recommend Node 26; Node 22, 23 and 25 are no longer supported. Check what you have with node -v. Note the shape of that requirement: it’s not “24 or newer” but a minimum within each release line, so a machine on, say, 24.10 fails the bar even though “24” sounds fine. If you have no Node at all, the official installer script provisions it for you; if you have an old one, update Node first and OpenClaw second, or let OpenClaw’s own offer, below, fetch a Node just for itself.
Why the requirement looks like two numbers
Node ships several supported release lines at once (even-numbered LTS lines like 24, plus the current line), and each gets its own patch releases. OpenClaw stores its sessions in SQLite through Node’s built-in node:sqlite, and its compatibility page records that the module’s text decoder in Node 22.23.x, 24.15.0, 25.9.0 and 26.0.0 “silently truncates values at embedded NUL characters.” The first fixed releases are 24.16.0 and 26.1.0, hence a minimum per line rather than one floor, and why OpenClaw 2026.9.3 dropped Node 22 and 25 outright. The practical reading: if you’re installing fresh, take the recommended Node 26 (the docs say it starts the Gateway faster and uses less memory than 24); if your machine already runs 24.x for other work, make sure it’s 24.16 or later; a machine on 22.x needs a newer line. node -v answers in one line.
When your Node is too old
Run an OpenClaw command under an unsupported Node in an interactive terminal and the CLI offers Update NodeJS: Y/N [N]. Yes downloads a checksum-verified Node for OpenClaw alone into ~/.openclaw/tools/cli-node and retries the command; later commands reuse it whenever the active Node is unsupported. It doesn’t replace your system Node or touch your shell settings, and it doesn’t reinstall OpenClaw or repair or restart the Gateway service. It works on macOS, Windows and glibc Linux on x64 and ARM64, and never prompts in scripts or CI. openclaw update does the same quietly when the release it is moving to needs a newer Node than the one running.
“Will updating Node break my other projects?”
This is the real hesitation behind the question, and the answer is: usually not, but don’t find out the hard way on a machine that matters. Most JavaScript projects declare supported Node ranges in package.json (engines), and mainstream frameworks support the active LTS lines. The clean solution is a version manager (nvm on macOS/Linux, nvm-windows or fnm elsewhere), which installs Node versions side by side and switches per shell or per project. Your legacy project keeps its Node; OpenClaw gets its modern one; nothing fights. One wrinkle to know: npm install -g installs into the currently active Node version’s directory, so with a version manager, OpenClaw lives under whichever version was active when you installed it. Switch lines later and you’ll reinstall or re-link it.
The npm flag that surprises people
npm 12 no longer runs package install scripts it hasn’t been told to allow, and OpenClaw needs its scripts to set up properly. The documented install on npm 12, or on npm 11.16 and later, is:
npm install -g openclaw@latest --allow-scripts=openclawCopiedIf you installed with plain npm install -g openclaw@latest on npm 12 and something feels half-set-up, this flag is the first thing to check (npm reports the scripts as “blocked because they are not covered by allowScripts”). npm 11.16 accepts the flag and runs the scripts either way; npm 11.15 and older don’t know the flag, so leave it off there. The npm approve-scripts openclaw that npm 11.16 suggests fails for a global install. What each command does from there (openclaw onboard --install-daemon and friends) is covered in the full install guide.
Machines where you skip this entirely
Two paths sidestep Node versioning altogether. The official installer script detects a missing Node and provisions one itself; the docs note it handles that automatically. And the Docker route packages a known-good Node inside the image, which is part of why container installs appeal for servers: the version question becomes the image publisher’s problem, not yours. On Windows the picture has one extra layer (native vs WSL2 changes where Node lives), and if you’re updating an existing install rather than starting fresh, the update guide’s ritual applies: check versions, read the release, then move.