Modern web framework

Express had a great run.
Hono is what comes next.

Hono is a small, fast, type-safe web framework that runs anywhere JavaScript runs: Node, Bun, Deno, Cloudflare Workers, Vercel, Lambda, you name it. Express is stuck on Node and stuck in 2014.

See the case → Show me code
~14kB
Hono core, gzipped
3x+
faster routing on Node
0
runtime lock in
100%
TypeScript native

Why Hono is better than Express

Six reasons teams are leaving Express behind.

Built on web standards

Hono uses the standard Request and Response objects, the same ones browsers and Workers use. Express invented its own non-standard req and res twelve years ago.

🌐

Runs everywhere

One codebase, every runtime. Node, Bun, Deno, Cloudflare Workers, AWS Lambda, Vercel, Netlify, Fastly. Express is Node only.

📚

TypeScript first

Routes, params, JSON bodies, and middleware are end-to-end typed. With the RPC client you get type safety from server to client without code generation.

🚀

Fast by default

The RegExpRouter resolves routes in linear time. Benchmarks consistently put Hono multiples ahead of Express on raw throughput.

🧹

Batteries that match the year

JWT, JWK, CORS, ETag, basic auth, bearer auth, JSX renderer, validators, streaming, server-sent events. All first party, all tree-shakeable.

🛡️

Actively maintained

Express 5 took nearly a decade to ship. Hono ships meaningful releases every few weeks with a healthy contributor base.

Side by side

A quick scan of where each one lands.

FeatureHonoExpress
Bundle size~14kB gzipped tiny~570kB installed heavy
Runtime supportNode, Bun, Deno, Workers, Lambda, Vercel universalNode only locked in
TypeScriptNative, end-to-end typed first classCommunity @types, partial bolt-on
Web standard Request and ResponseYes standardsNo, custom req and res proprietary
Async middlewareNative async and await cleanCallbacks plus next() legacy
ValidationBuilt in with Zod, Valibot, ArkType includedBring your own manual
JSX server renderingBuilt in includedPick a template engine extra
Type-safe RPC clientYes, hc() includedNo missing
Release cadenceFrequent activeExpress 5 took nine years slow

Same API, less code

A typed, validated JSON endpoint in both frameworks.

hono 15 lines, fully typed
import { Hono } from 'hono'
import { zValidator } from '@hono/zod-validator'
import { z } from 'zod'

const app = new Hono()

const schema = z.object({
  name: z.string().min(1)
})

app.post(
  '/hello',
  zValidator('json', schema),
  (c) => c.json({ msg: `hi ${c.req.valid('json').name}` })
)

export default app
express more wiring, no types
const express = require('express')
const { z } = require('zod')

const app = express()
app.use(express.json())

const schema = z.object({
  name: z.string().min(1)
})

app.post('/hello', (req, res) => {
  const parsed = schema.safeParse(req.body)
  if (!parsed.success) return res.status(400).json(parsed.error)
  res.json({ msg: `hi ${parsed.data.name}` })
})

app.listen(3000)

The takeaway

Express was the right answer for Node in 2010. Hono is the right answer for everything that runs JavaScript today. Smaller, faster, typed, and portable. If you are starting something new, you almost certainly want Hono.