Standard Schema
Standard Schema v1 compatibility
Overview
Vex implements Standard Schema v1, making it compatible with a wide ecosystem of libraries.
Compatible Libraries
simple-icons:trpc
tRPC
Type-safe API routes
simple-icons:reactquery
TanStack Form
Form state management
simple-icons:hono
Hono
Web framework validation
simple-icons:remix
Remix
Full-stack framework
Usage
All Vex validators expose the ~standard property:
import { object, str, email } from '@sylphx/vex'
const schema = object({
email: str(email),
})
// Access Standard Schema interface
schema['~standard'].validate(data)tRPC Example
import { initTRPC } from '@trpc/server'
import { object, str, email } from '@sylphx/vex'
const t = initTRPC.create()
const userSchema = object({
email: str(email),
})
const appRouter = t.router({
createUser: t.procedure
.input(userSchema)
.mutation(({ input }) => {
// input is typed as { email: string }
return { email: input.email }
}),
})TanStack Form Example
import { useForm } from '@tanstack/react-form'
import { object, str, email, min } from '@sylphx/vex'
const formSchema = object({
email: str(email),
password: str(min(8)),
})
function LoginForm() {
const form = useForm({
defaultValues: { email: '', password: '' },
validators: {
onChange: formSchema,
},
})
// ...
}Hono Example
import { Hono } from 'hono'
import { vValidator } from '@hono/valibot-validator' // works with Standard Schema
import { object, str, email } from '@sylphx/vex'
const app = new Hono()
const userSchema = object({
email: str(email),
})
app.post('/user', vValidator('json', userSchema), (c) => {
const data = c.req.valid('json')
return c.json(data)
})