Hono vs Express vs Fastify (2026 Comparison)
Three backend frameworks for JavaScript/TypeScript. Express is the veteran. Fastify is the performance-focused alternative. Hono is the edge-native newcomer. Here's the 2026 comparison.
Quick Verdict
- Hono — Best for edge/serverless. Fastest. Runs everywhere. TypeScript-first.
- Express — Most ecosystem. Most middleware. Best for legacy and standard Node.js.
- Fastify — Best performance on Node.js. Schema validation built-in.
Performance
| Hono | Express | Fastify | |
|---|---|---|---|
| Requests/sec | ~150K | ~15K | ~75K |
| Latency (p99) | 0.3ms | 2.5ms | 0.8ms |
| Bundle size | 14KB | 200KB | 1.5MB |
| Cold start | ~2ms | ~50ms | ~30ms |
Hono is 10x faster than Express and 2x faster than Fastify. For serverless/edge where cold starts matter, Hono wins decisively.
Runtime Support
| Hono | Express | Fastify | |
|---|---|---|---|
| Node.js | ✅ | ✅ | ✅ |
| Bun | ✅ | ✅ | ✅ |
| Deno | ✅ | ❌ | ❌ |
| Cloudflare Workers | ✅ | ❌ | ❌ |
| Vercel Edge | ✅ | ❌ | ❌ |
| AWS Lambda | ✅ | ✅ | ✅ |
Hono runs everywhere. Express and Fastify are Node.js-only (Bun compatible but not edge).
Hello World
Hono
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.json({ hello: 'world' }))
export default app
Express
import express from 'express'
const app = express()
app.get('/', (req, res) => res.json({ hello: 'world' }))
app.listen(3000)
Fastify
import Fastify from 'fastify'
const app = Fastify()
app.get('/', async () => ({ hello: 'world' }))
app.listen({ port: 3000 })
TypeScript Support
| Hono | Express | Fastify | |
|---|---|---|---|
| Native TypeScript | ✅ | ❌ (@types/express) | ✅ |
| Typed routes | ✅ | ❌ | ✅ |
| Typed middleware | ✅ | ❌ | ✅ |
| Zod integration | ✅ (@hono/zod-validator) | Manual | ✅ (via TypeBox) |
Hono and Fastify are TypeScript-first. Express requires @types/express and has weaker type inference.
Middleware/Plugin Ecosystem
| Hono | Express | Fastify | |
|---|---|---|---|
| Built-in middleware | ~20 | ~5 | ~10 |
| Third-party | Growing | ✅ Massive (50K+ npm packages) | Good (~200 plugins) |
| CORS | ✅ Built-in | ✅ (cors package) | ✅ (@fastify/cors) |
| Auth | ✅ Built-in (JWT, Bearer) | ✅ (passport, etc.) | ✅ (plugins) |
| Validation | ✅ (@hono/zod-validator) | ✅ (express-validator) | ✅ Built-in (JSON Schema) |
| OpenAPI | ✅ (@hono/zod-openapi) | ✅ (swagger-jsdoc) | ✅ (@fastify/swagger) |
Express wins on ecosystem size. Hono and Fastify cover the essentials but have fewer niche packages.
When to Use Each
Choose Hono When
- Edge/serverless deployment (Workers, Vercel Edge)
- Performance is critical (APIs with high request volume)
- Multi-runtime support needed
- Starting a new project (modern, fast, TypeScript)
- Building microservices or APIs
Choose Express When
- Existing Express project (don't rewrite)
- Need a specific Express middleware that has no alternative
- Team has Express experience
- Standard Node.js deployment
- Rapid prototyping (largest ecosystem)
Choose Fastify When
- Need best Node.js performance (but not edge)
- Schema-based validation is important
- Plugin architecture appeals to your team
- Building a traditional Node.js API server
- Need built-in serialization/validation
FAQ
Should I migrate from Express to Hono?
For new projects, yes. For existing projects, only if you need edge support or performance is a real issue. Express works fine for most apps.
Can I use Express middleware with Hono?
Not directly. Hono has its own middleware format. Many common Express middleware patterns have Hono equivalents.
Is Fastify dying?
No. Fastify is excellent for Node.js APIs. It just doesn't run on the edge, which limits its growth compared to Hono.
Bottom Line
Hono for new projects, edge, and performance. Express for existing projects and maximum ecosystem. Fastify for high-performance Node.js APIs. The trend is toward Hono — it's the default for new TypeScript API projects in 2026.