0.1.0 • Published 5 months ago

@lucaconlaq/drizzle-zod-to-code v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Drizzle Zod To Code

Logo

Generate JavaScript/TypeScript code for Drizzle Zod schemas

npm biome vitest


✨ Why?

This library was born in response to a need discussed in drizzle-orm issue #941: generating static validation schemas (i.e. Zod) from Drizzle ORM models without bundling Drizzle into the client.

  • šŸ”„ It extracts schema logic from Drizzle models and outputs Zod code using zod-to-code.
  • šŸ” This keeps your frontend secure by removing ORM logic from client builds.
  • 🧩 Great for full-stack apps that share validation between backend and frontend.

āš ļø Why dynamic Zod schemas are not always ideal

When sharing validation between server and client, using dynamic (runtime) Zod schemas, generated with drizzle-zod can lead to several issues:

  • šŸ”“ Risk of code leakage – Dynamic schemas created with createInsertSchema or similar rely on Drizzle's runtime logic. When used in frontend code, this can unintentionally bundle server-only logic into the client, potentially exposing sensitive code or internal database structures.
  • 🐘 Large bundle size – Including Drizzle ORM in the client pulls in unnecessary dependencies, increasing bundle size and hurting performance.

Static schema generation avoids all of these issues.


šŸš€ Installation

npm i @lucaconlaq/drizzle-zod-to-code

šŸ“¦ Usage

npx drizzle-zod-to-code generate --out ../schemas/src/

Options

  • --config <path> - Path to drizzle.config.ts (default: "drizzle.config.ts")
  • --out <path> - Path for generated Zod schemas (default: "src/schemas")
  • --ts-config <path> - Path to tsconfig.json (default: "tsconfig.json")
  • -h, --help - Display help for command

Add to package.json

You can add it to your package.json scripts:

{
  ...
  "scripts": {
    ...
    "drizzle:generate": "drizzle-kit generate",
    "drizzle:migrate": "drizzle-kit migrate",
    "drizzle:push": "drizzle-kit push",
    "drizzle:pull": "drizzle-kit pull",
    "drizzle:studio": "drizzle-kit studio",
    "drizzle:generate:zod": "drizzle-zod-to-code generate --out ../schemas/src/"
  }
}

Then you can run:

npm run drizzle:generate:zod

🚨 Limitations

This is an initial release focused on the most common use cases. While it provides a solid foundation for generating static Zod schemas from Drizzle models, it does not cover all the use-cases that drizzle-zod support. If you find a bug, please consider contributing.

āœ… Test Coverage

The test suite in test/drizzle/ mirrors the test suite of drizzle-zod. Here's a summary of the current test coverage across different databases:

DBFilesTotal TestsSkipped
🐬 MySQLmysqlTable, mysqlView, mysqlTypes, mysqlSchemaValidation2113
🐘 PostgrespgTable, pgView, pgTypes, pgSchemaValidation228
🪨 SQLitesqliteTable, sqliteView, sqliteTypes, sqliteSchemaValidation1813