Skip to content

Commit 7ace9f9

Browse files
committed
feat(ADR): LTS Strategy
1 parent b6a317f commit 7ace9f9

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed

Diff for: docs/adr/lts-strategy.md

+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
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 12 months.
79+
- After the `MAINTENANCE` time has ended the major version is considered `EOL` and is unsupported.
80+
- During the 12 month `ACTIVE` period, a new major version may be released but *not* until at least 6 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 save 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+
- Each major version of all packages (`express`, deps, middleware, etc) will support a minimum of the oldest Node.js LTS
99+
at the time of release and maintain that support through its entire life cycle. This includes EOL Node.js versions.
100+
- `express` may choose to continue support for EOL Node.js versions in all three phases if deemed valuable, but will
101+
strive to cut support before it becomes a drain on progress.
102+
- All `express` dependency packages must support, at a minimum, the Node.js versions that are supported by the `express`
103+
major line they are included in while that `express` line is not `EOL`.
104+
- Middleware packages must at a minimum follow the same Node.js versions as the `CURRENT` and `ACTIVE` release lines of
105+
`express`. They should attempt to also support `MAINTENANCE` lines as well, but the discretion of the captains is
106+
important.
107+
- All other packages are suggested to follow a reasonable Node.js support policy for their needs.
108+
109+
### Life Cycle Phases & Meaning
110+
111+
**CURRENT**
112+
113+
- New majors will go through a short period hardening to ensure stability, security, and ecosystem libraries/resources
114+
compatibility.
115+
- We will strive to ensure no breaking changes are included, but reserve the right to make security or high priority
116+
fixes of breaking nature within this period.
117+
- `CURRENT` lines will receive all types of active work including: bug fixes, security patches, new features, and
118+
deprecation notices.
119+
- Users are recommended to use `CURRENT` lines and to upgrade as quickly as their risk profile allows
120+
121+
**ACTIVE**
122+
123+
- `ACTIVE` lines will receive all types of active work including: bug fixes, security patches, new features, and
124+
deprecation notices.
125+
- For users, `ACTIVE` lines are considered the most stable and well supported version at any given time.
126+
127+
**MAINTENANCE**
128+
129+
- `MAINTENANCE` lines will only receive security patches or high priority bug fixes.
130+
- Users are highly encouraged to upgrade to a `CURRENT` or `ACTIVE` release.
131+
132+
### Guidelines for other packages/repos
133+
134+
**`express` dependencies**
135+
136+
### Schedule
137+
138+
For the existing release lines, we will set the following phase dates:
139+
140+
141+
| Major | CURRENT | ACTIVE | MAINTENANCE | EOL |
142+
| ----- | ------- | ------ | ----------- | --- |
143+
| 4.x | | | 2025-04-01 | 2026-10-01 or later |
144+
| 5.x | 2024-09-11 | 2025-03-31 | 2026-04-01 | 2027-04-01 |
145+
| 6.x | TBD after 2025-10-01 | | | |
146+
147+
### Documentation
148+
149+
The project will maintain two types of documentation for this:
150+
151+
**Project documentation for the maintainers:**
152+
153+
This includes this doc, but also detailed things about the process that are not necessary for anyone but us. This
154+
documentation will live in one of three places:
155+
156+
1. The `discussions` repo. If the content applies to more than one repo/package in any of the three orgs, is general in
157+
nature, or otherwise has no logical other place to go it goes here.
158+
2. The individual repo/package to which it applies. If an individual package has more detailed or different needs the
159+
docs will live along with the repo as decided by the captains.
160+
161+
**User documentation:**
162+
163+
This will be produced for the website. While the source content of it may live in other places (for example a repo to
164+
produce an image for the schedule), the users will be directed to the website to view the current updated version.
165+
166+
**Next steps:**
167+
168+
- Update the existing LTS doc with more details from this decision
169+
- Update website pages with more details from this decision
170+
- Close out discussions and other PRs related to this
171+
172+
## Changelog
173+
174+
Track changes or updates to this ADR over time. Include the date, author, and a brief description of each change.
175+
176+
- **[2025-02-28]**: [@wesleytodd] - Initial draft

0 commit comments

Comments
 (0)