v0.4.2 OpenAPI · DI · Zod · Bun / Node / Workers
Veloce-TS — logo del framework

API backend con TypeScript, sin perder el ritmo

Decoradores al estilo FastAPI, validación con Zod, documentación en /docs y helpers de test incluidos.

También en npm · MIT

Instalación

Añade reflect-metadata y activa experimentalDecorators en tsconfig — detalles en la guía de inicio.

Bun bun add veloce-ts zod reflect-metadata
npm npm install veloce-ts zod reflect-metadata

Qué incluye

Pensado para APIs productivas

Menos boilerplate en validación y documentación; más tiempo en la lógica de negocio.

Rápido y medible

Motor Hono más capa de decoradores. En los benchmarks del repo gana terreno frente a Express y rinde cerca de Fastify con Zod.

Type-safe

TypeScript de extremo a extremo con validación automática a partir de esquemas Zod.

Decoradores

Rutas y metadatos al estilo FastAPI: legibles y fáciles de mantener.

OpenAPI

Especificación y Swagger UI generados desde tus controladores.

DI

Inyección de dependencias integrada; encaja con Drizzle u otros proveedores.

Testing

Helpers para montar la app en pruebas y un cliente HTTP tipado sin abrir puerto.

Multi-runtime

Bun, Node.js, Deno y Cloudflare Workers con el mismo modelo.

Números

Rendimiento reproducible

Mismo script para todos los frameworks (Bun, 6 000 peticiones, 50 conexiones). Los valores absolutos cambian según hardware; las tendencias se mantienen.

+57%

vs Express en POST con validación Zod

+20%

vs Fastify en el mismo escenario

~1–2 ms

overhead frente a Hono sin capa de decoradores

Snippet

Primeros pasos en pocas líneas

import 'reflect-metadata' al inicio del entrypoint; después, controladores con Zod y metadatos OpenAPI opcionales.

import 'reflect-metadata';
import {
  Veloce,
  Controller,
  Get,
  Post,
  Body,
  Summary,
  HttpCode,
  Tags,
} from 'veloce-ts';
import { z } from 'zod';

const UserSchema = z.object({
  name: z.string().min(2),
  email: z.string().email(),
});
type UserInput = z.infer<typeof UserSchema>;

@Controller('/users')
class UserController {
  @Get('/')
  @Summary('Listar usuarios')
  @Tags('Users')
  @HttpCode(200)
  async getUsers() {
    return [{ id: 1, name: 'Ana' }];
  }

  @Post('/')
  @Summary('Crear usuario')
  @Tags('Users')
  async createUser(@Body(UserSchema) user: UserInput) {
    return { id: 2, ...user };
  }
}

const app = new Veloce();
app.include(UserController);
app.listen(3000); // Swagger en /docs

Validación automática · Tipos inferidos · OpenAPI en /docs

Guía de inicio: tsconfig y reflect-metadata

Repo

Ejemplos listos para clonar

Tres proyectos bajo examples/, cada uno con README y dependencias acotadas.

Todos API

Tareas, categorías, usuarios, JWT, Drizzle y WebSocket de chat. Incluye tests con los helpers del paquete.

Drizzle JWT WebSockets Vitest

Products API

Catálogo con roles, autenticación y persistencia pensada para un flujo tipo e-commerce.

Drizzle Auth OpenAPI Tests

Chat API

Salas y mensajes en tiempo real; autenticación y estructura lista para extender.

WebSockets Rooms JWT

¿Otro caso de uso? Discussions