chore(deps): update dependency @hono/node-server to v2#208
Merged
chenjiahan merged 1 commit intomainfrom Apr 25, 2026
Merged
Conversation
f72ab7f to
5f7319c
Compare
chenjiahan
approved these changes
Apr 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^1.19.14→^2.0.0Release Notes
honojs/node-server (@hono/node-server)
v2.0.0Compare Source
Now, we release the second major version of the Hono Node.js adapter 🎉 🎉 🎉
The Hono Node.js adapter is now up to 2.3x faster
v2 of the Hono Node.js adapter reaches up to 2.3x the throughput of v1 — that's the peak number, measured on the body-parsing scenario of
bun-http-framework-benchmark. The other scenarios (Ping, Query) get a smaller but real boost too.Install or upgrade with:
v2
The Node.js adapter is going through a major version bump to v2. That said, the public API stays the same — the headline of this release is the large performance improvement described above.
What does the Node.js adapter do?
A quick refresher on what the Node.js adapter actually does — it exists so that Hono applications can run on Node.js. Hono is built on the Web Standards APIs, but you cannot serve those directly from Node.js. The adapter bridges the Web Standards APIs and the Node.js APIs, which is what lets a Hono app — and more generally a Web-Standards-style app — run on top of Node.js.
If you write the following code and run
node ./index.js, a server starts up onlocalhost:3000. And it really is plain Node.js underneath.The early performance story
The very first implementation of the Node.js adapter looked roughly like this in pseudocode:
So the flow was:
IncomingMessageRequestobject and handed to the appResponsereturned by the app is written back to the outgoingServerResponseIn diagram form:
This is, frankly, inefficient. So whenever Hono went head-to-head with other Node.js frameworks we kept losing — all we could do was shrug and say "well, it's slow on Node.js."
Introducing LightweightRequest / LightweightResponse
The huge step forward that fixed this was a legendary PR from @usualoma:
#95
It made things up to 2.7x faster.
I previously wrote about this in detail in this post:
https://zenn.dev/yusukebe/articles/7ac501716ae1f7?locale=en
In short, the trick is wonderfully simple. It just follows the golden rule of performance tuning: don't do work you don't have to do. Lightweight versions of
RequestandResponseare constructed and used first — and that path is fast. Only when something actually needs the contents of theRequest, e.g. when you callreq.json(), does a realnew Request()get instantiated under the hood and used from then on. The result is fast, and behavior stays correct.…but body parsing was still slow
"Fast" here was for a very simple "Hello World" benchmark — a GET that just returns text.
There are many ways to benchmark, but the one we tend to reach for is this:
https://github.com/SaltyAom/bun-http-framework-benchmark
It tests three scenarios: Ping, Query, and Body. Let's pit Hono against the major Node.js frameworks:
As you can see, the Body case is very slow. The handler being measured is essentially this:
c.req.json()is the slow part. The reason is well understood: inside the Node.js adapter, whenjson()is called the LightweightRequest path can't be used, so a realnew Request()ends up being constructed.perf: optimize request body reading
The 2.3x figure above comes from one PR specifically — PR #301 by @mgcrea:
The PR bundles a few changes, but the key one is "optimize request body reading". Quoting from the PR description:
In other words, in the
json()case above, we no longer convert into aRequestat all — we read the body straight off the Node.js APIs. A classic fast path. That alone gives a large jump in body-parsing throughput.The same PR also includes two other tuning improvements:
URLobject except in edge casesbuildOutgoingHttpHeadersoptimization — skip theset-cookieheader comparison when there are no cookiesv2 ships several other performance PRs as well —
newHeadersFromIncomingand signal fast-paths,Responsefast-paths andresponseViaCacheimprovements, method-key caching, a regex-basedbuildUrlrewrite, and more (see the full list below). They all add up, but #301 is by far the largest single contributor, which is why it gets the spotlight here.v2 performance
Now let's measure the final v2 build.
First, comparing against the v1 Node.js adapter.
devhere is v2. Body improves by 2.3x, and the other scenarios get faster too:Next, the same comparison against other frameworks. With the Body score jumping, Hono passes Koa and Fastify and takes first place:
Breaking changes
There are two breaking changes in v2.
Dropped support for Node.js v18
Node.js v18 reached end-of-life, so v2 requires Node.js v20 or later.
Removed the Vercel adapter
The Vercel adapter (
@hono/node-server/vercel) has been removed. It is no longer needed for Vercel's modern runtimes, so the recommendation is to deploy without it.If you still need the previous behavior, the old adapter was a one-liner on top of
getRequestListenerand you can write the same thing in your own project:Then use it the same way you used
handlefrom@hono/node-server/vercelbefore.All changes
A full list of what landed in PR #316.
Performance
buildOutgoingHttpHeadersfor the common case (#301) by @mgcrea:as safe host (#320) by @yusukebenewHeadersFromIncomingand signal fast-path (#332) by @GavinMeierSonosResponsefast-paths andresponseViaCacheimprovements (#333) by @GavinMeierSonosUint8Arraylookup tables with regex inbuildUrl(#345) by @usualomaFeatures
Breaking changes
Fixes & refactors
new URL()should be used (#310) by @usualomaRequestobject (#311) by @usualomaBlob/ReadableStreamcacheable responses (#342) by @usualomaResponse.json()andResponse.redirect()spec compliance and efficiency (#343) by @usualomaBuild & tooling
type: moduletopackage.json(#336) by @yusukebeWrap-up
So that's v2 of the Node.js adapter — significantly faster, with the same API. Just upgrading should give you a real performance boost. No more "Hono is slow on Node.js" excuses. Please use Hono — fast not only on Cloudflare, Bun, and Deno, but now also on Node.js.
Configuration
📅 Schedule: (in timezone Asia/Shanghai)
* 0-3 * * 1)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.