Drizzle

Use Drizzle with `@vitehub/db` on top of ViteHub database connections.

@vitehub/db is the ViteHub Drizzle layer. Configure it with top-level db, and ViteHub reuses the same owned connections for Drizzle and raw SQL.

Use it when you want:

  • an ORM-native db client
  • generated schema from @vitehub/db
  • schema discovery from src/db/** ::
  • schema discovery from server/db/** ::
  • managed migrations and SQL query files
  • the vitehub-db CLI

Basic setup

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@vitehub/db/nuxt'],
  db: {
    connector: 'libsql',
    options: {
      url: 'file:.data/db/app.sqlite',
    },
    drizzle: {
      schemaPaths: ['server/db/schema.ts'],
    },
  },
})

Schema discovery

By default, the adapter scans these locations:

  • server/db/schema.ts
  • server/db/schema.<dialect>.ts
  • server/db/schema/*.ts
  • any extra paths in db.drizzle.schemaPaths

Runtime imports

server/api/posts.get.ts
import { db, schema } from '@vitehub/db'

export default defineEventHandler(async () => {
  return await db.select().from(schema.posts)
})

Drizzle options

Drizzle-specific options live under db.drizzle in single-database mode, or db.default.drizzle in named-map mode:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@vitehub/db/nuxt'],
  db: {
    connector: 'libsql',
    options: {
      url: 'file:.data/db/app.sqlite',
    },
    drizzle: {
      schemaPaths: ['server/db/schema.ts'],
      migrationsDirs: ['server/db/migrations'],
      queriesPaths: ['server/db/queries/seed.sqlite.sql'],
      applyMigrationsDuringBuild: true,
      applyMigrationsDuringDev: true,
    },
  },
})

Multiple databases

When you need more than one connection, switch db to a named map. @vitehub/db still binds Drizzle to default only:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@vitehub/db/nuxt'],
  db: {
    default: {
      connector: 'libsql',
      options: {
        url: 'file:.data/db/app.sqlite',
      },
      drizzle: {
        schemaPaths: ['server/db/schema.ts'],
      },
    },
    analytics: {
      connector: 'postgresql',
      options: {
        url: process.env.ANALYTICS_DATABASE_URL,
      },
    },
  },
})

CLI

Terminal
vitehub-db generate
vitehub-db migrate
vitehub-db sql "SELECT 1"
  • generate prepares the Drizzle schema entry file and runs drizzle-kit generate
  • migrate applies migrations and SQL query files
  • sql runs a statement through the configured database connector

Cloudflare

For D1-backed apps, use the D1 connector and keep the Wrangler database_id in db.drizzle.cloudflare.databaseId:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@vitehub/db/nuxt'],
  db: {
    connector: 'cloudflare-d1',
    options: {
      bindingName: 'DB',
    },
    drizzle: {
      cloudflare: {
        databaseId: process.env.NUXT_HUB_CLOUDFLARE_DATABASE_ID,
      },
    },
  },
})

ViteHub does not support Prisma. @vitehub/db is Drizzle-only in this version.