opción

Úsese al desarrollar aplicaciones NuxtHub v0.10.6: ofrece APIs para bases de datos (Drizzle ORM con sqlite/postgresql/mysql), almacenamiento KV, almacenamiento de blobs y caché. Incluye información sobre configuración, definición de esquemas, migraciones, despliegue en múltiples nubes (Cloudflare, Vercel), así como las nuevas importaciones de módulos virtuales hub:db, hub:kv y hub:blob.

...Expandir todo
36
Tiempo actualizado 23 de agosto de 2026

Acerca de nuxthub

NuxtHub es una habilidad de referencia de Claude Code para desarrollar aplicaciones full-stack con Nuxt en la versión v0.10.6 de NuxtHub, abarcando sus APIs para bases de datos, almacenamiento KV, almacenamiento de blobs y caché. Esta herramienta soluciona el problema de escribir código correcto y actualizado para NuxtHub al proporcionar a Claude una referencia precisa y actualizada sobre configuraciones, definiciones de esquemas, migraciones, despliegues multi-nube, así como sobre las importaciones de módulos virtuales hub:db, hub:kv y hub:blob, en lugar de depender de conocimientos generales que podrían estar desactualizados.

La documentación explica cómo utilizar SQL seguro mediante Drizzle ORM con los dialectos SQLite, PostgreSQL y MySQL, incluyendo ejemplos de esquemas, patrones CRUD y una CLI completa para migraciones (generar, migrar, ejecutar SQL directo, eliminar tabla, eliminar todo, comprimir datos y marcar como migrado), la cual se aplica automáticamente durante las fases de desarrollo y compilación. También aborda el almacenamiento KV con restricciones de tiempo de vida y tamaño, el almacenamiento de blobs con funciones de carga/descarga/listado/servicio y validación, además de las APIs de caché. Asimismo, relaciona cada dialecto y proveedor con sus backends locales y de producción, así como con las variables de entorno necesarias (D1, Turso, Neon, postgres-js, mysql2, Upstash, Redis, Cloudflare KV, Vercel, Deno), e incluye opciones de configuración como el modo remoto para utilizar conexiones de producción durante el desarrollo y soporte para réplicas de lectura en la versión v0.10.6. Existen dos archivos de referencia que contienen plantillas wrangler.jsonc para Cloudflare y configuraciones de proveedores para Vercel, Netlify, Deno y AWS; además, la habilidad indica cargar únicamente la referencia relevante para la tarea en curso.

Está dirigida a desarrolladores de Nuxt y full-stack que despliegan sus aplicaciones en Cloudflare, Vercel u otras plataformas y buscan orientación precisa sobre la capa de datos y los procesos de despliegue de NuxtHub. Se trata de una referencia tanto documental como de patrones de código: la guía sobre credenciales se limita a indicar cómo nombrar las variables de entorno estándar para cada proveedor.

Preguntas frecuentes

¿Qué versión de NuxtHub y bases de datos abarca?

Abarca NuxtHub v0.10.6 y documenta Drizzle ORM con los dialectos SQLite, PostgreSQL y MySQL, incluyendo ejemplos de esquemas, patrones CRUD y la relación entre los backends locales y de producción.

¿Qué destinos de despliegue son compatibles?

Permite despliegues multi-nube en Cloudflare, Vercel, Deno y Netlify, e incluye archivos de referencia con plantillas wrangler.jsonc (para Cloudflare) y configuraciones de proveedores para Vercel, Netlify, Deno y AWS.

¿Cómo funcionan las migraciones?

Documenta una CLI completa que permite generar migraciones a partir de los esquemas, realizar migraciones, ejecutar SQL directo, eliminar tablas, borrar todo, comprimir datos y marcarlos como migrados. Las migraciones se aplican automáticamente durante las fases de desarrollo y compilación con nuxi, y se registran en la tabla _hub_migrations.

¿Qué es el modo remoto?

El modo remoto (v0.10+) permite conectarse a las conexiones de producción de Cloudflare D1, KV y R2 durante el desarrollo local, en lugar de usar una emulación local, lo cual es útil para probar con datos reales de producción.

¿Cómo se deben cargar los archivos de referencia?

