Framework HTTP para Node.js
Consistency without complexity.
Rotas declarativas, contratos explícitos e composição flexível. Toda a equipe declara rotas do mesmo jeito, sem a estrutura pesada que o projeto não precisa.
const buscar = {
params: Type.Object({
id: Type.String({ format: 'uuid' }),
}),
response: { 200: User },
} satisfies RouteSchemas;
@Router('/users')
export class UserRoutes {
@Get('/:id', buscar)
async getById(ctx: Context<typeof buscar>) {
return users.find(ctx.params.id);
}
}Uma forma consistente de declarar rotas, que qualquer pessoa da equipe reconhece.
Um contrato por rota valida a entrada, tipa o ctx, filtra a resposta e gera o OpenAPI.
Use só o que o projeto precisa: middlewares, guards, hooks e grupos de rotas.
Segurança, uploads, streaming, observabilidade e shutdown gracioso de fábrica.
O problema
O FlowingTS nasce do equilíbrio entre os dois extremos: uma maneira consistente de construir APIs, sem impor uma arquitetura pesada ao seu projeto.
O contrato
O contrato é escrito uma vez, com TypeBox ou Zod, e o framework o usa em cada etapa da requisição.
body, params e query são validados antes do handler. Um erro vira 400 em Problem Details.
ctx.body e ctx.params chegam com os tipos do schema, sem declarar nada duas vezes.
Campos fora do schema não saem. Um password esquecido no objeto não vaza.
O mesmo schema gera o OpenAPI 3.1 e a página /docs.
De fábrica
Antes de adotar