# Astro (/docs/guides/frameworks/astro) > 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. Set up Prisma ORM in an Astro app with create-prisma, from scaffold to rendered data, and deploy it to Prisma Compute. Location: Guides > Frameworks > Astro ## Introduction [#introduction] This guide shows you how to use Prisma ORM in an Astro site. You scaffold a project that queries users during server rendering and exposes a JSON API route, initialize the schema, see your data render, and deploy the site to [Prisma Compute](https://www.prisma.io/docs/compute). Every command below was run end to end against a live [Prisma Postgres](https://www.prisma.io/docs/postgres) database. ## Quick start [#quick-start] One command scaffolds the project with Prisma ORM wired in: #### bun ```bash bun create prisma@latest my-astro-app --template astro --provider postgres --no-deploy ``` #### pnpm ```bash pnpm create prisma@latest my-astro-app --template astro --provider postgres --no-deploy ``` #### yarn ```bash yarn create prisma@latest my-astro-app --template astro --provider postgres --no-deploy ``` #### npm ```bash npm create prisma@latest -- my-astro-app --template astro --provider postgres --no-deploy ``` Answer the prompts, then export `DATABASE_URL` in your shell before running the database scripts. If you do not have a database yet, `npx create-db@latest` prints a Prisma Postgres connection string. ## Prerequisites [#prerequisites] * [Node.js](https://nodejs.org) 22.18 or newer (on the 24 line, 24.11 or newer; 24 recommended) * A PostgreSQL connection string, or nothing at all: `npx create-db@latest` can create a Prisma Postgres database for you ## 1. Scaffold and enter the project [#1-scaffold-and-enter-the-project] #### bun ```bash bun create prisma@latest my-astro-app --template astro --provider postgres --no-deploy cd my-astro-app ``` #### pnpm ```bash pnpm create prisma@latest my-astro-app --template astro --provider postgres --no-deploy cd my-astro-app ``` #### yarn ```bash yarn create prisma@latest my-astro-app --template astro --provider postgres --no-deploy cd my-astro-app ``` #### npm ```bash npm create prisma@latest -- my-astro-app --template astro --provider postgres --no-deploy cd my-astro-app ``` The scaffold generates the Astro app with Prisma ORM wired in, installs dependencies, and emits the contract your queries are type-checked against. Next, set the database connection for the local steps. Use your own PostgreSQL connection string, or create a Prisma Postgres database with `npx create-db@latest`; it prints a connection string and a claim URL you can open to keep the database. Export the variable in the shell you work in; the generated scripts read the environment variable, not `.env`: ```bash export DATABASE_URL="" ``` ## 2. Initialize the database [#2-initialize-the-database] #### bun ```bash bun run db:init ``` #### pnpm ```bash pnpm run db:init ``` #### yarn ```bash yarn db:init ``` #### npm ```bash npm run db:init ``` ```text no-copy "summary": "Applied 5 operation(s) across 1 space(s), database signed" ``` If `db:init` stops with `Connection terminated unexpectedly`, a database you just created is still starting; wait a few seconds and run it again. The command is safe to repeat and reports `Applied 0 operation(s)` when there is nothing left to do. `db:init` applies your schema (`src/prisma/contract.prisma`) to the database and signs it. With TypeScript authoring (`--authoring typescript`) the schema is `src/prisma/contract.ts` and the emitted files land in `src/prisma/generated/`. Sample users are seeded automatically the first time the app queries the database. ## 3. Run and verify [#3-run-and-verify] #### bun ```bash bun run dev ``` #### pnpm ```bash pnpm run dev ``` #### yarn ```bash yarn dev ``` #### npm ```bash npm run dev ``` Open [http://localhost:4321](http://localhost:4321). The page lists the seeded users; `GET /api/users` returns them as JSON. ## Where things live [#where-things-live] * `src/pages/index.astro`: queries users in the frontmatter and renders them * `src/pages/api/users.ts`: a JSON API route backed by the same query * `src/prisma/db.ts`: the Prisma ORM client both import Model access is namespace-qualified on PostgreSQL: `db.orm.public.User`. The [Prisma ORM overview](https://www.prisma.io/docs/orm) covers the contract-first model behind it. ## 4. Deploy to Prisma Compute [#4-deploy-to-prisma-compute] Astro is supported on [Prisma Compute](https://www.prisma.io/docs/compute), which runs the site as a Node server. The scaffold configures that already: `astro.config.mjs` sets `output: "server"` with `adapter: node({ mode: "standalone" })`, and `module.ts` with `service.ts` declare the app for [Prisma Composer](https://www.prisma.io/docs/composer), pointing at the built `dist/server/entry.mjs`. Keep those settings: `output: "server"` renders the page and the API route per request, so the live site reads current data instead of freezing the build-time snapshot into static files, and without the standalone adapter there is no server entrypoint to deploy. Sign in once (it opens a browser): #### bun ```bash bunx prisma auth login ``` #### pnpm ```bash pnpm prisma auth login ``` #### yarn ```bash yarn prisma auth login ``` #### npm ```bash npx prisma auth login ``` Then build and deploy from the project directory: #### bun ```bash bun run build bunx prisma deploy module.ts ``` #### pnpm ```bash pnpm run build pnpm prisma deploy module.ts ``` #### yarn ```bash yarn build yarn prisma deploy module.ts ``` #### npm ```bash npm run build npx prisma deploy module.ts ``` ```text no-copy my-astro-app ├─ database postgres-database db_abc123 └─ app compute-service cps_abc123 https://xyz.ewr.prisma.build ``` The deploy creates a project named after your module in your workspace, and re-running the deploy reuses it: the CLI finds the hosted state it stored on the first run and converges the project to your module. If a project with that name exists but the CLI cannot identify or verify its stored state (one left behind by a different checkout, for example), the deploy stops with `HostedStateBootstrapError`; deploy under another name with `--name `, or rename the module in `module.ts`. The deploy also provisions its own Prisma Postgres database on the platform, declared in `module.ts`; the `DATABASE_URL` from your local steps is not involved, and the deployed database seeds on the app's first query. Verify the live API route returns the seeded users: ```bash curl https://xyz.ewr.prisma.build/api/users ``` The live URL's root page renders the same users server-side. For previews per Git branch and deploy on push, see [Deploy on push](https://www.prisma.io/docs/compute/deploy-on-push). ## Use with your agent [#use-with-your-agent] To delegate this guide to your coding agent, copy the prompt below and hand it over: ```text Create a new Astro app with Prisma ORM, seed it, and deploy it to Prisma Compute. 1. Scaffold: `npm create prisma@latest -- my-astro-app --template astro --provider postgres --yes`. Then run `npx prisma@latest init` in `my-astro-app` so the Prisma agent skills are installed and stay current, and use them. Get a database connection string: use the one I give you, or create a Prisma Postgres database with `npx create-db@latest` and show me the claim URL it prints. Export it as `DATABASE_URL` in the shell; the generated scripts read the environment variable, not `.env`. 2. In `my-astro-app`, run `npm run db:init` with `DATABASE_URL` exported. Sample users are seeded automatically on the app's first query; there is no separate seed script. 3. Start `npm run dev` in the background, wait until it reports ready, verify http://localhost:4321 lists the seeded users and `curl http://localhost:4321/api/users` returns them as JSON, then stop the dev server. 4. Confirm `astro.config.mjs` still sets `output: "server"` and `adapter: node({ mode: "standalone" })` (the template sets both). 5. Deploy: check `npx prisma auth whoami`; if I am not signed in, stop and ask me to run `npx prisma auth login`. Then run `npm run build` followed by `npx prisma deploy module.ts` and verify the live URL's /api/users endpoint with curl. The deployed app provisions and seeds its own Prisma Postgres database; do not pass the local DATABASE_URL. If the deploy fails with `HostedStateBootstrapError`, a project with the module's name exists in my workspace but its hosted state cannot be verified; re-run the deploy with `--name `. Use the installed Prisma ORM skills. ``` ## Next steps [#next-steps] * Change the schema in `src/prisma/contract.prisma`, then run `npm run contract:emit` and `npm run db:update`. * [Learn the fundamentals](https://www.prisma.io/docs/orm/fundamentals/reading-data): filtering, sorting, pagination, and writes. * [Read the Prisma ORM overview](https://www.prisma.io/docs/orm) for the concepts behind contracts and typed queries. ## Related pages - [`Elysia`](https://www.prisma.io/docs/guides/frameworks/elysia): Build an Elysia API on Prisma ORM with the elysia template and deploy it to Prisma Compute. - [`Hono`](https://www.prisma.io/docs/guides/frameworks/hono): Build a Hono API on Prisma ORM with the hono template, add your own routes, and deploy it to Prisma Compute. - [`NestJS`](https://www.prisma.io/docs/guides/frameworks/nestjs): Set up Prisma ORM in a NestJS app with create-prisma, from scaffold to seeded API to a live deploy on Prisma Compute. - [`Next.js`](https://www.prisma.io/docs/guides/frameworks/nextjs): Set up Prisma ORM in a Next.js app with create-prisma, from scaffold to rendered data, and deploy it to Prisma Compute. - [`Nuxt`](https://www.prisma.io/docs/guides/frameworks/nuxt): Set up Prisma ORM in a Nuxt app with create-prisma, from scaffold to rendered data, and deploy it to Prisma Compute.