Tubito
¿Por qué existe este proyecto?
En todos mis proyectos de backend acabo haciendo lo mismo: autenticar, validar parámetros, manejar errores, devolver respuestas con el mismo formato… y cada vez lo reimplemento desde cero. Además, esas piezas sueltas no se validan entre sí: puedes quitar un middleware de auth y el handler sigue compilando aunque ctx.userId ya no exista. Ese tipo de errores solo aparecen en runtime y dan mucha rabia.
Tubito es una capa que se pone encima de tu framework (Express, Hono o Koa) y te da todo eso resuelto con una sola API. Cada endpoint sigue siempre tres pasos: proteger, validar y manejar. Usas solo lo que necesites.
Los endpoints quedan limpios y se reducen a únicamente la lógica de los controladores. La validación, el manejo de errores y el formato de respuesta lo gestiona Tubito:

Cada middleware y cada validación se refleja en el tipo de ctx, así que el autocompletado te dice exactamente qué tienes disponible. Y si rompes la cadena (por ejemplo, quitas un middleware que añadía userId), el compilador te avisa antes de ejecutar nada. Eso revela errores de integración en tiempo de compilación, no en producción.
Otra cosa que me gusta es que si el día de mañana quiero migrar de Express a Hono, cambio el adaptador y el resto del código queda igual. La lógica de los endpoints no depende del framework.