OpenClaw Release Channels: Stable, Beta, Dev, and Extended-Stable
Learn about OpenClaw's four update channels: stable, extended-stable, beta, and dev. This page explains their semantics, switching, pinning, and tagging for users and maintainers.
Read this when
- You want to switch between stable/extended-stable/beta/dev
- You want to pin a specific version, tag, or SHA
- You are tagging or publishing prereleases
OpenClaw provides four update channels:
- stable: npm dist-tag
latest. Suggested for the majority of users. - extended-stable: npm dist-tag
extended-stable. A brand new, trailing supported-month package channel. This channel is package only and requires a foreground installation. Whenupdate.checkOnStartis turned on, a saved selection gets read only update hints, but no automatic application occurs. - beta: npm dist-tag
beta. Falls back tolatestwhenbetais absent or older than the current stable release. - dev: moving head of
main(git). npm dist-tagdevwhen published.mainis meant for experimentation and active development; it may include unfinished features or breaking changes. Do not use it on production gateways.
Stable releases are typically sent to beta first, undergo testing there, and then move to latest without a version increment. Maintainers may also publish straight to latest. Dist-tags serve as the authoritative source for npm installations.
Switching channels
openclaw update --channel stable
openclaw update --channel extended-stable
openclaw update --channel beta
openclaw update --channel dev
--channel saves the selection to update.channel in configuration and controls both installation methods:
| Channel | npm/package installs | git installs |
|---|---|---|
stable | dist-tag latest | latest stable git tag (excludes -alpha.N, -beta.N, -rc.N, -dev.N, -next.N, -preview.N, -canary.N, -nightly.N, and other named prerelease suffixes) |
extended-stable | resolves the public npm extended-stable selector, verifies the exact selected package, and installs that exact version. Fails closed with no fallback to latest, beta, or dev. | unsupported: OpenClaw leaves the checkout unchanged and asks you to use a package installation |
beta | dist-tag beta, falling back to latest when beta is missing or older | latest beta git tag, falling back to the latest stable git tag when beta is missing or older |
dev | dist-tag dev (rare; most dev users run git installs) | fetches, rebases the checkout on the upstream main branch, builds, and reinstalls the global CLI |
For dev git installs, the default checkout is ~/openclaw (or
$OPENCLAW_HOME/openclaw when OPENCLAW_HOME is set); override with
OPENCLAW_GIT_DIR.
Tip
To keep stable and dev in parallel, use two separate checkouts and point each gateway at its own.
One-off version or tag targeting
Use --tag to aim at a particular dist-tag, version, or package spec for a
single update without altering the stored 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
# Switch to the moving GitHub main checkout (persistent)
openclaw update --channel dev
# Install a specific npm package spec
openclaw update --tag openclaw@2026.4.1-beta.1
# Install from GitHub main once without persisting the channel
openclaw update --tag main
Notes:
--tagapplies exclusively to package (npm) installs; git installs do not respect it.- The tag is not stored; the next
openclaw updateuses the configured channel. --tag mainresolves to the npm compatible specgithub:openclaw/openclaw#mainfor that single execution. For a persistent movingmaininstall, useopenclaw update --channel dev(package installs switch to a git checkout) or reinstall with the installer's git method:curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git --version main. The npm install path rejects GitHub/git source targets outright and points you at the git method instead.- Downgrade protection: if the target version is older than the current version, OpenClaw asks for confirmation (skip with
--yes). - Extended-stable always uses its verified exact package target. It is not a one-off alias for
--tag extended-stable, and--tagcannot be paired with an effective extended-stable channel. --channel betadiffers from--tag beta: the channel flow can fall back to stable/latest when beta is missing or older, while--tag betaalways targets the rawbetadist-tag for that single execution.
Dry run
Preview what openclaw update would do without applying any 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
A dry run displays the effective channel, the target version, the actions that will be performed, and whether a downgrade would prompt a confirmation.
Plugins and channels
When you switch channels with openclaw update, plugin sources are also synchronised:
devreverts any installed plugin that has a bundled equivalent back to its bundled (git checkout) source.stableandbetabring back plugin packages that were installed via npm or ClawHub.extended-stableresolves eligible official npm plugins with a bare/default orlatestintent to match the exact installed core version. Plugin@extended-stabletags are not queried at runtime.- After the core update finishes, any npm-installed plugins are updated.
Checking current status
openclaw update status
Displays the active channel along with the source that determined it (config, git tag, git branch, installed version, or default), the install type (git or package), the current version, and whether an update is available.
Tagging best practices
- To direct git checkouts to a particular release, use
vYYYY.M.PATCHfor stable andvYYYY.M.PATCH-beta.Nfor beta. Named prerelease suffixes like-alpha.N,-rc.N, and-next.Ndo not count as stable or beta targets. - For backwards compatibility, legacy numeric stable tags such as
vYYYY.M.PATCH-1andv1.0.1-1are still treated as stable git tags. vYYYY.M.PATCH.beta.N(dot-separated) is also accepted for compatibility;-beta.Nis the preferred alternative.- Tags must remain immutable: never move or reuse a tag.
- For npm installs, npm dist-tags are the authoritative source:
latestpoints to stableextended-stablepoints to the trailing supported-month package releasebetapoints to a candidate build or a beta-first stable builddevpoints to the main snapshot (optional)
macOS app availability
Beta and dev builds might not include a macOS app release. That is acceptable:
- The git tag and npm dist-tag can still be published independently.
- Mention "no macOS build for this beta" in the release notes or changelog.