Koa y Polka
Comprende Koa y Polka como frameworks HTTP ligeros de Node que puedes encontrar en bases de código heredadas o despliegues mínimos.
Receta
Referencia rápida para reconocer cada framework.
Koa (contexto asíncrono):
import Koa from "koa";
const app = new Koa();
app.use(async (ctx, next) => {
const start = Date.now();
await next();
ctx.set("X-Response-Time", `${Date.now() - start}ms`);
});
app.use(async (ctx) => {
ctx.body = { ok: true };
});
app.listen(3000);Polka (router mínimo):
import polka from "polka";
const app = polka();
app.get("/users", (_req, res) => {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify([{ id: 1 }]));
});
app.listen(3000);Cuándo usarlo: Mantener aplicaciones Koa heredadas, o cuando necesites el router HTTP más pequeño posible (Polka).
Ejemplo de trabajo
Comparación lado a lado del mismo endpoint:
// --- Koa ---
import Koa from "koa";
import Router from "@koa/router";
import bodyParser from "koa-bodyparser";
const koaApp = new Koa();
const router = new Router({ prefix: "/api" });
koaApp.use(bodyParser());
router.get("/users/:id", async (ctx) => {
ctx.body = { id: ctx.params.id, name: "Ada" };
});
koaApp.use(router.routes());
// --- Polka ---
import polka from "polka";
import { json } from "body-parser";
const polkaApp = polka();
polkaApp.use(json());
polkaApp.get("/api/users/:id", (req, res) => {
const id = (req as { params: { id: string } }).params.id;
res.end(JSON.stringify({ id, name: "Ada" }));
});
// --- Equivalente moderno: Hono ---
import { Hono } from "hono";
const honoApp = new Hono();
honoApp.get("/api/users/:id", (c) => c.json({ id: c.req.param("id"), name: "Ada" }));Lo que esto demuestra:
- Koa usa
ctx(contexto) en lugar de(req, res) - El middleware de Koa es asíncrono primero (sin callback
next()) - Polka es un router mínimo sobre HTTP nativo de Node
- Hono proporciona una alternativa moderna con una huella similar
Análisis profundo
Comparación de frameworks
| Factor | Koa | Polka | Hono | Express 5 |
|---|---|---|---|---|
| Tamaño | Pequeño | Diminuto (~200 líneas) | ~14KB | Mediano |
| Middleware | ctx asíncrono | Node (req, res) | Estándar Web | (req, res, next) |
| Ecosistema | Maduro pero en declive | Mínimo | Creciendo rápido | El más grande |
| Soporte Edge | No | No | Sí | No |
| Mantenimiento activo | Mantenido | Mantenido | Muy activo | Activo |
Cuándo aún ves Koa
- APIs de Node más antiguas construidas por equipos que migraron de Express a Koa (~2015-2020)
- Proyectos que usan
@koa/router,koa-bodyparser,koa-jwt - Frameworks construidos sobre Koa (por ejemplo, algunos servidores GraphQL)
Cuándo aún ves Polka
- Microservicios que necesitan la capa HTTP más pequeña posible
- Incluido en herramientas como
sirv-cliy los internos del adaptador@sveltejs/kit - Servicios internos sensibles al rendimiento con menos de 5 rutas
Errores comunes
- Empezar nuevos proyectos con Koa - el ecosistema se está reduciendo. Solución: usa Hono o Fastify para nuevos trabajos.
- Koa sin middleware de errores - los errores asíncronos pueden perderse. Solución: usa try/catch o
koa-error-handler. - Polka sin body parser - los cuerpos POST no se pueden leer. Solución: añade el middleware
body-parser. - Ninguno tiene validación incorporada - manual o añade Zod/Ajv. Solución: usa Hono con
@hono/zod-validator. - Migrar Koa a Hono - conceptos de middleware similares pero API diferente. Solución: reescribe las rutas; los patrones de middleware se transfieren.
- Asumir que Polka tiene un ecosistema - es solo un router. Solución: trae tu propia pila de middleware.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Hono | Nuevo proyecto ligero | Mantener una aplicación Koa existente |
| Fastify 5 | Rendimiento + validación de esquemas | Tamaño mínimo absoluto |
| Express 5 | Familiaridad del equipo | Se necesita despliegue Edge |
| Mantener Koa | Base de código estable existente | Proyecto nuevo |
Preguntas frecuentes
¿Debería migrar Koa a Hono?
Cuando necesites portabilidad Edge o un crecimiento activo del ecosistema. Si la aplicación Koa es estable y de bajo cambio, el costo de la migración podría no justificarse.
¿Koa está muerto?
No está muerto, pero está en declive. Se mantiene, pero hay menos proyectos nuevos. Express y Fastify dominan las nuevas APIs de Node.
¿Por qué existe Polka?
Luke Edwards lo construyó como el router HTTP más pequeño y utilizable. Útil cuando necesitas enrutamiento sin la sobrecarga del framework.
¿Puedo usar TypeScript con Koa?
Sí. @types/koa y @koa/router tienen definiciones de tipo. Menos ergonómico que los tipos incorporados de Hono.
¿Cómo se compara Koa con el middleware de Express?
El middleware asíncrono de Koa usa await next() (sin callback). Los errores se propagan naturalmente en cadenas asíncronas. Consulta Patrón de Middleware.
¿Polka está listo para producción?
Sí, para servicios internos simples. Tú mismo aportas todo el middleware, la validación y el manejo de errores.
¿Cuál es la ruta de migración de Koa a Fastify?
Reescribe las rutas como plugins de Fastify con JSON Schema. ctx de Koa se mapea a req/reply de Fastify. Planifica un sprint dedicado.
¿NestJS soporta Koa?
No hay un adaptador oficial de Koa. NestJS solo soporta Express y Fastify.
Relacionado
- Conceptos básicos de Hono - alternativa ligera moderna
- Patrón de Middleware - conceptos de middleware
- Enrutamiento sin frameworks - minimalismo a nivel de Polka
- Lista de verificación para la selección de frameworks - matriz de decisión
- Mejores prácticas para frameworks ligeros - lista de verificación de la sección
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.