Drop-in NestJS compiler. Validates, serializes, and documents your API — from plain TypeScript types.
tsgonest replaces tsc, class-validator, class-transformer, and @nestjs/swagger with a single build step. Write your types, run tsgonest build, and get validation, fast JSON serialization, and OpenAPI 3.2 — all generated at compile time.
export interface CreateUserDto {
name: string & tags.Trim & tags.Min<1> & tags.Max<255>;
email: string & tags.Email;
age: number & tags.Min<0> & tags.Max<150>;
}
@Controller('user')
export class UserController {
@Post()
createUser(@Body() body: CreateUserDto) {
// body is validated at compile time — no pipes, no interceptors
}
}npx tsgonest build- ~10x faster compilation via typescript-go
- Zero runtime overhead — validation and serialization are injected at compile time
- Zero decorators — OpenAPI generated from static analysis, not
@ApiProperty() - Drop-in — works with existing NestJS projects, no
ts-patchor plugins
# Migrate from class-validator / nestia (recommended)
npx tsgonest@latest migrate
# Or install manually
pnpm install tsgonest @tsgonest/runtime @tsgonest/typestsgonest build # production build
tsgonest dev # watch + auto-restart
tsgonest check # type check (no emit)
tsgonest check --watch # continuous checking
tsgonest openapi # generate OpenAPI only
tsgonest openapi --name public # specific output
tsgonest sdk # generate typed client SDK
tsgonest migrate # codemod migrationAnnotate with branded types (@tsgonest/types) or JSDoc — both can be mixed.
import { tags } from '@tsgonest/types';
export interface CreateUserDto {
name: string & tags.Trim & tags.MinLength<1> & tags.MaxLength<255>;
email: string & tags.Email & tags.Error<'Please provide a valid email'>;
age: number & tags.Min<0> & tags.Max<150> & tags.Type<'int32'>;
score?: number & tags.Default<0>;
tags: string[] & tags.MinItems<1> & tags.UniqueItems;
}32 built-in formats (email, uuid, url, ipv4, date-time, jwt, ...), numeric types (int32, uint32, float, ...), custom validators via tags.Validate<typeof fn>, and custom error messages via tags.Error<"msg">.
| Package | Description |
|---|---|
tsgonest |
CLI + compiler |
@tsgonest/runtime |
defineConfig, TsgonestValidationError, Returns, FormDataBody, EventStream |
@tsgonest/types |
Branded phantom types — tags.Email, tags.Min, tags.Trim, etc. |
macOS (ARM64, x64) / Linux (x64, ARM64 — static, works on glibc + musl) / Windows (x64, ARM64)
Tixio
Stop wasting time and money on slack jira clickup and 10+ other tools, get tixio instead. use code `tsgonest` for 20% discount
- typescript-go — Microsoft's Go port of TypeScript
- typia — Pioneered type-driven validation; tsgonest's branded types are inspired by typia
- nestia — Decorator-free NestJS validation and OpenAPI via typia
- tsgolint — Established the shim pattern for accessing tsgo internals
See CONTRIBUTING.md.