Express está morto. Longa vida ao Hono.
O Problema do Express
Express foi criado para Node.js em 2010. Não roda em:
- ❌ Cloudflare Workers
- ❌ Deno Deploy
- ❌ Bun (roda, mas não é otimizado)
Hono é runtime-agnostic. Roda em qualquer runtime JavaScript.
Hello World
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('Hello Hono!'));
export default app; // Cloudflare Workers
// OU
// Deno.serve(app.fetch); // Deno
// OU
// Bun.serve({ fetch: app.fetch }); // Bun
Um código, múltiplos targets.
Middleware Composable
Hono usa uma arquitetura de middleware similar ao Express:
import { cors } from 'hono/cors';
import { logger } from 'hono/logger';
import { jwt } from 'hono/jwt';
app.use('*', logger());
app.use('/api/*', cors());
app.use('/admin/*', jwt({ secret: 'segredo' }));
app.get('/admin/users', async (c) => {
const payload = c.get('jwtPayload'); // Tipado!
return c.json({ users: [] });
});
Type Safety com Zod
Validação de schema integrada:
import { zValidator } from '@hono/zod-validator';
import { z } from 'zod';
const schema = z.object({
name: z.string(),
age: z.number().min(18),
});
app.post('/users', zValidator('json', schema), async (c) => {
const data = c.req.valid('json'); // Type-safe!
return c.json({ success: true });
});
RPC: Type-Safe API Client
Hono gera um client tipado automaticamente:
// server.ts
const app = new Hono()
.get('/posts/:id', (c) => c.json({ id: c.req.param('id'), title: 'Post' }))
.post('/posts', (c) => c.json({ id: 1 }));
export type AppType = typeof app;
// client.ts
import { hc } from 'hono/client';
import type { AppType } from './server';
const client = hc<AppType>('http://localhost:3000');
const res = await client.posts[':id'].$get({ param: { id: '123' } });
const data = await res.json(); // Tipado: { id: string, title: string }
Zero codegen. Tudo inferido via tipos.
Performance
Hono é absurdamente rápido. Benchmark (req/s):
- Express: 15k
- Fastify: 45k
- Hono: 380k (em Bun)
Quando Usar?
✅ APIs em Cloudflare Workers/Deno
✅ Migrando de Express
✅ Precisa de type-safety sem tRPC
❌ Legado Node.js pesado (use Fastify)
Conclusão: Hono é o sucessor natural do Express. Se está começando um projeto novo, use Hono.