JTBDOS 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, JTBDOS 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:

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:

packages/database/prisma/schema.prisma
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:

Terminal
pnpm migrate

This runs the following commands:

  • npx prisma format to format the schema file
  • npx prisma generate to generate the Prisma client
  • npx prisma db push to push the schema changes to the database

Visual database editor

JTBDOS includes a visual database editor that allows you to view and edit your database records.