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
dbclient - generated
schemafrom@vitehub/db - schema discovery from
src/db/**:: - schema discovery from
server/db/**:: - managed migrations and SQL query files
- the
vitehub-dbCLI
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.tsserver/db/schema.<dialect>.tsserver/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"
generateprepares the Drizzle schema entry file and runsdrizzle-kit generatemigrateapplies migrations and SQL query filessqlruns 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.