Database
How the database and ORM are configured in next-forge.
next-forge aims to provide a robust, type-safe database client that makes it easy to work with your database while maintaining strong typing throughout your application. We aim to support tooling that:
- Provide a declarative way to define your database schema
- Generate type-safe database client
- Handle database migrations
- Offer powerful query capabilities with full TypeScript support
Default Configuration
By default, next-forge uses Neon as its database provider and Prisma as its ORM. However, you can easily switch to other providers if you'd prefer, for example:
- You can use other ORMs like Drizzle, Kysely or any other type-safe ORM.
- You can use other database providers like PlanetScale, Prisma Postgres, Supabase, EdgeDB, or any other PostgreSQL/MySQL provider.
Usage
Database and ORM configuration is located in @repo/database
. You can import this package into any server-side component, like so:
import { database } from '@repo/database';
const Page = async () => {
const users = await database.user.findMany();
// Do something with users!
}
Schema Definition
The database schema is defined in packages/database/prisma/schema.prisma
. This schema file uses Prisma's schema definition language to describe your database tables, relationships, and types.
Adding a new model
Let's say we want to add a new model called Post
, describing a blog post. The blog content will be in a JSON format, generated by a library like Tiptap. To do this, we would add the following to your schema:
model Post {
id String @id @default(cuid())
title String
content Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Deploying changes
To deploy your schema changes, run the following command:
pnpm migrate
This runs the following commands:
npx prisma format
to format the schema filenpx prisma generate
to generate the Prisma clientnpx prisma db push
to push the schema changes to the database
Visual database editor
next-forge includes a visual database editor that allows you to view and edit your database records.