or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-commands.mdconfiguration.mdindex.mdmysql-api.mdpostgresql-api.mdsinglestore-api.mdsqlite-api.md
tile.json

cli-commands.mddocs/

CLI Commands

Drizzle Kit provides a comprehensive command-line interface for database schema management. All commands support configuration via drizzle.config.ts file or CLI options.

Capabilities

Generate Command

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_case

Usage 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=timestamp

Behavior:

  • Creates a new migration file in the output directory
  • Compares current schema with the latest snapshot
  • Prompts for user input on ambiguous cases (renames)
  • Generates SQL statements to transform database from old to new schema
  • Updates snapshot with current schema state

Migrate Command

Runs pending migrations on the database.

drizzle-kit migrate [options]

Options:

  • --config <path> - Path to drizzle config file

Usage Example:

drizzle-kit migrate --config=./drizzle.config.ts

Behavior:

  • Reads migrations from configured output directory
  • Executes migrations in order based on prefix
  • Tracks applied migrations in database table (default: __drizzle_migrations)
  • Skips already-applied migrations
  • Stops on first error

Note: Requires database credentials in config file.

Push Command

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 casing

Filters:

  • --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 --strict

Behavior:

  • Introspects current database schema
  • Compares with TypeScript schema definitions
  • Generates SQL statements to sync database with schema
  • Shows warnings for data loss operations
  • Prompts for confirmation before applying changes
  • Applies changes directly to database

Warning: Push bypasses migration history. Use for development only.

Introspect Command

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, preserve

Filters:

  • --tablesFilter <glob> - Table name filters
  • --schemaFilters <schema> - Schema filters (PostgreSQL)
  • --extensionsFilters <ext> - Extension filters

Entity Options:

  • --entities - Configure entity introspection (PostgreSQL roles, see configuration docs)

Database Credentials:

  • All credential options from push command

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=postgis

Behavior:

  • Connects to database
  • Reads database schema structure
  • Generates TypeScript schema files in output directory
  • Creates schema.ts with table definitions
  • Applies casing transformation if specified
  • Respects table and schema filters

Studio Command

Starts 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 --verbose

Behavior:

  • Starts HTTP server with web interface
  • Opens visual database browser
  • Allows browsing tables, viewing data, executing queries
  • Supports all configured databases
  • Requires database credentials in config file

Access: Open browser to http://localhost:4983 (or custom port)

Check Command

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 folder

Usage Examples:

# Using config file
drizzle-kit check

# With explicit options
drizzle-kit check --dialect=postgresql --out=./migrations

Behavior:

  • Validates migration file format
  • Checks snapshot consistency
  • Verifies migration chain integrity
  • Reports any issues found

Up Command

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 folder

Usage Examples:

# Using config file
drizzle-kit up

# With explicit options
drizzle-kit up --dialect=postgresql --out=./migrations

Behavior:

  • Scans migration folder for snapshots
  • Upgrades old format snapshots to latest version
  • Updates snapshot files in place
  • Preserves migration history

Use Case: After upgrading Drizzle Kit to a new version with snapshot format changes.

Drop Command

Drops (deletes) a migration file.

drizzle-kit drop [options]

Options:

  • --config <path> - Path to drizzle config file
  • --out <path> - Migrations folder
  • --driver <driver> - Database driver

Usage Examples:

# Using config file (interactive)
drizzle-kit drop

# With explicit output folder
drizzle-kit drop --out=./migrations

Behavior:

  • Lists available migrations
  • Prompts user to select migration to drop
  • Removes migration file and snapshot
  • Updates migration chain

Warning: Dropping applied migrations can cause inconsistencies.

Export Command

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.ts

Behavior:

  • Reads TypeScript schema
  • Generates SQL statements to create all schema objects from scratch
  • Outputs SQL file suitable for database initialization

Global Options

All commands support these options:

  • --config <path> - Path to configuration file (default: drizzle.config.ts)
  • --help - Display help for command
  • --version - Display Drizzle Kit version

Configuration File Priority

Options are resolved in this order (highest priority first):

  1. CLI arguments
  2. Configuration file
  3. Default values

Example:

# Config file has: out: './drizzle'
# This command uses: ./migrations
drizzle-kit generate --out=./migrations

Exit Codes

  • 0 - Success
  • 1 - Error occurred
  • Non-zero - Command-specific error

Deprecated Commands

The following commands are deprecated but still supported for backwards compatibility:

Legacy Generate Commands

  • drizzle-kit generate:pg → use drizzle-kit generate --dialect=postgresql
  • drizzle-kit generate:mysql → use drizzle-kit generate --dialect=mysql
  • drizzle-kit generate:sqlite → use drizzle-kit generate --dialect=sqlite

Legacy Push Commands

  • drizzle-kit push:pg → use drizzle-kit push --dialect=postgresql
  • drizzle-kit push:mysql → use drizzle-kit push --dialect=mysql
  • drizzle-kit push:sqlite → use drizzle-kit push --dialect=sqlite

Legacy Introspect Commands

  • drizzle-kit introspect:pg → use drizzle-kit introspect --dialect=postgresql
  • drizzle-kit introspect:mysql → use drizzle-kit introspect --dialect=mysql
  • drizzle-kit introspect:sqlite → use drizzle-kit introspect --dialect=sqlite

Legacy Up Commands

  • drizzle-kit up:pg → use drizzle-kit up --dialect=postgresql
  • drizzle-kit up:mysql → use drizzle-kit up --dialect=mysql
  • drizzle-kit up:sqlite → use drizzle-kit up --dialect=sqlite

Legacy Check Commands

  • drizzle-kit check:pg → use drizzle-kit check --dialect=postgresql
  • drizzle-kit check:mysql → use drizzle-kit check --dialect=mysql
  • drizzle-kit check:sqlite → use drizzle-kit check --dialect=sqlite

Common Workflows

Initial Setup

# 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

Development Workflow (with migrations)

# 1. Modify schema in TypeScript
# 2. Generate migration
drizzle-kit generate
# 3. Review generated SQL
# 4. Apply migration
drizzle-kit migrate

Development Workflow (without migrations)

# 1. Modify schema in TypeScript
# 2. Push changes directly
drizzle-kit push
# 3. Review and approve changes

Database Import

# 1. Introspect existing database
drizzle-kit introspect
# 2. Review generated schema
# 3. (Optional) Generate baseline migration
drizzle-kit generate --name=baseline

Production Deployment

# 1. Pull latest code with migrations
# 2. Run migrations
drizzle-kit migrate
# 3. Verify with check
drizzle-kit check

Tips

Use 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.