Skip to main content
Drizzle Kit configuration is defined in drizzle.config.ts (or .js/.json) at the root of your project.

Quick Start

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'postgresql',
  schema: './src/schema.ts',
  out: './drizzle',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});

Configuration API

defineConfig

Type-safe configuration helper function.
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  // Configuration options
});

Core Options

dialect

dialect
string
required
Database dialect for all commands.Type: 'postgresql' | 'mysql' | 'sqlite' | 'turso' | 'singlestore' | 'gel'
export default defineConfig({
  dialect: 'postgresql',
});

schema

schema
string | string[]
Path(s) to your schema files. Supports glob patterns.
// Single file
export default defineConfig({
  schema: './src/schema.ts',
});

// Multiple files
export default defineConfig({
  schema: ['./src/schema/*.ts', './src/models/*.ts'],
});

// Glob pattern
export default defineConfig({
  schema: './src/db/**/*.schema.ts',
});

out

out
string
default:"drizzle"
Output folder for migrations and introspection files.
export default defineConfig({
  out: './migrations',
});

driver

driver
string
Explicit driver for specific database environments.Type: 'aws-data-api' | 'd1-http' | 'expo' | 'pglite' | 'durable-sqlite'Only required for specific drivers:
  • aws-data-api: AWS RDS Data API
  • d1-http: Cloudflare D1
  • expo: React Native Expo SQLite
  • pglite: PGlite (in-process Postgres)
  • durable-sqlite: Durable Objects SQLite
export default defineConfig({
  dialect: 'postgresql',
  driver: 'aws-data-api',
  dbCredentials: {
    database: 'mydb',
    secretArn: process.env.SECRET_ARN!,
    resourceArn: process.env.RESOURCE_ARN!,
  },
});

Database Credentials

PostgreSQL

export default defineConfig({
  dialect: 'postgresql',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});

MySQL / SingleStore

export default defineConfig({
  dialect: 'mysql',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});

SQLite

export default defineConfig({
  dialect: 'sqlite',
  dbCredentials: {
    url: './local.db',
  },
});

Turso (LibSQL)

export default defineConfig({
  dialect: 'turso',
  dbCredentials: {
    url: process.env.TURSO_DATABASE_URL!,
    authToken: process.env.TURSO_AUTH_TOKEN,
  },
});
dbCredentials.url
string
required
Turso database URL
dbCredentials.authToken
string
Turso authentication token

Migration Options

migrations

migrations
object
Configure migration storage and file naming.
export default defineConfig({
  migrations: {
    table: 'migrations',
    schema: 'drizzle',
    prefix: 'timestamp',
  },
});
migrations.table
string
default:"__drizzle_migrations"
Custom migrations table name.
migrations: {
  table: 'custom_migrations',
}
migrations.schema
string
default:"drizzle"
Custom schema for migrations table (PostgreSQL only).
migrations: {
  schema: 'public',
}
migrations.prefix
string
default:"index"
Migration file naming prefix.Type: 'index' | 'timestamp' | 'supabase' | 'unix' | 'none'
migrations: {
  prefix: 'timestamp',
}
Examples:
  • index: 0001_migration.sql, 0002_migration.sql
  • timestamp: 20240304120000_migration.sql
  • supabase: 20240304120000_migration.sql (Supabase format)
  • unix: 1709553600_migration.sql
  • none: migration.sql

breakpoints

breakpoints
boolean
default:true
Enable/disable SQL breakpoints in migrations.Required for databases that don’t support multiple DDL statements in one transaction (MySQL, SQLite, SingleStore).
export default defineConfig({
  breakpoints: true,
});

Filtering Options

tablesFilter

tablesFilter
string | string[]
Filter tables using glob patterns.Useful for multi-project schemas or excluding specific tables.
export default defineConfig({
  // Single filter
  tablesFilter: 'project1_*',
  
  // Multiple filters
  tablesFilter: ['users_*', 'posts_*'],
  
  // Exclude tables
  tablesFilter: ['!internal_*', '*'],
});

