Drizzle

Integrate DB0 with Drizzle ORM
Read more in orm.drizzle.team.

Example

Define your database schema using Drizzle's schema system:

schema.ts
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";

export const users = sqliteTable('users', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  fullName: text('full_name').notNull(),
  email: text('email').notNull().unique(),
  createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
});

export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;

Initialize your database with Drizzle integration:

database.ts
import { createDatabase } from "db0";
import sqlite from "db0/connectors/better-sqlite3";
import { drizzle } from "db0/integrations/drizzle";
import * as schema from "./schema";

// Initialize DB instance with SQLite connector
const db0 = createDatabase(sqlite({ name: 'database.sqlite' }));

// Create Drizzle instance with schema
export const db = drizzle(db0, { schema });

Use Drizzle's migration system to create tables:

# Generate migration from schema
npx drizzle-kit generate

# Apply migrations
npx drizzle-kit migrate

# Or push schema directly (development)
npx drizzle-kit push

Then use fully typed queries:

queries.ts
import { db, users, type NewUser } from "./database";

// Insert a new user with type safety
const newUser: NewUser = {
  fullName: 'John Doe',
  email: '[email protected]',
  createdAt: new Date()
};

const insertedUser = await db.insert(users).values(newUser).returning().get()

// Query users with full type safety
const allUsers = await db.select().from(users);

// Query with conditions
const johnDoe = await db.select()
  .from(users)
  .where(eq(users.email, '[email protected]'));

Configuration

Create a drizzle.config.ts file for migration management:

drizzle.config.ts
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './schema.ts',
  out: './migrations',
  dialect: 'sqlite',
  dbCredentials: {
    url: './database.sqlite'
  }
});