@lucaconlaq/drizzle-zod-to-code v0.1.0
Drizzle Zod To Code
Generate JavaScript/TypeScript code for Drizzle Zod schemas
⨠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:
DB | Files | Total Tests | Skipped |
---|---|---|---|
š¬ MySQL | mysqlTable , mysqlView , mysqlTypes , mysqlSchemaValidation | 21 | 13 |
š Postgres | pgTable , pgView , pgTypes , pgSchemaValidation | 22 | 8 |
šŖØ SQLite | sqliteTable , sqliteView , sqliteTypes , sqliteSchemaValidation | 18 | 13 |