all posts

The best Hono hosting platforms in 2026

Ajay Kumar··9 min read

Hono is a small web framework built on the standard Request and Response objects, which is why the same router runs on Cloudflare Workers, Deno, Bun, Node and AWS Lambda. You pick a runtime by importing an adapter, not by rewriting anything.

That portability is real, and it moves the hosting question one level up: instead of "where can I deploy this framework", it becomes "which runtime should this application be running on". The answer depends almost entirely on what your handlers do. I build PandaStack, which is one of the options below — the reasoning applies whichever way you go.

The adapter decides the hosting question

A Hono app for Workers and a Hono app for Node differ by a handful of lines. Here's the whole difference:

// src/app.ts — shared, runtime-agnostic
import { Hono } from "hono";

export const app = new Hono();
app.get("/health", (c) => c.json({ ok: true }));
app.get("/users/:id", async (c) => {
  const id = c.req.param("id");
  return c.json({ id });
});

// src/worker.ts — Cloudflare Workers / Deno / Bun
import { app } from "./app";
export default app;

// src/server.ts — Node
import { serve } from "@hono/node-server";
import { app } from "./app";
serve({ fetch: app.fetch, port: Number(process.env.PORT ?? 3000) });

Everything else in this post follows from which of those two entry points you ship, because they land you in completely different worlds — one with millisecond cold starts and no filesystem, one with a full runtime and a process that stays alive.

Cloudflare Workers — the default, and the constraint

Workers is where most Hono apps start, and for a stateless JSON API it's an excellent fit: near-zero cold starts, global distribution, and Hono's overhead is small enough that the framework isn't the bottleneck.

The constraints are the isolate's, not Hono's. No Node built-ins unless you enable compatibility flags, no native modules, a CPU-time budget per request, and no long-lived TCP connections — which is the one that catches people, because it means your Postgres client needs to speak HTTP or go through a pooler that does.

Pick it when your handlers do routing, validation, auth and calls to HTTP APIs. Reconsider when they open database connections, process images, or import something with a build step involving a C compiler.

Deno Deploy and Bun hosts — standards, with a real runtime

Deno Deploy gives you the isolate model with a stronger web-standards story and TypeScript that just runs. Bun, on hosts that support it, gives you a fast conventional runtime with Node compatibility good enough for most packages — Hono's Bun adapter is a one-liner.

Bun in particular is a nice middle ground: you keep npm packages, native modules mostly work, the process is long-lived so connection pools behave, and startup is quick. The catch is host support — fewer platforms offer first-class Bun than offer Node, so check before you build around it.

Node on a normal server — boring, and usually right

The `@hono/node-server` adapter turns a Hono app into an ordinary long-running HTTP server, and that unlocks everything the isolate model forbids: a real connection pool to Postgres, WebSockets, background timers, streaming file uploads to disk, native dependencies, and no CPU-time ceiling.

This is the target I'd default to for a Hono app that backs a product. The framework was designed for the edge and works perfectly well off it, and "my API is a normal server" removes an entire category of problems from your week.

AWS Lambda — when the surrounding infrastructure is AWS

Hono's Lambda adapter handles both API Gateway and Lambda function URLs, and if your organisation deploys everything through CDK or SAM, that consistency is worth more than any runtime nicety. You inherit Lambda's cold starts and its 15-minute ceiling, both of which are fine for an API.

PandaStack — a long-lived Node process, without the server

This is mine, so here's the concrete shape. You connect a repo, PandaStack builds it inside a Firecracker microVM and serves it on a stable URL. Hono needs no special handling — it's a Node process listening on a port:

{
  "type": "node",
  "installCommand": "npm ci",
  "buildCommand": "npm run build",
  "startCommand": "node dist/server.js",
  "port": 3000
}

Two properties matter for a Hono API specifically. The process is long-lived, so a `pg` connection pool works the way the documentation says it does — no HTTP database driver, no pooler workaround. And when nothing is hitting the app, it sleeps and stops billing, then wakes on the next real request; the microVM restores from a snapshot rather than cold-booting, so the wake is fast enough that the visitor doesn't file a bug.

What you don't get is edge distribution. The app runs in a region, like a normal server. If your Hono app is a globally distributed read API, Workers is the better answer and I'd say so.

Deciding

  1. Stateless API calling other HTTP services, global audience — Cloudflare Workers.
  2. You want web standards and portability without proprietary storage — Deno Deploy.
  3. Postgres connection pool, WebSockets, native modules, file handling — Node or Bun on a long-running host.
  4. Your infrastructure is CDK and everything else is already Lambda — the Lambda adapter.
  5. You want the long-running shape but not the server maintenance, and idle cost matters — a scale-to-zero app host.
Keep your routes in a runtime-agnostic module and your adapter in a thin entry file, as in the first code block. It costs nothing today and means switching targets later is a build-config change rather than a rewrite — which is the entire reason to be on Hono.

Frequently asked questions

Can one Hono codebase really deploy to Workers and Node without changes?

The routing and handler code, yes — that's built on standard Request and Response objects, which both runtimes provide. What doesn't port is anything runtime-specific inside your handlers: Node's fs and process.env behave differently or not at all in an isolate, and Workers bindings like KV have no Node equivalent. Keep those behind a small interface and the promise mostly holds; scatter them through your handlers and it doesn't.

Can I use Postgres with Hono on Cloudflare Workers?

Yes, but not with a normal pool. Isolates don't hold raw TCP sockets the way a Node process does, so you need either a driver that speaks HTTP to your database or a connection pooler that exposes an HTTP endpoint. It works, and it's slower per query than a pooled TCP connection from a regional server. If your Hono app is query-heavy, running it as a Node process next to the database is the simpler and faster design.

Is Hono faster than Express?

On routing benchmarks, comfortably — it's built around a set of optimised routers and does far less per request. In a real application the difference is usually invisible, because your latency is dominated by database queries and upstream calls rather than the router. The stronger practical arguments for Hono are the small bundle, first-class TypeScript, and the fact that it runs on runtimes Express can't.

Does Hono need a build step?

Depends on the target. On Deno and Bun you can run TypeScript directly. For Node you'll typically compile with tsc or bundle with esbuild or tsup, and for Workers the Wrangler toolchain bundles for you. On a git-driven host, the practical version is an installCommand of npm ci, a buildCommand that runs your bundler, and a startCommand pointing at the compiled entry file.

What's the cheapest way to host a small Hono API?

For a low-traffic stateless API, an isolate platform's free tier is hard to beat — you pay per request and there's nothing to keep warm. For an API that talks to a database, the calculus changes: a small always-on process next to the database usually beats an edge function paying a round trip on every query. If the API is idle most of the day, a host that sleeps the process and stops billing gets you both.

Keep reading

Run code in a microVM in one API call.

49ms p50 cold start. Fork, snapshot, and scale to zero.

Start free
Written by Ajay Kumar, Founder, PandaStack.