How Does Express Handle Version Support?
Express is an open-source Node.js web framework maintained by the OpenJS Foundation, and it follows a simple rule: only the latest version of any given major release line receives active support.
There are no LTS tiers or fixed support windows counted in months. When a new major version ships, the previous major line does not immediately die -- but it also does not receive guaranteed fixes. The Express team may patch critical security vulnerabilities in EOL branches, but this is discretionary, not a commitment.
In practice, this means teams should track the latest stable release within whatever major line they are on, and plan migration to a newer major when the older one falls out of active development.
| Support Detail | Express |
|---|---|
| Support model | Latest version per major line only |
| EOL model | Community-driven; no fixed support duration per release |
| Release cycle | New major versions released when ready; no fixed cadence |
| End of support (OSS) | As shown in the release table above -- EOL branches may receive critical patches at maintainer discretion |
| Commercial support (HeroDevs NES) | Available for EOL branches through HeroDevs Never-Ending Support |
References: Express.js official support page, OpenJS Foundation.
What Are the Risks of Running an Unsupported Express Version?
Running an unsupported Express version means your application stops receiving security patches, leaving known vulnerabilities permanently open in your middleware stack.
Express sits at the boundary of every HTTP request your app handles. A vulnerable version of Express -- or its bundled dependencies like path-to-regexp or qs -- can expose your service to request smuggling, ReDoS attacks, or prototype pollution. These are not theoretical. Several Express 3.x-era dependencies had exactly these issues after EOL.
The ecosystem risk compounds over time. As the npm packages that Express depends on release breaking updates, an EOL Express version drifts further from compatibility. You may find that newer versions of your own dependencies conflict with the frozen transitive dependencies pinned by an unsupported Express branch.
For Node.js developers specifically, there is also a runtime alignment issue. Each Express major targets a minimum Node.js version. If your Node.js runtime is actively maintained but your Express version is EOL, you are running a supported runtime underneath an unsupported framework -- a combination that creates unpredictable behavior with no path to a fix from the maintainers.
What Happens After an Express Version Reaches End of Life?
After an Express version reaches EOL, the core team stops issuing planned fixes -- no bug patches, no dependency updates, and no guaranteed security releases.
The GitHub repository remains public and the npm package stays installable forever, so nothing breaks immediately. But any vulnerabilities discovered after EOL will accumulate without a fix, and the maintainers will not accept pull requests targeting that branch as a matter of policy.
In some cases, the Express team has back-ported critical CVE patches to EOL branches -- but this is a courtesy, not a contract. You cannot plan around it.
Staying on an EOL branch: the two real options
Upgrade to the current supported major: This is the recommended path. As shown in the release table above, migration guides exist for moving between major versions. Express 4 to Express 5 introduced async error handling and dropped several deprecated APIs -- the migration is documented and manageable for most codebases.
Commercial support via HeroDevs NES: If upgrading is not feasible in the short term -- common in large monoliths or compliance-heavy environments -- HeroDevs Never-Ending Support provides ongoing security patches for EOL Express branches. This buys time without requiring an immediate framework upgrade.
Most teams find that staying on an EOL branch beyond one release cycle creates more work than the upgrade itself. The longer you wait, the wider the API gap becomes.
How To Check Your Express Version
You can check which version of Express your project is running in several ways, depending on whether you want the installed version or what your package manifest specifies.
Check the installed version from the command line
npm list express
This shows the version actually installed in node_modules, including how it was resolved if you have nested dependencies.
Check from inside your application at runtime
const express = require('express');
console.log(express.version); // e.g. "5.0.1"
The express.version property is available in all modern Express major versions and reflects the version loaded by the current process.
Check what version range your project declared
cat package.json | grep express
This shows the semver range your project declared -- which may be broader than what is actually installed. Use npm list express for the resolved version.
Check globally if you used the Express generator
npm list -g express-generator
The Express application generator is a separate package. If you scaffolded your project with it, check its version independently from Express itself.
FAQ -- Express.js Support & End of Life
Q1: Does Express use Long Term Support (LTS) releases like Node.js does?
Express does not have a formal LTS program. Unlike Node.js, which designates specific releases as LTS with defined support windows, Express simply supports the latest version within each active major line. There is no "maintenance LTS" phase -- when a major version is superseded or deprioritized, support becomes best-effort only.
Q2: How long is each major Express version supported?
Express does not publish fixed support durations per major version. Support continues as long as the maintainers actively develop that branch, which is tied to community demand and Node.js runtime compatibility rather than a fixed calendar. The release table above shows the current end-of-support status for each major line.
Q3: What is the difference between "ongoing" support and EOL for Express?
A branch listed as "ongoing" in the release table receives planned bug fixes, security patches, and dependency updates. An EOL branch may receive patches for critical security vulnerabilities at the maintainers' discretion, but no fixes are guaranteed and no new features or bug fixes are planned. The difference is the presence or absence of a maintenance commitment.
Q4: How do I know if my Express version is still supported?
Check the release table above against your installed version (npm list express). If your major version shows an end-of-support date that has already passed, you are on an EOL branch. If it shows "ongoing," you are on an actively maintained line -- but make sure you are on the latest patch release within that major, not an older patch.
Q5: What should I do when my Express version reaches end of life?
The first option is upgrading to the current supported major -- official migration guides cover the breaking changes between major versions. If an immediate upgrade is not feasible, HeroDevs Never-Ending Support offers commercial security patches for EOL Express branches. Running an EOL version without either path in place means your application will accumulate unpatched vulnerabilities over time with no upstream remedy available.
