apps/docs/content/docs/orm/core-concepts/supported-databases/sqlite.mdx
Prisma ORM supports SQLite and SQLite-compatible databases. This includes local SQLite files, Turso's distributed libSQL, and Cloudflare's serverless D1.
Configure the SQLite provider in your Prisma schema:
datasource db {
provider = "sqlite"
}
Set the connection URL in prisma.config.ts:
import { defineConfig } from "prisma/config";
export default defineConfig({
schema: "prisma/schema.prisma",
datasource: {
url: "file:./dev.db", // or libsql:// for Turso
},
});
Instead of Prisma's built-in driver, you can use JavaScript database drivers via driver adapters:
Local SQLite with better-sqlite3:
npm install @prisma/adapter-better-sqlite3
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
import { PrismaClient } from "./generated/prisma";
const adapter = new PrismaBetterSqlite3({ url: "file:./prisma/dev.db" });
const prisma = new PrismaClient({ adapter });
Turso with @prisma/adapter-libsql:
npm install @prisma/adapter-libsql
import { PrismaLibSQL } from "@prisma/adapter-libsql";
import { PrismaClient } from "./generated/prisma";
const adapter = new PrismaLibSQL({
url: process.env.TURSO_DATABASE_URL,
authToken: process.env.TURSO_AUTH_TOKEN,
});
const prisma = new PrismaClient({ adapter });
Cloudflare D1 with @prisma/adapter-d1:
npm install @prisma/adapter-d1
import { PrismaD1 } from "@prisma/adapter-d1";
import { PrismaClient } from "./generated/prisma";
const adapter = new PrismaD1(env.DB); // D1 binding in Workers
const prisma = new PrismaClient({ adapter });
Standard SQLite database files (.db). Connection URL format: file:./path/to/database.db
prisma migrate dev for schema changesEdge-hosted, distributed SQLite-compatible database.
libsql://[hostname]Key differences:
prisma migrate diff + Turso CLIServerless SQLite database for Cloudflare Workers.
prisma migrate diff.wrangler/state) and remote versions availableKey differences:
wrangler d1 migrations apply| Prisma ORM | SQLite |
|---|---|
String | TEXT |
Boolean | BOOLEAN |
Int | INTEGER |
BigInt | INTEGER |
Float | REAL |
Decimal | DECIMAL |
DateTime | NUMERIC |
Json | JSONB |
Bytes | BLOB |
Enum | TEXT |
:::note
SQLite stores booleans as 0 (false) or 1 (true). Learn more about SQLite type affinity.
:::
Timestamp format with driver adapters:
Configure how DateTime values are stored:
const adapter = new PrismaBetterSqlite3(
{ url: "file:./dev.db" },
{ timestampFormat: "unixepoch-ms" } // For backward compatibility
);
unixepoch-ms: Required for migrating from Prisma's native driverEnum validation:
SQLite doesn't enforce enum values at the database level. Invalid values will cause Prisma Client queries to fail at runtime.
Integer overflow:
Prisma ORM validates that numbers fit within integer boundaries. If a value exceeds limits, you'll get a P2023 error.