Bun runtime for Vercel Functions now accepts Bun.serve as an entrypoint
Mirrored from Vercel — AI for archival readability. Support the source by reading on the original site.
The Bun runtime for Vercel Functions now supports Bun.serve() as a function entrypoint, including WebSocket handlers. The server you run locally with Bun deploys as-is, without being wrapped in a framework.
Enable the runtime by setting "bunVersion": "1.x" in vercel.json.
Copy link to headingDeploy a routes-based server
Create a server with a routes map in server.ts at the project root.
Bun.serve({ routes: { "/api/boolean": () => Response.json({ success: true }), "/api/users/:id": (request) => Response.json({ user: request.params.id }), "/*": () => new Response("api catch-all"),A Bun.serve server deployed to Vercel with static, dynamic, and wildcard routes
Copy link to headingAccept WebSocket connections
Add a websocket handler and call server.upgrade(request) in fetch to upgrade matching requests. The rest of the server stays the same.
Bun.serve({ routes: { "/health": Response.json({ status: "ok" }),A websocket handler echoes messages back, and fetch upgrades requests to /ws and falls back to a 404
WebSocket connections run on Fluid compute with Active CPU pricing, so you pay only for time spent processing messages, not idle connection time. A connection is pinned to one function instance for its lifetime, and a single instance can handle multiple concurrent connections. Use an external data store to coordinate messages across instances.
Read the documentation to get started.
Discussion (0)
Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.
Sign in →No comments yet. Sign in and be the first to say something.