framework / 08 — updated may 2026

Honoby yusuke wada · open source

The Express of the edge era. A tiny, fast, ultraportable backend framework that runs on every JavaScript runtime that exists. Not a metaframework — there's no client-side rendering layer here. The right answer when you need a backend, not a full-stack framework.

languageTypeScript-first
runtimeNode · Bun · Deno · Cloudflare · AWS Lambda · Fastly · Vercel
shapebackend / edge-first
apiExpress-like + middleware
verdict.txt — frameworks/hono.mdhonest
$cat verdict.txt

Pick Hono when you need a backend API and the frontend lives elsewhere — a SvelteKit app, an Astro site, a mobile app, anything. Skip Hono if you want one framework that handles both ends.

verdict / bull case + bear case

Why we picked it — and why we might not

Honois the default React framework in 2026 not because it’s the smallest or the simplest, but because it’s the one with the least friction across the widest set of problems — provided your problem is shaped like a React product on Vercel.

The bull case is straightforward. App Router, Server Components, and Server Actions collapse what used to be three layers (page, API route, client fetcher) into one mental model. The Vercel deploy story is unmatched — push to git, get a preview URL, promote on click. The ecosystem is the largest in React: every auth provider, every database client, every UI library has a first-class Hono example, and the AI assistants understand Hono better than they understand any other framework. For a team that’s already on React, choosing Hono means choosing the path with the most documentation, the most third-party integrations, and the most worked examples.

The bear case is also real. The cache model is the most complex in the ecosystem; newcomers fight it before they understand it, and “wait, is this server or client?” is a permanent confusion for the first month. Bundle size meaningfully exceeds Astro and SvelteKit — fine if you’re using RSC, pure overhead if you’re not. Lock-in is medium-strength: ISR-on-demand, image optimization, and middleware all bind tighter to Vercel-style hosts than to a generic Node server. Self-hosting works, but you trade deploy ergonomics for it.

For most product teams the calculus comes out in Hono’s favor, but the failure modes are specific and worth naming. If your app is a SPA, Vite + React Router ships less code. If your site is content-first, Astro is a better fit. If you need a pure backend, Hono or Fastify are the right answer. The honest summary: Hono is the right default, not the right answer in every case.

scoreboard / at a glance

At a glance

One row per dimension. The value is what Honogives you; the note is the editorial framing — the quiet caveat that the marketing page won’t mention.

Routing
router-based · explicit method/path declarationExpress-shaped. app.get('/items', handler). No file-system magic.
Runtime support
every major JS runtime · zero polyfillsHeadline differentiator. Same code runs on Node, Bun, Deno, Cloudflare Workers, Fastly Compute, AWS Lambda, Vercel.
Performance
fastest router in the JS ecosystem · sub-microsecond per requestIndependent benchmarks consistently rank Hono fastest among JS-runtime frameworks. The router is genuinely tight.
Middleware
first-class · CORS, JWT, basic auth, body limit, timeout, ratelimit, etc.Comprehensive built-in middleware library. Most common needs are one import + app.use() away.
Validation
Zod / Valibot integration · @hono/zod-validatorType-safe request validation. Schema-first APIs are clean to write and maintain.
RPC client
hc · type-safe client from server typeTypeScript client that infers types from your Hono app. End-to-end type safety without code generation.
Bundle size
Hono core ~12KB · stays small with tree-shakingOne of the smallest backend frameworks anywhere. Cloudflare Workers' 1MB bundle limit is rarely a problem.
Hosting fit
Cloudflare Workers · AWS Lambda · Bun · Deno · Node · Fastly · Vercel · NetlifyMost portable framework in this set. The same hono app runs anywhere with minimal adapter code.
Lock-in
essentially zeroHono is just routes and handlers. There's nothing proprietary to lock you in.
Framework age
4 years · Hono 4 (Mar 2024) stableMature; widely deployed in production at Cloudflare and others. Active development with frequent releases.
pricing / three scenarios

Pricing at three scales

Three receipts at three traffic shapes. Numbers are illustrative — list-tier prices from May 2026, rounded to the dollar. Nothing here is invented; actual bills will vary with usage shape.

