meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

meta: add unified http api initiative - #65139

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative
Aug 14, 2026
Merged

meta: add unified http api initiative#65139
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
jasnell:jasnell/unified-http-initiative

Conversation

@jasnell

@jasnelljasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

HTTP APIs in Node.js have become a bit of a mess.

We have separate node:http, node:https, and node:http2 modules. We have separate fetch implementation. We have http3 support in development. There are new http features like datagrams and priorities that are entirely unsupported, etc.

This strategic initiative will be focused on the development of a unified HTTP API built around the web standard fetch model. Client and Server.. independent of underlying transport and updated to modern HTTP protocol capabilities.

@nodejs/quic @mcollina @nodejs/tsc

HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/tsc

@nodejs-github-botnodejs-github-bot added the doc Issues and PRs related to Node.js documentation. label Aug 8, 2026
@jasnelljasnell added http Issues and PRs related to the http subsystem. net Issues and PRs related to the net subsystem. meta Issues and PRs related to the general management of the project. http2 Issues and PRs related to the http2 subsystem. quic Issues and PRs related to the QUIC transport implementation. fetch Issues and PRs related to the Fetch API. web-standards Issues and PRs related to web-platform APIs and standards compliance. http3 Issues and PRs related to the HTTP/3 implementation. webtransport Issues and PRs related to the WebTransport API. and removed doc Issues and PRs related to Node.js documentation. labels Aug 8, 2026
@jasnell
jasnell requested a review from a teamAugust 8, 2026 15:13

@panvapanva left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign me up.

@jonchurch

jonchurch commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Stoked to see this as a strategic initiative!

(I know this is early early days, but curious if anyone wants to share what's in their head or in discussions I've missed)

One clarifying question on "built around the web standard fetch model":

Should I read that as Node standardizing the future of request handlers on Request/Response primitives? Or am I looking at the wrong layer here and the end goal is an abstraction layer sitting below Fetch/IncomingMessage, speaking historic protocols as well as future ones? Or is it both: that abstraction layer underneath, with Request/Response handlers standardized on top of it?

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

For context on why I'm asking: I was expecting a unified HTTP API to address the shortcomings the Fetch spec has for modeling jobs that servers need to do. I see the Fetch spec serving browsers as its main constituents, and the tension that can create for servers wanting to model all the jobs they must do via Fetch primitives. So that phrase surprised me, and I'm mostly trying to align my mental model with what layer this new API would occupy relative to the existing stuff. Not opposed to any direction here, just want to clear the fog in my understanding of what problems are on the table.

In the spirit of intellectual honesty, my initial (mistaken) read

I often fall into the trap of categorizing Fetch as a protocol. I know it's not, but my brain often forgets that. I work on Express after all, where we have extended and intertwined with node:http to the point that Fetch looks like a different protocol to me, despite being a different API over the same protocols.

So my initial reaction was that a unified HTTP API would sit above Fetch/IncomingMessage and translate between them at the protocol level. But an implementation competing for the layer Fetch occupies sounds like the xkcd "14 competing standards becomes 15" trap, so I'm assuming that's not on the table hehe

You can see some more of my raw thoughts in this express thread from before I posted this question

@bjohansebas

Copy link
Copy Markdown
Member

By the way, as far as I know, there are things that probably will never make it into the Fetch standard, but those things that don't belong in the Fetch spec could still be added as a standard variation within the WinterTC group. That way, both frameworks and runtimes can have a minimal API that runtimes are expected to support.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Either way, would the top level Request/Response layer be extended to compensate for the things the Fetch spec makes hard for servers to model today? Or would it stay pure Fetch spec, with those server concerns discussed at the WHATWG level?

The answer is likely some mixture of both.

@jasnell

Copy link
Copy Markdown
MemberAuthor

Giving this 3 more days more merging.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

ping @KhafraDev

@KhafraDevKhafraDev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unifying node:http, node:https, node:http2, and node:quic is amazing. The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

@bjohansebas

Copy link
Copy Markdown
Member

The fetch half... I've already spoken as to why, personally, I think it's a bad idea.

Do you have any resources? I’d like to read more about it.

@KhafraDev

Copy link
Copy Markdown
Member

I don't think my personal opinion is relevant to this PR and I don't want to derail it.

@jasnelljasnell added the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
@nodejs-github-bot
nodejs-github-bot merged commit db138c4 into nodejs:mainAug 14, 2026
59 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in db138c4

@nodejs-github-botnodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Aug 14, 2026
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
HTTP APIs in Node.js have become a bit of a mess.
We have separate `node:http`, `node:https`, and `node:http2`
modules. We have separate `fetch` implementation. We have
`http3` support in development. There are new http features
like datagrams and priorities that are entirely unsupported,
etc.
This strategic initiative will be focused on the development
of a unified HTTP API built around the web standard fetch
model. Client and Server.. independent of underlying transport
and updated to modern HTTP protocol capabilities.
Signed-off-by: James M Snell <jasnell@gmail.com>
PR-URL: #65139
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetchIssues and PRs related to the Fetch API.httpIssues and PRs related to the http subsystem.http2Issues and PRs related to the http2 subsystem.http3Issues and PRs related to the HTTP/3 implementation.metaIssues and PRs related to the general management of the project.netIssues and PRs related to the net subsystem.quicIssues and PRs related to the QUIC transport implementation.web-standardsIssues and PRs related to web-platform APIs and standards compliance.webtransportIssues and PRs related to the WebTransport API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

18 participants

@jasnell@nodejs-github-bot@jonchurch@bjohansebas@KhafraDev@mcollina@panva@benjamingr@pimterry@richardlau@daeyeon@efekrskl@legendecas@metcoder95@trivikr@marco-ippolito@mertcanaltin@atlowChemi