nuxthub
onmax/nuxt-skills
Ú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 todoAcerca 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
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
| Dialect | Local | Production |
|---|---|---|
| sqlite | .data/db/sqlite.db | D1 (Cloudflare), Turso (TURSO_DATABASE_URL, TURSO_AUTH_TOKEN) |
| postgresql | PGlite | postgres-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
| Provider | Package | Env Vars |
|---|---|---|
| Upstash | @upstash/redis | UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN |
| Redis | ioredis | REDIS_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
| Provider | Package | Config |
|---|---|---|
| Cloudflare R2 | - | BLOB binding in wrangler.jsonc |
| Vercel Blob | @vercel/blob | BLOB_READ_WRITE_TOKEN |
| S3 | aws4fetch | S3_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 ProviderhubBrowser()-> PuppeteerhubVectorize()-> Vectorize- NuxtHub Admin -> Sunset Dec 31, 2025
npx nuxthub deploy-> Use wrangler deploy
Quick Reference
| Feature | Import | Access |
|---|---|---|
| Database | import { db, schema } from 'hub:db' | db.select(), db.insert(), etc. |
| KV | import { kv } from 'hub:kv' | kv.get(), kv.set(), etc. |
| Blob | import { 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 archivosInstalar nuxthub
Descargue y extraiga los archivos de habilidades a su directorio .claude/skills/.
Descargar ZIPClona 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





Hogar
