Drizzle Kit provides a comprehensive command-line interface for database schema management. All commands support configuration via drizzle.config.ts file or CLI options.
Generates SQL migration files from schema changes by comparing current schema with previous snapshots.
drizzle-kit generate [options]Options:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect: postgresql, mysql, sqlite, turso, singlestore, gel--schema <path> - Path to schema file/folder (glob patterns supported)--out <path> - Output folder for migrations (default: './drizzle')--name <name> - Custom migration name--breakpoints - Enable SQL statement breakpoints (default: true)--custom - Create empty migration file for custom SQL (default: false)--prefix <type> - Migration file prefix: index, timestamp, supabase, unix, none (default: 'index')--casing <type> - Serialization casing: camelCase, snake_caseUsage Examples:
# Using config file
drizzle-kit generate
# With explicit options
drizzle-kit generate --dialect=postgresql --schema=./src/schema.ts --out=./migrations
# With custom name
drizzle-kit generate --name=add_users_table
# Create empty migration for custom SQL
drizzle-kit generate --custom --name=seed_data
# With timestamp prefix
drizzle-kit generate --prefix=timestampBehavior:
Runs pending migrations on the database.
drizzle-kit migrate [options]Options:
--config <path> - Path to drizzle config fileUsage Example:
drizzle-kit migrate --config=./drizzle.config.tsBehavior:
__drizzle_migrations)Note: Requires database credentials in config file.
Pushes schema changes directly to the database without creating migration files.
drizzle-kit push [options]Options:
Configuration:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect--schema <path> - Path to schema file/folder--casing <type> - Serialization casingFilters:
--tablesFilter <glob> - Table name filters (glob patterns, can be repeated)--schemaFilters <schema> - Schema filters (PostgreSQL, can be repeated)--extensionsFilters <ext> - Extension filters (can be repeated)Database Credentials:
--url <url> - Database connection URL--host <host> - Database host--port <port> - Database port--user <user> - Database user--password <password> - Database password--database <name> - Database name--ssl <mode> - SSL mode--authToken <token> - Auth token (Turso)--tlsSecurity <mode> - TLS security mode (Gel)Entity Options:
--entities - Configure entity introspection (PostgreSQL roles)Behavior Options:
--verbose - Print all SQL statements (default: false)--strict - Always ask for confirmation (default: false)--force - Auto-approve data loss statements (default: false)Usage Examples:
# Using config file
drizzle-kit push
# With verbose output
drizzle-kit push --verbose
# Force push without prompts (dangerous!)
drizzle-kit push --force
# With table filters
drizzle-kit push --tablesFilter=users_* --tablesFilter=posts_*
# Exclude temporary tables
drizzle-kit push --tablesFilter=!temp_*
# PostgreSQL with schema filters
drizzle-kit push --schemaFilters=public --schemaFilters=auth
# With connection URL
drizzle-kit push --url=postgresql://user:pass@localhost:5432/db
# Strict mode (always asks for confirmation)
drizzle-kit push --strictBehavior:
Warning: Push bypasses migration history. Use for development only.
Introspects existing database and generates TypeScript schema files. Alias: pull.
drizzle-kit introspect [options]
drizzle-kit pull [options]Options:
Configuration:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect--out <path> - Output folder (default: 'drizzle')--breakpoints - Enable breakpoints (default: true)--introspect-casing <type> - Casing mode: camel, preserveFilters:
--tablesFilter <glob> - Table name filters--schemaFilters <schema> - Schema filters (PostgreSQL)--extensionsFilters <ext> - Extension filtersEntity Options:
--entities - Configure entity introspection (PostgreSQL roles, see configuration docs)Database Credentials:
Usage Examples:
# Using config file
drizzle-kit introspect
# Using alias
drizzle-kit pull
# With camelCase conversion
drizzle-kit introspect --introspect-casing=camel
# Preserve original casing
drizzle-kit introspect --introspect-casing=preserve
# With table filter
drizzle-kit introspect --tablesFilter=users_* --tablesFilter=posts_*
# PostgreSQL with schema filter
drizzle-kit pull --schemaFilters=public --schemaFilters=auth
# Exclude PostGIS tables
drizzle-kit introspect --extensionsFilters=postgisBehavior:
schema.ts with table definitionsStarts Drizzle Studio visual database browser.
drizzle-kit studio [options]Options:
--config <path> - Path to drizzle config file--port <number> - Custom port (default: 4983)--host <host> - Custom host (default: '0.0.0.0')--verbose - Print all SQL statements (default: false)Usage Examples:
# Start on default port (4983)
drizzle-kit studio
# Custom port
drizzle-kit studio --port=3000
# Custom host (localhost only)
drizzle-kit studio --host=127.0.0.1
# With verbose SQL logging
drizzle-kit studio --verboseBehavior:
Access: Open browser to http://localhost:4983 (or custom port)
Checks migration files for consistency issues.
drizzle-kit check [options]Options:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect--out <path> - Migrations folderUsage Examples:
# Using config file
drizzle-kit check
# With explicit options
drizzle-kit check --dialect=postgresql --out=./migrationsBehavior:
Upgrades migration snapshots to latest format version.
drizzle-kit up [options]Options:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect--out <path> - Migrations folderUsage Examples:
# Using config file
drizzle-kit up
# With explicit options
drizzle-kit up --dialect=postgresql --out=./migrationsBehavior:
Use Case: After upgrading Drizzle Kit to a new version with snapshot format changes.
Drops (deletes) a migration file.
drizzle-kit drop [options]Options:
--config <path> - Path to drizzle config file--out <path> - Migrations folder--driver <driver> - Database driverUsage Examples:
# Using config file (interactive)
drizzle-kit drop
# With explicit output folder
drizzle-kit drop --out=./migrationsBehavior:
Warning: Dropping applied migrations can cause inconsistencies.
Exports current schema as SQL by generating diff between current state and empty state.
drizzle-kit export [options]Options:
--config <path> - Path to drizzle config file--dialect <dialect> - Database dialect--schema <path> - Path to schema file/folder--sql - Generate as SQL (default: true)Usage Examples:
# Export schema as SQL
drizzle-kit export
# With explicit options
drizzle-kit export --dialect=postgresql --schema=./src/schema.tsBehavior:
All commands support these options:
--config <path> - Path to configuration file (default: drizzle.config.ts)--help - Display help for command--version - Display Drizzle Kit versionOptions are resolved in this order (highest priority first):
Example:
# Config file has: out: './drizzle'
# This command uses: ./migrations
drizzle-kit generate --out=./migrations0 - Success1 - Error occurredThe following commands are deprecated but still supported for backwards compatibility:
drizzle-kit generate:pg → use drizzle-kit generate --dialect=postgresqldrizzle-kit generate:mysql → use drizzle-kit generate --dialect=mysqldrizzle-kit generate:sqlite → use drizzle-kit generate --dialect=sqlitedrizzle-kit push:pg → use drizzle-kit push --dialect=postgresqldrizzle-kit push:mysql → use drizzle-kit push --dialect=mysqldrizzle-kit push:sqlite → use drizzle-kit push --dialect=sqlitedrizzle-kit introspect:pg → use drizzle-kit introspect --dialect=postgresqldrizzle-kit introspect:mysql → use drizzle-kit introspect --dialect=mysqldrizzle-kit introspect:sqlite → use drizzle-kit introspect --dialect=sqlitedrizzle-kit up:pg → use drizzle-kit up --dialect=postgresqldrizzle-kit up:mysql → use drizzle-kit up --dialect=mysqldrizzle-kit up:sqlite → use drizzle-kit up --dialect=sqlitedrizzle-kit check:pg → use drizzle-kit check --dialect=postgresqldrizzle-kit check:mysql → use drizzle-kit check --dialect=mysqldrizzle-kit check:sqlite → use drizzle-kit check --dialect=sqlite# 1. Create config file (drizzle.config.ts)
# 2. Define schema in TypeScript
# 3. Generate first migration
drizzle-kit generate --name=init
# 4. Apply migration
drizzle-kit migrate# 1. Modify schema in TypeScript
# 2. Generate migration
drizzle-kit generate
# 3. Review generated SQL
# 4. Apply migration
drizzle-kit migrate# 1. Modify schema in TypeScript
# 2. Push changes directly
drizzle-kit push
# 3. Review and approve changes# 1. Introspect existing database
drizzle-kit introspect
# 2. Review generated schema
# 3. (Optional) Generate baseline migration
drizzle-kit generate --name=baseline# 1. Pull latest code with migrations
# 2. Run migrations
drizzle-kit migrate
# 3. Verify with check
drizzle-kit checkUse Config Files: Define common options in drizzle.config.ts to avoid repeating CLI options.
Review Before Applying: Always review generated migrations and push changes before applying to production.
Version Control: Commit migration files to version control to track schema history.
Breakpoints: Keep breakpoints enabled for MySQL, SQLite, and SingleStore (required for proper migration execution).
Table Filters: Use table filters in multi-project schemas to avoid conflicts.
Schema Filters: Use schema filters (PostgreSQL) to organize database objects into logical namespaces.
Studio for Debugging: Use Studio to quickly inspect database state during development.
Verbose Mode: Use --verbose with push to see exactly what SQL will be executed.
Strict Mode: Use --strict with push to always review changes, even without data loss.