PostgreSQL
The starter kit uses PostgreSQL with Drizzle ORM for type-safe database operations.
The starter kit uses PostgreSQL as the database, managed through Drizzle ORM for excellent developer experience and type safety.
Database Provider
You can use PostgreSQL from various providers:
- Neon - Serverless PostgreSQL with generous free tier
- Supabase - Open source Firebase alternative with PostgreSQL
- Railway - Simple PostgreSQL hosting
- Render - Managed PostgreSQL databases
- Local PostgreSQL - For development
Drizzle ORM
The starter kit uses Drizzle ORM instead of raw SQL for several benefits:
- Type safety - Full TypeScript support with auto-completion
- Migrations - Automated schema migrations
- Relations - Easy relationship management
- Developer experience - Intuitive query builder
Database Schema
All database schemas are located in packages/layer-auth/server/db/schema/:
auth.ts- User, session, account tables (better-auth)testimonial.ts- Testimonials featurewaitlist.ts- Waitlist managementfile.ts- File storage metadatabanner.ts- App banner configuration
Database Utilities
Import from layer-auth server utils:
import { and, desc, eq, useDb } from 'layer-auth/server/utils/db'
const db = useDb()
const users = await db.select()
.from(schema.user)
.where(eq(schema.user.email, email))
Commands
Run these commands from the monorepo root:
# Generate migrations from schema changes
pnpm db:generate
# Apply migrations to database
pnpm db:migrate
# Open Drizzle Studio (database GUI)
pnpm db:studio
Environment Variables
Set your PostgreSQL connection string in .env:
NUXT_PRIVATE_DATABASE_URL="postgresql://user:password@host:5432/dbname"
For local development, you might use:
NUXT_PRIVATE_DATABASE_URL="postgresql://postgres:postgres@localhost:5432/nuxtstarterkit"
Migration Workflow
- Make changes to schema files in
packages/layer-auth/server/db/schema/ - Run
pnpm db:generateto create migration files - Review generated migrations in
packages/layer-auth/server/db/migrations/ - Run
pnpm db:migrateto apply migrations - Commit both schema and migration files
Drizzle Studio
Drizzle Studio provides a visual interface to browse and edit your database:
pnpm db:studio
This opens a web interface where you can:
- Browse tables and data
- Run queries
- Edit records
- View relationships
Type Safety
Drizzle generates TypeScript types from your schema. Import and use them:
import { session, user } from 'layer-auth/server/db/schema'
import type { Session, User } from 'layer-auth/shared/types/db'
// Use typed queries
const users: Array<User> = await db.select().from(user)
Best Practices
- Always use migrations - never modify the database schema directly
- Keep schema files organized by feature
- Use meaningful column and table names
- Add indexes for frequently queried columns
- Use transactions for multiple related operations