Database
Type-safe database access with Drizzle ORM
Database
Eden Stack uses Drizzle ORM with Neon PostgreSQL for type-safe database operations.
Setup
The database client is configured in @eden/db:
import { db } from "@eden/db";Required environment variable:
DATABASE_URL=postgresql://user:pass@host:5432/dbnameSchema Definition
Define your tables in packages/db/src/schema.ts:
import { pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: uuid("id").primaryKey().defaultRandom(),
email: text("email").notNull().unique(),
name: text("name"),
createdAt: timestamp("created_at").defaultNow().notNull(),
});
export const posts = pgTable("posts", {
id: uuid("id").primaryKey().defaultRandom(),
title: text("title").notNull(),
content: text("content"),
authorId: uuid("author_id").references(() => users.id),
createdAt: timestamp("created_at").defaultNow().notNull(),
});Basic Queries
Select
import { db, users } from "@eden/db";
import { eq } from "drizzle-orm";
// Get all users
const allUsers = await db.select().from(users);
// Get one user by ID
const user = await db.query.users.findFirst({
where: eq(users.id, "user-id"),
});
// With conditions
const activeUsers = await db
.select()
.from(users)
.where(eq(users.status, "active"));Insert
const [newUser] = await db
.insert(users)
.values({
email: "john@example.com",
name: "John Doe",
})
.returning();Update
await db
.update(users)
.set({ name: "Jane Doe" })
.where(eq(users.id, "user-id"));Delete
await db.delete(users).where(eq(users.id, "user-id"));Relations
Define relations for type-safe joins:
import { relations } from "drizzle-orm";
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
export const postsRelations = relations(posts, ({ one }) => ({
author: one(users, {
fields: [posts.authorId],
references: [users.id],
}),
}));Query with relations:
const usersWithPosts = await db.query.users.findMany({
with: {
posts: true,
},
});Migrations
Development
Push schema changes directly (fast iteration):
bun run db:pushProduction
Generate and run migrations:
# Generate migration from schema changes
bun run db:generate
# Run pending migrations
bun run db:migrateDrizzle Studio
Visual database browser:
bun run db:studioNext Steps
- Authentication - User sessions use this database
- API Integration - Query the database from API routes
- Packages - Overview of all packages
Full documentation for Eden Stack users
This documentation is exclusively available to Eden Stack customers. Already purchased? Log in to access the full content.