
Security News
Vite+ Joins the Push to Consolidate JavaScript Tooling
Evan You announces Vite+, a commercial, Rust-powered toolchain built on the Vite ecosystem to unify JavaScript development and fund open source.
Generate Zod schemas from Typescript types generated by the Supabase CLI.
$ pnpm add --D supazod
$ supabase gen types typescript --local > types.ts
$ pnpm supazod -i types.ts -o schemas.ts -t schemas.d.ts -s public,schema_a,schema_b
That's it! Check your schemas.ts
file - you should have Zod schemas generated for all your tables, views, enums and functions.
Supazod generates clean, consistent schema names:
// ✅ Clean naming (v2.0+)
export const publicUsersInsertSchema = z.object({...});
export const publicUsersUpdateSchema = z.object({...});
export const publicUserStatusSchema = z.union([...]);
export const publicGetStatusArgsSchema = z.object({...});
// TypeScript types without "Schema" suffix
export type PublicUsersInsert = z.infer<typeof generated.publicUsersInsertSchema>;
export type PublicUserStatus = z.infer<typeof generated.publicUserStatusSchema>;
Create a supazod.config.ts
file for type-safe configuration with IntelliSense:
import { defineConfig } from 'supazod';
export default defineConfig({
namingConfig: {
// TypeScript provides autocomplete for placeholders:
// {schema}, {table}, {operation}, {function}, {name}
tableOperationPattern: '{schema}_{table}_{operation}',
tableSchemaPattern: '{schema}{table}{operation}',
enumPattern: '{schema}_{name}_Enum',
enumSchemaPattern: '{schema}{name}',
functionArgsPattern: '{schema}_{function}_Args',
functionArgsSchemaPattern: '{schema}{function}Args',
functionReturnsPattern: '{schema}_{function}_Returns',
functionReturnsSchemaPattern: '{schema}{function}Returns',
// Capitalization and formatting
capitalizeSchema: true,
capitalizeNames: true,
separator: '_',
}
});
{
"namingConfig": {
"tableOperationPattern": "{schema}_{table}_{operation}",
"tableSchemaPattern": "{schema}{table}{operation}",
"enumPattern": "{schema}_{name}_Enum",
"enumSchemaPattern": "{schema}{name}",
"capitalizeSchema": true,
"capitalizeNames": true,
"separator": "_"
}
}
Supported config files:
supazod.config.ts
(recommended)supazod.config.js
supazod.config.json
.supazodrc.ts
.supazodrc.js
.supazodrc.json
supazod [options]
-i, --input <path> Input TypeScript file
-o, --output <path> Output Zod schemas file
-t, --types-output <path> Output type definitions (optional)
-s, --schema <name> Schema to process (optional, defaults to all)
--verbose Enable debug logs
# Naming Configuration (overrides config file)
--table-operation-pattern <pattern> Pattern for table operations
--table-schema-pattern <pattern> Pattern for table schema constants
--enum-pattern <pattern> Pattern for enums
--enum-schema-pattern <pattern> Pattern for enum schema constants
--function-args-pattern <pattern> Pattern for function arguments
--function-args-schema-pattern <pattern> Pattern for function arg schema constants
--function-returns-pattern <pattern> Pattern for function returns
--function-returns-schema-pattern <pattern> Pattern for function return schema constants
--config <path> Path to a Supazod config file
--capitalize-schema <boolean> Capitalize schema names
--capitalize-names <boolean> Capitalize type names
--separator <string> Separator between name parts
# Generate with custom naming patterns
$ pnpm supazod -i types.ts -o schemas.ts \
--table-operation-pattern '{schema}_{table}_{operation}' \
--table-schema-pattern '{schema}{table}{operation}' \
--enum-pattern '{schema}_{name}_Enum' \
--enum-schema-pattern '{schema}{name}' \
--separator '_'
For each naming pattern there is an optional companion for the generated Zod schema constants (for example tableSchemaPattern
).
Use these when you want custom suffixes on TypeScript types without affecting the schema identifiers that appear in schemas.ts
.
Patterns now preserve any separators you include (like _
or -
) in the emitted type aliases and schema constants, so you can rely on the exact formatting you configure.
{schema}
- Database schema name (e.g., "public", "auth"){table}
- Table name (e.g., "users", "posts"){operation}
- Operation type ("Insert", "Update", "Row"){function}
- Function name (e.g., "get_status"){name}
- Type name (e.g., "user_status" for enums).d.ts
files alongside Zod schemasimport { generateContent } from 'supazod';
const result = await generateContent({
input: './types.ts',
output: './schema.ts',
schema: ['public'],
namingConfig: {
tableOperationPattern: '{schema}_{table}_{operation}',
enumPattern: '{schema}_{name}_Enum',
}
});
If upgrading from v1.x, see MIGRATION.md for detailed migration instructions. The main changes:
publicUsersInsertSchemaSchema
→ publicUsersInsertSchema
)This project started as a fork of supabase-to-zod by @psteinroe. While maintaining the original concept, the codebase has been completely rewritten to provide better performance, enhanced type safety, and a more robust architecture. Thanks to psteinroe for the initial inspiration! 💚
FAQs
Generate Zod schemas from Supabase CLI generated types
The npm package supazod receives a total of 3,036 weekly downloads. As such, supazod popularity was classified as popular.
We found that supazod demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Evan You announces Vite+, a commercial, Rust-powered toolchain built on the Vite ecosystem to unify JavaScript development and fund open source.
Security News
Ruby Central’s incident report on the RubyGems.org access dispute sparks backlash from former maintainers and renewed debate over project governance.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.