Become a Gold Sponsor

Drizzle <> SQLite

Drizzle has native support for SQLite connections with the libsql and better-sqlite3 drivers.

There are a few differences between the libsql and better-sqlite3 drivers that we discovered while using both and integrating them with the Drizzle ORM. For example:

At the driver level, there may not be many differences between the two, but the main one is that libSQL can connect to both SQLite files and Turso remote databases. LibSQL is a fork of SQLite that offers a bit more functionality compared to standard SQLite, such as:

libsql

Step 1 - Install packages

npm
yarn
pnpm
bun
npm i drizzle-orm @libsql/client
npm i -D drizzle-kit

Step 2 - Initialize the driver and make a query

libsql
libsql with config
turso alias
import { drizzle } from 'drizzle-orm/connect';

const db = await drizzle("libsql", process.env.DATABASE_URL);
 
const result = await db.execute('select 1');

If you need a synchronous connection, you can use our additional connection API, where you specify a driver connection and pass it to the Drizzle instance.

import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';

const client = createClient({ url: process.env.DATABASE_URL, authToken: process.env.DATABASE_AUTH_TOKEN });
const db = drizzle(client);

const result = await db.execute('select 1');

better-sqlite3

Step 1 - Install packages

npm
yarn
pnpm
bun
npm i drizzle-orm better-sqlite3
npm i -D drizzle-kit @types/better-sqlite3

Step 2 - Initialize the driver and make a query

better-sqlite3
better-sqlite3 with config
import { drizzle } from 'drizzle-orm/connect';

const db = await drizzle("better-sqlite3", process.env.DATABASE_URL);

const result = await db.execute('select 1');

If you need a synchronous connection, you can use our additional connection API, where you specify a driver connection and pass it to the Drizzle instance.

import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';

const sqlite = new Database('sqlite.db');
const db = drizzle(sqlite);

const result = await db.execute('select 1');

What’s next?