hobby.txt — 1k requests/day · personal APImonthly
line itemdetailcost
ComputeCloudflare Workers — free tierfree
DatabaseTurso free tierfree
TOTAL · monthlyfree/mo
>Cloudflare Workers' free tier (100k requests/day) handles any hobby API. Hono's tiny bundle deploys instantly. Cheapest backend stack in the set.
side-project.txt — 100k requests/day · production APImonthly
line itemdetailcost
ComputeCloudflare Workers paid$5
DatabaseTurso Scaler$9
StorageCloudflare R2 — within freefree
TOTAL · monthly$14/mo
>$14/mo for a production API serving 100k requests/day is wild. Hono on Workers + Turso is the cheapest credible backend stack at this scale.
scale.txt — 10M requests/day · production · multi-regionmonthly
line itemdetailcost
ComputeCloudflare Workers · usage-billed$50
DatabaseTurso Production · 8 replicas$29
StorageCloudflare R2 · 1TB$15
BandwidthCF — egress freefree
TOTAL · monthly$94/mo
>Even at 10M requests/day, the bill stays under $100/mo. Compare to a Vercel-hosted Next.js API at this scale — typically 3-5x more. The economics of edge-first hosting + a small framework + flat-tier DB compound.
features / deep dives

Feature by feature

Six rows. The body describes how the feature works in 2026; the honest tradeoff is the part the docs won’t tell you. Skim the bold lines if you’re in a hurry.

01

Routing

Express-shaped, faster

app.get('/users/:id', handler) — direct method/path declarations. Path params type-safe via TypeScript inference. Multiple routers can be composed with app.route('/api', subApp) for modularity.

Honest tradeoff

Familiar to anyone who's written Express. The downside (vs file-system routing): no automatic discovery, you import every route. For larger APIs, you write a routes/index.ts that imports the rest.

02

Middleware

first-class, comprehensive

Built-in middleware covers CORS, JWT, basic auth, body size limits, timeouts, ratelimiting, JSX rendering, ETag, secure headers, compression, logger, request ID, etc. app.use(cors()) and you have permissive CORS; replace with config for production.

Honest tradeoff

The built-in set covers 90% of needs. Beyond that, custom middleware is a one-line `(c, next) => ...`. Less ceremony than Express, similar shape.

03

Validation (Zod)

type-safe request bodies

@hono/zod-validator validates request bodies/queries/params against a Zod schema and infers the TypeScript type from the schema. The handler receives a typed c.req.valid('json') with no manual cast.

Honest tradeoff

Schema-first APIs are easier to maintain than ad-hoc validation. The downside: an extra dependency (Zod or Valibot) and a small learning curve for engineers new to schema validation.

04

RPC client (hc)

end-to-end type safety

The hc client infers types from a Hono app’s exported type. const client = hc<typeof app>(BASE_URL)gives you a fully typed client — calling a route that doesn’t exist is a compile error. No code generation, no separate SDK build.

Honest tradeoff

Type-safe client/server boundaries are genuinely valuable. The downside: hc is JS-only — if your client is Swift/Kotlin/Python, you don't get this benefit and need a separate SDK.

05

Runtime portability

deploy anywhere

The same Hono code runs on Node (@hono/node-server), Bun (native), Deno (native), Cloudflare Workers (native), AWS Lambda (@hono/aws-lambda), Fastly Compute, Vercel Edge, Netlify Edge. Adapter is one import.

Honest tradeoff

