List of commands

Generate migrations

drizzle-kit generate lets you generate migrations based on you Drizzle schema.

paramrequireddescription
dialectyesDatabase dialect you are using. Can be postgresql,mysql or sqlite
schemayespath to typescript schema file or folder with multiple schema files
outnomigrations folder, default=./drizzle
confignoconfig file path, default=drizzle.config.ts
customnogenerate empty SQL for custom migration
namenogenerate migration with custom name
breakpointsnoSQL statements breakpoints, default=true
$ drizzle-kit generate
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql", // "mysql" | "sqlite"
  schema: "./src/schema.ts",
  out: "./drizzle",
});

If you want to use custom name for your migration

$ drizzle-kit generate --name init_db

If you want to use custom named config file

$ drizzle-kit generate --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit generate --schema=./src/schema.ts --out=./drizzle

Generate an empty SQL migration file for custom migration.

$ drizzle-kit generate --custom

Apply migrations

drizzle-kit migrate lets you apply migrations stored in you migrations folder and outputed by drizzle-kit generate

paramrequireddescription
confignoconfig file path, default=drizzle.config.ts
$ drizzle-kit migrate
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql", // "mysql" | "sqlite"
  out: "./drizzle",
  migrations: {
    table: 'migrations_custom', // default `__drizzle_migrations`,
    schema: 'public', // used in PostgreSQL only and default to `drizzle`
  }
});

If you want to use custom named config file

$ drizzle-kit migrate --config=custom.config.ts

Introspect / Pull

drizzle-kit introspect command lets you pull DDL from existing database and generate schema.ts file in matter of seconds.

Either url or user:password@host:port/db params are mandatory.

paramrequireddescription
dialectyesDatabase dialect you are using. Can be postgresql,mysql or sqlite
drivernodriver to use for querying (aws-data-api, d1-http, turso, expo)
outnomigrations folder, default=./drizzle
urlnodatabase connection string
usernodatabase user
passwordnodatabase password
hostnohost
portnoport
databasenodatabase name
confignoconfig file path, default=drizzle.config.ts
introspect-casingnostrategy for JS keys creation in columns, tables, etc. (preserve, camel)
schemaFilternoSchema name filter. Default: ["public"]
$ drizzle-kit introspect
Example 1
Example 2
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema/*",
  out: "./drizzle",
  dialect: 'postgresql',
  dbCredentials: {
    url: "postgresql://postgres:password@host:port/db",
  }
});
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema/*",
  out: "./drizzle",
  dialect: 'postgresql',
  dbCredentials: {
    user: "postgres",
    password: "password",
    host: "127.0.0.1",
    port: 5432,
    database: "db",
  }
});

If you want to use custom named config file

$ drizzle-kit introspect --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit introspect --out=migrations/ --connectionString=postgresql://user:pass@host:port/db_name
$ drizzle-kit introspect --out=migrations/ --host=0.0.0.0 --port=5432 --user=postgres --password=pass --database=db_name --ssl

Prototype / Push

drizzle-kit push lets you push your schema changes directly to the database and omit managing SQL migration files.

This has proven to be very useful for rapid local development(prototyping) and when working with remote databases like Planetscale, Neon, Turso and others.

💡

Extended article on Turso and drizzle-kit push — read here.

Either url or user:password@host:port/db params are required.

paramrequireddescription
dialectyesDatabase dialect you are using. Can be postgresql,mysql or sqlite
schemayespath to typescript schema file or folder with multiple schema files
drivernodriver to use for querying (aws-data-api, d1-http, turso, expo)
tablesFilternotable name filter
schemaFilternoSchema name filter. Default: ["public"]
urlnodatabase connection string
usernodatabase user
passwordnodatabase password
hostnohost
portnoport
databasenodatabase name
confignoconfig file path, default=drizzle.config.ts
verbosenoprint all queries that will be executed
strictnoalways ask for an approve before pushing the schema
$ drizzle-kit push

If you want to use custom named config file

$ drizzle-kit push --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit push --schema=src/schema.ts --url=postgresql://user:pass@host:port/db_name
$ drizzle-kit push --schema=src/schema.ts --host=0.0.0.0 --port=5432 --user=postgres --password=pass --database=db_name --ssl

Drop migration

drizzle-kit drop lets you delete previously generated migrations from migrations folder

⚠️

Please don’t delete any files in migrations folder manually, it might break drizzle-kit

paramrequireddescription
outnomigrations folder, default=./drizzle
confignoconfig file path, default=drizzle.config.ts
$ drizzle-kit drop

If you want to use custom named config file

$ drizzle-kit drop --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit drop --out=drizzle

Maintain stale metadata

We’re rapidly evolving Drizzle Kit APIs and from time to time there’s a need to upgrade underlying metadata structure.
drizzle-kit up is a utility command to keep all metadata up to date.

paramrequireddescription
dialectyesDatabase dialect you are using. Can be postgresql,mysql or sqlite
outnomigrations folder, default=./drizzle
confignoconfig file path, default=drizzle.config.ts
$ drizzle-kit up

If you want to use custom named config file

$ drizzle-kit up --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit up --out=drizzle

Check

drizzle-kit check is a very powerful tool for you to check consistency of your migrations.
That’s extremely useful when you have multiple people on the project, altering database schema on different branches.
Drizzle Kit will check for all collisions and inconsistencies.

paramrequireddescription
dialectyesDatabase dialect you are using. Can be postgresql,mysql or sqlite
outnomigrations folder, default=./drizzle
confignoconfig file path, default=drizzle.config.ts
$ drizzle-kit check

If you want to use custom named config file

$ drizzle-kit check --config=custom.config.ts

If you want to have all params as CLI options

$ drizzle-kit check --out=drizzle

Drizzle Studio

drizzle-kit studio lets you launch Drizzle Studio database browser locally from you config file.

paramrequireddescription
portnocustom port
hostnocustom host for studio server
verbosenolog all sql statements
drizzle-kit studio

drizzle-kit studio --port 3000 --host 0.0.0.0 --verbose
🖥 Drizzle Studio Demo 🖥 Open Drizzle Studio