Kadak

Share Zod Types with Frontend

Reuse backend validators safely in frontend apps.

Share Zod Types with Frontend

Problem: frontend and backend validations drift and you debug the same bug twice.

Solution: create a shared contracts module from KadakORM validators.

1. Create a contracts file

// packages/contracts/user.ts
import { z } from 'zod'
import { users } from '@api/schema'

export const createUserSchema = users
  .insertValidator()
  .omit({ id: true, createdAt: true, updatedAt: true, deletedAt: true })

export type CreateUserInput = z.infer<typeof createUserSchema>

2. Use in frontend

import { createUserSchema, type CreateUserInput } from '@contracts/user'

const parsed = createUserSchema.safeParse(formValues)
if (!parsed.success) console.log(parsed.error.flatten())

3. Use same contract in backend

const parsed = createUserSchema.safeParse(req.body)
if (!parsed.success) return res.status(400).json(parsed.error.flatten())
await db.users.insert(parsed.data)

Important: keep server-managed fields (id, timestamps, soft-delete columns) out of frontend input contracts.

On this page