@@ -3,42 +3,43 @@ title: OpenClaw LTS Release Policy
33authors :
44 - Kevin Lin
55created : 2026-05-27
6- last_updated : 2026-05-27
6+ last_updated : 2026-05-28
77rfc_pr : TBD
88---
99
1010# Proposal: OpenClaw LTS Release Policy
1111
1212## Summary
1313
14- Add an opt-in OpenClaw LTS channel by designating selected already-shipped
15- stable releases for longer support. Daily ` stable ` releases remain the default
16- install and update path, while ` lts ` becomes a first-class package and update
17- target backed by a fixed active LTS branch, the npm ` lts ` dist-tag, explicit
18- support dates, narrow backport rules, and documented plugin compatibility.
14+ Add an opt-in OpenClaw support channel by designating selected monthly release
15+ lines for longer support. The fast/latest train remains the default install and
16+ update path, while ` lts ` becomes a first-class package and update target backed
17+ by support-line tags, explicit support dates, narrow backport rules, and
18+ documented plugin compatibility.
1919
2020## Motivation
2121
22- OpenClaw's daily stable cadence gives users fast access to fixes and
22+ OpenClaw's fast stable cadence gives users quick access to fixes and
2323improvements, but some operators need a lower-churn supported line for
2424production or enterprise deployments. Those users need predictable install
2525commands, a bounded support window, explicit backport criteria, and a clear
2626answer for whether core packages and plugins remain compatible.
2727
2828The LTS policy should provide that stability without creating a second default
29- release train. The daily stable release remains the proving ground. Maintainers
30- select a stable release for LTS only after it has shipped, soaked, and produced
31- the normal release evidence.
29+ release train. The fast/latest stable release remains the proving ground.
30+ Maintainers select a monthly line for support only after it has shipped, soaked,
31+ and produced the normal release evidence.
3232
3333## Goals
3434
35- - Preserve daily ` stable ` as the default install and update target.
35+ - Preserve the fast/latest ` stable ` train as the default install and update
36+ target.
3637- Add ` lts ` as an explicit opt-in channel for package installs and
3738 ` openclaw update ` .
38- - Designate LTS from already-shipped stable releases instead of building a
39- separate release factory.
40- - Reuse existing stable correction versions such as ` YYYY.M.D- N ` .
41- - Maintain one active LTS line by default.
39+ - Use SemVer-compatible monthly lines: ` YYYY.M.PATCH ` .
40+ - Keep beta on the fast/latest train as prereleases such as
41+ ` YYYY.M.PATCH-beta. N ` .
42+ - Maintain one trailing monthly support line by default as the first step .
4243- Define the LTS support window, eligible backports, validation bar, docs
4344 obligations, and end-of-life behavior.
4445- Make bundled and explicitly-covered official plugin compatibility part of
@@ -47,39 +48,46 @@ the normal release evidence.
4748
4849## Non-Goals
4950
50- - Changing the daily stable release cadence.
51+ - Changing the default fast/latest release cadence.
5152- Making LTS the default install target.
5253- Introducing a new ` -lts ` version suffix or version family.
5354- Guaranteeing support for every external plugin.
5455- Backporting normal feature work, refactors, or broad compatibility churn.
55- - Blocking daily stable releases on LTS maintenance work.
56+ - Blocking fast/latest stable releases on LTS maintenance work.
5657- Defining a multi-line LTS program before maintainers intentionally expand
5758 support capacity.
5859
5960## Proposal
6061
6162### Policy model
6263
63- OpenClaw LTS is a support designation applied to a selected stable release after
64- that release ships through the normal release process. LTS is additive: it does
65- not replace ` stable ` , ` beta ` , or ` dev ` , and it does not slow the daily stable
66- train.
64+ OpenClaw LTS is a support designation applied to a selected monthly release
65+ line after that line ships through the normal release process. LTS is additive:
66+ it does not replace ` stable ` , ` beta ` , or ` dev ` , and it does not slow the
67+ fast/latest stable train.
6768
6869The initial policy is:
6970
7071- ` stable ` remains the default user-facing version and continues to track the
71- newest daily stable release.
72- - Maintainers may designate an already-shipped stable release as the active LTS
73- base.
74- - LTS maintenance releases keep the existing stable correction format
75- ` YYYY.M.D-N ` .
76- - OpenClaw supports at most one active LTS line at a time by default.
72+ newest stable release in the fast/latest train.
73+ - Maintainers may designate an already-shipped monthly line as the active LTS
74+ line.
75+ - Monthly-line releases use ` YYYY.M.PATCH ` . For example, ` 2026.6.0 ` ,
76+ ` 2026.6.1 ` , and ` 2026.6.2 ` are all June 2026 line releases.
77+ - Patch numbers can grow as high as needed, so multiple releases on the same
78+ day are handled by incrementing ` PATCH ` .
79+ - Beta remains the fast/latest train prerelease channel, for example
80+ ` 2026.6.3-beta.1 ` .
81+ - Future support tags may point at monthly lines, for example ` stable-2026-6 `
82+ or ` lts-2026-6 ` .
83+ - OpenClaw supports one trailing monthly support line by default as the first
84+ step, not a long LTS promise.
7785- Users opt in through ` openclaw update --channel lts ` , ` openclaw@lts ` , or an
7886 installer option that resolves to the same LTS package target.
7987
8088### LTS selection
8189
82- Maintainers may designate a stable release as LTS only when all of the following
90+ Maintainers may designate a monthly line as LTS only when all of the following
8391are true:
8492
8593- The release already shipped as a normal stable release through the existing
@@ -91,20 +99,25 @@ are true:
9199- The release has a published compatibility coverage table for bundled plugins
92100 and any official external plugins covered by the LTS promise.
93101- The release has soaked long enough in the stable population for maintainers to
94- judge it lower risk than the moving daily tip.
102+ judge it lower risk than the moving fast/latest tip.
95103
96104This makes LTS a promotion decision on a stable artifact, not a parallel
97105artifact-build process.
98106
99107### Support window
100108
101- Each LTS line receives six months of active support from designation. The final
102- month is maintenance-only: new backports are limited to security fixes and
103- critical install, update, or upgrade blockers.
109+ The first support-line step is intentionally short: one trailing monthly support
110+ line at a time. The support window should be long enough to build branch, patch,
111+ validation, docs, and update-channel muscle, without making a long LTS promise
112+ before the process has proven itself.
104113
105- At end of life, users should move to either the current daily ` stable ` line or
106- the next designated LTS line. Before the active LTS line reaches end of life,
107- maintainers must retarget the active LTS selector to the next supported line.
114+ The policy can expand later toward quarterly or yearly support lines and 4-12
115+ month support windows after the monthly support-line process works.
116+
117+ At end of life, users should move to either the current fast/latest ` stable `
118+ line or the next designated LTS line. Before the active LTS line reaches end of
119+ life, maintainers must retarget the active LTS selector to the next supported
120+ line.
108121
109122### Eligible backports
110123
@@ -115,8 +128,8 @@ LTS backports are intentionally narrow. Eligible changes are:
115128 notarization, or registry publication working.
116129- Critical regressions in core agent, gateway, update, or packaged install
117130 flows.
118- - Upgrade blockers from the base LTS release or an earlier correction in the
119- same LTS line.
131+ - Upgrade blockers from the base LTS release or an earlier patch in the same
132+ LTS line.
120133- Bundled-plugin or explicitly-supported official-plugin compatibility fixes.
121134- Release-blocking docs or operator guidance corrections where the current docs
122135 would cause normal install, upgrade, or recovery paths to fail.
@@ -133,37 +146,41 @@ Fixes land on `main` first, then are cherry-picked to the maintained LTS branch.
133146
134147### Branch, tag, and publish mechanics
135148
136- The normal daily stable process continues to cut ` release/YYYY.M.D ` branches
137- from ` main ` and publish stable releases . LTS designation adds active-channel
138- metadata and a maintenance branch around an already-published release .
149+ The normal fast/latest stable process publishes SemVer-compatible monthly-line
150+ versions from ` main ` using ` YYYY.M.PATCH ` . LTS designation adds active-channel
151+ metadata and a maintenance selector around an already-published monthly line .
139152
140153The active LTS branch model is:
141154
142- - Maintainers create ` release/lts ` from the selected stable release line.
143- - ` release/lts ` is the canonical git-side selector for the active LTS line.
144- - LTS corrections use existing stable correction tags such as ` vYYYY.M.D-N ` .
155+ - Maintainers create an active support branch or tag selector from the selected
156+ monthly line.
157+ - The active support branch or tag selector is the canonical git-side selector
158+ for the active LTS line.
159+ - LTS patches use normal patch increments within the monthly line, for example
160+ ` 2026.6.1 ` and ` 2026.6.2 ` .
145161- ` main ` continues to move independently and is never gated by LTS maintenance.
146- - When an LTS line retires, maintainers retarget ` release/lts ` to the next
147- active LTS line and may preserve the retired line as
148- ` release/lts-{version} ` for history.
162+ - When an LTS line retires, maintainers retarget the active support selector to
163+ the next active LTS line and may preserve the retired line for history.
149164
150165The package publication model is:
151166
152167- The initial LTS designation moves or adds npm dist-tag ` lts ` to the exact
153168 already-published stable version.
154169- Designation does not rebuild or republish different bytes for the base
155170 stable release.
156- - Later LTS correction releases move npm dist-tag ` lts ` forward to the newest
157- supported correction in the same line.
171+ - Later LTS patch releases move npm dist-tag ` lts ` or a future line-specific
172+ support tag such as ` stable-2026-6 ` or ` lts-2026-6 ` forward to the newest
173+ supported ` YYYY.M.PATCH ` release in the same monthly line.
158174- Token-bearing dist-tag mutation should reuse the existing private dist-tag
159175 workflow and operator path.
160176- Active LTS docs and compatibility tables are updated in the same designation
161- or correction window as the dist-tag move.
177+ or patch window as the dist-tag move.
162178
163179### Install and update semantics
164180
165- ` stable ` remains the default channel and resolves to the newest daily stable
166- release. ` lts ` is explicit and resolves to the active supported LTS line.
181+ ` stable ` remains the default channel and resolves to the newest stable release
182+ in the fast/latest train. ` lts ` is explicit and resolves to the active
183+ supported LTS line.
167184
168185The package-manager path for a new LTS install is:
169186
@@ -191,11 +208,13 @@ downgrade-prompt behavior.
191208
192209Resolution rules:
193210
194- - ` openclaw update --channel stable ` targets the newest daily stable release.
211+ - ` openclaw update --channel stable ` targets the newest stable release in the
212+ fast/latest train.
195213- ` openclaw update --channel lts ` targets the active supported LTS line.
196214- npm installs on the LTS channel resolve through npm dist-tag ` lts ` .
197- - git installs on the LTS channel follow ` release/lts ` and select the newest
198- stable or stable-correction tag reachable from that branch.
215+ - git installs on the LTS channel follow the active support branch or tag
216+ selector and select the newest ` YYYY.M.PATCH ` release reachable from that
217+ selector.
199218- Exact LTS versions and tags remain supported for pinned installs and
200219 diagnostics.
201220- Update status should distinguish configured channel from resolved artifact.
@@ -210,21 +229,23 @@ silently fall back to `latest`.
210229OpenClaw should express LTS through channel and support metadata, not through a
211230new version suffix.
212231
213- - Base LTS releases keep the normal stable form ` YYYY.M.D ` .
214- - LTS corrections keep the existing stable correction form ` YYYY.M.D-N ` .
232+ - Future base LTS releases use monthly-line form ` YYYY.M.PATCH ` .
233+ - Future LTS patches increment the normal patch number within that monthly line,
234+ for example ` 2026.6.0 ` , ` 2026.6.1 ` , and ` 2026.6.2 ` .
215235- ` lts ` is represented by update-channel and dist-tag selection.
236+ - Future support tags may identify the monthly line explicitly, for example
237+ ` stable-2026-6 ` or ` lts-2026-6 ` .
216238
217- Numeric suffixes such as ` -1 ` already represent stable corrections in the
218- OpenClaw release contract. Named suffixes such as ` -beta.2 ` represent
219- prereleases. A new ` -lts.N ` shape would expand OpenClaw's custom version
239+ Beta remains the fast/latest train prerelease mechanism, for example
240+ ` 2026.6.3-beta.1 ` . A new ` -lts.N ` shape would expand OpenClaw's custom version
220241semantics while looking like a prerelease to generic SemVer tooling.
221242
222243### Plugin support
223244
224245The LTS promise must name its plugin scope.
225246
226247- Bundled ` @openclaw/* ` plugins that ship with the LTS core artifact are covered
227- by the same correction policy.
248+ by the same support-line patch policy.
228249- First-party ` @openclaw/* ` plugins bundled in normal OpenClaw builds follow the
229250 LTS policy as part of the LTS artifact, even when they also exist as separate
230251 fallback packages.
@@ -249,12 +270,12 @@ emit a structured warning that the plugin is outside the LTS support promise.
249270
250271The first LTS release should use a checked-in Markdown table as the plugin
251272support source of truth. The table answers "which plugins are under LTS?" The
252- existing ` YYYY.M.D ` and ` YYYY.M.D-N ` version scheme answers "which version?"
273+ monthly-line ` YYYY.M.PATCH ` version scheme answers "which version?"
253274
254275Covered external plugins use the same version as the active LTS core by
255- default. For example, active core LTS
` [email protected] .10-1 ` maps a covered
256- WhatsApp plugin to
` @openclaw/[email protected] .10-1 ` or
257- ` clawhub:@openclaw/[email protected] .10-1 ` .
276+ default. For example, active core LTS
` [email protected] .11 ` maps a covered
277+ WhatsApp plugin to
` @openclaw/[email protected] .11 ` or
278+ ` clawhub:@openclaw/[email protected] .11 ` .
258279
259280The active LTS docs should publish a table in this shape:
260281
@@ -288,17 +309,17 @@ Before designating a release as LTS, OpenClaw should have:
288309- ` Full Release Validation ` at ` release_profile=full ` .
289310- Package acceptance against the exact published version.
290311- Cross-OS packaged install and upgrade proof.
291- - Upgrade proof from the base LTS release to the latest correction in that
292- line, when a correction exists.
312+ - Upgrade proof from the base LTS release to the latest support-line patch in
313+ that line, when a patch exists.
293314- Plugin compatibility proof for bundled plugins and any explicitly-covered
294315 official plugins.
295316- A validated Markdown plugin LTS table for the active line.
296317- Published docs that name the active LTS version, support window, install
297318 commands, compatibility scope, and end-of-life date.
298319
299- For LTS correction releases, maintainers may reuse previous umbrella evidence
300- and rerun the smallest affected release-validation box, but each correction
301- still needs exact-version package proof before announcement.
320+ For LTS patch releases, maintainers may reuse previous umbrella evidence and
321+ rerun the smallest affected release-validation box, but each patch still needs
322+ exact-version package proof before announcement.
302323
303324### Documentation and communication
304325
@@ -311,60 +332,69 @@ OpenClaw must publish and keep current:
311332- The structured warning users see when a tracked plugin is outside the LTS
312333 contract.
313334- Which fixes qualify for backport consideration.
314- - The rule that daily ` stable ` remains the default recommendation.
335+ - The rule that ` stable ` remains the default fast/latest recommendation.
315336
316337### Rollout plan
317338
318- 1 . Adopt this policy and choose the first LTS candidate release .
339+ 1 . Adopt this policy and choose the first trailing monthly support line .
3193402 . Add the active LTS branch, tag, validation, compatibility, and docs
320341 obligations to the release runbook.
321- 3 . Add npm ` lts ` dist-tag promotion and ` openclaw update --channel lts ` .
322- 4 . Add fail-closed LTS resolution for package and git install paths.
323- 5 . Add the Markdown plugin LTS table, lightweight validation, and updater
342+ 3 . Implement SemVer-compatible monthly-line versioning with ` YYYY.M.PATCH ` and
343+ beta prereleases such as ` YYYY.M.PATCH-beta.N ` .
344+ 4 . Add npm ` lts ` dist-tag promotion, future line tags such as ` stable-2026-6 `
345+ or ` lts-2026-6 ` , and ` openclaw update --channel lts ` .
346+ 5 . Add fail-closed LTS resolution for package and git install paths.
347+ 6 . Add the Markdown plugin LTS table, lightweight validation, and updater
324348 warnings for official external plugins that are not listed.
325349
326350### Worked example
327351
328352Assume:
329353
330- - The newest daily stable is ` 2026.6.18 ` .
354+ - The newest stable release is ` 2026.6.18 ` .
331355- The active LTS base release is ` 2026.6.10 ` .
332- - The newest LTS correction is ` 2026.6.10-1 ` .
356+ - The newest LTS patch is ` 2026.6.11 ` .
333357
334358Then expected resolution is:
335359
336360| Action | Result |
337361| --- | --- |
338362| ` npm install -g openclaw@latest ` | Installs ` 2026.6.18 ` . |
339- | ` npm install -g openclaw@lts ` | Installs ` 2026.6.10-1 ` . |
363+ | ` npm install -g openclaw@lts ` | Installs ` 2026.6.11 ` . |
340364| ` openclaw update --channel stable ` | Resolves to ` 2026.6.18 ` . |
341- | ` openclaw update --channel lts ` | Resolves to ` 2026.6.10-1 ` . |
365+ | ` openclaw update --channel lts ` | Resolves to ` 2026.6.11 ` . |
342366
343- Daily stable users keep following the moving stable train. LTS users follow the
344- maintained LTS line. Version numbers remain consistent with the existing stable
345- and stable-correction scheme .
367+ Default users keep following the moving fast/latest stable train. LTS users
368+ follow the maintained LTS line. Version numbers stay SemVer-compatible while
369+ preserving monthly-line identity .
346370
347371## Rationale
348372
373+ ### Monthly support lines
374+
375+ Monthly ` YYYY.M.PATCH ` lines preserve OpenClaw's calendar identity while giving
376+ support lines normal SemVer patch behavior. Patch numbers can grow as high as
377+ needed, including multiple releases on the same day.
378+
349379### Channel designation instead of an ` -lts ` suffix
350380
351381LTS is a support contract, not a new artifact identity. Channel designation
352- preserves the existing ` YYYY.M.D ` and ` YYYY.M.D-N ` release shapes, keeps generic
353- SemVer tooling behavior predictable, and avoids teaching OpenClaw that named
354- suffixes can be stable support releases.
382+ keeps generic SemVer tooling behavior predictable and avoids teaching OpenClaw
383+ that named suffixes can be stable support releases.
355384
356385### Promotion after stable instead of a parallel release train
357386
358- Selecting an already-shipped stable release lets the daily train remain the
387+ Selecting an already-shipped monthly line lets the fast/latest train remain the
359388quality gate and soak period. A parallel LTS factory would add build and release
360389complexity while reducing confidence that LTS artifacts match what users already
361390validated in stable.
362391
363- ### One active LTS line by default
392+ ### One trailing monthly support line by default
364393
365- One active LTS line keeps support, validation, docs, and plugin compatibility
366- work bounded. Multiple active LTS lines can be added later only if maintainers
367- have the release capacity and automation to keep each line healthy.
394+ One trailing monthly support line keeps support, validation, docs, and plugin
395+ compatibility work bounded while maintainers build the process. Quarterly or
396+ yearly lines and 4-12 month windows can be added later only if maintainers have
397+ the release capacity and automation to keep each line healthy.
368398
369399### Same-version plugin compatibility instead of ` latest `
370400
0 commit comments