Genuinely the most portable backend framework in JS. The downside: rarely-used features (like Node's child_process) don't work everywhere — but if you're using those, you probably aren't on the edge anyway.

06

JSX rendering

server-side HTML, no React

Hono includes a tiny JSX renderer for HTML responses — c.html(<Layout>...</Layout>) works without React. Great for emails, server-rendered HTML pages, or simple admin UIs without a full framework.

Honest tradeoff

Useful for small server-rendered surfaces (transactional email HTML, admin pages, OG images). Don't use it as a substitute for a frontend framework — it's not designed for client-side state.

fit / use or skip

Use it for, skip it for

use / hono

Use Hono for…

  • You need a backend API and the frontend is something else (SvelteKit, Astro, mobile app, vanilla HTML).
  • Cloudflare Workers / edge deploy is the goal — Hono is the most ergonomic framework on Workers.
  • Performance matters at the request level — Hono's router is the fastest in the JS ecosystem.
  • End-to-end type safety from server to client (when the client is JS/TS) — hc gives you this with zero codegen.
  • Cost-sensitive backend at scale — Hono's tiny bundle + Workers' free tier is the cheapest credible backend stack you'll find.
skip / hono

Skip Hono for…

  • You want one framework for both frontend and backend — Hono is backend-only by design.
  • Your team is heavily Node/Express-shaped and the migration cost outweighs Hono's benefits.
  • You need extensive Node-specific features (worker_threads, complex stream handling, native bindings) that don't translate to edge runtimes.
  • Server-side rendering of a JS frontend is the goal — Hono can render JSX but isn't a metaframework.
  • You'd rather use a more opinionated full-stack solution (Next.js API routes, Nuxt server routes, SvelteKit endpoints) and stay inside one framework.
gotchas / observed

Gotchas worth knowing

Six pitfalls visible in public docs and community discussion. None will stop you shipping; all of them will cost you an afternoon if you don’t know about them.

  • Hono / runtime

    Node-specific imports break the Cloudflare deploy

    Importing fs, crypto (Node-style), path, etc. fails on Cloudflare Workers. Use Web-standard APIs (crypto.subtle, Request, Response, fetch). The runtime check happens at deploy, not at npm run dev with the Node adapter.

  • Hono / cold starts

    Cloudflare Workers cold starts are <5ms — but they exist

    Hono on Workers cold-starts in milliseconds, but the Workers runtime itself can stall briefly when scaling up to a new region. For low-traffic APIs that are critical-path (auth, payments), pre-warm with a periodic ping or accept the 5-50ms cold-start tail latency.

  • Hono / hc

    hc client requires the server type to be exported

    hc<typeof app>needs the server’s app type to be exportable from the same monorepo (or a published package). Multi-repo setups need to either share types via a published package or generate a type file. Not impossible, but more setup than the “same monorepo” default.

  • Hono / middleware order

    Middleware order matters for c.set()

    Middleware sets values on the context with c.set('user', ...). Subsequent handlers read with c.get('user'). If your auth middleware is registered after the route, the route’s handler runs without the user context. Easy to miss when refactoring middleware order.

  • Hono / streaming

    Streaming responses need explicit signaling

    Use c.body(stream) or c.stream(...) for streaming. Returning a regular ReadableStreamfrom a handler doesn’t auto-stream — it buffers. The streaming helpers are well-documented; the buffering default is the gotcha.

  • Hono / sessions

    Cookie sessions are stateless — KV/DB needed for revocation

    Hono's JWT middleware verifies tokens but can't revoke them — that requires checking against a backing store (Cloudflare KV, Redis, Turso). For high-security endpoints (financial, admin), pair JWT verification with a revocation list lookup.

how it compares / different bets

How it compares

Three short framings. No clear-winner declarations — these are different bets, and the right pick is mostly a question of what you’re optimizing for. Linked comparison pages have the side-by-side detail.

Hono ━▶ Expressdifferent bets

Express is mature, ubiquitous, and Node-only. Hono is younger, runtime-portable, and faster. The API shapes are similar — same middleware concept, similar handler signatures — so migration is a one-week project for most APIs.

Pick Express for legacy compatibility, the largest middleware ecosystem, and Node-specific features. Pick Hono for new APIs, edge deployment, type safety, and the best performance numbers in JS-runtime backend frameworks.

Hono ━▶ Fastifydifferent bets

Fastify is the fast, mature Node alternative to Express. It's well-engineered, Node-specific, and feature-rich (validation, schema-driven routing, plugins). Hono matches Fastify on speed and beats it on portability.

Pick Fastify for Node-only deployments where the rich plugin ecosystem matters. Pick Hono when edge-runtime support, smaller framework size, or runtime portability is the deciding factor.

Hono ━▶ Next.js API routesdifferent bets

Next.js API routes are integrated with the frontend — same repo, same deploy, same auth context. Hono is a separate backend, called from any frontend over HTTP. The choice is mostly architectural.

Pick Next.js API routes when the API is owned by the same team as the frontend and tight coupling is a feature. Pick Hono when the backend serves multiple clients (web + mobile + third-party) or needs to run separately for cost / portability reasons.