© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
Drizzle TeamDT
Drizzle Team•2mo ago•
12 replies
0byte

How to use drizzle-zod types in the frontend

node-postgresdrizzle orm
I like drizzle-zod but I cant figure out how I can use it on my frontend.

On my frontend I want to do something like this:
import { zodResolver } from "@hookform/resolvers/zod"
import { useForm } from "react-hook-form"
import { UserLoginRequestSchema } from "@repo/database"
type LoginFormData = z.infer<typeof UserLoginRequestSchema>

export function LoginPage() {

  const {
    register,
    handleSubmit,
    formState: { errors }
  } = useForm<LoginFormData>({
    resolver: zodResolver(UserLoginRequestSchema)
  })
import { zodResolver } from "@hookform/resolvers/zod"
import { useForm } from "react-hook-form"
import { UserLoginRequestSchema } from "@repo/database"
type LoginFormData = z.infer<typeof UserLoginRequestSchema>

export function LoginPage() {

  const {
    register,
    handleSubmit,
    formState: { errors }
  } = useForm<LoginFormData>({
    resolver: zodResolver(UserLoginRequestSchema)
  })


and my backend would define the schema like this:
import { createInsertSchema, createSelectSchema } from "drizzle-zod"
import { users } from "../schema"

export const UsersInsertSchema = createInsertSchema(users)
export type UsersInsert = z.infer<typeof UsersInsertSchema>
export const UserSignupRequestSchema = UsersInsertSchema.pick({ email: true, username_slug: true }).extend({
  email: z.email(),
  password: z.string().regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9]).{8,128}$/, "Password must be 8-128 characters and include uppercase, lowercase, number, and special character"),
  username_slug: UsersInsertSchema.shape.username_slug.refine((val) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(val), { message: "username_slug must be a lowercase slug (letters, numbers, hyphens)" })
})

export const UserLoginRequestSchema = UserSignupRequestSchema.pick({ email: true, password: true })
export type UserLoginRequest = z.infer<typeof UserLoginRequestSchema>
import { createInsertSchema, createSelectSchema } from "drizzle-zod"
import { users } from "../schema"

export const UsersInsertSchema = createInsertSchema(users)
export type UsersInsert = z.infer<typeof UsersInsertSchema>
export const UserSignupRequestSchema = UsersInsertSchema.pick({ email: true, username_slug: true }).extend({
  email: z.email(),
  password: z.string().regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9]).{8,128}$/, "Password must be 8-128 characters and include uppercase, lowercase, number, and special character"),
  username_slug: UsersInsertSchema.shape.username_slug.refine((val) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(val), { message: "username_slug must be a lowercase slug (letters, numbers, hyphens)" })
})

export const UserLoginRequestSchema = UserSignupRequestSchema.pick({ email: true, password: true })
export type UserLoginRequest = z.infer<typeof UserLoginRequestSchema>


but when I try to bundle the frontend website I get the error that:
$ bun run build

1 | import pg from "pg";
                   ^
error: Could not resolve: "pg". Maybe you need to "bun install"?
    at /home/dev/project/node_modules/.bun/drizzle-orm@0.44.7+48c49fff56ae09c3/node_modules/drizzle-orm/node-postgres/session.js:1:16
$ bun run build

1 | import pg from "pg";
                   ^
error: Could not resolve: "pg". Maybe you need to "bun install"?
    at /home/dev/project/node_modules/.bun/drizzle-orm@0.44.7+48c49fff56ae09c3/node_modules/drizzle-orm/node-postgres/session.js:1:16


The only solution I saw is to manually create raw zod schemas which I dont want, is it maybe still possible somehow? Help is appreciated.
Drizzle TeamJoin
The official Discord for all Drizzle related projects, such as Drizzle ORM, Drizzle Kit, Drizzle Studio and more!
11,879Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

How to use drizzle-zod generated schemas in Next.JS frontend?
Drizzle TeamDTDrizzle Team / help
3y ago
Drizzle-zod createInsertSchema types
Drizzle TeamDTDrizzle Team / help
3y ago
how to use types on frontend
Drizzle TeamDTDrizzle Team / help
3y ago
Share drizzle-zod schemas with the frontend
Drizzle TeamDTDrizzle Team / help
3y ago