Elysia
Build an Elysia API on Prisma ORM with the elysia template and deploy it to Prisma Compute.
Introduction
In this guide, you scaffold an Elysia API backed by Prisma ORM, initialize and seed a PostgreSQL database, serve data over HTTP, and deploy the API to Prisma Compute as a Bun app. The elysia template generates the server, so most of the work is understanding the pieces.
Every command and response below was run end to end against a live Prisma Postgres database.
Prerequisites
- Bun 1.1 or later (Elysia is Bun-first)
- A PostgreSQL connection string, or nothing at all: the scaffold can create a Prisma Postgres database for you
1. Scaffold the project
bun create prisma@latest my-elysia-api --template elysia --provider postgres --no-deployAnswer the prompts for contract authoring style, package manager, and agent skills. The template generates an Elysia server in src/index.ts with GET / and GET /users routes, the Prisma ORM setup in src/prisma/, and package scripts for the database steps.
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:
export DATABASE_URL="<your connection string>"cd my-elysia-api2. Initialize the database
bun run db:init"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.
3. Run the server
bun run devThe server starts on port 3000 (set PORT to change it):
curl http://localhost:3000/users[
{ "id": "1", "email": "alice@prisma.io", "username": "alice", "name": "Alice", "createdAt": "2026-07-24T11:43:41.450Z" },
{ "id": "2", "email": "bob@prisma.io", "username": "bob", "name": "Bob", "createdAt": "2026-07-24T11:43:41.490Z" },
{ "id": "3", "email": "carol@prisma.io", "username": "carol", "name": "Carol", "createdAt": "2026-07-24T11:43:41.533Z" }
]The route handler is ordinary Elysia code calling an ordinary Prisma ORM query; there is no framework adapter in between. To add write routes, follow the same pattern as the Hono guide's POST route; the query code is identical.
4. Deploy to Prisma Compute
Elysia is supported on Prisma Compute. The scaffold declares the app for Prisma Composer in module.ts and service.ts, pointing at the bundled server the build script produces, so no framework flags are needed. Sign in once (it opens a browser):
bunx prisma@latest auth loginThen build and deploy from the project directory:
bun run build
bunx prisma@latest deploy module.tsmy-elysia-api
├─ database postgres-database db_abc123
└─ app compute-service cps_abc123
https://xyz.ewr.prisma.buildThe 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 <unique-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 endpoint returns the seeded users:
curl https://xyz.ewr.prisma.build/usersFor previews per Git branch and deploy on push, see Deploy on push.
Common gotchas
In a long-running server, don't call db.close() in route handlers; the client's connection pool is shared across requests. Close it only on process shutdown.
Use with your agent
To delegate this guide to your coding agent, copy the prompt below and hand it over:
The prompt above runs bunx prisma@latest init in its first step. If you followed the steps by hand, run it once yourself: it installs the Prisma ORM skills for your coding agent and keeps them matching your installed packages. Prompts you can give your agent after this guide:
- "Using the prisma-8 skill, add GET /users/ that returns one user or a 404."
- "Add a POST /users route that creates a user from the request body."
Next steps
- Learn the fundamentals: filtering, sorting, pagination, and writes.
- Read the Prisma ORM overview for the concepts behind contracts and typed queries.
- Use the Hono guide for the tested POST route pattern.
