prisma

    prisma/prisma

    Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB

    database
    backend
    cockroachdb
    javascript
    mariadb
    mongo
    mongodb
    mongodb-orm
    mssql
    mysql
    nodejs
    orm
    postgres
    postgresql
    prisma
    prisma-client
    query-builder
    sql-server
    sqlite
    sqlserver
    typescript
    TypeScript
    Apache-2.0
    45.3K stars
    2.1K forks
    45.3K watching
    Updated 3/15/2026
    View on GitHub
    Backblaze Advertisement

    Loading star history...

    Health Score

    75

    Weekly Growth

    +0

    +0.0% this week

    Contributors

    1

    Total contributors

    Open Issues

    2.5K

    Generated Insights

    About prisma

    Prisma

    Prisma

    Discord

    Quickstart   •   Website   •   Docs   •   Examples   •   Blog   •   Discord   •   Twitter   •   Youtube

    What is Prisma?

    Prisma ORM is a next-generation ORM that consists of these tools:

    • Prisma Client: Auto-generated and type-safe query builder for Node.js & TypeScript
    • Prisma Migrate: Declarative data modeling & migration system
    • Prisma Studio: GUI to view and edit data in your database

    Prisma Client can be used in any Node.js or TypeScript backend application (including serverless applications and microservices). This can be a REST API, a GraphQL API, a gRPC API, or anything else that needs a database.

    If you need a database to use with Prisma ORM, check out Prisma Postgres or if you are looking for our MCP Server, head here.

    Getting started

    Quickstart (5min)

    The fastest way to get started with Prisma is by following the quickstart guides. You can choose either of two databases:

    Bring your own database

    If you already have your own database, you can follow these guides:

    How Prisma ORM works

    This section provides a high-level overview of how Prisma ORM works and its most important technical components. For a more thorough introduction, visit the Prisma documentation.

    The Prisma schema

    Every project that uses a tool from the Prisma toolkit starts with a Prisma schema file. The Prisma schema allows developers to define their application models in an intuitive data modeling language. It also contains the connection to a database and defines a generator:

    // Data source
    datasource db {
      provider = "postgresql"
      url      = env("DATABASE_URL")
    }
    
    // Generator
    generator client {
      provider = "prisma-client-js"
    }
    
    // Data model
    model Post {
      id        Int     @id @default(autoincrement())
      title     String
      content   String?
      published Boolean @default(false)
      author    User?   @relation(fields:  [authorId], references: [id])
      authorId  Int?
    }
    
    model User {
      id    Int     @id @default(autoincrement())
      email String  @unique
      name  String?
      posts Post[]
    }
    

    In this schema, you configure three things:

    • Data source: Specifies your database connection (via an environment variable)
    • Generator: Indicates that you want to generate Prisma Client
    • Data model: Defines your application models

    The Prisma data model

    On this page, the focus is on the data model. You can learn more about Data sources and Generators on the respective docs pages.

    Functions of Prisma models

    The data model is a collection of models. A model has two major functions:

    • Represent a table in the underlying database
    • Provide the foundation for the queries in the Prisma Client API

    Getting a data model

    There are two major workflows for "getting" a data model into your Prisma schema:

    • Generate the data model from introspecting a database
    • Manually writing the data model and mapping it to the database with Prisma Migrate

    Once the data model is defined, you can generate Prisma Client which will expose CRUD and more queries for the defined models. If you're using TypeScript, you'll get full type-safety for all queries (even when only retrieving the subsets of a model's fields).


    Accessing your database with Prisma Client

    Generating Prisma Client

    The first step when using Prisma Client is installing its npm package:

    npm install @prisma/client
    

    Note that the installation of this package invokes the prisma generate command which reads your Prisma schema and generates the Prisma Client code. The code will be located in node_modules/.prisma/client, which is exported by node_modules/@prisma/client/index.d.ts.

    After you change your data model, you'll need to manually re-generate Prisma Client to ensure the code inside node_modules/.prisma/client gets updated:

    npx prisma generate
    

    Refer to the documentation for more information about "generating the Prisma client".

    Using Prisma Client to send queries to your database

    Once the Prisma Client is generated, you can import it in your code and send queries to your database. This is what the setup code looks like.

    Import and instantiate Prisma Client

    You can import and instantiate Prisma Client as follows:

    import { PrismaClient } from '@prisma/client'
    
    const prisma = new PrismaClient()
    

    or

    const { PrismaClient } = require('@prisma/client')
    
    const prisma = new PrismaClient()
    

    Now you can start sending queries via the generated Prisma Client API, here are a few sample queries. Note that all Prisma Client queries return plain old JavaScript objects.

    Learn more about the available operations in the Prisma Client docs or watch this demo video (2 min).

    Retrieve all User records from the database
    const allUsers = await prisma.user.findMany()
    
    Include the posts relation on each returned User object
    const allUsers = await prisma.user.findMany({
      include: { posts: true },
    })
    
    Filter all Post records that contain "prisma"
    const filteredPosts = await prisma.post.findMany({
      where: {
        OR: [{ title: { contains: 'prisma' } }, { content: { contains: 'prisma' } }],
      },
    })
    
    Create a new User and a new Post record in the same query
    const user = await prisma.user.create({
      data: {
        name: 'Alice',
        email: '[email protected]',
        posts: {
          create: { title: 'Join us for Prisma Day 2021' },
        },
      },
    })
    
    Update an existing Post record
    const post = await prisma.post.update({
      where: { id: 42 },
      data: { published: true },
    })
    

    Usage with TypeScript

    Note that when using TypeScript, the result of this query will be statically typed so that you can't accidentally access a property that doesn't exist (and any typos are caught at compile-time). Learn more about leveraging Prisma Client's generated types on the Advanced usage of generated types page in the docs.

    Community

    Prisma has a large and supportive community of enthusiastic application developers. You can join us on Discord and here on GitHub.

    Badges

    Made with Prisma Made with Prisma

    Built something awesome with Prisma? 🌟 Show it off with these badges, perfect for your readme or website.

    [![Made with Prisma](http://made-with.prisma.io/dark.svg)](https://prisma.io)
    
    [![Made with Prisma](http://made-with.prisma.io/indigo.svg)](https://prisma.io)
    

    Security

    If you have a security issue to report, please contact us at [email protected].

    Support

    Ask a question about Prisma

    You can ask questions and initiate discussions about Prisma-related topics in the prisma repository on GitHub.

    👉 Ask a question

    Create a bug report for Prisma

    If you see an error message or run into an issue, please make sure to create a bug report! You can find best practices for creating bug reports (like including additional debugging output) in the docs.

    👉 Create bug report

    Submit a feature request

    If Prisma currently doesn't have a certain feature, be sure to check out the roadmap to see if this is already planned for the future.

    If the feature on the roadmap is linked to a GitHub issue, please make sure to leave a 👍 reaction on the issue and ideally a comment with your thoughts about the feature!

    👉 Submit feature request

    Contributing

    Refer to our contribution guidelines and Code of Conduct for contributors.

    Tests Status

    • Prisma Tests Status: Prisma Tests Status
    • Ecosystem Tests Status: Ecosystem Tests Status

    Discover Repositories

    Search across tracked repositories by name or description