apps/docs/content/docs.v6/orm/prisma-schema/overview/location.mdx
The default name for the Prisma Schema is a single file schema.prisma in your prisma folder. When your schema is named like this, the Prisma CLI will detect it automatically.
The Prisma CLI looks for the Prisma Schema in the following locations, in the following order:
The location specified by the --schema flag, which is available when you introspect, generate, migrate, and studio:
prisma generate --schema=./alternative/schema.prisma
The location specified in the package.json file (version 2.7.0 and later):
"prisma": {
"schema": "db/schema.prisma"
}
Default locations:
./prisma/schema.prisma./schema.prismaThe Prisma CLI outputs the path of the schema that will be used. The following example shows the terminal output for prisma db pull:
Environment variables loaded from .env
Prisma Schema loaded from prisma/schema.prisma // [!code highlight]
Introspecting based on datasource defined in prisma/schema.prisma …
✔ Introspected 4 models and wrote them into prisma/schema.prisma in 239ms
Run prisma generate to generate Prisma Client.
If you prefer splitting your Prisma schema into multiple files, you can have a setup that looks as follows:
prisma/
├── migrations
├── models
│ ├── posts.prisma
│ ├── users.prisma
│ └── ... other `.prisma` files
└── schema.prisma
:::note
Multi-file Prisma schemas are Generally Available since v6.7.0. Before that, they could be used via the prismaSchemaFolder Preview feature flag.
:::
When using a multi-file Prisma schema, you must always explicitly specify the location of the directory that contains your schema files (including the main schema.prisma file with your generator block).
You can do this in either of three ways:
pass the --schema option to your Prisma CLI command (e.g. prisma migrate dev --schema ./prisma)
set the prisma.schema field in package.json:
// package.json
{
"prisma": {
"schema": "./prisma",
},
}
set the schema property in prisma.config.ts ( for Prisma ORM v7):
import { defineConfig, env } from "prisma/config";
import "dotenv/config";
export default defineConfig({
schema: "prisma/schema.prisma",
migrations: {
path: "prisma/migrations",
seed: "tsx prisma/seed.ts",
},
datasource: {
url: env("DATABASE_URL"),
},
});
:::note
We recommend using the Prisma Config file to specify the location of your Prisma schema. This is the most flexible way to specify the location of your Prisma schema alongside other configuration options.
:::
:::warning
The schema.prisma file (which contains your generator block) must be located in the same directory that you specify in your schema configuration. For example, if you configure schema: 'prisma', your schema.prisma file must be at prisma/schema.prisma, not in a subdirectory like prisma/models/schema.prisma.
:::
You also must place the migrations directory at the same level as your schema.prisma file.
For example, assuming schema.prisma defines the generator block, here's the correct directory structure:
# All files must be inside the `prisma/` directory
# `migrations` and `schema.prisma` must be at the same level
prisma/
├── migrations
├── models
│ ├── posts.prisma
│ └── users.prisma
└── schema.prisma # Contains generator block
:::info
If your schema files are in a prisma/ directory (as shown above), the Prisma CLI commands like prisma generate and prisma migrate dev will work without additional configuration, as ./prisma/schema.prisma is a default location.
:::
We've found that a few patterns work well with this feature and will help you get the most out of it:
user.prisma while post-related models go in post.prisma.user.prisma and post.prisma and not myModels.prisma or CommentFeaturesSchema.prisma.generator block. We recommend having a single schema file that's obviously the "main" file so that this block is easy to find. main.prisma, schema.prisma, and base.prisma are a few we've seen that work well.