# SQLite (Prisma ORM v7) (/docs/v7/prisma-orm/quickstart/sqlite) > For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL. Create a new TypeScript project from scratch by connecting Prisma ORM to SQLite and generating a Prisma Client for database access Location: v7 > Prisma ORM > Quickstart > SQLite [SQLite](https://sqlite.org) is a lightweight, file-based database suited to development, prototyping, and small applications. It requires no setup and stores data in a local file. In this guide, you will learn how to set up a new TypeScript project from scratch, connect it to SQLite using Prisma ORM, and generate a Prisma Client for type-safe access to your database. ## Prerequisites [#prerequisites] ## 1. Create a new project [#1-create-a-new-project] Create a project directory and navigate into it: ```shell mkdir hello-prisma cd hello-prisma ``` Initialize a TypeScript project: #### bun ```bash bun init bun add typescript tsx @types/node --dev bunx tsc --init ``` #### pnpm ```bash pnpm init pnpm add typescript tsx @types/node --save-dev pnpm tsc --init ``` #### yarn ```bash yarn init yarn add typescript tsx @types/node --dev yarn tsc --init ``` #### npm ```bash npm init npm install typescript tsx @types/node --save-dev npx tsc --init ``` ## 2. Install required dependencies [#2-install-required-dependencies] Install the packages needed for this quickstart: #### bun ```bash bun add prisma@prev @types/node @types/better-sqlite3 --dev ``` #### pnpm ```bash pnpm add prisma@prev @types/node @types/better-sqlite3 -D ``` #### yarn ```bash yarn add prisma@prev @types/node @types/better-sqlite3 --dev ``` #### npm ```bash npm install prisma@prev @types/node @types/better-sqlite3 -D ``` #### bun ```bash bun add @prisma/client@7 @prisma/adapter-better-sqlite3 dotenv ``` #### pnpm ```bash pnpm add @prisma/client@7 @prisma/adapter-better-sqlite3 dotenv ``` #### yarn ```bash yarn add @prisma/client@7 @prisma/adapter-better-sqlite3 dotenv ``` #### npm ```bash npm install @prisma/client@7 @prisma/adapter-better-sqlite3 dotenv ``` > [!NOTE] > pnpm users with SQLite > > If using pnpm 10+ with `pnpx`, you'll need the [`--allow-build=better-sqlite3`](https://pnpm.io/cli/dlx#--allow-build) flag when running Prisma Studio due to SQLite's native dependency requirements. Here's what each package does: * **`prisma`** - The Prisma CLI for running commands like `prisma init`, `prisma migrate`, and `prisma generate` * **`@prisma/client`** - The Prisma Client library for querying your database * **`@prisma/adapter-better-sqlite3`** - The SQLite driver adapter that connects Prisma Client to your database * **`@types/better-sqlite3`** - TypeScript type definitions for better-sqlite3 * **`dotenv`** - Loads environment variables from your `.env` file ## 3. Configure ESM support [#3-configure-esm-support] Update `tsconfig.json` for ESM compatibility: ```json title="tsconfig.json" { "compilerOptions": { "module": "ESNext", "moduleResolution": "bundler", "target": "ES2023", "strict": true, "esModuleInterop": true, "ignoreDeprecations": "6.0" } } ``` Update `package.json` to enable ESM: ```json title="package.json" { "type": "module" // [!code ++] } ``` ## 4. Initialize Prisma ORM [#4-initialize-prisma-orm] You can now run Prisma CLI commands using your package manager: #### bun ```bash bunx prisma ``` #### pnpm ```bash pnpm prisma ``` #### yarn ```bash yarn prisma ``` #### npm ```bash npx prisma ``` Next, set up your Prisma ORM project by creating your [Prisma Schema](https://www.prisma.io/docs/orm/v7/prisma-schema/overview) file with the following command: #### bun ```bash bunx --bun prisma init --datasource-provider sqlite --output ../generated/prisma ``` #### pnpm ```bash pnpm prisma init --datasource-provider sqlite --output ../generated/prisma ``` #### yarn ```bash yarn prisma init --datasource-provider sqlite --output ../generated/prisma ``` #### npm ```bash npx prisma init --datasource-provider sqlite --output ../generated/prisma ``` This command does a few things: * Creates a `prisma/` directory with a `schema.prisma` file containing your database connection and schema models * Creates a `.env` file in the root directory for environment variables * Creates a `prisma7.config.ts` file for Prisma configuration The generated `prisma7.config.ts` file looks like this: ```typescript title="prisma7.config.ts" // This file was generated by Prisma, and assumes you have installed the following: // npm install --save-dev prisma dotenv import "dotenv/config"; import { defineConfig } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: process.env["DATABASE_URL"], }, }); ``` > [!NOTE] > Prisma ORM 7.10 and later name this file `prisma7.config.ts` so that it does not clash with the Prisma 8 config format, which only accepts `prisma.config.ts`. The Prisma 7 CLI discovers either name, so a project that already has a `prisma.config.ts` keeps working. The generated schema uses [the ESM-first `prisma-client` generator](https://www.prisma.io/docs/orm/v7/prisma-schema/overview/generators#prisma-client) with a custom output path: ```prisma title="prisma/schema.prisma" generator client { provider = "prisma-client" output = "../generated/prisma" } datasource db { provider = "sqlite" } ``` A `.env` file should be created with the following value: ```text title=".env" DATABASE_URL="file:./dev.db" ``` ## 5. Define your data model [#5-define-your-data-model] Open `prisma/schema.prisma` and add the following models: ```prisma title="prisma/schema.prisma" generator client { provider = "prisma-client" output = "../generated/prisma" } datasource db { provider = "sqlite" } model User { // [!code ++] id Int @id @default(autoincrement()) // [!code ++] email String @unique // [!code ++] name String? // [!code ++] posts Post[] // [!code ++] } // [!code ++] model Post { // [!code ++] id Int @id @default(autoincrement()) // [!code ++] title String // [!code ++] content String? // [!code ++] published Boolean @default(false) // [!code ++] author User @relation(fields: [authorId], references: [id]) // [!code ++] authorId Int // [!code ++] } // [!code ++] ``` ## 6. Create and apply your first migration [#6-create-and-apply-your-first-migration] Create your first migration to set up the database tables: #### bun ```bash bunx prisma migrate dev --name init ``` #### pnpm ```bash pnpm prisma migrate dev --name init ``` #### yarn ```bash yarn prisma migrate dev --name init ``` #### npm ```bash npx prisma migrate dev --name init ``` This command creates the database tables based on your schema. Now run the following command to generate the Prisma Client: #### bun ```bash bunx prisma generate ``` #### pnpm ```bash pnpm prisma generate ``` #### yarn ```bash yarn prisma generate ``` #### npm ```bash npx prisma generate ``` ## 7. Instantiate Prisma Client [#7-instantiate-prisma-client] Now that you have all the dependencies installed, you can instantiate Prisma Client. You need to pass an instance of the Prisma ORM driver adapter adapter to the `PrismaClient` constructor: ```typescript title="lib/prisma.ts" import "dotenv/config"; import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3"; import { PrismaClient } from "../generated/prisma/client"; const connectionString = `${process.env.DATABASE_URL}`; const adapter = new PrismaBetterSqlite3({ url: connectionString }); const prisma = new PrismaClient({ adapter }); export { prisma }; ``` ### Using SQLite with Bun [#using-sqlite-with-bun] When targeting Bun, use the `@prisma/adapter-libsql` adapter instead of `@prisma/adapter-better-sqlite3`. Bun doesn't support the native SQLite driver that `better-sqlite3` relies on (see the [`node:sqlite` reference](https://bun.com/reference/node/sqlite)). Instantiate Prisma Client like so: ```ts import "dotenv/config"; import { PrismaLibSql } from "@prisma/adapter-libsql"; import { PrismaClient } from "../generated/prisma/client"; const adapter = new PrismaLibSql({ url: process.env.DATABASE_URL ?? "", }); const prisma = new PrismaClient({ adapter }); export { prisma }; ``` ## 8. Write your first query [#8-write-your-first-query] Create a `script.ts` file to test your setup: ```typescript title="script.ts" import { prisma } from "./lib/prisma"; async function main() { // Create a new user with a post const user = await prisma.user.create({ data: { name: "Alice", email: "alice@prisma.io", posts: { create: { title: "Hello World", content: "This is my first post!", published: true, }, }, }, include: { posts: true, }, }); console.log("Created user:", user); // Fetch all users with their posts const allUsers = await prisma.user.findMany({ include: { posts: true, }, }); console.log("All users:", JSON.stringify(allUsers, null, 2)); } main() .then(async () => { await prisma.$disconnect(); }) .catch(async (e) => { console.error(e); await prisma.$disconnect(); process.exit(1); }); ``` Run the script: #### bun ```bash bunx tsx script.ts ``` #### pnpm ```bash pnpm dlx tsx script.ts ``` #### yarn ```bash yarn dlx tsx script.ts ``` #### npm ```bash npx tsx script.ts ``` You should see the created user and all users printed to the console. ## 9. Explore your data with Prisma Studio [#9-explore-your-data-with-prisma-studio] To view SQLite databases within Prisma Studio: * File paths must have a `file:` protocol right now in the database URL for SQLite * **Node.js 22.5+**: Works out of the box with the built-in `node:sqlite` module * May require `NODE_OPTIONS=--experimental-sqlite` environment variable * **Node.js 20**: Requires installing `better-sqlite3` as a dependency * If using pnpm 10+ with `pnpx`, you'll need the [`--allow-build=better-sqlite3`](https://pnpm.io/cli/dlx#--allow-build) flag * **Deno >= 2.2**: Supported via [built-in SQLite module](https://docs.deno.com/api/node/sqlite/) * **Bun**: Support for Prisma Studio with SQLite is coming soon and is not available yet If you don't have `node:sqlite` available in your runtime or prefer not to install `better-sqlite3` as a hard dependency, you can use `npx` to temporarily install the required packages: #### bun ```bash bunx -p better-sqlite3 -p prisma prisma studio --url file:./dev.db ``` #### pnpm ```bash pnpm dlx -p better-sqlite3 -p prisma prisma studio --url file:./dev.db ``` #### yarn ```bash yarn dlx -p better-sqlite3 -p prisma prisma studio --url file:./dev.db ``` #### npm ```bash npx -p better-sqlite3 -p prisma prisma studio --url file:./dev.db ``` This command: * Temporarily installs `better-sqlite3` without adding it to your project dependencies * Runs Prisma Studio with the specified SQLite database file * Avoids the 10MB overhead of `better-sqlite3` in your project ## Next steps [#next-steps] Prisma ORM is set up. These are the pages you are most likely to need next: * **Learn more about Prisma Client**: Explore the [Prisma Client API](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/introduction) for advanced querying, filtering, and relations * **Database migrations**: Learn about [Prisma Migrate](https://www.prisma.io/docs/orm/v7/prisma-migrate) for evolving your database schema * **Performance optimization**: Discover [query optimization techniques](https://www.prisma.io/docs/orm/v7/prisma-client/queries/advanced/query-optimization-performance) * **Build a full application**: Check out our [framework guides](https://www.prisma.io/docs/guides/v7) to integrate Prisma ORM with Next.js, Express, and more * **Join the community**: Connect with other developers on [Discord](https://pris.ly/discord) ## More info [#more-info] * [SQLite database connector](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/sqlite) * [Prisma Config reference](https://www.prisma.io/docs/orm/v7/reference/prisma-config-reference) * [Database connection management](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/databases-connections) ## Related pages - [`CockroachDB`](https://www.prisma.io/docs/v7/prisma-orm/quickstart/cockroachdb): Create a new TypeScript project from scratch by connecting Prisma ORM to CockroachDB and generating a Prisma Client for database access - [`MongoDB`](https://www.prisma.io/docs/v7/prisma-orm/quickstart/mongodb): Create a new TypeScript project from scratch by connecting Prisma ORM to MongoDB and generating a Prisma Client for database access - [`MySQL`](https://www.prisma.io/docs/v7/prisma-orm/quickstart/mysql): Create a new TypeScript project from scratch by connecting Prisma ORM to MySQL and generating a Prisma Client for database access - [`PlanetScale`](https://www.prisma.io/docs/v7/prisma-orm/quickstart/planetscale): Create a new TypeScript project from scratch by connecting Prisma ORM to PlanetScale and generating a Prisma Client for database access - [`PostgreSQL`](https://www.prisma.io/docs/v7/prisma-orm/quickstart/postgresql): Create a new TypeScript project from scratch by connecting Prisma ORM to PostgreSQL and generating a Prisma Client for database access