# db init (/docs/cli/db-init) > 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. Initialize a database from the current Prisma ORM contract. Location: CLI > db init `db init` bootstraps a database to match the current emitted contract and signs it. It creates everything the contract declares and the database does not have yet, using additive operations only. Structures already in place and compatible are left alone. A conflict that would need a destructive change stops the run. ## Usage [#usage] #### bun ```bash bunx prisma db init --db "$DATABASE_URL" ``` #### pnpm ```bash pnpm prisma db init --db "$DATABASE_URL" ``` #### yarn ```bash yarn prisma db init --db "$DATABASE_URL" ``` #### npm ```bash npx prisma db init --db "$DATABASE_URL" ``` ## Options [#options] | Option | What it does | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--db ` | Connects to the database. | | `--dry-run` | Shows planned operations without applying them. | | `--advance-ref ` | Advances the named [ref](https://www.prisma.io/docs/cli/migration-ref) to the post-command contract hash. Without it, `db init` advances `db` when `--db` is omitted, and advances nothing when `--db` is passed. | | `--config ` | Read this config file instead of `./prisma.config.ts`. | | `--json` | Prints a machine-readable result. | ## Behavior [#behavior] `db init` is intended for bootstrap work. It creates missing structures needed by the contract and writes the contract marker after the database matches. ### How the db ref moves [#how-the-db-ref-moves] Run without `--db`, `db init` takes the connection from `db.connection` in `prisma.config.ts` and advances the [ref](https://www.prisma.io/docs/cli/migration-ref) named `db` to the contract it just applied. Pass `--db` and that advancement is suppressed, even when the URL is the same one the config holds. Pass `--advance-ref db` alongside `--db` to get it back. The `db` ref is what [`migration plan`](https://www.prisma.io/docs/cli/migration-plan) uses as its starting point when you do not pass `--from`. Passing `--db` only suppresses the advancement; it never removes a `db` ref that already exists. So a loop that always passes `--db` without `--advance-ref db` leaves the ref wherever it was last set, and the next `migration plan` starts from that stale contract. If the ref was never created, `migration plan` plans from an empty database while `migrations/app/` is empty, and refuses with `MIGRATION.PLAN_ORIGIN_UNKNOWN` once migrations exist on disk. Run a dry run first when you are not working with a disposable local database: #### bun ```bash bunx prisma db init --db "$DATABASE_URL" --dry-run ``` #### pnpm ```bash pnpm prisma db init --db "$DATABASE_URL" --dry-run ``` #### yarn ```bash yarn prisma db init --db "$DATABASE_URL" --dry-run ``` #### npm ```bash npx prisma db init --db "$DATABASE_URL" --dry-run ``` ## Examples [#examples] #### bun ```bash bunx prisma contract emit bunx prisma db init --db "$DATABASE_URL" --advance-ref db bunx prisma db verify --db "$DATABASE_URL" ``` #### pnpm ```bash pnpm prisma contract emit pnpm prisma db init --db "$DATABASE_URL" --advance-ref db pnpm prisma db verify --db "$DATABASE_URL" ``` #### yarn ```bash yarn prisma contract emit yarn prisma db init --db "$DATABASE_URL" --advance-ref db yarn prisma db verify --db "$DATABASE_URL" ``` #### npm ```bash npx prisma contract emit npx prisma db init --db "$DATABASE_URL" --advance-ref db npx prisma db verify --db "$DATABASE_URL" ``` #### bun ```bash bunx prisma db init --db "$DATABASE_URL" --dry-run --json ``` #### pnpm ```bash pnpm prisma db init --db "$DATABASE_URL" --dry-run --json ``` #### yarn ```bash yarn prisma db init --db "$DATABASE_URL" --dry-run --json ``` #### npm ```bash npx prisma db init --db "$DATABASE_URL" --dry-run --json ``` ## Data lines [#data-lines] `db init` prints nothing on standard output. Its exit code is the result, and `--json` carries the plan and what ran. [Global flags](https://www.prisma.io/docs/cli/global-flags#data-lines-of-prisma-orm-commands) lists the data lines of the other commands. ## When to use db update instead [#when-to-use-db-update-instead] Use [`db update`](https://www.prisma.io/docs/cli/db-update) when the database already exists and you want Prisma ORM to reconcile it with a changed contract. Use [`migration plan`](https://www.prisma.io/docs/cli/migration-plan) when you want a reviewable migration package in version control. ## Related pages - [`auth`](https://www.prisma.io/docs/cli/auth): Sign in to your Prisma account from the CLI, sign out, and manage workspace sessions. - [`branch`](https://www.prisma.io/docs/cli/branch): List platform branches for a project. - [`bucket`](https://www.prisma.io/docs/cli/bucket): Create and manage object-store buckets. - [`Configuration`](https://www.prisma.io/docs/cli/configuration): Configure Prisma ORM CLI commands with prisma.config.ts and global flags. - [`contract emit`](https://www.prisma.io/docs/cli/contract-emit): Emit Prisma ORM contract artifacts.