La habilidad recomienda cargar únicamente la referencia relevante para la tarea en curso en lugar de todos los archivos a la vez: la referencia wrangler-templates al configurar Cloudflare, y la referencia de proveedores al desplegar en Vercel, Netlify, Deno, AWS o al configurar proveedores externos de bases de datos/almacenamiento.

Todos los archivos

3 archivosSKILL.md13.1 KBVerreferencias/wrangler-templates.md4.4 KBVerreferencias/providers.md5.7 KBVer

Ver en GitHub

Full-stack Nuxt framework with database, KV, blob, and cache. Multi-cloud support (Cloudflare, Vercel, Deno, Netlify).

For Nuxt server patterns: use nuxt skill (server.md)For content with database: use nuxt-content skill

Loading Files

Consider loading these reference files based on your task:

  • references/wrangler-templates.md - if manually configuring wrangler.jsonc for Cloudflare deployment
  • references/providers.md - if deploying to Vercel, Netlify, Deno, AWS, or configuring external database/storage providers

DO NOT load all files at once. Load only what's relevant to your current task.

Installation

npx nuxi module add hub

Configuration

// nuxt.config.tsexport default defineNuxtConfig({  modules: ['@nuxthub/core'],  hub: {    db: 'sqlite', // 'sqlite' | 'postgresql' | 'mysql'    kv: true,    blob: true,    cache: true,    dir: '.data', // local storage directory    remote: false // use production bindings in dev (v0.10+)  }})

Advanced Config

