Changelog
July 4, 2026 ยท View on GitHub
v4.2.0
- feat(types): export OnProxyEvent type
- feat(debug-proxy-errors-plugin): diagnostic message for POST + bodyParser + ECONNRESET error
- chore(package.json): update to httpxy v0.5.4
v4.1.1
- fix(fixRequestBody): harden form-data stringification
v4.1.0
- feat(definePlugin): helper function to create plugins
- chore(package.json): update to httpxy@0.5.3
- fix(ipv6): preserve credentials when normalizing bracketed IPv6 target string
- fix(ipv6): unspecified IPv6 target hostname (::)
- fix(response-interceptor): reduce responseInterceptor buffer churn
- fix(ws): handle multi-server upgrade subscription and safe proxy shutdown
- feat(router): add 'res' and 'options' to router function
- feat(pathRewrite): add 'res' and 'options' to custom pathRewrite function
- fix(responseInterceptor): prevent trailer/content-length conflict
- feat(zstd): support zstd compression in responseInterceptor and fixRequestBody
- fix(responseInterceptor): handle bodyless responses (HEAD/1xx/204/304) with content-encoding
- fix(router): harden proxy-table matching
v4.0.0
- fix(types): fix Logger type
- fix(error-response-plugin): sanitize input
- feat: drop node v14/v16/v18 [BREAKING CHANGE]
- refactor: replace http-proxy w/ httpxy
- chore: remove legacyCreateProxyMiddleware() [BREAKING CHANGE]
- ci: migrate from jest to vitest
- chore(package.json): esm only [BREAKING CHANGE]
- chore(package.json): bump to httpxy 0.5.0 (#1183)
- chore(package.json): drop node20 [BREAKING CHANGE] (#1179)
- refactor: remove deprecated url.parse() (#1176)
- fix(fixRequestBody): support content-encoding on request body (#1142)
- fix: prevent TypeError when ws enabled but server is undefined (#1163)
- fix: applyPathRewrite logs old req.url instead of rewritten path (#1157)
- feat(hono): support for hono with createHonoProxyMiddleware
- feat(ipv6): support literal IPv6 addresses in
targetandforwardoptions (ie. "http://[::1]:8000") - chore(package.json): bump httpxy to ^0.5.1
- fix(logger-plugin): support ipv6 host and handle undefined protocol/host
- ci(publish.yml): pin github.triggering_actor
- chore(package.json): node ^22.15.0 (#1218)
- refactor(package): subpath 'http-proxy-middleware/hono' (#1220)
- chore: node 26 support
v3.0.5
- fix(fixRequestBody): check readableLength (#1096)
v3.0.4
- fix(fixRequestBody): handle invalid request (#1092)
- fix(fixRequestBody): prevent multiple .write() calls (#1089)
- fix(websocket): handle errors in handleUpgrade (#823)
- ci(package): patch http-proxy (#1084)
- fix(fixRequestBody): support multipart/form-data (#896)
- feat(types): export Plugin type (#1071)
v3.0.3
- fix(pathFilter): handle errors
v3.0.2
- refactor(dependency): replace is-plain-obj with is-plain-object (#1031)
- chore(package): upgrade to eslint v9 (#1032)
- fix(logger-plugin): handle undefined protocol and hostname (#1036)
v3.0.1
- fix(type): fix RequestHandler return type (#980)
- refactor(errors): improve pathFilter error message (#987)
- fix(logger-plugin): fix missing target port (#989)
- ci(package): npm package provenance (#991)
- fix(logger-plugin): log target port when router option is used (#1001)
- refactor: fix circular dependencies (#1010)
- fix(fix-request-body): support '+json' content-type suffix (#1015)
v3.0.0
This release contains some breaking changes.
Please read the V3 discussion https://github.com/chimurai/http-proxy-middleware/discussions/768 or follow the MIGRATION_V3.md guide.
- feat(typescript): type improvements (#882)
- chore(deps): update micromatch to 4.0.5
- chore(package): bump devDependencies
- feat(legacyCreateProxyMiddleware): show migration tips (#756)
- feat(legacyCreateProxyMiddleware): adapter with v2 behavior (#754)
- docs(proxy events): fix new syntax (#753)
- feat(debug): improve troubleshooting (#752)
- test(path-rewriter): improve coverage (#751)
- feat(ejectPlugins): skip registering default plugins (#750)
- refactor: logging [BREAKING CHANGE] (#749)
- refactor(handlers): refactor to plugins [BREAKING CHANGE] (#745)
- feat(plugins): add support for plugins (#732)
- docs: fix v3 documentation
- fix: server mounting [BREAKING CHANGE] (#731)
- test(fixRequestBody): fix broken test
- refactor: use node http base types [BREAKING CHANGE] (#730) (special thanks: @cdaringe & @devanshj)
- feat(option): refactor context to pathFilter option [BREAKING CHANGE] (#722)
- feat: remove shorthand usage [BREAKING CHANGE] (#716)
v2.0.6
- fix(proxyReqWs): catch socket errors (#763)
v2.0.5
- fix(error handler): add default handler to econnreset (#759)
v2.0.4
v2.0.3
- feat(package): optional @types/express peer dependency (#707)
v2.0.2
- chore(deps): update @types/http-proxy to 1.17.8 (#701)
- fix(fixRequestBody): fix request body for empty JSON object requests (#640) (mhassan1)
- fix(types): fix type regression (#700)
v2.0.1
- fix(fixRequestBody): fix type error (#615)
- test(coverage): improve coverage config (#609) (leonardobazico)
- test: add test coverage to fixRequestBody and responseInterceptor (#608) (leonardobazico)
- chore(typescript): extract handlers types (#603) (leonardobazico)
v2.0.0
- chore(package): drop node 10 [BREAKING CHANGE] (#577)
v1.3.1
v1.3.0
- docs(response interceptor): align with nodejs default utf8 (#567)
- feat: try to proxy body even after body-parser middleware (#492) (midgleyc)
v1.2.1
- fix(response interceptor): proxy original response headers (#563)
v1.2.0
- feat(handler): response interceptor (#520)
- fix(log error): handle undefined target when websocket errors (#527)
v1.1.2
- fix(log error): handle optional target (#523)
v1.1.1
- fix(error handler): re-throw http-proxy missing target error (#517)
- refactor(dependency): remove
camelcase - fix(option): optional
targetwhenrouteris used (#512)
v1.1.0
- fix(errorHandler): fix confusing error message (#509)
- fix(proxy): close proxy when server closes (#508)
- refactor(lodash): remove lodash (#459) (#507) (TrySound)
- fix(ETIMEDOUT): return 504 on ETIMEDOUT (#480) (aremishevsky)
v1.0.6
- chore(deps): lodash 4.17.20 (#475)
v1.0.5
- chore(deps): lodash 4.17.19 (#454)
v1.0.4
- chore(deps): http-proxy 1.18.1 (#442)
v1.0.3
- build(package): exclude build artifact tsconfig.tsbuildinfo (#415)
v1.0.2
v1.0.1
v1.0.0
- feat(createProxyMiddleware): explicit import http-proxy-middleware (BREAKING CHANGE)(#400)
- feat(typescript): export http-proxy-middleware types (#400)
- fix(typescript): ES6 target - TS1192 (#400)
v0.21.0
- feat(http-proxy): bump to v1.18.0
- feat: async router (#379) (LiranBri)
- feat(typescript): types support (#369)
- feat: async pathRewrite (#397) (rsethc)
v0.20.0
- fix(ws): concurrent websocket requests do not get upgraded (#335)
- chore: drop node 6 (BREAKING CHANGE)
- chore: update to micromatch@4 (BREAKING CHANGE)
- chore: update dev dependencies
- refactor: migrate to typescript (#328)
- feat(middleware): Promise / async support (#328)
- refactor: remove legacy options
proxyHostandproxyTable(BREAKING CHANGE)
v0.19.1
- fix(log): handle case when error code is missing (#303)
v0.19.0
- feat(http-proxy): bump to v1.17.0 (#261)
v0.18.0
- fix(vulnerability): update micromatch to v3.x (npm:braces:20180219)
- test(node): drop node 0.x support (#212)
v0.17.4
- fix(ntlm authentication): fixed bug preventing proxying with ntlm authentication. (#132) (Thanks: EladBezalel, oshri551)
v0.17.3
- fix(onError): improve default proxy error handling. http status codes (504, 502 and 500). (#132) (graingert)
v0.17.2
- feat(logging): improve error message & add link to Node errors page. (#106) (cloudmu)
- feat(pathRewrite): path can be empty string. (#110) (sunnylqm)
- bug(websocket): memory leak when option 'ws:true' is used. (#114) (julbra)
- chore(package.json): reduce package size. (#109)
v0.17.1
- fix(Express sub Router): 404 on non-proxy routes (#94)
v0.17.0
- fix(context matching): Use RFC 3986 path in context matching. (excludes query parameters)
v0.16.0
- deprecated(proxyTable): renamed
proxyTabletorouter. - feat(router): support for custom
routerfunction.
v0.15.2
- fix(websocket): fixes websocket upgrade.
v0.15.1
- feat(pathRewrite): expose
reqobject to pathRewrite function. - fix(websocket): fixes websocket upgrade when both config.ws and external .upgrade() are used.
v0.15.0
- feat(pathRewrite): support for custom pathRewrite function.
v0.14.0
- feat(proxy): support proxy creation without context.
- fix(connect mounting): use connect's
pathconfiguration to mount proxy.
v0.13.0
- feat(context): custom context matcher; when simple
pathmatching is not sufficient.
v0.12.0
- add option
onProxyReqWs(subscribe to http-proxyproxyReqWsevent) - add option
onOpen(subscribe to http-proxyopenevent) - add option
onClose(subscribe to http-proxycloseevent)
v0.11.0
- improved logging
v0.10.0
- feat(proxyTable) - added proxyTable support for WebSockets.
- fixed(proxyTable) - ensure original path (not rewritten path) is being used when
proxyTableis used in conjunction withpathRewrite.
v0.9.1
- fix server crash when socket error not handled correctly.
v0.9.0
- support subscribing to http-proxy
proxyReqevent (trbngr) - add
logLevelandlogProvidersupport
v0.8.2
- fix proxyError handler (mTazelaar)
v0.8.1
- fix pathRewrite when
agentis configured
v0.8.0
- support external websocket upgrade
- fix websocket shorthand
v0.7.0
- support shorthand syntax
- fix express/connect mounting
v0.6.0
- support proxyTable
v0.5.0
- support subscribing to http-proxy
errorevent - support subscribing to http-proxy
proxyResevent
v0.4.0
- support websocket
v0.3.0
- support wildcard / glob
v0.2.0
- support multiple paths
v0.1.0
- support path rewrite
- deprecate proxyHost option
v0.0.5
- initial release