# SQLite (/docs/prisma-orm/quickstart/sqlite)

Location: Prisma ORM > Quickstart > SQLite

[SQLite](https://sqlite.org) is a lightweight, file-based database that's perfect for 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 easy, 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:

  

#### npm

```bash
npm init
npm install typescript tsx @types/node --save-dev
npx tsc --init
```

#### pnpm

```bash
pnpm init
pnpm add typescript tsx @types/node --save-dev
pnpm dlx tsc --init
```

#### yarn

```bash
yarn init
yarn add typescript tsx @types/node --dev
yarn dlx tsc --init
```

#### bun

```bash
bun init
bun add typescript tsx @types/node --dev
bun x tsc --init
```

2. Install required dependencies [#2-install-required-dependencies]

Install the packages needed for this quickstart:

  

#### npm

```bash
npm install prisma @types/node @types/better-sqlite3 -D
```

#### pnpm

```bash
pnpm add prisma @types/node @types/better-sqlite3 -D
```

#### yarn

```bash
yarn add prisma @types/node @types/better-sqlite3 --dev
```

#### bun

```bash
bun add prisma @types/node @types/better-sqlite3 --dev
```

  

#### npm

```bash
npm install @prisma/client @prisma/adapter-better-sqlite3 dotenv
```

#### pnpm

```bash
pnpm add @prisma/client @prisma/adapter-better-sqlite3 dotenv
```

#### yarn

```bash
yarn add @prisma/client @prisma/adapter-better-sqlite3 dotenv
```

#### bun

```bash
bun add @prisma/client @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 invoke the Prisma CLI by prefixing it with `npx`:

  

#### npm

```bash
npx prisma
```

#### pnpm

```bash
pnpm dlx prisma
```

#### yarn

```bash
yarn dlx prisma
```

#### bun

```bash
bunx --bun prisma
```

Next, set up your Prisma ORM project by creating your [Prisma Schema](/orm/prisma-schema/overview) file with the following command:

  

#### npm

```bash
npx prisma init --datasource-provider sqlite --output ../generated/prisma
```

#### pnpm

```bash
pnpm dlx prisma init --datasource-provider sqlite --output ../generated/prisma
```

#### yarn

```bash
yarn dlx prisma init --datasource-provider sqlite --output ../generated/prisma
```

#### bun

```bash
bunx --bun 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 `prisma.config.ts` file for Prisma configuration

The generated `prisma.config.ts` file looks like this:

```typescript title="prisma.config.ts"
import "dotenv/config";
import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  datasource: {
    url: env("DATABASE_URL"),
  },
});
```

The generated schema uses [the ESM-first `prisma-client` generator](/orm/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:

  

#### npm

```bash
npx prisma migrate dev --name init
```

#### pnpm

```bash
pnpm dlx prisma migrate dev --name init
```

#### yarn

```bash
yarn dlx prisma migrate dev --name init
```

#### bun

```bash
bunx --bun 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:

  

#### npm

```bash
npx prisma generate
```

#### pnpm

```bash
pnpm dlx prisma generate
```

#### yarn

```bash
yarn dlx prisma generate
```

#### bun

```bash
bunx --bun 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:

  

#### npm

```bash
npx tsx script.ts
```

#### pnpm

```bash
pnpm dlx tsx script.ts
```

#### yarn

```bash
yarn dlx tsx script.ts
```

#### bun

```bash
bunx --bun 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:

  

#### npm

```bash
npx -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
```

#### bun

```bash
bunx --bun -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]

You've successfully set up Prisma ORM. Here's what you can explore next:

* **Learn more about Prisma Client**: Explore the [Prisma Client API](/orm/prisma-client/setup-and-configuration/introduction) for advanced querying, filtering, and relations
* **Database migrations**: Learn about [Prisma Migrate](/orm/prisma-migrate) for evolving your database schema
* **Performance optimization**: Discover [query optimization techniques](/orm/prisma-client/queries/advanced/query-optimization-performance)
* **Build a full application**: Check out our [framework guides](/guides) 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](/orm/core-concepts/supported-databases/sqlite)
* [Prisma Config reference](/orm/reference/prisma-config-reference)
* [Database connection management](/orm/prisma-client/setup-and-configuration/databases-connections)

## Related pages

- [`CockroachDB`](https://www.prisma.io/docs/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/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/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/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/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