hub: {  db: {    dialect: 'postgresql',    driver: 'postgres-js', // Optional: auto-detected    casing: 'snake_case',  // camelCase JS -> snake_case DB (v0.10.3+)    migrationsDirs: ['server/db/custom-migrations/'],    applyMigrationsDuringBuild: true, // default    replica: { // Read replica support (v0.10.6+)      connection: { connectionString: process.env.DATABASE_REPLICA_URL }    }  },  remote: true // Use production Cloudflare bindings in dev (v0.10+)}

remote mode: When enabled, connects to production D1/KV/R2 during local development instead of local emulation. Useful for testing with production data.

Database replica (v0.10.6+): Configure read replicas to distribute database load. Queries use replicas automatically while writes go to primary.

Database

Type-safe SQL via Drizzle ORM. db and schema are auto-imported on server-side.

Schema Definition

Place in server/db/schema.ts or server/db/schema/*.ts:

// server/db/schema.ts (SQLite)import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'export const users = sqliteTable('users', {  id: integer().primaryKey({ autoIncrement: true }),  name: text().notNull(),  email: text().notNull().unique(),  createdAt: integer({ mode: 'timestamp' }).notNull()})

PostgreSQL variant:

import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core'export const users = pgTable('users', {  id: serial().primaryKey(),  name: text().notNull(),  email: text().notNull().unique(),  createdAt: timestamp().notNull().defaultNow()})

Database API

// db and schema are auto-imported on server-sideimport { db, schema } from 'hub:db'// Selectconst users = await db.select().from(schema.users)const user = await db.query.users.findFirst({ where: eq(schema.users.id, 1) })// Insertconst [newUser] = await db.insert(schema.users).values({ name: 'John', email: '[email protected]' }).returning()// Updateawait db.update(schema.users).set({ name: 'Jane' }).where(eq(schema.users.id, 1))// Deleteawait db.delete(schema.users).where(eq(schema.users.id, 1))

Migrations

npx nuxt db generate                  # Generate migrations from schemanpx nuxt db migrate                   # Apply pending migrationsnpx nuxt db sql "SELECT * FROM users" # Execute raw SQLnpx nuxt db drop <TABLE>              # Drop a specific tablenpx nuxt db drop-all                  # Drop all tables (v0.10+)npx nuxt db squash                    # Squash migrations into one (v0.10+)npx nuxt db mark-as-migrated [NAME]   # Mark as migrated without running

Migrations auto-apply during npx nuxi dev and npx nuxi build. Tracked in _hub_migrations table.

Database Providers

DialectLocalProduction
sqlite.data/db/sqlite.dbD1 (Cloudflare), Turso (TURSO_DATABASE_URL, TURSO_AUTH_TOKEN)
postgresqlPGlitepostgres-js (DATABASE_URL), neon-http (v0.10.2+, DATABASE_URL)
mysql-mysql2 (DATABASE_URL, MYSQL_URL)

KV Storage

Key-value storage. kv is auto-imported on server-side.

import { kv } from 'hub:kv'await kv.set('key', { data: 'value' })await kv.set('key', value, { ttl: 60 }) // TTL in secondsconst value = await kv.get('key')const exists = await kv.has('key')await kv.del('key')const keys = await kv.keys('prefix:')await kv.clear('prefix:')

Constraints: max value 25 MiB, max key 512 bytes.

KV Providers

ProviderPackageEnv Vars
Upstash@upstash/redisUPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN
RedisioredisREDIS_URL
Cloudflare KV-KV binding in wrangler.jsonc
Deno KV-Auto on Deno Deploy
Vercel-KV_REST_API_URL, KV_REST_API_TOKEN

Blob Storage

File storage. blob is auto-imported on server-side.

Blob API

import { blob } from 'hub:blob'// Uploadconst result = await blob.put('path/file.txt', body, {  contentType: 'text/plain',  access: 'public', // 'public' | 'private' (v0.10.2+)  addRandomSuffix: true,  prefix: 'uploads'})// Returns: { pathname, contentType, size, httpEtag, uploadedAt }// Downloadconst file = await blob.get('path/file.txt') // Returns Blob or null// Listconst { blobs, cursor, hasMore, folders } = await blob.list({ prefix: 'uploads/', limit: 10, folded: true })// Serve (with proper headers)return blob.serve(event, 'path/file.txt')// Deleteawait blob.del('path/file.txt')await blob.del(['file1.txt', 'file2.txt']) // Multiple// Metadata onlyconst meta = await blob.head('path/file.txt')

Upload Helpers

// Server: Validate + upload handlerexport default eventHandler(async (event) => {  return blob.handleUpload(event, {    formKey: 'files',    multiple: true,    ensure: { maxSize: '10MB', types: ['image/png', 'image/jpeg'] },    put: { addRandomSuffix: true, prefix: 'images' }  })})// Validate before manual uploadensureBlob(file, { maxSize: '10MB', types: ['image'] })// Multipart upload for large files (>10MB)export default eventHandler(async (event) => {  return blob.handleMultipartUpload(event) // Route: /api/files/multipart/[action]/[...pathname]})

Vue Composables

// Simple uploadconst upload = useUpload('/api/upload')const result = await upload(inputElement)// Multipart with progressconst mpu = useMultipartUpload('/api/files/multipart')const { completed, progress, abort } = mpu(file)

Blob Providers

ProviderPackageConfig
Cloudflare R2-BLOB binding in wrangler.jsonc
Vercel Blob@vercel/blobBLOB_READ_WRITE_TOKEN
S3aws4fetchS3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET, S3_REGION

Cache

Response and function caching.

Route Handler Caching

export default cachedEventHandler((event) => {  return { data: 'cached', date: new Date().toISOString() }}, {  maxAge: 60 * 60, // 1 hour  getKey: event => event.path})

Function Caching

export const getStars = defineCachedFunction(  async (event: H3Event, repo: string) => {    const data = await $fetch(`https://api.github.com/repos/${repo}`)    return data.stargazers_count  },  { maxAge: 3600, name: 'ghStars', getKey: (event, repo) => repo })

Cache Invalidation

// Remove specificawait useStorage('cache').removeItem('nitro:functions:getStars:repo-name.json')// Clear by prefixawait useStorage('cache').clear('nitro:handlers')

Cache key pattern: ${group}:${name}:${getKey(...args)}.json (defaults: group='nitro', name='handlers'|'functions'|'routes')

Deployment

Cloudflare

NuxtHub auto-generates wrangler.json from your hub config - no manual wrangler.jsonc required:

// nuxt.config.tsexport default defineNuxtConfig({  hub: {    db: {      dialect: 'sqlite',      driver: 'd1',      connection: { databaseId: '<database-id>' }    },    kv: {      driver: 'cloudflare-kv-binding',      namespaceId: '<kv-namespace-id>'    },    cache: {      driver: 'cloudflare-kv-binding',      namespaceId: '<cache-namespace-id>'    },    blob: {      driver: 'cloudflare-r2',      bucketName: '<bucket-name>'    }  }})

Observability (recommended): Enable logging for production deployments:

// wrangler.jsonc (optional){  "observability": {    "logs": {      "enabled": true,      "head_sampling_rate": 1,      "invocation_logs": true,      "persist": true    }  }}

Create resources via Cloudflare dashboard or CLI:

npx wrangler d1 create my-db              # Get database-idnpx wrangler kv namespace create KV       # Get kv-namespace-idnpx wrangler kv namespace create CACHE    # Get cache-namespace-idnpx wrangler r2 bucket create my-bucket   # Get bucket-name

Deploy: Create Cloudflare Workers project, link Git repo. Bindings auto-configured at build time.

Environments: Use CLOUDFLARE_ENV=preview for preview deployments.

See references/wrangler-templates.md for manual wrangler.jsonc patterns and references/providers.md for all provider configurations.

Other Providers

See references/providers.md for detailed deployment patterns for:

  • Vercel: Postgres, Turso, Vercel Blob, Vercel KV
  • Netlify: External databases, S3, Upstash Redis
  • Deno Deploy: Deno KV
  • AWS/Self-hosted: S3, RDS, custom configs

D1 over HTTP

Query D1 from non-Cloudflare hosts:

hub: {  db: { dialect: 'sqlite', driver: 'd1-http' }}

Requires: NUXT_HUB_CLOUDFLARE_ACCOUNT_ID, NUXT_HUB_CLOUDFLARE_API_TOKEN, NUXT_HUB_CLOUDFLARE_DATABASE_ID

Build-time Hooks

// Extend schemanuxt.hook('hub:db:schema:extend', async ({ dialect, paths }) => {  paths.push(await resolvePath(`./schema/custom.${dialect}`))})// Add migration directoriesnuxt.hook('hub:db:migrations:dirs', (dirs) => {  dirs.push(resolve('./db-migrations'))})// Post-migration queries (idempotent)nuxt.hook('hub:db:queries:paths', (paths, dialect) => {  paths.push(resolve(`./seed.${dialect}.sql`))})

Type Sharing

// shared/types/db.tsimport type { users } from '~/server/db/schema'export type User = typeof users.$inferSelectexport type NewUser = typeof users.$inferInsert

WebSocket / Realtime

Enable experimental WebSocket:

// nuxt.config.tsnitro: { experimental: { websocket: true } }
// server/routes/ws/chat.tsexport default defineWebSocketHandler({  open(peer) {    peer.subscribe('chat')    peer.publish('chat', 'User joined')  },  message(peer, message) {    peer.publish('chat', message.text())  },  close(peer) {    peer.unsubscribe('chat')  }})

Deprecated (v0.10)

Removed Cloudflare-specific features:

  • hubAI() -> Use AI SDK with Workers AI Provider
  • hubBrowser() -> Puppeteer
  • hubVectorize() -> Vectorize
  • NuxtHub Admin -> Sunset Dec 31, 2025
  • npx nuxthub deploy -> Use wrangler deploy

Quick Reference

FeatureImportAccess
Databaseimport { db, schema } from 'hub:db'db.select(), db.insert(), etc.
KVimport { kv } from 'hub:kv'kv.get(), kv.set(), etc.
Blobimport { blob } from 'hub:blob'blob.put(), blob.get(), etc.

All are auto-imported on server-side.

Resources

  • Installation
  • Migration from v0.9
  • Database
  • Blob
  • KV
  • Cache
  • Deploy

Todos los archivos

0 archivos

Instalar nuxthub

Descargue y extraiga los archivos de habilidades a su directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/onmax/nuxt-skills/blob/main/skills/nuxthub/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copie la carpeta de habilidades a .claude/skills; Claude la detectará automáticamente y la utilizará.
Repositorio onmax/nuxt-skills

Habilidades relacionadas

golang-dependency-injection
Tiempo actualizado 29 de junio de 2026
tc-tracker
Tiempo actualizado 27 de agosto de 2026
code-quality
Tiempo actualizado 22 de agosto de 2026
altimate-data-engineering-skills
Tiempo actualizado 23 de agosto de 2026
OR