SQLite drivers supported by Drizzle ORM
Drizzle ORM supports the following SQLite drivers: SQLite, Turso Cloud, Turso Database, SQLite Cloud, Cloudflare D1, Bun SQLite, Node SQLite, Cloudflare Durable Objects, Expo SQLite, OP SQLite, React Native SQLite, and Drizzle HTTP proxy.
SQLite Cloud driver installation with Drizzle
To use SQLite Cloud with Drizzle, install drizzle-orm@rc, @sqlitecloud/drivers, and drizzle-kit@rc as dev dependency.
SQLite Cloud connection with custom driver instance
To provide a custom SQLite Cloud driver instance, import Database from '@sqlitecloud/drivers', create a new Database instance with the connection string, then pass it to drizzle: const client = new Database(process.env.SQLITE_CLOUD_CONNECTION_STRING!); const db = drizzle({ client });
SQLite Cloud definition
SQLite Cloud is a managed, distributed relational database system built on top of the SQLite database engine.
SQLite Cloud quick connection without custom driver
Import drizzle from 'drizzle-orm/sqlite-cloud' and initialize with a connection string: const db = drizzle(process.env.SQLITE_CLOUD_CONNECTION_STRING);
Turso is a lightweight AI-ready database
According to the official Turso website, Turso is described as 'the small database to power your big dreams in the age of AI'.
Turso driver initialization with existing Database client
Import Database from '@tursodatabase/database' and create an instance with new Database('sqlite.db'). Then import drizzle from 'drizzle-orm/tursodatabase/database' and initialize with drizzle({ client }). Execute queries with db.all('select 1').
Turso serverless driver installation
To connect Drizzle ORM to Turso Database serverless, install the packages: drizzle-orm@rc, @tursodatabase/serverless, and drizzle-kit@rc as a dev dependency.
Turso Database description
According to Turso's official website, Turso is described as a small database designed to power applications in the age of AI.
Initialize Drizzle with Turso serverless using client
Import connect from '@tursodatabase/serverless' and drizzle from 'drizzle-orm/tursodatabase-serverless'. Create a client by calling connect() with url and authToken parameters. Pass the client to drizzle() with a client property. Example: const client = connect({ url: process.env.TURSO_URL, authToken: process.env.TURSO_TOKEN }); const db = drizzle({ client });
Initialize Drizzle with libSQL client for web
Import drizzle from 'drizzle-orm/libsql/web' and createClient from '@libsql/client/web'. Create a client with url and authToken from environment variables, then instantiate drizzle with the client object.
Query methods supported with libSQL driver
Drizzle ORM with libSQL driver mirrors popular SQLite-like query methods: all, get, values, and run.
Turso is a libSQL-powered edge SQLite database as a service
Turso is built on libSQL and operates as an edge SQLite database service. Drizzle ORM provides native support for the libSQL driver.
Install packages for Drizzle with Turso
To use Drizzle with Turso, install drizzle-orm@rc, @libsql/client, and drizzle-kit@rc as a dev dependency.
Initialize Drizzle with libSQL connection config
Drizzle can be instantiated by passing a connection object directly with url and authToken properties instead of providing a client instance.
Drizzle config file example with SQLite
Example config: import { defineConfig } from 'drizzle-kit'; export default defineConfig({ dialect: "sqlite", dbCredentials: { url: ":memory:" } });
Drizzle Kit schema path with glob patterns
The schema option supports glob patterns. Example: schema: "./src/schema/*" allows Drizzle Kit to include all schema files in the schema folder.
Drizzle Kit defineConfig basic structure
The defineConfig function from drizzle-kit accepts configuration options including dialect, schema, and out. The basic SQLite config requires dialect: "sqlite", schema path pointing to schema files, and out defining the migrations output folder.
Drizzle Kit dialect option for SQLite
The dialect config option specifies the database type. For SQLite, set dialect to "sqlite". This is required and used by commands: generate, push, pull, studio, migrate, up, export.
Drizzle Kit schema option
The schema option accepts glob-based paths to drizzle schema files or folders containing schema files. Type is string or string[]. Used by commands: generate, push, export, studio. This is required.
Drizzle Kit driver option for SQLite
The driver option specifies which SQLite driver to use. Drizzle Kit automatically picks an available SQLite driver based on dialect: "sqlite". Set driver to "d1-http" for Cloudflare D1 HTTP exceptions. Used by commands: push, migrate, pull, studio.
Drizzle Kit dbCredentials for SQLite
The dbCredentials option specifies database connection credentials. For SQLite local files, use url with value ":memory:" for in-memory, "sqlite.db" for file, or "file:sqlite.db" with file: prefix for libsql. For Cloudflare D1, use accountId, databaseId, and token. Used by commands: push, pull, migrate, studio.
Drizzle Kit migrations table name configuration
The migrations config option allows changing the migrations log table name. Type is { table: string }. Default is { table: "__drizzle_migrations" }. Used by commands: migrate, push, pull.
Drizzle Kit introspect casing option
The introspect config option controls column key casing for drizzle-kit pull command. Set casing to "camel" to convert database column names to camelCase in generated code, or "preserve" to keep original database column names. Default is "camel".
Drizzle Kit tablesFilter option
The tablesFilter option lets you specify which tables drizzle-kit push and drizzle-kit pull will manage. Type is string or string[]. Accepts glob-based patterns like "user*" or specific table names like ["users", "posts", "project1_*"]. By default manages all tables.
Drizzle Kit extended config file for SQLite D1
Extended example with multiple options: import { defineConfig } from "drizzle-kit"; export default defineConfig({ out: "./drizzle", dialect: "sqlite", schema: "./src/schema.ts", driver: "d1-http", dbCredentials: { url: "./sqlite.db" }, tablesFilter: "*", introspect: { casing: "camel" }, migrations: { table: "__drizzle_migrations__" }, breakpoints: true, verbose: true });
better-sqlite3 query execution method
The better-sqlite3 driver uses the db.all() method to execute queries: const result = await db.all('select 1');
better-sqlite3 initialization with connection options
To initialize a better-sqlite3 connection with Drizzle using explicit connection options: import { drizzle } from 'drizzle-orm/better-sqlite3'; const db = drizzle({ connection: { source: process.env.DB_FILE_NAME }});
better-sqlite3 with existing Database instance
To use an existing better-sqlite3 Database instance with Drizzle: import { drizzle } from 'drizzle-orm/better-sqlite3'; import Database from 'better-sqlite3'; const sqlite = new Database('sqlite.db'); const db = drizzle({ client: sqlite });
SQLite drivers supported by Drizzle
Drizzle has native support for SQLite connections with three drivers: libsql, node:sqlite, and better-sqlite3.
libSQL vs better-sqlite3 key differences
libSQL can connect to both SQLite files and Turso remote databases, while better-sqlite3 can only connect to local SQLite files. libSQL is a fork of SQLite that offers more ALTER statements, native encryption at rest configuration, and support for a larger set of SQLite extensions compared to better-sqlite3.
better-sqlite3 initialization with file path
To initialize a better-sqlite3 connection with Drizzle using a file path: import { drizzle } from 'drizzle-orm/better-sqlite3'; const db = drizzle(process.env.DB_FILE_NAME);
Drizzle is dialect-specific and supports multiple databases
Drizzle operates natively through industry-standard database drivers and supports all major PostgreSQL, MySQL, SQLite, SingleStore, MSSQL, and CockroachDB drivers.
Drizzle has zero dependencies
Drizzle ORM has exactly 0 dependencies. It is slim, performant, and serverless-ready by design, with a total bundle size of approximately 31KB.