Skip to content

tsgonest/tsgonest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

147 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tsgonest

tsgonest

Drop-in NestJS compiler. Validates, serializes, and documents your API — from plain TypeScript types.

Release CI License npm


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

Why

  • ~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-patch or plugins

Install

# Migrate from class-validator / nestia (recommended)
npx tsgonest@latest migrate

# Or install manually
pnpm install tsgonest @tsgonest/runtime @tsgonest/types

CLI

tsgonest 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 migration

Constraints

Annotate 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">.

Full constraint reference

Packages

Package Description
tsgonest CLI + compiler
@tsgonest/runtime defineConfig, TsgonestValidationError, Returns, FormDataBody, EventStream
@tsgonest/types Branded phantom types — tags.Email, tags.Min, tags.Trim, etc.

Platform support

macOS (ARM64, x64) / Linux (x64, ARM64 — static, works on glibc + musl) / Windows (x64, ARM64)

Sponsors

Gold Sponsor

Tixio

Tixio
Stop wasting time and money on slack jira clickup and 10+ other tools, get tixio instead. use code `tsgonest` for 20% discount


Become a sponsor

Documentation

tsgonest.dev

Acknowledgments

  • 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

Contributing

See CONTRIBUTING.md.

License

MIT

About

a typescript compiler for nestjs that does validation, openapi, sdk and more

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  
  •  

Contributors