State of QUIC in Node.js
Links that I found interesting this week:
Memory is slow, disk is fast. Not directly to Node.js, but an interesting read
TL;DR
QUIC implementation in Node.js has been dragging on for 6 years. The primary reason for that is OpenSSL's refusal to provide full QUIC support. The PR was already there, but it was closed in 2021.
After 4 long years, the maintainers of OpenSSL decided that those APIs were worth implementing, and they were shipped with OpenSSL 3.5.
With that release, Node.js 25 is set to land the first implementation of QUIC in October 2025.
What’s QUIC?
QUIC is a transport layer protocol based on UDP to replace TCP+TLS.
While it's categorized as a transport layer protocol, it's not like other protocols from the same layer as TCP or UDP. A lot of heavy lifting related to the protocols is actually happening in the application layer.
It's an interesting situation where you have
The main reason why QUIC was created is to improve performance. When you deal with TCP+TLS, you have to go through the handshake process for TCP, then the TLS handshake, and only then can you start sending data. In total, it gets to 3 round-trip (2 TCP + 1 TLS).
With QUIC, you can achieve the same result with only 1 round trip.
And it gets even more efficient with 0 round-trips when you resume an already established connection.
However, it doesn't mean that QUIC has no weak points and always performs better. In fact, there is a study that shows QUIC stack (UDP + QUICK + HTTP/3) could be up to 45% slower than HTTP/2 stack (TCP + TLS + HTTP/2).
And that's not the only weak point of QUIC, but we're not getting into the details here.
History of QUIC in Node.js
The first issue mentioning the need to integrate QUIC into Node.js was created in 2018.
The person responsible for the first implementation was James Snell. He started working on it in March 2019. Unfortunately, we didn't see the results of the work merged into Node.js and considered as a stable feature to use.
The main reason why we haven't seen any QUIC implementations in Node.js has to do with the OpenSSL dependency. Node.js uses it for all cryptographic operations, including TLS.
The crucial part of the QUIC protocol is TLS version 1.3 and a specific API that is required for QUIC to be able to make use of the TLS internals, which breaks traditional layering:
Direct access to traffic secrets. QUIC needs to extract encryption keys directly from the TLS handshake
Bypassing the TLS record layer. QUIC needs to read/write TLS messages directly without the standard TLS framing
Custom transport handling. QUIC handles its own packet encryption and transport, only using TLS for the cryptographic handshake
In 2021, there was already a PR with QUIC API support in OpenSSL. However, the PR was closed with a note that compatibility with APIs introduced in this PR is not a goal of the project.
Would I need to tell you how disappointed everyone in the community was?
Because of that, Microsoft and Akamai decided to fork OpenSSL and create a new project called quictls. Node.js even had a PR where they were switching from OpenSSL to this fork to make QUIC possible in Node.js.
By August 2020, the nodejs/quic repository was archived, marking a critical turning point. The implementation was removed from Node.js core in January 2021, and despite continued efforts through 2024, no stable public API has emerged.
Current state of QUIC in Node.js
OpenSSL resistance was fierce, but finally, with the OpenSSL 3.5 release on April 8th, 2025, we're getting those long-awaited changes, and the work on QUIC in Node.js has officially progressed.
We have this issue where you can see a bunch of progress updates from James Snell and folks in the community.
QUIC is landing in Node.js 25 in October 2025!
Well, at least that's the plan.
Yep, we're finally getting to the point where we should've been 4-5 years ago.
Huge shoutout to all the people who worked on this from OpenSSL, ngtcp2, and Node.js core.
Wrap Up
OpenSSL maintainers were resisting the community's needs for 4 long years. Finally, with the release of OpenSSL 3.5 we're getting things that we were missing for protocol implementation in Node.js.
Thanks to these changes, Node.js 25 will land the first implementation of QUIC.