-
-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LTS support definition #3
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Supported versions | ||
|
||
## Long Term Support | ||
|
||
Express Long Term Support (LTS) version is provided as per defined in this document - and also include all the packages part of the Express.js Organization (express, pillarjs and jshttp). | ||
|
||
1. Express follows a semantic versioning A.B.C (also know as semver), where the major version is represented by "A". Major version are supported for a minimal time of a year (as seen as 365 days). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. And this is to say every major version is supported a minimum of 1 year? SGTM. My first reading of this doc was a bit confusing because it made it sound like we'll want to do releases every year, the language in Fastify is a bit clearer and helped me understand the intent of this doc. |
||
|
||
2. After the time that a LTS version (that can exceed one year) is maintained, the version will move to a maintenance mode during which only security patches will be released. This maintenance mode will be supported for at least one year. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the Fastify doc is clearer here too, you're basically saying after a new major version is released, the old one goes into LTS and supported for 1 year? |
||
|
||
> In specific case, a version in maintenance mode may require a breaking change to fix a security risk. If this happen, then it will be released as a minor version change but outlined in the release message | ||
|
||
3. Major version will be tested against all the LTS versions that were active during the time of the major version. This doesn't mean that the package won't support previous versions, but no tests will be run against them. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the LTS here being used to refer to the node.js LTS version and not this doc anymore? |
||
|
||
> As per the date of this PR (March, 1st 2024), Node.js LTS versions are 18 (maintenance) and 20 (active) meaning that if a new major version was released today we would support Node.js 18, Node.js 20 and at minimal Node.js 22 when it will become a stable LTS (without dropping Node.js 18 when it would be move out of maintenance mode). | ||
|
||
## Express Releases | ||
|
||
| Express version | Release | Maintenance | End of Life | Supported Node.js version | | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maintenance seems redundant if I'm reading this doc correctly, anything not the latest version would be in maintenance? |
||
|--- |--- |--- |--- |g--- | | ||
| v1 | Nov 17, 2010 | ? | ? | ? | | ||
| v2 | Mar 18, 2011 | ? | ? | ? | | ||
| v3 | on Nov 2, 2012 | ? | ? | ? | | ||
| v4 | Apr 9, 2014 | ? | ? | 0.10 to 20.x | | ||
| v5 | ? | ? | ? | ? | |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# Node.js Supported Version | ||
|
||
### Current state | ||
|
||
As of the date of this PR (March 1st 2024), the only released and maintained version of Express.js is the v4. | ||
This version was created and published in 2014 and is supporting (working on) all Node.js version between 0.10 and 21.x - with tests run against all of them. | ||
|
||
During the conception phase of Express v5 it was discussed to drop the support of all version below Node.js v4 (released in September 2015) - so supporting all versions from Node.js 4.x to Node.js 21.x, representing 18 versions. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. any particular reason to stick with 4.x, if v5 wasn't released yet, and hence dropping versions wouldn't be extra breaking change? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is the point I want to raise, and basically, the best for me would be
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 14+ sounds like a reasonable minimum |
||
|
||
### Ecosystem language support | ||
|
||
Node.js creates new version every years, with a LTS being stable for ~3 years. | ||
For example, 20 was created in April 2023, moved to LTS in September 2023 and will be in maintenant mode until October 20224 and will run until April 2026. | ||
|
||
Express and the ecosystem should follow versions that are not a security risk and keep being updated and patched as a primary support. | ||
It is possible to have some breaking changes between major versions but in the past couple years, it was mostly minimal. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is this sentence referring to? Express or node.js breaking changes? |
||
|
||
> If other version keep to work with that, then this is a good bonus but we should not maintain a compatibility for all Node.js version. | ||
|
||
For example | ||
|
||
* Latest Springboot release only work with Java 17 and above: released in 2021 | ||
* Latest Symfony release only work with PHP8.1 and above: released in 2021 | ||
* Laravel is almost the same as Symfony | ||
* Latest Fastify LTS (released in 2022) supports up to Node.14 - which was the LTS | ||
|
||
### Node.js version supported | ||
|
||
As a first point, the Express.js project should only support non-LTS version during their active phase and remove all specific compatibilities when they move out of active status - allowing us to use them as "trial" before the next LTS. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't follow this either, what does LTS refer to? Is it saying express should support only new versions during development and not the node.js LTS? What's the trial? |
||
|
||
Most of the framework seems to only be compatible with version of the runtime (or language) released ~3 years ago, so something between v14 and v16 if we were to release today. | ||
|
||
On the other hand, Node.js v16 is now unsupported for the past 6 months while the v14 is deprecated since one year and in maintenance mode for the past 28 months. | ||
We can argue that if users are not updating their Node.js version in this timeline they won't update to a new Express.js version. | ||
|
||
### Packages and Node.js version | ||
|
||
Some packages that we rely on, on their latest major version,are also dropping support of Node.js version that are above Node.js v4. | ||
Some of them would be part of our direct dependencies like `debug` (Node.js v6) and some other would be dev-dependencies like `mocha` (Node.js v14). | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to clarify, all packages will need to start following this and not just
express
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All packages would need to provide this as a minimum, I’d assume - but they could certainly support longer if desired, since it’ll probably be cheap for smaller packages to do so.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it is really important we clarify this. I think I subtly disagree with @ljharb on this, but so far the docs themselves do not provide enough clarity to have that conversation imo and I think we didn't have that discussion in the other original thread either. I will open an issue in the discussions repo so we can address that. We should block merging this on resolution to that discussion.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
expressjs/discussions#210