# Release changelog
All the latest updates, improvements, and fixes to Express
## Express v5
{: id="5.x"}
### 5.1.0 - Release date: 2025-03-31
{: id="5.0.1"}
The 5.1.0 minor release includes some new features and improvements:
* Support for sending responses as Uint8Array
* Added support for ETag option in `res.sendFile()`
* Added support for adding multiple links with the same rel with `res.links()`
* Performance: Use loop for acceptParams
* [body-parser@2.2.0](https://github.com/expressjs/body-parser/releases/tag/v2.2.0)
* Remove legacy node.js support checks for Brotli & `AsyncLocalStorage`
* Remove `unpipe` & `destroy`
* [router@2.2.0](https://github.com/pillarjs/router/releases/tag/v2.2.0)
* Restore `debug`. Now with the `router` scope instead of `express`.
* Remove legacy node.js support checks for `setImmediate`
* Deprecate non-native promise support
* Remove `after`, `safe-buffer`, `array-flatten`, `setprotoypeof`, `methods`, `utils-merge`
* [finalhandler@2.1.0](https://github.com/pillarjs/finalhandler/releases/tag/v2.1.0)
* Remove legacy node.js support checks for `headersSent`, `setImmediate`, & http2 support
* Remove `unpipe`
* Transitioned all remaining dependencies to use `^` ranges instead of locked versions
* Add package.json funding field to highlight our OpenCollective
* See [Changelog v5.1.0](https://github.com/expressjs/express/releases/tag/v5.1.0)
### 5.0.1 - Release date: 2024-10-08
{: id="5.0.1"}
The 5.0.1 patch release includes one security fix:
* Update [jshttps/cookie](https://www.npmjs.com/package/cookie) to address a [vulnerability](https://github.com/advisories/GHSA-pxg6-pf52-xh8x).
### 5.0.0 - Release date: 2024-09-09
{: id="5.0.0"}
Check the [migration guide](/{{page.lang}}/guide/migrating-5.html) with all the changes in this new version of Express.
## Express v4
{: id="4.x"}
### 4.21.2 - Release date: 2024-11-06
{: id="4.21.2"}
The 4.21.2 patch release includes one security fix:
* Update [pillajs/path-to-regexp](https://www.npmjs.com/package/path-to-regexp) to address a [vulnerability](https://github.com/advisories/GHSA-rhx6-c78j-4q9w).
### 4.21.1 - Release date: 2024-10-08
{: id="4.21.1"}
The 4.21.1 patch release includes one security fix:
* Update [jshttps/cookie](https://www.npmjs.com/package/cookie) to address a [vulnerability](https://github.com/advisories/GHSA-pxg6-pf52-xh8x).
### 4.21.0 - Release date: 2024-09-11
{: id="4.21.0"}
The 4.21.0 minor release includes one new feature:
* Deprecate `res.location("back")` and `res.redirect("back")` magic string
### 4.20.0 - Release date: 2024-09-10
{: id="4.20.0"}
The 4.20.0 minor release includes bug fixes and some new features, including:
* The [`res.clearCookie()` method](/{{ page.lang }}/4x/api.html#res.clearCookie) deprecates `options.maxAge` and `options.expires` options.
* The [`res.redirect()` method](/{{ page.lang }}/4x/api.html#res.redirect) removes HTML link rendering.
* The [`express.urlencoded()` method](/{{ page.lang }}/4x/api.html#express.urlencoded) method now has a depth level of `32`, whereas it was previously `Infinity`.
* Adds support for named matching groups in the routes using a regex
* Removes encoding of `\`, `|`, and `^` to align better with URL spec
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4200--2024-09-10)
### 4.19.2 - Release date: 2024-03-25
{: id="4.19.2"}
* Improved fix for open redirect allow list bypass
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4192--2024-03-25)
### 4.19.1 - Release date: 2024-03-20
{: id="4.19.1"}
* Allow passing non-strings to res.location with new encoding handling checks
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4191--2024-03-20)
### 4.19.0 - Release date: 2024-03-20
{: id="4.19.0"}
* Prevent open redirect allow list bypass due to encodeurl
* deps: cookie@0.6.0
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4190--2024-03-20)
### 4.18.3 - Release date: 2024-02-29
{: id="4.18.3"}
The 4.18.3 patch release includes the following bug fix:
-
Fix routing requests without method. ([commit](https://github.com/expressjs/express/commit/74beeac0718c928b4ba249aba3652c52fbe32ca8))
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4183--2024-02-26)
### 4.18.2 - Release date: 2022-10-08
{: id="4.18.2"}
The 4.18.2 patch release includes the following bug fix:
-
Fix regression routing a large stack in a single route. ([commit](https://github.com/expressjs/express/commit/7ec5dd2b3c5e7379f68086dae72859f5573c8b9b))
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4182--2022-10-08)
### 4.18.1 - Release date: 2022-04-29
{: id="4.18.1"}
The 4.18.1 patch release includes the following bug fix:
-
Fix the condition where if an Express application is created with a very large stack of routes, and all of those routes are sync (call `next()` synchronously), then the request processing may hang.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4181--2022-04-29).
### 4.18.0 - Release date: 2022-04-25
{: id="4.18.0"}
The 4.18.0 minor release includes bug fixes and some new features, including:
-
The [`app.get()` method](/{{ page.lang }}/4x/api.html#app.get) and the [`app.set()` method](/{{ page.lang }}/4x/api.html#app.set) now ignores properties directly on `Object.prototype` when getting a setting value.
-
The [`res.cookie()` method](/{{ page.lang }}/4x/api.html#res.cookie) now accepts a "priority" option to set the Priority attribute on the Set-Cookie response header.
-
The [`res.cookie()` method](/{{ page.lang }}/4x/api.html#res.cookie) now rejects an Invalid Date object provided as the "expires" option.
-
The [`res.cookie()` method](/{{ page.lang }}/4x/api.html#res.cookie) now works when `null` or `undefined` is explicitly provided as the "maxAge" argument.
-
Starting with this version, Express supports Node.js 18.x.
-
The [`res.download()` method](/{{ page.lang }}/4x/api.html#res.download) now accepts a "root" option to match [`res.sendFile()`](/{{ page.lang }}/4x/api.html#res.sendFile).
-
The [`res.download()` method](/{{ page.lang }}/4x/api.html#res.download) can be supplied with an `options` object without providing a `filename` argument, simplifying calls when the default `filename` is desired.
-
The [`res.format()` method](/{{ page.lang }}/4x/api.html#res.format) now invokes the provided "default" handler with the same arguments as the type handlers (`req`, `res`, and `next`).
-
The [`res.send()` method](/{{ page.lang }}/4x/api.html#res.send) will not attempt to send a response body when the response code is set to 205.
-
The default error handler will now remove certain response headers that will break the error response rendering, if they were set previously.
-
The status code 425 is now represented as the standard "Too Early" instead of "Unordered Collection".
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4180--2022-04-25).
### 4.17.3 - Release date: 2022-02-16
{: id="4.17.3"}
The 4.17.3 patch release includes one bug fix:
-
Update to [qs module](https://www.npmjs.com/package/qs) for a fix around parsing `__proto__` properties.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4173--2022-02-16).
### 4.17.2 - Release date: 2021-12-16
{: id="4.17.2"}
The 4.17.2 patch release includes the following bug fixes:
-
Fix handling of `undefined` in `res.jsonp` when a callback is provided.
-
Fix handling of `undefined` in `res.json` and `res.jsonp` when `"json escape"` is enabled.
-
Fix handling of invalid values to the `maxAge` option of `res.cookie()`.
-
Update to [jshttp/proxy-addr module](https://www.npmjs.com/package/proxy-addr) to use `req.socket` over deprecated `req.connection`.
-
Starting with this version, Express supports Node.js 14.x.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4172--2021-12-16).
### 4.17.1 - Release date: 2019-05-25
{: id="4.17.1"}
The 4.17.1 patch release includes one bug fix:
-
The change to the `res.status()` API has been reverted due to causing regressions in existing Express 4 applications.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4171--2019-05-25).
### 4.17.0 - Release date: 2019-05-16
{: id="4.17.0"}
The 4.17.0 minor release includes bug fixes and some new features, including:
-
The `express.raw()` and `express.text()` middleware have been added to provide request body parsing for more raw request payloads. This uses the [expressjs/body-parser module](https://www.npmjs.com/package/body-parser) module underneath, so apps that are currently requiring the module separately can switch to the built-in parsers.
-
The `res.cookie()` API now supports the `"none"` value for the `sameSite` option.
-
When the `"trust proxy"` setting is enabled, the `req.hostname` now supports multiple `X-Forwarded-For` headers in a request.
-
Starting with this version, Express supports Node.js 10.x and 12.x.
-
The `res.sendFile()` API now provides and more immediate and easier to understand error when a non-string is passed as the `path` argument.
-
The `res.status()` API now provides and more immediate and easier to understand error when `null` or `undefined` is passed as the argument.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4170--2019-05-16).
### 4.16.4 - Release date: 2018-10-10
{: id="4.16.4"}
The 4.16.4 patch release includes various bug fixes:
-
Fix issue where `"Request aborted"` may be logged in `res.sendfile`.
For a complete list of changes in this release, see [History.md](https://github.com/expressjs/express/blob/master/History.md#4164--2018-10-10).
### 4.16.3 - Release date: 2018-03-12
{: id="4.16.3"}
The 4.16.3 patch release includes various bug fixes:
-
Fix issue where a plain `%` at the end of the url in the `res.location` method or the `res.redirect` method would not get encoded as `%25`.
-
Fix issue where a blank `req.url` value can result in a thrown error within the default 404 handling.
-
Fix the generated HTML document for `express.static` redirect responses to properly include `