docs/install/development-channels.md
OpenClaw ships three update channels:
latest. Recommended for most users.beta when it is current; if beta is missing or older than
the latest stable release, the update flow falls back to latest.main (git). npm dist-tag: dev (when published).
The main branch is for experimentation and active development. It may contain
incomplete features or breaking changes. Do not use it for production gateways.We usually ship stable builds to beta first, test them there, then run an
explicit promotion step that moves the vetted build to latest without
changing the version number. Maintainers can also publish a stable release
directly to latest when needed. Dist-tags are the source of truth for npm
installs.
openclaw update --channel stable
openclaw update --channel beta
openclaw update --channel dev
--channel persists your choice in config (update.channel) and aligns the
install method:
stable (package installs): updates via npm dist-tag latest.beta (package installs): prefers npm dist-tag beta, but falls back to
latest when beta is missing or older than the current stable tag.stable (git installs): checks out the latest stable git tag.beta (git installs): prefers the latest beta git tag, but falls back to
the latest stable git tag when beta is missing or older.dev: ensures a git checkout (default ~/openclaw, override with
OPENCLAW_GIT_DIR), switches to main, rebases on upstream, builds, and
installs the global CLI from that checkout.Use --tag to target a specific dist-tag, version, or package spec for a single
update without changing your persisted channel:
# Install a specific version
openclaw update --tag 2026.4.1-beta.1
# Install from the beta dist-tag (one-off, does not persist)
openclaw update --tag beta
# Install from GitHub main branch (npm tarball)
openclaw update --tag main
# Install a specific npm package spec
openclaw update --tag [email protected]
Notes:
--tag applies to package (npm) installs only. Git installs ignore it.openclaw update uses your configured
channel as usual.--yes).--channel beta is different from --tag beta: the channel flow can fall back
to stable/latest when beta is missing or older, while --tag beta targets the
raw beta dist-tag for that one run.Preview what openclaw update would do without making changes:
openclaw update --dry-run
openclaw update --channel beta --dry-run
openclaw update --tag 2026.4.1-beta.1 --dry-run
openclaw update --dry-run --json
The dry run shows the effective channel, target version, planned actions, and whether a downgrade confirmation would be required.
When you switch channels with openclaw update, OpenClaw also syncs plugin
sources:
dev prefers bundled plugins from the git checkout.stable and beta restore npm-installed plugin packages.openclaw update status
Shows the active channel, install kind (git or package), current version, and source (config, git tag, git branch, or default).
vYYYY.M.D for stable,
vYYYY.M.D-beta.N for beta).vYYYY.M.D.beta.N is also recognized for compatibility, but prefer -beta.N.vYYYY.M.D-<patch> tags are still recognized as stable (non-beta).latest -> stablebeta -> candidate build or beta-first stable builddev -> main snapshot (optional)Beta and dev builds may not include a macOS app release. That is OK: