Database
Use top-level `db` config for Drizzle and ViteHub-owned raw SQL access.
ViteHub Database uses @vitehub/db as the public entrypoint for raw SQL, schema discovery, generated schema exports, migrations, and the vitehub-db CLI.
Mental model
Use @vitehub/db when you want the ViteHub database surface:
- top-level
db dbschema- schema discovery from
src/db/**:: - schema discovery from
server/db/**:: - managed migrations and query files
Use @vitehub/db for raw SQL:
getDatabase()- named connections from top-level
db - dev overrides from
devDatabase
Getting started
Install the package
Terminal
pnpm add https://pkg.pr.new/nuxt-hub/agent/@vitehub/db@main
pnpm add drizzle-orm drizzle-kit @libsql/client
Choose an integration surface
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@vitehub/db/nuxt'],
db: {
connector: 'libsql',
options: {
url: 'file:.data/db/app.sqlite',
},
},
})
Configure top-level db
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@vitehub/db/nuxt'],
db: {
connector: 'libsql',
options: {
url: 'file:.data/db/app.sqlite',
},
},
})
Add Drizzle-specific options
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'],
queriesPaths: ['server/db/queries/seed.sqlite.sql'],
},
},
})
Choose a path
Runtime imports
| Import | Purpose |
|---|---|
@vitehub/db | Raw SQL via getDatabase(), plus db and schema |
Raw SQL example
server/api/posts.get.ts
import { getDatabase } from '@vitehub/db'
export default defineEventHandler(async () => {
const database = await getDatabase()
await database.exec(`
CREATE TABLE IF NOT EXISTS posts (
id integer primary key autoincrement,
title text not null
)
`)
await database.sql`INSERT INTO posts (title) VALUES (${'hello db'})`
const { rows } = await database.sql`SELECT * FROM posts ORDER BY id DESC`
return rows
})
Drizzle example
server/api/posts.get.ts
import { db, schema } from '@vitehub/db'
export default defineEventHandler(async () => {
return await db.select().from(schema.posts)
})
Use
@vitehub/db for both Drizzle and raw SQL. Reach for getDatabase() when you want direct SQL access.