Felipe Moacir

Hono: O Express do Edge Computing

HonoEdgeBackend
Hono: O Express do Edge Computing

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.