
Product
Unify Your Security Stack with Socket Basics
A single platform for static analysis, secrets detection, container scanning, and CVE checks—built on trusted open source tools, ready to run out of the box.
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,082 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.
Product
A single platform for static analysis, secrets detection, container scanning, and CVE checks—built on trusted open source tools, ready to run out of the box.
Product
Socket is launching experimental protection for the Hugging Face ecosystem, scanning for malware and malicious payload injections inside model files to prevent silent AI supply chain attacks.
Research
/Security News
The Socket Threat Research Team uncovered a coordinated campaign that floods the Chrome Web Store with 131 rebranded clones of a WhatsApp Web automation extension to spam Brazilian users.