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
  • db
  • schema
  • 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

Raw SQL
Use `getDatabase()` from `@vitehub/db`.
Drizzle
Use `@vitehub/db` for schema discovery, migrations, and typed Drizzle queries.

Runtime imports

ImportPurpose
@vitehub/dbRaw 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.