Limitaciones y hoja de ruta
Limitaciones y hoja de ruta
Sección titulada «Limitaciones y hoja de ruta»Esta página es deliberadamente clara: qué aún no está redondo y hacia dónde apuntamos. No es un plan con fechas: el orden y los tiempos pueden cambiar. Para lo ya publicado, revisa el Registro de cambios.
Limitaciones actuales
Sección titulada «Limitaciones actuales»| Área | Qué esperar |
|---|---|
| Schema stitching de GraphQL | Las queries, las mutaciones y —desde v3.4.0— las suscripciones se ejecutan todas. El schema stitching sigue sin estar endurecido; compón los esquemas en el gateway en lugar de apoyarte en el plugin para eso. |
| Integraciones ORM | Drizzle tiene ayudas de primer nivel en el DI (registerDrizzle, @InjectDB). Prisma y TypeORM aún no están al mismo nivel de integración documentada en el core; puedes usarlos directamente en tus servicios. Los tres proveen count/updateMany/deleteMany nativos; un repositorio propio debe sobrescribirlos (las implementaciones base ahora lanzan NotImplementedError en lugar de escanear toda la tabla en silencio). |
| Cobertura de tests | La cobertura de líneas sobre src/ es de ~57%, con el gate de CI en 55% para evitar regresiones. Lo más delgado que queda, medido: los middlewares de caché y de contexto de petición (~3%), el middleware de logging y el plugin de health (~5%), el plugin de WebSocket (~7%), y los ayudantes de OAuth y permisos junto a los decoradores RBAC (~10–21%). Trata esos caminos con más cautela que el núcleo de enrutamiento/validación. |
Qué se publicó en v3.4.0
Sección titulada «Qué se publicó en v3.4.0»- ✅ Las suscripciones GraphQL se ejecutan — el hueco más grande que quedaba. Solo se generaban en el SDL y nada más; no había transporte de ejecución, así que suscribirse no hacía nada.
GraphQLPluginlas sirve ahora sobre graphql-transport-ws (el subprotocolo que hablan Apollo Client, urql, GraphiQL y el clientegraphql-ws) en Bun, Deno y Node, con unPubSubconstruido sobre el bus de eventos, autenticación por conexión víaconnectionParamsy contrapresión acotada. El protocolo es propio del framework, así que CI lo corre contra el cliente oficialgraphql-wsen vez de dar por hecha la interoperabilidad. Ver GraphQL → Suscripciones. - ✅
app.listen(0)informa el puerto que obtuvo — devolvía el puerto solicitado, así que pedirle uno libre al sistema te dejaba con0. - ✅ Un gateway de
WebSocketPluginy el endpoint de suscripciones conviven en Node — cada uno creaba su propia instancia de@hono/node-ws, y cada instancia termina cualquier upgrade para el que no encuentra dueño, así que los dos se destruían las conexiones mutuamente.
Qué se publicó en v3.3.0
Sección titulada «Qué se publicó en v3.3.0»- ✅ El decorador
@On('event')— listeners declarativos, registrados conapp.include()y resueltos por el contenedor de DI, así que un listener inyecta los mismos servicios que un controlador. Las suscripciones se enganchan encompile()y se sueltan enshutdown(), lo que importa sobre elglobalEventsdel proceso: sin eso, cada app construida en una suite de tests responde al mismo evento.new VeloceTS({ eventBus })acepta un bus propio. Ver Event Bus.
Qué se publicó en v3.2.0
Sección titulada «Qué se publicó en v3.2.0»- ✅ WebSockets en Node.js — la limitación más antigua del framework. El upgrade en Node pasa ahora por la peer dependency opcional
@hono/node-ws; los decoradores y la API deWebSocketConnectionson idénticos en Bun, Deno y Node. El plugin se engancha enonStart(), así que la app debe servirse conapp.listen(). Los cuatro templates de la CLI,websocketyfullstackincluidos, ya arrancan bajo Node en CI. Ver WebSockets. - ✅ El paquete publicado bajó 72% — de 1.5 MB a 0.41 MB empaquetado, quitando los sourcemaps de JS y 351 KB de mapas de declaración que apuntaban a un
src/que el paquete no publica. - ✅ Las declaraciones funcionan con
node16/nodenext— antes los tipos publicados solo resolvían conmoduleResolution: bundler.
Qué se publicó en v3.1.0
Sección titulada «Qué se publicó en v3.1.0»- ✅ La CLI funciona en Node —
veloce devyveloce builddetectan el runtime y aceptan--runtime auto|bun|node; los caminos de Node usantsxytsc - ✅ Los proyectos generados corren en Node — antes emitían una config de CORS que el framework rechaza (así que la app reventaba al arrancar), imports sin extensión que el cargador ESM de Node no resuelve, y scripts que fijaban
bun - ✅ Smoke test de templates en CI — cada template se genera, instala, compila, construye y arranca con Node en cada ejecución
Siguen siendo solo Bun/Deno: los templates websocket y fullstack, porque WebSocketPlugin todavía no tiene camino de upgrade en Node. veloce new avisa de esto al generarlos.
Qué se publicó en v3.0.0
Sección titulada «Qué se publicó en v3.0.0»- ✅ Guards que sí se aplican — los tres plugins afectados inyectan su guard durante
install() - ✅ Cookies de sesión firmadas —
SessionConfig.secretes obligatorio y la cookie va firmada con HMAC; antes llevaba el id de sesión en crudo - ✅ Rotación atómica de refresh tokens — dos refrescos concurrentes con el mismo token ya no tienen éxito los dos
- ✅ Límite de cuerpo de petición —
bodyLimit, 1 MiB por defecto - ✅ Claves de caché por llamante —
varyByHeaders/keyGeneratoren@Cache(), más un aviso al compilar cuando se cachea una ruta por usuario con clave compartida - ✅ El
listen()de Node funciona de verdad — usabarequire()dentro del bundle ESM, así que siempre lanzaba - ✅ Los filtros de excepción ven errores de validación y DI;
@UseInterceptora nivel de clase se ejecuta; el contenedor DI ya no reporta ciclos falsos con concurrencia - ✅ Rate limiting distribuido —
RedisRateLimitStore - ✅ Variables de contexto tipadas —
c.get('auth.user')viene tipado
Qué se publicó en v2.0.0
Sección titulada «Qué se publicó en v2.0.0»- ✅ Seguridad — los refresh tokens ya no pueden reutilizarse como access tokens;
RS256/384/512firman de verdad de forma asimétrica (antes usaban el secreto HMAC compartido); el rate limiting ya no confía en elX-Forwarded-Fordel cliente salvo que se activetrustProxy - ✅ El soporte de Node.js ahora sí funciona — la 1.2.0 publicada tenía cuatro bugs de empaquetado que la rompían para consumidores de Node, incluida una copia duplicada de Zod que rompía en silencio las comprobaciones
instanceofcontra tus propios schemas - ✅ Rendimiento — el dispatch de peticiones mejoró bastante respecto a v0.4.18; el paquete pesa 1.33 MB, contra 3.82 MB
- ✅ API funcional tipada — los argumentos del handler se infieren del conjunto de schemas Zod declarado
- ✅ Revocación distribuida de tokens —
RedisTokenBlacklistpropaga el logout entre réplicas - ✅ Ciclo de vida de plugins — hooks
onStart/onStop - ✅ Cloudflare Workers —
app.getFetchHandler()es la vía soportada para desplegar - ✅ Endurecimiento de WebSocket (Bun/Deno) — heartbeat, timeout de inactividad, tamaño máximo de mensaje
- ✅ El CLI corre bajo Node puro — antes requería Bun
Qué se publicó en v1.2.0
Sección titulada «Qué se publicó en v1.2.0»Todos los elementos P0 y P1 de la hoja de ruta están ahora disponibles:
- ✅ CLI scaffolding —
veloce generate module/controller/service/resolver/dto/middleware/plugin - ✅ Apagado gradual —
app.onShutdown(), SIGTERM/SIGINT, timeout configurable - ✅ Filtros de excepción —
@Catch(),app.useFilter(),FilterManager - ✅ Interceptores —
@UseInterceptor(),app.useInterceptor(),ExecutionContext - ✅ Respuestas en streaming —
@SSE(),@Stream(contentType)en handlersAsyncGenerator - ✅ Bus de eventos —
EventBus, singletonglobalEvents - ✅ Decoradores extra —
@Throttle,@ApiVersion,@ResponseHeader,@Redirect,@Deprecated - ✅ Aislamiento de tests —
isolate(),compileTestApp() - ✅ OpenAPI 3.1 —
jsonSchemaDialect, normalización denullable
Próximas actualizaciones (dirección)
Sección titulada «Próximas actualizaciones (dirección)»Prioridades del equipo; no es promesa de orden ni de fecha.
- Elegir ORM — Que Drizzle, Prisma y TypeORM sean opciones prácticas y documentadas para que cada proyecto elija su ORM sin fricción con el framework.
- Schema stitching de GraphQL — Las suscripciones se ejecutan desde v3.4.0; componer esquemas entre servicios es la parte que sigue sin estar endurecida.
- Subir el piso de cobertura — El gate de CI está en 55% para bloquear regresiones; la meta es elevarlo conforme se cubran las áreas delgadas de arriba.
Ya publicado: una suite de benchmarks reproducible que compara Veloce-TS contra Hono, Express y Fastify (BENCHMARKS.md, bun run benchmark). Resumen honesto: Veloce-TS cuesta entre 2% y 11% sobre Hono crudo — el precio de la capa de decoradores, más amplio en una ruta trivial /hello y más estrecho en validación Zod, donde Zod domina el coste de ambos lados — y es aproximadamente 1.8× más rápido que Express 4 y 1.3–1.4× más rápido que Fastify 5 bajo Bun. Elysia y NestJS no están incluidos todavía.
Ediciones anteriores afirmaban que Veloce-TS superaba a Hono crudo en dos escenarios. Esas cifras venían de mediciones de una sola pasada cuyo resultado se invertía entre corridas; el harness ahora repite cada medición y reporta una mediana con su dispersión.
Cómo aportar o debatir
Sección titulada «Cómo aportar o debatir»- Cambios ya publicados: Registro de cambios y el repositorio en GitHub.
- Ideas y propuestas: GitHub Discussions.