TypeScript Runtime Validator - Generate validation from type definitions
Warning
Valype is currently under active development. APIs may change in future releases. Please follow Semver to avoid breaking changes.
- 🎯 Type-safe validation with TypeScript type inference
- 🔌 Seamless unplugin integration (Vite/Rollup/esbuild/Astro/Farm/Nuxt/Rspack/Webpack)
- 🛡️ Unified type validation
- 🚧 TypeScript plugin (WIP)
- 🚧 IDE/editor extension support (WIP)
Valype = Validate + Type. Automatically generates runtime validators from TypeScript type definitions.
- Install plugin:
# for npm users
npm add zod@latest
npm add -D unplugin-valype
# for yarn users
yarn add zod@latest
yarn add -D unplugin-valype
# for pnp users
pnpm add zod@latest
pnpm add -D unplugin-valype
# for bun users
bun add zod@latest
bun add -D unplugin-valype
zod's version should be
3.25.0
at least, because valype generates zod v4 schema
-
Configure plugin for your build tool following unplugin-valype docs
-
Define your types (use
.valype.ts
extension):
// user.valype.ts
export interface User {
name: string
age: number
}
- Use the generated validator:
import { validateUser } from './user.valype'
const issues = validateUser(data) // Returns ZodIssue[] or undefined
if (issues) {
// Handle validation errors
}
unplugin-valype
generates validators for types exported from *.valype.ts
files. The validator type signature is:
export declare function validateSome(data: unknown): ZodIssue[] | undefined
- Returns
undefined
when validation passes - Returns
ZodIssue[]
with error details when validation fails
Note
You typically don't need to use valype
package directly, just use the generated validators.
Package | Version | Description |
---|---|---|
valype | Core schema generation logic | |
unplugin-valype | Build tool plugin |
While TypeScript ensures compile-time type safety, runtime data validation remains essential. Traditional solutions like Zod require duplicate type definitions and lose valuable tsdoc information. Valype solves this by:
- Single Source of Truth - Define types once, get both static and runtime validation
- Full Type Information - Preserves all tsdoc documentation and editor hints
- Seamless Integration - Works natively with TypeScript tooling
const userSchema = z.object({
name: z.string(),
age: z.number(),
})
type User = z.infer<typeof userSchema>
// And `User['name'] does not have tsdoc info
Using valype:
export interface User {
/**
* name of user
*/
name: string
age: number
}
// Validator is generated automatically!
const result = validateUser(data)
// Also `User['name'] has tsdoc info
Valype lets you define types once and get runtime validation automatically!
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Valype draws inspiration from these excellent projects: