Simplify plugin installation and runtime loading around package-manager-owned dependencies, with Jiti reserved for local/TS fallback paths. Also scans npm plugin install roots so hoisted transitive dependencies are covered by dependency denylist and node_modules symlink checks.
7.5 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| Updating OpenClaw safely (global install or source), plus rollback strategy |
|
Updating |
Keep OpenClaw up to date.
Recommended: openclaw update
The fastest way to update. It detects your install type (npm or git), fetches the latest version, runs openclaw doctor, and restarts the gateway.
openclaw update
To switch channels or target a specific version:
openclaw update --channel beta
openclaw update --channel dev
openclaw update --tag main
openclaw update --dry-run # preview without applying
--channel beta prefers beta, but the runtime falls back to stable/latest when
the beta tag is missing or older than the latest stable release. Use --tag beta
if you want the raw npm beta dist-tag for a one-off package update.
See Development channels for channel semantics.
Switch between npm and git installs
Use channels when you want to change the install type. The updater keeps your
state, config, credentials, and workspace in ~/.openclaw; it only changes
which OpenClaw code install the CLI and gateway use.
# npm package install -> editable git checkout
openclaw update --channel dev
# git checkout -> npm package install
openclaw update --channel stable
Run with --dry-run first to preview the exact install-mode switch:
openclaw update --channel dev --dry-run
openclaw update --channel stable --dry-run
The dev channel ensures a git checkout, builds it, and installs the global CLI
from that checkout. The stable and beta channels use package installs. If the
gateway is already installed, openclaw update refreshes the service metadata
and restarts it unless you pass --no-restart.
Alternative: re-run the installer
curl -fsSL https://openclaw.ai/install.sh | bash
Add --no-onboard to skip onboarding. To force a specific install type through
the installer, pass --install-method git --no-onboard or
--install-method npm --no-onboard.
If openclaw update fails after the npm package install phase, re-run the
installer. The installer does not call the old updater; it runs the global
package install directly and can recover a partially updated npm install.
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method npm
To pin the recovery to a specific version or dist-tag, add --version:
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method npm --version <version-or-dist-tag>
Alternative: manual npm, pnpm, or bun
npm i -g openclaw@latest
When openclaw update manages a global npm install, it installs the target into
a temporary npm prefix first, verifies the packaged dist inventory, then swaps
the clean package tree into the real global prefix. That avoids npm overlaying a
new package onto stale files from the old package. If the install command fails,
OpenClaw retries once with --omit=optional. That retry helps hosts where native
optional dependencies cannot compile, while keeping the original failure visible
if the fallback also fails.
pnpm add -g openclaw@latest
bun add -g openclaw@latest
Advanced npm install topics
OpenClaw treats packaged global installs as read-only at runtime, even when the global package directory is writable by the current user. Plugin package installs live in OpenClaw-owned npm/git roots under the user config directory, and Gateway startup does not mutate the OpenClaw package tree.Some Linux npm setups install global packages under root-owned directories such as `/usr/lib/node_modules/openclaw`. OpenClaw supports that layout because plugin install/update commands write outside that global package directory.
Give OpenClaw write access to its config/state roots so explicit plugin installs, plugin updates, and doctor cleanup can persist their changes:
```ini
ReadWritePaths=/var/lib/openclaw /home/openclaw/.openclaw /tmp
```
Before package updates and explicit plugin installs, OpenClaw tries a best-effort disk-space check for the target volume. Low space produces a warning with the checked path, but does not block the update because filesystem quotas, snapshots, and network volumes can change after the check. The actual package-manager install and post-install verification remain authoritative.
Auto-updater
The auto-updater is off by default. Enable it in ~/.openclaw/openclaw.json:
{
update: {
channel: "stable",
auto: {
enabled: true,
stableDelayHours: 6,
stableJitterHours: 12,
betaCheckIntervalHours: 1,
},
},
}
| Channel | Behavior |
|---|---|
stable |
Waits stableDelayHours, then applies with deterministic jitter across stableJitterHours (spread rollout). |
beta |
Checks every betaCheckIntervalHours (default: hourly) and applies immediately. |
dev |
No automatic apply. Use openclaw update manually. |
The gateway also logs an update hint on startup (disable with update.checkOnStart: false).
For downgrade or incident recovery, set OPENCLAW_NO_AUTO_UPDATE=1 in the gateway environment to block automatic applies even when update.auto.enabled is configured. Startup update hints can still run unless update.checkOnStart is also disabled.
Package-manager updates requested through the live Gateway control-plane handler
force a non-deferred, no-cooldown update restart after the package swap. That
avoids leaving an old in-memory process around long enough to lazy-load chunks
from a package tree that has already been replaced. Shell openclaw update
remains the preferred path for supervised installs because it can stop and
restart the service around the update.
After updating
Run doctor
openclaw doctor
Migrates config, audits DM policies, and checks gateway health. Details: Doctor
Restart the gateway
openclaw gateway restart
Verify
openclaw health
Rollback
Pin a version (npm)
npm i -g openclaw@<version>
openclaw doctor
openclaw gateway restart
Pin a commit (source)
git fetch origin
git checkout "$(git rev-list -n 1 --before=\"2026-01-01\" origin/main)"
pnpm install && pnpm build
openclaw gateway restart
To return to latest: git checkout main && git pull.
If you are stuck
- Run
openclaw doctoragain and read the output carefully. - For
openclaw update --channel devon source checkouts, the updater auto-bootstrapspnpmwhen needed. If you see a pnpm/corepack bootstrap error, installpnpmmanually (or re-enablecorepack) and rerun the update. - Check: Troubleshooting
- Ask in Discord: https://discord.gg/clawd
Related
- Install overview: all installation methods.
- Doctor: health checks after updates.
- Migrating: major version migration guides.