Hono: El framework «Ultrafast» que está jubilando a Express
ximo
Autor
Hono: El framework «Ultrafast» que está jubilando a Express (y por qué deberías migrar ayer)
Admítelo. Sigues usando Express por pura inercia.
Lo entiendo. Yo también estuve ahí. npm install express, configurar el middleware, y a correr. Ha sido el estándar de facto durante una década. Pero en tecnología, una década es una eternidad. Express es como ese viejo Volvo fiable: te lleva al destino, pero pesa una tonelada, consume mucho y no está hecho para las autopistas modernas (el Edge).
Hono no es solo una alternativa. Es la evolución natural. Si Express es el «jQuery del backend», Hono es el React. Es pequeño, brutalmente rápido y, lo más importante, funciona con Estándares Web, no con inventos propietarios de Node.js.
¿Por qué «Ultrafast»? La magia bajo el capó
Hono no es rápido por casualidad. Es rápido por diseño. Mientras Express carga una mochila pesada de dependencias legacy y prototipos modificados, Hono utiliza el RegExpRouter. Suena técnico, pero el resultado es simple: hace el enrutamiento más rápido que cualquier otro framework en JavaScript. No importa si tienes 5 rutas o 500, Hono las despacha en microsegundos.
Pero la velocidad no es solo tiempo de respuesta. Es dónde puedes ejecutarlo.
- Express: Atado a Node.js. Si quieres ir al Edge, buena suerte con los shims y los polyfills.
- Hono: Isomórfico real. Cloudflare Workers, Deno, Bun, Vercel Edge, AWS Lambda o el clásico Node.js. Escribes el código una vez, corre donde sea.
Comparativa Brutal: David vs. Goliat
No me creas a mí, mira los números. La diferencia de peso y rendimiento es ridícula:
| Característica | Express.js 🐢 | Hono 🔥 | El Ganador |
|---|---|---|---|
| Tamaño del Paquete | Pesado (dependencias anidadas) | < 14kB (Sin dependencias) | Hono |
| Arranque (Cold Start) | Lento (malo para Serverless) | Instantáneo | Hono |
| Tipado (TypeScript) | Parcheado (@types/express) | Nativo (First-class citizen) | Hono |
| Estándares Web | No (API propietaria req/res) | Sí (Usa Request y Response) | Hono |
| Entorno | Solo Node.js | Cualquiera (Bun, Deno, Workers) | Hono |
| RPS (Requests/seg) | ~15,000 | ~250,000+ (en Bun) | Hono |
La filosofía «Small, Simple, and Ultrafast»
El desarrollo web moderno tiene un problema de obesidad. Instalas un framework «ligero» y tu carpeta node_modules pesa más que el código de tu aplicación. Hono elimina esto de raíz basándose en tres pilares técnicos:
1. Small (Pequeño de verdad)
Hono pesa menos de 14KB. No tiene dependencias externas. Esto es crucial para los tiempos de arranque (Cold Starts) en entornos Serverless. Con Hono, tu API está lista antes de que el usuario parpadee.
2. Simple (Estándares Web > Costumbres de Node)
En lugar de inventar sus propios objetos req y res, Hono utiliza la API Fetch estándar. Usa objetos Request y Response nativos de la web. Esto garantiza portabilidad total: tu código funciona igual en Node.js, Deno, Bun o Cloudflare Workers.
3. Ultrafast (Enrutamiento inteligente)
Mientras Express recorre tus rutas una por una hasta encontrar la correcta (O(n)), Hono utiliza un algoritmo llamado RegExpRouter. Crea un mapa inteligente de tus rutas para que el tiempo de búsqueda sea prácticamente el mismo sin importar cuántos endpoints tengas.
Checklist de obsolescencia: Si marcas más de dos, Express te está frenando:
- [ ] Tu ‘node_modules’ pesa más que el código de tu aplicación.
- [ ] Tienes que instalar
@types/expresspara que TypeScript funcione.- [ ] Tu servidor tarda más de 500ms en arrancar en frío.
- [ ] Te da miedo actualizar dependencias por si se rompe el router.

Tipado de primer nivel y Validación con Zod
Si usas TypeScript, sabes el dolor de cabeza que es Express. Tienes que extender la interfaz Request para añadir tu usuario autenticado o pelearte con declaraciones globales. Hono no «soporta» TypeScript; Hono es TypeScript.
El poder de los Genéricos
Puedes definir exactamente qué variables de entorno y qué contexto va a manejar tu API pasando un simple Genérico:
import { Hono } from 'hono'
type AppBindings = {
Variables: { userId: string }
}
const app = new Hono<AppBindings>()
app.get('/user', (c) => {
const id = c.get('userId') // TypeScript sabe que es un string
return c.json({ id })
})
Validación con Zod
Hono permite que los tipos fluyan desde el validador directamente hacia tu controlador mediante zod-validator. El esquema de validación ES tu tipo:
import { z } from 'zod'
import { zValidator } from '@hono/zod-validator'
const schema = z.object({
nombre: z.string().min(3),
email: z.string().email()
})
app.post('/registro', zValidator('json', schema), (c) => {
const datos = c.req.valid('json') // Autocompletado total, cero 'any'
return c.json(datos)
})
Soporte nativo para JSX: Renderizado sin React
Hono incluye un middleware de JSX nativo. Puedes escribir componentes UI directamente en tu servidor y devolver HTML puro al navegador sin Virtual DOM ni hidratación pesada.
app.get('/bienvenida', (c) => {
return c.html(
<html>
<body>
<h1>Hola desde Hono JSX</h1>
</body>
</html>
)
})
Es ideal para Landing Pages, SEO, y arquitecturas basadas en HTMX donde envías fragmentos de HTML directamente desde el servidor.
Guía de migración rápida: De Express a Hono
Si sabes Express, ya sabes el 80% de Hono. Solo tienes que cambiar el chip de req/res al objeto Context (c).
Diccionario de Traducción Express-Hono
| En Express hacías… | En Hono haces… | Nota |
|---|---|---|
res.json({ data }) | return c.json({ data }) | Debe ser return. |
req.params.id | c.req.param('id') | Es un método asíncrono. |
req.body | await c.req.json() | El body es una Promesa. |
next() | await next() | Hono usa el modelo de cebolla (async). |
Arquitectura de una API robusta
No pongas todo en un solo archivo. Hono permite una modularidad extrema mediante el método .route():
// src/index.ts
import { Hono } from 'hono'
import { userRoutes } from './routes/users'
const app = new Hono()
app.route('/api/users', userRoutes)
export default app
Seguridad integrada
Hono incluye middlewares esenciales sin dependencias externas:
- cors: Control de acceso.
- secureHeaders: Protección estilo Helmet (XSS, Clickjacking).
- logger: Seguimiento de peticiones.
¿Cuándo usar Hono y cuándo frenar?
🚀 Luz Verde (Usa Hono si…):
- Edge Computing: Vas a desplegar en Cloudflare Workers o Vercel Edge.
- Microservicios: Necesitas latencia mínima y alto rendimiento.
- Bun/Deno: Quieres aprovechar los runtimes modernos sin transpilación.
- Frontend-Backend Shared Types: Quieres usar Hono RPC para tener autocompletado de la API en tu frontend.
❌ Luz Roja (Quédate en Express/NestJS si…):
- Monolitos Enterprise: Necesitas inyección de dependencias y una estructura muy rígida (NestJS es mejor aquí).
- Librerías Legacy: Dependes de paquetes NPM antiguos que solo funcionan con las APIs internas de Node.js.
Preguntas Frecuentes (FAQ)
¿Puedo usar Hono en un VPS tradicional?
Sí. Usando el paquete @hono/node-server, puedes correr Hono en cualquier servidor con Node.js, siendo más rápido que Express incluso en su propio terreno.
¿Qué es eso del «Hono RPC»?
Es una función que permite importar los tipos de tu API de backend directamente en tu frontend. Si cambias un endpoint en el servidor, tu código de React/Vue te avisará del error antes de compilar.
¿Es Hono compatible con todas las librerías de NPM?
Si corres en Node.js, sí. Si corres en el Edge (Cloudflare), solo con librerías que no dependan de APIs específicas de Node (como fs o child_process).
Datos Estructurados (FAQ Schema)
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "¿Hono funciona solo en Cloudflare Workers?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Hono es agnóstico y funciona en Node.js, Bun, Deno, AWS Lambda y cualquier entorno que soporte Estándares Web."
}
}, {
"@type": "Question",
"name": "¿Es Hono más rápido que Fastify?",
"acceptedAnswer": {
"@type": "Answer",
"text": "En entornos Edge y Serverless, Hono es superior debido a su tamaño minúsculo (<14kB) y tiempos de arranque instantáneos."
}
}]
}