schemaFilter

schemaFilter
string | string[]
default:["public"]
PostgreSQL schema filters for introspect/push commands.
export default defineConfig({
  // Single schema
  schemaFilter: 'public',
  
  // Multiple schemas
  schemaFilter: ['public', 'auth', 'api'],
});

extensionsFilters

extensionsFilters
'postgis'[]
Filter out extension-related internal tables.
export default defineConfig({
  extensionsFilters: ['postgis'],
});
This excludes PostGIS system tables:
  • geography_columns
  • geometry_columns
  • spatial_ref_sys

Introspection Options

introspect

introspect
object
Configure schema introspection behavior.
export default defineConfig({
  introspect: {
    casing: 'preserve',
  },
});
introspect.casing
string
default:"camel"
Column name casing in generated schema.Type: 'camel' | 'preserve'
  • camel: Converts user_name to userName
  • preserve: Keeps original database casing
introspect: {
  casing: 'preserve',
}

Advanced Options

casing

casing
string
Global column serialization casing.Type: 'camelCase' | 'snake_case'
export default defineConfig({
  casing: 'snake_case',
});

verbose

verbose
boolean
default:false
Print all SQL statements during push commands.
export default defineConfig({
  verbose: true,
});

strict

strict
boolean
default:false
Always require confirmation for push commands.
export default defineConfig({
  strict: true,
});

entities

entities
object
Configure entity introspection (PostgreSQL only).
export default defineConfig({
  entities: {
    roles: true,
  },
});
entities.roles
boolean | object
default:false
Introspect database roles.
// Enable all roles
entities: {
  roles: true,
}

// Provider-specific roles
entities: {
  roles: {
    provider: 'supabase',
  },
}

// Include/exclude specific roles
entities: {
  roles: {
    include: ['authenticated', 'service_role'],
    exclude: ['postgres'],
  },
}
Providers: 'supabase' | 'neon' | custom string

Complete Examples

PostgreSQL Production

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'postgresql',
  schema: './src/db/schema/**/*.ts',
  out: './drizzle',
  
  dbCredentials: {
    host: process.env.DB_HOST!,
    port: Number(process.env.DB_PORT),
    user: process.env.DB_USER!,
    password: process.env.DB_PASSWORD!,
    database: process.env.DB_NAME!,
    ssl: {
      rejectUnauthorized: true,
      ca: process.env.DB_CA_CERT,
    },
  },
  
  migrations: {
    table: 'migrations',
    schema: 'public',
    prefix: 'timestamp',
  },
  
  schemaFilter: ['public', 'auth'],
  breakpoints: true,
  verbose: false,
  strict: true,
});

Multi-Project Setup

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'postgresql',
  schema: './src/schema.ts',
  out: './drizzle',
  
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
  
  // Only manage tables with project prefix
  tablesFilter: ['app1_*'],
  
  migrations: {
    table: 'app1_migrations',
    prefix: 'timestamp',
  },
});

Turso Edge

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'turso',
  schema: './src/schema.ts',
  out: './drizzle',
  
  dbCredentials: {
    url: process.env.TURSO_DATABASE_URL!,
    authToken: process.env.TURSO_AUTH_TOKEN,
  },
  
  introspect: {
    casing: 'preserve',
  },
});

Cloudflare D1

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'sqlite',
  driver: 'd1-http',
  schema: './src/schema.ts',
  out: './migrations',
  
  dbCredentials: {
    accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,
    databaseId: process.env.CLOUDFLARE_DATABASE_ID!,
    token: process.env.CLOUDFLARE_API_TOKEN!,
  },
});

TypeScript Types

import type { Config } from 'drizzle-kit';

const config: Config = {
  dialect: 'postgresql',
  schema: './src/schema.ts',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
};

export default config;

Environment Variables

Load environment variables using dotenv:
import 'dotenv/config';
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'postgresql',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});
Or use a .env file:
DATABASE_URL=postgresql://user:pass@localhost:5432/db

Build docs developers (and LLMs) love