Standard Schema
Standard Schema is a common standard for validation libraries. It is supported by tRPC, Hono, TanStack Form, React Hook Form, Nuxt UI and others. Every tinyval schema implements it, so you can pass schemas to these libraries directly — no adapters needed.
How it works
Every schema has a ~standard property with a validate method and input/output types:
ts
const result = User['~standard'].validate(input);
// { value: { ... } } or { issues: [{ message: 'Invalid email', path: ['email'] }] }- If the schema contains
checkAsync,validatereturns aPromise. - Error messages are the same as in
validate, includingsetMessages. - Custom schemas created with
createSchemasupport the standard too.
Examples
tRPC
ts
export const appRouter = t.router({
createUser: t.procedure.input(CreateUser).mutation(({ input }) => db.users.create(input)),
});Hono
ts
import { sValidator } from '@hono/standard-validator';
app.post('/users', sValidator('json', CreateUser), (c) => {
const user = c.req.valid('json'); // typed
return c.json(user, 201);
});TanStack Form
ts
const form = useForm({
defaultValues: { name: '', email: '' },
validators: { onChange: CreateUser },
});React Hook Form
ts
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';
const form = useForm({ resolver: standardSchemaResolver(CreateUser) });See also
- createSchema — custom schemas with standard support
- TypeScript