Skip to content

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'] }] }

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 ​