What version of Hono?
hono@4.11.9
@hono/node-server@1.19.9
What version of Node.js?
- Vercel function runtime
nodejs24.x
What happened?
Using the official Vercel adapter from @hono/node-server/vercel:
import { handle } from '@hono/node-server/vercel'
import app from '../apps/api/src/server.js'
export default handle(app)
in a Vercel function (api/server.ts) with rewrites (/api/* and /rpc/* -> /api/server), GET requests work, but POST requests never return a response (client times out).
Repro matrix from Preview deployment:
| Case |
Method |
Path |
Result |
| health |
GET |
/api/health (separate function) |
200 |
| slack-url-verification |
POST |
/api/slack |
timeout (curl exit 28 after 25s) |
| slack-interactivity-invalid-signature |
POST |
/api/slack/interactivity |
timeout (curl exit 28 after 25s) |
| rpc-ping-no-csrf |
POST |
/rpc/ping |
timeout (curl exit 28 after 25s) |
| rpc-ping-csrf-no-auth |
POST |
/rpc/ping |
timeout (curl exit 28 after 25s) |
When we switch back to a custom Node IncomingMessage/ServerResponse bridge that buffers the request body and calls app.fetch(request), the same POST routes return immediately with expected app-level responses.
Minimal reproduction steps
- Deploy a Vite + Hono app on Vercel with:
- API function at
api/server.ts
- rewrites
/api/:path((?!health$|server$).*) -> /api/server and /rpc/(.*) -> /api/server
- Use
@hono/node-server/vercel handle(app) as above
- Call POST route (JSON or form-encoded) via Preview URL
- Observe no response body/status until client timeout
Expected
POST routes should behave like GET routes and return app responses.
Actual
POST routes hang indefinitely on Vercel Node runtime.
Additional context
- Using
hono/vercel in this same Node function setup also hangs, but that appears to be a signature mismatch (Request handler in Node req/res runtime).
- The issue here is specifically with the Node-targeted Vercel adapter from
@hono/node-server/vercel.
What version of Hono?
hono@4.11.9@hono/node-server@1.19.9What version of Node.js?
nodejs24.xWhat happened?
Using the official Vercel adapter from
@hono/node-server/vercel:in a Vercel function (
api/server.ts) with rewrites (/api/*and/rpc/*->/api/server), GET requests work, but POST requests never return a response (client times out).Repro matrix from Preview deployment:
/api/health(separate function)/api/slack/api/slack/interactivity/rpc/ping/rpc/pingWhen we switch back to a custom Node
IncomingMessage/ServerResponsebridge that buffers the request body and callsapp.fetch(request), the same POST routes return immediately with expected app-level responses.Minimal reproduction steps
api/server.ts/api/:path((?!health$|server$).*)->/api/serverand/rpc/(.*)->/api/server@hono/node-server/vercelhandle(app)as aboveExpected
POST routes should behave like GET routes and return app responses.
Actual
POST routes hang indefinitely on Vercel Node runtime.
Additional context
hono/vercelin this same Node function setup also hangs, but that appears to be a signature mismatch (Request handler in Node req/res runtime).@hono/node-server/vercel.