I've used Express since 2019. It's the default answer to 'build a REST API in Node' and for good reason — massive ecosystem, battle-tested, every tutorial uses it. But after two production services on Hono, I'm not going back.
The Performance Gap
Hono is measurably faster. On Bun, our Hono services handle roughly 120k req/s on a single core in benchmark conditions. Express with the same routes lands around 40k. In practice the difference narrows under I/O wait, but cold paths and middleware chains are noticeably faster.
TypeScript-First by Default
Express was designed for JavaScript. TypeScript support is layered on via @types/express and it shows — route handler types are loose, middleware typing is painful, and req.body is any. Hono was built TypeScript-first. The RPC client feature lets you share route types between server and client automatically.
// Server — types inferred from route definition
const route = app.post("/users", zValidator("json", UserSchema), (c) => {
return c.json({ id: "abc", ...c.req.valid("json") });
});
// Client — fully typed with no manual interface
const client = hc<typeof route>("http://localhost:3000");
const res = await client.users.$post({ json: { name: "Karthik" } });When Express Is Still Right
- Existing Node.js codebase with heavy Express middleware usage
- Team unfamiliar with Hono — Express has better docs and SO coverage
- Libraries that patch the Express request/response prototype directly
- You need Passport.js or similar — Hono's auth story is still maturing
Hono is what Express would look like if it were designed today. It's not a radical departure — just a cleaner foundation.