Skip to content

Commit 694cdf0

Browse files
wesleytoddnaugturctcpip
authored
feat(ADR): LTS Strategy (#352)
* feat(ADR): LTS Strategy * Update docs/adr/lts-strategy.md Co-authored-by: Zbyszek Tenerowicz <[email protected]> * Update docs/adr/lts-strategy.md Co-authored-by: Zbyszek Tenerowicz <[email protected]> * fix: suggestions * fix: updated dates from discussion expressjs/expressjs.com#1859 (comment) * fix: review edits * fix: formatting * Update docs/adr/lts-strategy.md Co-authored-by: Chris de Almeida <[email protected]> --------- Co-authored-by: Zbyszek Tenerowicz <[email protected]> Co-authored-by: Chris de Almeida <[email protected]>
1 parent cd34529 commit 694cdf0

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed

docs/adr/lts-strategy.md

+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
# ADR [Number]: LTS Strategy and Support Schedule
2+
3+
## Status
4+
5+
Proposed
6+
7+
## Submitters
8+
9+
- @wesleytodd
10+
11+
## Decision Owners
12+
13+
- @expressjs/express-tc
14+
15+
## Context
16+
17+
Conversation about our LTS strategy, support dates for our major release lines, and how we should message this content
18+
has been spread out across multiple issues, repos, slack channels, and meetings. We have landed a few starter documents,
19+
and generally have agreed on our goals/strategy but we have not officially documented and centralized that. This ADR is
20+
both gathering all that context to one place as well as give concrete decisions and next steps.
21+
22+
### Scope:
23+
24+
This ADR applies to, and should cover, all repositories within the Express Projects three orgs (`jshttp`, `pillarjs`,
25+
`expressjs`). While everything stems from support for the primary `express` package, due to the coupling of many of our
26+
dependency and middleware packages, we must also address those packages as well.
27+
28+
### ADR Goals:
29+
30+
- Improve documentation on our support goals
31+
- Document criteria and reasoning for when to release new majors
32+
- Define life cycle for releases, terminology we will use,
33+
- Improve documentation on how our LTS relates to Node.js version support
34+
- Documentation on how our LTS relates to our direct dependencies and other Express project repos/packages
35+
- Set clear next steps for documenting and publicising the LTS strategy
36+
- Select dates for known release line support and EOL
37+
- Create starter language and graphics for our future blog posts, website additions, and other necessary docs
38+
39+
### ADR Non-Goals:
40+
41+
- Create an end-user documentation resource (either for immediate use or future use)
42+
- Commit to future release dates
43+
44+
**Existing issues/discussions/pull requests related to this:**
45+
46+
- Initial LTS strategy doc: https://github.com/expressjs/discussions/blob/master/docs/LTS-strategy.md
47+
- Additional LTS doc proposal: https://github.com/expressjs/admin/pull/3
48+
- https://github.com/ctcpip/express-release
49+
- Some other related discussions:
50+
- https://github.com/expressjs/discussions/issues/196
51+
- https://github.com/expressjs/discussions/issues/172
52+
- https://github.com/expressjs/discussions/issues/67
53+
- TC Slack Discussion: https://openjs-foundation.slack.com/archives/C06KMCETHG9/p1724863852681889
54+
55+
### Package/Repository Types
56+
57+
We maintain four primary types of packages/repos:
58+
59+
1. `express`: The minimal http framework
60+
2. `express` dependencies: Libraries which are used directly or transitively within `express` and also by others outside
61+
of the project
62+
3. Middleware: Libraries for use *with* `express` but not installed with it directly
63+
4. Others: Tools, documentation, websites, resources, etc.
64+
65+
While much of this proposal is targeted specifically at `express`, this terminology will be used to differentiate where
66+
we are not only talking about `express`.
67+
68+
## Decision
69+
70+
The Express project will have a well defined Long Term Support (LTS) strategy and schedule based on the following
71+
requirements:
72+
73+
- `express` major versions will go through three supported phases: Current, Active, & Maintenance
74+
- `CURRENT`: A new major version is designated as `CURRENT` upon release. It is available but not the `latest` version
75+
on npm for a minimum of 3 months.
76+
- `ACTIVE`: After the minimum 3 month period and the TC agrees it is stable and secure, the `ACTIVE` version is
77+
tagged `latest` on npm for a minimum of 12 months.
78+
- `MAINTENANCE`: When a new major version becomes `ACTIVE`, the previous major version enters `MAINTENANCE` for a minimum of 12 months.
79+
- After the `MAINTENANCE` time has ended the major version is considered `EOL` and is unsupported.
80+
- During the `ACTIVE` period, a new major version may be released but *not* until at least 12 months have passed
81+
since the `CURRENT` version became `ACTIVE`.
82+
- Users are required to follow the head/latest of each major release line for support with all packages (`express`,
83+
dependencies, middleware, & tools/other)
84+
- If we have no necessary breaking changes, we will not release a new major version. Applies to `express`,
85+
dependencies, middleware, & tools/other.
86+
- Dropping old Node.js versions *alone* is not enough of a breaking change to release a new major version. Applies to
87+
`express`, dependencies, middleware, & tools/other.
88+
- `express` version 4.x is considered a special case. It will receive a longer `MAINTENENCE` phase of 18 months or until
89+
the TC agrees we are safe cutting support.
90+
- `express` dependency packages will follow the same timeline and support dates for the `express` version which they are
91+
included with.
92+
- Middleware packages should follow the timeline and support dates for the `express` versions they are compatible, but
93+
should make reasonable and informed decisions which can deviate if necessary.
94+
- All other packages are suggested to define an appropriate strategy for support.
95+
96+
### Node.js Version Support
97+
98+
While we recognize that runtime support needs to be tightly aligned with our LTS policy, it is out of scope for this
99+
ADR and will be addressed in a separate proposal.
100+
101+
### Life Cycle Phases & Meaning
102+
103+
#### CURRENT
104+
105+
- New majors will go through a short period of hardening to ensure stability, security, and ecosystem libraries/resources
106+
compatibility.
107+
- We will strive to ensure no breaking changes are included, but reserve the right to make security or high priority
108+
fixes of breaking nature within this period.
109+
- `CURRENT` lines will receive all types of active work including: bug fixes, security patches, new features, and
110+
deprecation notices.
111+
- Users are recommended to use `CURRENT` lines and to upgrade as quickly as their risk profile allows
112+
113+
#### ACTIVE
114+
115+
- `ACTIVE` lines will receive all types of active work including: bug fixes, security patches, new features, and
116+
deprecation notices.
117+
- For users, `ACTIVE` lines are considered the most stable and well supported version at any given time.
118+
119+
#### MAINTENANCE
120+
121+
- `MAINTENANCE` lines will only receive security patches or high priority bug fixes.
122+
- Users are highly encouraged to upgrade to a `CURRENT` or `ACTIVE` release.
123+
124+
### Schedule
125+
126+
For the existing release lines, we will set the following phase dates:
127+
128+
129+
| Major | CURRENT | ACTIVE | MAINTENANCE | EOL |
130+
| ----- | ------- | ------ | ----------- | --- |
131+
| 4.x | | | 2025-04-01 | <sup>[1]</sup> no sooner than 2026-10-01 |
132+
| 5.x | 2024-09-11 | 2025-03-31 | <sup>[2]</sup>TBD | <sup>[2]</sup>TBD |
133+
| 6.x | <sup>[3]</sup>TBD | | | |
134+
135+
1. v4 is a special case, and we may extend MAINTENENCE support. This date is called out to give users confidence we will
136+
not end-of-life *earlier* than this date.
137+
2. v5 MAINTENENCE and EOL dates are determined by when v6 is released. We will update them when v6 release dates are
138+
committed to.
139+
3. v6 work has not started yet. The earliers we could choose to release by this proposal is 2026-01-01. We will update
140+
these dates when we commit to them.
141+
142+
### Documentation
143+
144+
The project will maintain two types of documentation for this:
145+
146+
#### Project documentation for the maintainers:
147+
148+
This includes this doc, but also detailed things about the process that are not necessary for anyone but us. This
149+
documentation will live in one of two places:
150+
151+
1. The `discussions` repo. If the content applies to more than one repo/package in any of the three orgs, is general in
152+
nature, or otherwise has no logical other place to go it goes here.
153+
2. The individual repo/package to which it applies. If an individual package has more detailed or different needs the
154+
docs will live along with the repo as decided by the captains.
155+
156+
#### User documentation:
157+
158+
This will be produced for the website. While the source content of it may live in other places (for example a repo to
159+
produce an image for the schedule), the users will be directed to the website to view the current updated version. This
160+
will also co-locate with documentation about Node.js support and other related support content.
161+
162+
#### Next steps:
163+
164+
- Update the existing LTS doc with more details from this decision
165+
- Update website pages with more details from this decision
166+
- Close out discussions and other PRs related to this
167+
168+
## Changelog
169+
170+
Track changes or updates to this ADR over time. Include the date, author, and a brief description of each change.
171+
172+
- **[2025-02-28]**: [@wesleytodd] - Initial draft

0 commit comments

Comments
 (0)