[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K1YPRYJS3BQEDP8HKBHPEJ":3,"skill-same:01M6K1YPRYJS3BQEDP8HKBHPEJ":215},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":192,"commitSha":193,"skillDirectory":194,"forksCount":195,"repositoryHtmlUrl":196,"repositoryHomepageUrl":6,"ownerHtmlUrl":197,"ownerBlogUrl":198,"ownerDescription":199,"updatedAt":200,"install":201,"resources":214},"01M6K1YPRYJS3BQEDP8HKBHPEJ","vercel-storage",null,"Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.","NagyVikt\u002Fcodex-plugins","NagyVikt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F137165288?v=4","01M6K0SJ3R2DAZRJKJJS10VN87","Viktor Nagy","01M6K0SJ9HXN0GBD91QDQ9WNVV",2,"MIT","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-storage\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"vercel storage","vercel","storage","expert","auth0","URL","upstash","turso","lib","app","neon","connection pooling","prisma","clerk","router","auto","migrate","supabase","run","config","2026-11-10 10:12:30",false,"---\nname: vercel-storage\ndescription: Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.\nmetadata:\n  priority: 7\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns:\n    - 'lib\u002Fblob\u002F**'\n    - 'lib\u002Fstorage\u002F**'\n    - 'src\u002Flib\u002Fblob\u002F**'\n    - 'src\u002Flib\u002Fstorage\u002F**'\n    - 'lib\u002Fblob.*'\n    - 'lib\u002Fstorage.*'\n    - 'lib\u002Fedge-config.*'\n    - 'src\u002Flib\u002Fblob.*'\n    - 'src\u002Flib\u002Fstorage.*'\n    - 'src\u002Flib\u002Fedge-config.*'\n    - 'supabase\u002F**'\n    - 'lib\u002Fsupabase.*'\n    - 'src\u002Flib\u002Fsupabase.*'\n    - 'prisma\u002Fschema.prisma'\n    - 'prisma\u002F**'\n  bashPatterns:\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@libsql\u002Fclient\\b'\n  importPatterns:\n    - \"@vercel\u002Fblob\"\n    - \"@vercel\u002Fedge-config\"\n    - \"@neondatabase\u002Fserverless\"\n    - \"@upstash\u002Fredis\"\n    - \"@vercel\u002Fkv\"\n    - \"@vercel\u002Fpostgres\"\n    - \"@supabase\u002Fsupabase-js\"\n    - \"@prisma\u002Fclient\"\nvalidate:\n  -\n    pattern: from\\s+['\"]@vercel\u002Fkv['\"]\n    message: '@vercel\u002Fkv is deprecated — migrate to @upstash\u002Fredis (Redis.fromEnv()) instead. Run `vercel integration add upstash` for one-click setup.'\n    severity: error\n    upgradeToSkill: vercel-storage\n    upgradeWhy: 'Reload storage guidance for @vercel\u002Fkv → @upstash\u002Fredis migration steps, Marketplace provisioning, and API differences.'\n    skipIfFileContains: '@upstash\u002Fredis'\n  -\n    pattern: from\\s+['\"]@vercel\u002Fpostgres['\"]\n    message: '@vercel\u002Fpostgres is deprecated — use @neondatabase\u002Fserverless with drizzle-orm instead. Run `vercel integration add neon` for one-click setup.'\n    severity: error\n    upgradeToSkill: vercel-storage\n    upgradeWhy: 'Reload storage guidance for @vercel\u002Fpostgres → @neondatabase\u002Fserverless migration steps, Marketplace provisioning, and drizzle-orm setup.'\n    skipIfFileContains: '@neondatabase\u002Fserverless'\nchainTo:\n  -\n    pattern: \"from\\\\s+['\\\"]@vercel\u002Fpostgres['\\\"]\"\n    targetSkill: nextjs\n    message: '@vercel\u002Fpostgres is sunset — loading Next.js guidance for integrating @neondatabase\u002Fserverless with App Router.'\n  -\n    pattern: \"@vercel\u002Fpostgres\"\n    targetSkill: vercel-storage\n    message: '@vercel\u002Fpostgres is sunset — migrate to @neondatabase\u002Fserverless. Run `vercel integration add neon` for one-click Marketplace provisioning with unified billing.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|from\\\\s+['\\\"]@neondatabase\"\n  -\n    pattern: \"from\\\\s+['\\\"]@vercel\u002Fkv['\\\"]\"\n    targetSkill: nextjs\n    message: '@vercel\u002Fkv is sunset — loading Next.js guidance for integrating @upstash\u002Fredis with App Router.'\n  -\n    pattern: \"createPool\\\\s*\\\\(|from\\\\s+['\\\"]@vercel\u002Fpostgres\u002Fpool['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'createPool from @vercel\u002Fpostgres detected — this package is sunset. Use @neondatabase\u002Fserverless with neon() or Pool for connection pooling.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|from\\\\s+['\\\"]@neondatabase\"\n  -\n    pattern: \"sql\\\\s*`|from\\\\s+['\\\"]@vercel\u002Fpostgres['\\\"].*sql\"\n    targetSkill: vercel-storage\n    message: 'sql template literal from @vercel\u002Fpostgres detected — this API is sunset. Use @neondatabase\u002Fserverless with neon() for tagged template queries.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|from\\\\s+['\\\"]@neondatabase\"\n  -\n    pattern: \"from\\\\s+['\\\"]@supabase\u002F(supabase-js|ssr)['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'Supabase client detected — loading Vercel Storage guidance for Marketplace-native Neon Postgres + Upstash Redis alternatives with unified billing.'\n  -\n    pattern: \"from\\\\s+['\\\"](mongodb|mongoose)['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'MongoDB\u002FMongoose import detected — loading Vercel Storage guidance for Marketplace-native database options (Neon Postgres, Upstash Redis) with auto-provisioned env vars.'\n  -\n    pattern: \"from\\\\s+['\\\"]@prisma\u002Fclient['\\\"]|from\\\\s+['\\\"]prisma['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'Prisma ORM detected — loading Vercel Storage guidance for Neon Postgres integration with Prisma, connection pooling, and Marketplace provisioning.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|POSTGRES_PRISMA_URL\"\n  -\n    pattern: \"from\\\\s+['\\\"]@libsql\u002Fclient['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'libSQL\u002FTurso client detected — loading Vercel Storage guidance for Marketplace-native alternatives (Neon Postgres, Upstash Redis) with unified billing and auto-provisioned env vars.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|@upstash\u002Fredis\"\n  -\n    pattern: \"from\\\\s+['\\\"]convex['\\\"]|from\\\\s+['\\\"]convex\u002F['\\\"]\"\n    targetSkill: vercel-storage\n    message: 'Convex import detected — loading Vercel Storage guidance for Marketplace-native database options (Neon Postgres, Upstash Redis) with auto-provisioned env vars and unified billing.'\n    skipIfFileContains: \"@neondatabase\u002Fserverless|@upstash\u002Fredis\"\n  -\n    pattern: \"from\\\\s+['\\\"]@supabase\u002Fsupabase-js['\\\"]\"\n    targetSkill: auth\n    message: 'Supabase client detected — if using Supabase Auth, loading Auth guidance for Clerk (native Vercel Marketplace) as the recommended managed auth provider.'\n    skipIfFileContains: \"@clerk\u002F|@auth0\u002F|@descope\u002F\"\nretrieval:\n  aliases:\n    - database\n    - blob storage\n    - redis\n    - postgres\n  intents:\n    - add storage\n    - set up database\n    - configure blob storage\n    - use edge config\n  entities:\n    - Blob\n    - Edge Config\n    - Neon Postgres\n    - Upstash Redis\n    - Vercel Storage\n\n---\n\n# Vercel Storage\n\nYou are an expert in Vercel's storage options. Know which products are active, which are sunset, and when to use each.\n\n## Provider Choice for Bootstrap\n\nChoose storage provisioning paths in this order:\n\n1. **Preferred**: Vercel-managed Neon\u002FUpstash through the Vercel Marketplace (`vercel integration add ...` or dashboard). This path auto-provisions accounts\u002Fresources and injects environment variables into the linked Vercel project.\n2. **Fallback**: Provider CLI\u002Fmanual provisioning only when Marketplace is unavailable or you must use an existing external account.\n\nWhen using fallback\u002Fmanual provisioning, you must add\u002Fsync environment variables yourself and then re-run `vercel env pull .env.local --yes` locally.\n\n## Active First-Party Storage\n\n### Vercel Blob — File Storage\n\nFast, scalable storage for unstructured data (images, videos, documents, any files).\n\n```bash\nnpm install @vercel\u002Fblob\n```\n\n```ts\nimport { put, del, list, get } from '@vercel\u002Fblob'\n\n\u002F\u002F Upload from server (public)\nconst blob = await put('images\u002Fphoto.jpg', file, {\n  access: 'public',\n})\n\u002F\u002F blob.url → public URL\n\n\u002F\u002F Upload private file\nconst privateBlob = await put('docs\u002Fsecret.pdf', file, {\n  access: 'private',\n})\n\u002F\u002F Read private file back\nconst privateFile = await get(privateBlob.url) \u002F\u002F returns ReadableStream + metadata\n\n\u002F\u002F Client upload (up to 5 TB)\nimport { upload } from '@vercel\u002Fblob\u002Fclient'\nconst blob = await upload('video.mp4', file, {\n  access: 'public',\n  handleUploadUrl: '\u002Fapi\u002Fupload', \u002F\u002F Your token endpoint\n})\n\n\u002F\u002F List blobs\nconst { blobs } = await list()\n\n\u002F\u002F Conditional get with ETags\nconst response = await get('images\u002Fphoto.jpg', {\n  ifNoneMatch: previousETag,\n})\nif (response.statusCode === 304) {\n  \u002F\u002F Not modified, use cached version\n}\n\n\u002F\u002F Delete\nawait del('images\u002Fphoto.jpg')\n```\n\n**Private Storage** (public beta): Use `access: 'private'` for files that should not be publicly accessible. Read them back with `get()`. Do NOT use private access for files that need to be served publicly — it leads to slow delivery and high egress costs.\n\n**Blob Data Transfer**: Vercel Blob uses two delivery strategies — **Fast Data Transfer** (94 cities, latency-optimized) and **Blob Data Transfer** (18 hubs, volume-optimized for large assets). The system automatically routes via the optimal path.\n\n**Use when**: Media files, user uploads, documents, any large unstructured data.\n\n### Vercel Edge Config — Global Configuration\n\nUltra-low-latency key-value store for application configuration. Not a database — designed for config data that must be read instantly at the edge.\n\n```bash\nnpm install @vercel\u002Fedge-config\n```\n\n```ts\nimport { get, getAll, has } from '@vercel\u002Fedge-config'\n\n\u002F\u002F Read a single value (\u003C 1ms at the edge)\nconst isFeatureEnabled = await get('feature-new-ui')\n\n\u002F\u002F Read multiple values\nconst config = await getAll(['feature-new-ui', 'ab-test-variant', 'redirect-rules'])\n\n\u002F\u002F Check existence\nconst exists = await has('maintenance-mode')\n```\n\n**Use when**: Feature flags, A\u002FB testing config, dynamic routing rules, maintenance mode toggles. Anything that must be read at the edge with near-zero latency.\n\n**Do NOT use for**: User data, session state, frequently written data. Edge Config is optimized for reads, not writes.\n\n**Next.js 16**: `@vercel\u002Fedge-config@^1.4.3` supports `cacheComponents` and the renamed `proxy.ts` (formerly `middleware.ts`).\n\n## Marketplace Storage (Partner-Provided)\n\n### IMPORTANT: @vercel\u002Fpostgres and @vercel\u002Fkv are SUNSET\n\nThese packages no longer exist as first-party Vercel products. Use the marketplace replacements:\n\n### Neon Postgres (replaces @vercel\u002Fpostgres)\n\nServerless Postgres with branching, auto-scaling, and connection pooling. The driver is GA at `@neondatabase\u002Fserverless@^1.0.2` and requires **Node.js 19+**.\n\n```bash\nnpm install @neondatabase\u002Fserverless\n```\n\n```ts\n\u002F\u002F Direct Neon usage\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst users = await sql`SELECT * FROM users WHERE id = ${userId}`\n\n\u002F\u002F With Drizzle ORM\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst db = drizzle(sql)\n```\n\n**Build-time safety**: The `neon()` call above throws if `DATABASE_URL` is not set. Since Next.js evaluates top-level module code at build time, this will crash `next build` when env vars aren't yet configured (e.g., first deploy before Marketplace provisioning). Use lazy initialization:\n\n```ts\n\u002F\u002F src\u002Fdb\u002Findex.ts — lazy initialization (safe for build time)\nimport { neon } from '@neondatabase\u002Fserverless'\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport * as schema from '.\u002Fschema'\n\nfunction createDb() {\n  const sql = neon(process.env.DATABASE_URL!)\n  return drizzle(sql, { schema })\n}\n\nlet _db: ReturnType\u003Ctypeof createDb> | null = null\n\nexport function getDb() {\n  if (!_db) _db = createDb()\n  return _db\n}\n```\n\n**WARNING: Do NOT use JavaScript `Proxy` wrappers around the DB client.** A common pattern is wrapping `db` in a `Proxy` for lazy initialization. This breaks libraries like NextAuth\u002FAuth.js that inspect the DB adapter object (e.g., checking method existence, iterating properties). The Proxy intercepts those checks and breaks the auth request chain, causing hangs with no error. Use a plain `getDb()` function or a simple module-level lazy `let` instead.\n\n**Drizzle Kit migrations**: `drizzle-kit` and `tsx` do NOT auto-load `.env.local`. Source env vars manually or use `dotenv`:\n\n```bash\n# Option 1: Source env vars before running\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && npx drizzle-kit push\n\n# Option 2: Use dotenv-cli (recommended for scripts)\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n```\n\nThis applies to any Node script that needs Vercel-provisioned env vars — only Next.js auto-loads `.env.local`.\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n#### Neon CLI Fallback Notes\n\nIf you use Neon CLI as the fallback path, account\u002Fproject setup is managed on Neon directly instead of through Vercel Marketplace automation.\n\nFor **Vercel-managed Neon projects**, CLI operations require a **Neon API key**; do not rely on normal browser-auth login flow alone.\n\n### Upstash Redis (replaces @vercel\u002Fkv)\n\nServerless Redis with same Vercel billing integration.\n\n```bash\nnpm install @upstash\u002Fredis\n```\n\n```ts\nimport { Redis } from '@upstash\u002Fredis'\n\nconst redis = Redis.fromEnv() \u002F\u002F Uses UPSTASH_REDIS_REST_URL & TOKEN\n\n\u002F\u002F Basic operations\nawait redis.set('session:abc', { userId: '123' }, { ex: 3600 })\nconst session = await redis.get('session:abc')\n\n\u002F\u002F Rate limiting\nimport { Ratelimit } from '@upstash\u002Fratelimit'\nconst ratelimit = new Ratelimit({\n  redis,\n  limiter: Ratelimit.slidingWindow(10, '10s'),\n})\nconst { success } = await ratelimit.limit('user:123')\n```\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n### Supabase (Marketplace Native)\n\nFull Postgres database with built-in auth, realtime subscriptions, and storage. Native Vercel Marketplace integration.\n\n```bash\nnpm install @supabase\u002Fsupabase-js @supabase\u002Fssr\n```\n\n```ts\nimport { createClient } from '@supabase\u002Fsupabase-js'\n\nconst supabase = createClient(\n  process.env.NEXT_PUBLIC_SUPABASE_URL!,\n  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n)\n\nconst { data, error } = await supabase.from('users').select('*')\n```\n\nInstall via Vercel Marketplace: `vercel integration add supabase`\n\n### Prisma ORM (Marketplace Native)\n\nType-safe ORM with auto-generated client, migrations, and Prisma Accelerate for connection pooling.\n\n```bash\nnpm install prisma @prisma\u002Fclient\nnpx prisma init\n```\n\n```ts\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\nconst users = await prisma.user.findMany()\n```\n\nInstall via Vercel Marketplace: `vercel integration add prisma`\n\n### MongoDB Atlas\n\nDocument database with flexible schemas. Available via Vercel Marketplace.\n\n```bash\nnpm install mongodb\n```\n\n```ts\nimport { MongoClient } from 'mongodb'\n\nconst client = new MongoClient(process.env.MONGODB_URI!)\nconst db = client.db('myapp')\nconst users = await db.collection('users').find({}).toArray()\n```\n\nInstall via Vercel Marketplace: `vercel integration add mongodb-atlas`\n\n### Convex\n\nReactive backend-as-a-service with real-time sync, serverless functions, and file storage.\n\n```bash\nnpm install convex\nnpx convex dev\n```\n\n```ts\nimport { query } from '.\u002F_generated\u002Fserver'\nimport { v } from 'convex\u002Fvalues'\n\nexport const getUsers = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query('users').collect()\n  },\n})\n```\n\n### Turso (libSQL)\n\nEdge-native SQLite database with embedded replicas for ultra-low latency reads.\n\n```bash\nnpm install @libsql\u002Fclient\n```\n\n```ts\nimport { createClient } from '@libsql\u002Fclient'\n\nconst turso = createClient({\n  url: process.env.TURSO_DATABASE_URL!,\n  authToken: process.env.TURSO_AUTH_TOKEN!,\n})\n\nconst result = await turso.execute('SELECT * FROM users')\n```\n\nInstall via Vercel Marketplace: `vercel integration add turso`\n\n## Storage Decision Matrix\n\n| Need | Use | Package |\n|------|-----|---------|\n| File uploads, media, documents | Vercel Blob | `@vercel\u002Fblob` |\n| Feature flags, A\u002FB config | Edge Config | `@vercel\u002Fedge-config` |\n| Relational data, SQL queries | Neon Postgres | `@neondatabase\u002Fserverless` |\n| Key-value cache, sessions, rate limiting | Upstash Redis | `@upstash\u002Fredis` |\n| Postgres + auth + realtime + storage | Supabase | `@supabase\u002Fsupabase-js` |\n| Type-safe ORM with migrations | Prisma | `@prisma\u002Fclient` |\n| Document database, flexible schemas | MongoDB Atlas | `mongodb` |\n| Reactive backend with real-time sync | Convex | `convex` |\n| Edge-native SQLite with replicas | Turso | `@libsql\u002Fclient` |\n| Full-text search | Neon Postgres (pg_trgm) or Elasticsearch (Marketplace) | varies |\n| Vector embeddings | Neon Postgres (pgvector) or Pinecone (Marketplace) | varies |\n\n## Migration Guide\n\n### From @vercel\u002Fpostgres → Neon\n```diff\n- import { sql } from '@vercel\u002Fpostgres'\n+ import { neon } from '@neondatabase\u002Fserverless'\n+ const sql = neon(process.env.DATABASE_URL!)\n\n```\n\n**Drop-in replacement**: For minimal migration effort, use `@neondatabase\u002Fvercel-postgres-compat` which provides API-compatible wrappers for `@vercel\u002Fpostgres` imports.\n\n### From @vercel\u002Fkv → Upstash Redis\n```diff\n- import { kv } from '@vercel\u002Fkv'\n- await kv.set('key', 'value')\n- const value = await kv.get('key')\n+ import { Redis } from '@upstash\u002Fredis'\n+ const redis = Redis.fromEnv()\n+ await redis.set('key', 'value')\n+ const value = await redis.get('key')\n```\n\n## Installing Marketplace Storage\n\nUse the Vercel CLI or the Marketplace dashboard at `https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fstores`:\n\n```bash\n# Install a storage integration (auto-provisions env vars)\nvercel integration add neon\nvercel integration add upstash\n\n# List installed integrations\nvercel integration list\n```\n\nBrowse additional storage options at the [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace). Installing via the CLI or dashboard (`https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fintegrations`) automatically provisions accounts, creates databases, and sets environment variables.\n\n## Official Documentation\n\n- [Vercel Storage](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage)\n- [Vercel Blob](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob)\n- [Edge Config](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config)\n- [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace) — Neon, Upstash, and other storage integrations\n- [Integrations](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations)\n- [GitHub: Vercel Storage](https:\u002F\u002Fgithub.com\u002Fvercel\u002Fstorage)\n","# Vercel Storage\n\nYou are an expert in Vercel's storage options. Know which products are active, which are sunset, and when to use each.\n\n## Provider Choice for Bootstrap\n\nChoose storage provisioning paths in this order:\n\n1. **Preferred**: Vercel-managed Neon\u002FUpstash through the Vercel Marketplace (`vercel integration add ...` or dashboard). This path auto-provisions accounts\u002Fresources and injects environment variables into the linked Vercel project.\n2. **Fallback**: Provider CLI\u002Fmanual provisioning only when Marketplace is unavailable or you must use an existing external account.\n\nWhen using fallback\u002Fmanual provisioning, you must add\u002Fsync environment variables yourself and then re-run `vercel env pull .env.local --yes` locally.\n\n## Active First-Party Storage\n\n### Vercel Blob — File Storage\n\nFast, scalable storage for unstructured data (images, videos, documents, any files).\n\n```bash\nnpm install @vercel\u002Fblob\n```\n\n```ts\nimport { put, del, list, get } from '@vercel\u002Fblob'\n\n\u002F\u002F Upload from server (public)\nconst blob = await put('images\u002Fphoto.jpg', file, {\n  access: 'public',\n})\n\u002F\u002F blob.url → public URL\n\n\u002F\u002F Upload private file\nconst privateBlob = await put('docs\u002Fsecret.pdf', file, {\n  access: 'private',\n})\n\u002F\u002F Read private file back\nconst privateFile = await get(privateBlob.url) \u002F\u002F returns ReadableStream + metadata\n\n\u002F\u002F Client upload (up to 5 TB)\nimport { upload } from '@vercel\u002Fblob\u002Fclient'\nconst blob = await upload('video.mp4', file, {\n  access: 'public',\n  handleUploadUrl: '\u002Fapi\u002Fupload', \u002F\u002F Your token endpoint\n})\n\n\u002F\u002F List blobs\nconst { blobs } = await list()\n\n\u002F\u002F Conditional get with ETags\nconst response = await get('images\u002Fphoto.jpg', {\n  ifNoneMatch: previousETag,\n})\nif (response.statusCode === 304) {\n  \u002F\u002F Not modified, use cached version\n}\n\n\u002F\u002F Delete\nawait del('images\u002Fphoto.jpg')\n```\n\n**Private Storage** (public beta): Use `access: 'private'` for files that should not be publicly accessible. Read them back with `get()`. Do NOT use private access for files that need to be served publicly — it leads to slow delivery and high egress costs.\n\n**Blob Data Transfer**: Vercel Blob uses two delivery strategies — **Fast Data Transfer** (94 cities, latency-optimized) and **Blob Data Transfer** (18 hubs, volume-optimized for large assets). The system automatically routes via the optimal path.\n\n**Use when**: Media files, user uploads, documents, any large unstructured data.\n\n### Vercel Edge Config — Global Configuration\n\nUltra-low-latency key-value store for application configuration. Not a database — designed for config data that must be read instantly at the edge.\n\n```bash\nnpm install @vercel\u002Fedge-config\n```\n\n```ts\nimport { get, getAll, has } from '@vercel\u002Fedge-config'\n\n\u002F\u002F Read a single value (\u003C 1ms at the edge)\nconst isFeatureEnabled = await get('feature-new-ui')\n\n\u002F\u002F Read multiple values\nconst config = await getAll(['feature-new-ui', 'ab-test-variant', 'redirect-rules'])\n\n\u002F\u002F Check existence\nconst exists = await has('maintenance-mode')\n```\n\n**Use when**: Feature flags, A\u002FB testing config, dynamic routing rules, maintenance mode toggles. Anything that must be read at the edge with near-zero latency.\n\n**Do NOT use for**: User data, session state, frequently written data. Edge Config is optimized for reads, not writes.\n\n**Next.js 16**: `@vercel\u002Fedge-config@^1.4.3` supports `cacheComponents` and the renamed `proxy.ts` (formerly `middleware.ts`).\n\n## Marketplace Storage (Partner-Provided)\n\n### IMPORTANT: @vercel\u002Fpostgres and @vercel\u002Fkv are SUNSET\n\nThese packages no longer exist as first-party Vercel products. Use the marketplace replacements:\n\n### Neon Postgres (replaces @vercel\u002Fpostgres)\n\nServerless Postgres with branching, auto-scaling, and connection pooling. The driver is GA at `@neondatabase\u002Fserverless@^1.0.2` and requires **Node.js 19+**.\n\n```bash\nnpm install @neondatabase\u002Fserverless\n```\n\n```ts\n\u002F\u002F Direct Neon usage\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst users = await sql`SELECT * FROM users WHERE id = ${userId}`\n\n\u002F\u002F With Drizzle ORM\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst db = drizzle(sql)\n```\n\n**Build-time safety**: The `neon()` call above throws if `DATABASE_URL` is not set. Since Next.js evaluates top-level module code at build time, this will crash `next build` when env vars aren't yet configured (e.g., first deploy before Marketplace provisioning). Use lazy initialization:\n\n```ts\n\u002F\u002F src\u002Fdb\u002Findex.ts — lazy initialization (safe for build time)\nimport { neon } from '@neondatabase\u002Fserverless'\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport * as schema from '.\u002Fschema'\n\nfunction createDb() {\n  const sql = neon(process.env.DATABASE_URL!)\n  return drizzle(sql, { schema })\n}\n\nlet _db: ReturnType\u003Ctypeof createDb> | null = null\n\nexport function getDb() {\n  if (!_db) _db = createDb()\n  return _db\n}\n```\n\n**WARNING: Do NOT use JavaScript `Proxy` wrappers around the DB client.** A common pattern is wrapping `db` in a `Proxy` for lazy initialization. This breaks libraries like NextAuth\u002FAuth.js that inspect the DB adapter object (e.g., checking method existence, iterating properties). The Proxy intercepts those checks and breaks the auth request chain, causing hangs with no error. Use a plain `getDb()` function or a simple module-level lazy `let` instead.\n\n**Drizzle Kit migrations**: `drizzle-kit` and `tsx` do NOT auto-load `.env.local`. Source env vars manually or use `dotenv`:\n\n```bash\n# Option 1: Source env vars before running\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && npx drizzle-kit push\n\n# Option 2: Use dotenv-cli (recommended for scripts)\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n```\n\nThis applies to any Node script that needs Vercel-provisioned env vars — only Next.js auto-loads `.env.local`.\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n#### Neon CLI Fallback Notes\n\nIf you use Neon CLI as the fallback path, account\u002Fproject setup is managed on Neon directly instead of through Vercel Marketplace automation.\n\nFor **Vercel-managed Neon projects**, CLI operations require a **Neon API key**; do not rely on normal browser-auth login flow alone.\n\n### Upstash Redis (replaces @vercel\u002Fkv)\n\nServerless Redis with same Vercel billing integration.\n\n```bash\nnpm install @upstash\u002Fredis\n```\n\n```ts\nimport { Redis } from '@upstash\u002Fredis'\n\nconst redis = Redis.fromEnv() \u002F\u002F Uses UPSTASH_REDIS_REST_URL & TOKEN\n\n\u002F\u002F Basic operations\nawait redis.set('session:abc', { userId: '123' }, { ex: 3600 })\nconst session = await redis.get('session:abc')\n\n\u002F\u002F Rate limiting\nimport { Ratelimit } from '@upstash\u002Fratelimit'\nconst ratelimit = new Ratelimit({\n  redis,\n  limiter: Ratelimit.slidingWindow(10, '10s'),\n})\nconst { success } = await ratelimit.limit('user:123')\n```\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n### Supabase (Marketplace Native)\n\nFull Postgres database with built-in auth, realtime subscriptions, and storage. Native Vercel Marketplace integration.\n\n```bash\nnpm install @supabase\u002Fsupabase-js @supabase\u002Fssr\n```\n\n```ts\nimport { createClient } from '@supabase\u002Fsupabase-js'\n\nconst supabase = createClient(\n  process.env.NEXT_PUBLIC_SUPABASE_URL!,\n  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n)\n\nconst { data, error } = await supabase.from('users').select('*')\n```\n\nInstall via Vercel Marketplace: `vercel integration add supabase`\n\n### Prisma ORM (Marketplace Native)\n\nType-safe ORM with auto-generated client, migrations, and Prisma Accelerate for connection pooling.\n\n```bash\nnpm install prisma @prisma\u002Fclient\nnpx prisma init\n```\n\n```ts\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\nconst users = await prisma.user.findMany()\n```\n\nInstall via Vercel Marketplace: `vercel integration add prisma`\n\n### MongoDB Atlas\n\nDocument database with flexible schemas. Available via Vercel Marketplace.\n\n```bash\nnpm install mongodb\n```\n\n```ts\nimport { MongoClient } from 'mongodb'\n\nconst client = new MongoClient(process.env.MONGODB_URI!)\nconst db = client.db('myapp')\nconst users = await db.collection('users').find({}).toArray()\n```\n\nInstall via Vercel Marketplace: `vercel integration add mongodb-atlas`\n\n### Convex\n\nReactive backend-as-a-service with real-time sync, serverless functions, and file storage.\n\n```bash\nnpm install convex\nnpx convex dev\n```\n\n```ts\nimport { query } from '.\u002F_generated\u002Fserver'\nimport { v } from 'convex\u002Fvalues'\n\nexport const getUsers = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query('users').collect()\n  },\n})\n```\n\n### Turso (libSQL)\n\nEdge-native SQLite database with embedded replicas for ultra-low latency reads.\n\n```bash\nnpm install @libsql\u002Fclient\n```\n\n```ts\nimport { createClient } from '@libsql\u002Fclient'\n\nconst turso = createClient({\n  url: process.env.TURSO_DATABASE_URL!,\n  authToken: process.env.TURSO_AUTH_TOKEN!,\n})\n\nconst result = await turso.execute('SELECT * FROM users')\n```\n\nInstall via Vercel Marketplace: `vercel integration add turso`\n\n## Storage Decision Matrix\n\n| Need | Use | Package |\n|------|-----|---------|\n| File uploads, media, documents | Vercel Blob | `@vercel\u002Fblob` |\n| Feature flags, A\u002FB config | Edge Config | `@vercel\u002Fedge-config` |\n| Relational data, SQL queries | Neon Postgres | `@neondatabase\u002Fserverless` |\n| Key-value cache, sessions, rate limiting | Upstash Redis | `@upstash\u002Fredis` |\n| Postgres + auth + realtime + storage | Supabase | `@supabase\u002Fsupabase-js` |\n| Type-safe ORM with migrations | Prisma | `@prisma\u002Fclient` |\n| Document database, flexible schemas | MongoDB Atlas | `mongodb` |\n| Reactive backend with real-time sync | Convex | `convex` |\n| Edge-native SQLite with replicas | Turso | `@libsql\u002Fclient` |\n| Full-text search | Neon Postgres (pg_trgm) or Elasticsearch (Marketplace) | varies |\n| Vector embeddings | Neon Postgres (pgvector) or Pinecone (Marketplace) | varies |\n\n## Migration Guide\n\n### From @vercel\u002Fpostgres → Neon\n```diff\n- import { sql } from '@vercel\u002Fpostgres'\n+ import { neon } from '@neondatabase\u002Fserverless'\n+ const sql = neon(process.env.DATABASE_URL!)\n\n```\n\n**Drop-in replacement**: For minimal migration effort, use `@neondatabase\u002Fvercel-postgres-compat` which provides API-compatible wrappers for `@vercel\u002Fpostgres` imports.\n\n### From @vercel\u002Fkv → Upstash Redis\n```diff\n- import { kv } from '@vercel\u002Fkv'\n- await kv.set('key', 'value')\n- const value = await kv.get('key')\n+ import { Redis } from '@upstash\u002Fredis'\n+ const redis = Redis.fromEnv()\n+ await redis.set('key', 'value')\n+ const value = await redis.get('key')\n```\n\n## Installing Marketplace Storage\n\nUse the Vercel CLI or the Marketplace dashboard at `https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fstores`:\n\n```bash\n# Install a storage integration (auto-provisions env vars)\nvercel integration add neon\nvercel integration add upstash\n\n# List installed integrations\nvercel integration list\n```\n\nBrowse additional storage options at the [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace). Installing via the CLI or dashboard (`https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fintegrations`) automatically provisions accounts, creates databases, and sets environment variables.\n\n## Official Documentation\n\n- [Vercel Storage](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage)\n- [Vercel Blob](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob)\n- [Edge Config](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config)\n- [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace) — Neon, Upstash, and other storage integrations\n- [Integrations](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations)\n- [GitHub: Vercel Storage](https:\u002F\u002Fgithub.com\u002Fvercel\u002Fstorage)\n",{"name":5,"chainTo":49,"metadata":89,"validate":167,"retrieval":175,"description":7},[50,54,58,61,64,67,70,73,77,81,84],{"message":51,"pattern":52,"targetSkill":53},"@vercel\u002Fpostgres is sunset — loading Next.js guidance for integrating @neondatabase\u002Fserverless with App Router.","from\\s+['\"]@vercel\u002Fpostgres['\"]","nextjs",{"message":55,"pattern":56,"targetSkill":5,"skipIfFileContains":57},"@vercel\u002Fpostgres is sunset — migrate to @neondatabase\u002Fserverless. Run `vercel integration add neon` for one-click Marketplace provisioning with unified billing.","@vercel\u002Fpostgres","@neondatabase\u002Fserverless|from\\s+['\"]@neondatabase",{"message":59,"pattern":60,"targetSkill":53},"@vercel\u002Fkv is sunset — loading Next.js guidance for integrating @upstash\u002Fredis with App Router.","from\\s+['\"]@vercel\u002Fkv['\"]",{"message":62,"pattern":63,"targetSkill":5,"skipIfFileContains":57},"createPool from @vercel\u002Fpostgres detected — this package is sunset. Use @neondatabase\u002Fserverless with neon() or Pool for connection pooling.","createPool\\s*\\(|from\\s+['\"]@vercel\u002Fpostgres\u002Fpool['\"]",{"message":65,"pattern":66,"targetSkill":5,"skipIfFileContains":57},"sql template literal from @vercel\u002Fpostgres detected — this API is sunset. Use @neondatabase\u002Fserverless with neon() for tagged template queries.","sql\\s*`|from\\s+['\"]@vercel\u002Fpostgres['\"].*sql",{"message":68,"pattern":69,"targetSkill":5},"Supabase client detected — loading Vercel Storage guidance for Marketplace-native Neon Postgres + Upstash Redis alternatives with unified billing.","from\\s+['\"]@supabase\u002F(supabase-js|ssr)['\"]",{"message":71,"pattern":72,"targetSkill":5},"MongoDB\u002FMongoose import detected — loading Vercel Storage guidance for Marketplace-native database options (Neon Postgres, Upstash Redis) with auto-provisioned env vars.","from\\s+['\"](mongodb|mongoose)['\"]",{"message":74,"pattern":75,"targetSkill":5,"skipIfFileContains":76},"Prisma ORM detected — loading Vercel Storage guidance for Neon Postgres integration with Prisma, connection pooling, and Marketplace provisioning.","from\\s+['\"]@prisma\u002Fclient['\"]|from\\s+['\"]prisma['\"]","@neondatabase\u002Fserverless|POSTGRES_PRISMA_URL",{"message":78,"pattern":79,"targetSkill":5,"skipIfFileContains":80},"libSQL\u002FTurso client detected — loading Vercel Storage guidance for Marketplace-native alternatives (Neon Postgres, Upstash Redis) with unified billing and auto-provisioned env vars.","from\\s+['\"]@libsql\u002Fclient['\"]","@neondatabase\u002Fserverless|@upstash\u002Fredis",{"message":82,"pattern":83,"targetSkill":5,"skipIfFileContains":80},"Convex import detected — loading Vercel Storage guidance for Marketplace-native database options (Neon Postgres, Upstash Redis) with auto-provisioned env vars and unified billing.","from\\s+['\"]convex['\"]|from\\s+['\"]convex\u002F['\"]",{"message":85,"pattern":86,"targetSkill":87,"skipIfFileContains":88},"Supabase client detected — if using Supabase Auth, loading Auth guidance for Clerk (native Vercel Marketplace) as the recommended managed auth provider.","from\\s+['\"]@supabase\u002Fsupabase-js['\"]","auth","@clerk\u002F|@auth0\u002F|@descope\u002F",{"docs":90,"sitemap":92,"priority":93,"bashPatterns":94,"pathPatterns":143,"importPatterns":159},[91],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",7,[95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142],"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fblob\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\byarn\\s+add\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\byarn\\s+add\\s+[^\\n]*@upstash\u002Fredis\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fkv\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fssr\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\byarn\\s+add\\s+[^\\n]*@prisma\u002Fclient\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\byarn\\s+add\\s+[^\\n]*@libsql\u002Fclient\\b",[144,145,146,147,148,149,150,151,152,153,154,155,156,157,158],"lib\u002Fblob\u002F**","lib\u002Fstorage\u002F**","src\u002Flib\u002Fblob\u002F**","src\u002Flib\u002Fstorage\u002F**","lib\u002Fblob.*","lib\u002Fstorage.*","lib\u002Fedge-config.*","src\u002Flib\u002Fblob.*","src\u002Flib\u002Fstorage.*","src\u002Flib\u002Fedge-config.*","supabase\u002F**","lib\u002Fsupabase.*","src\u002Flib\u002Fsupabase.*","prisma\u002Fschema.prisma","prisma\u002F**",[160,161,162,163,164,56,165,166],"@vercel\u002Fblob","@vercel\u002Fedge-config","@neondatabase\u002Fserverless","@upstash\u002Fredis","@vercel\u002Fkv","@supabase\u002Fsupabase-js","@prisma\u002Fclient",[168,172],{"message":169,"pattern":60,"severity":170,"upgradeWhy":171,"upgradeToSkill":5,"skipIfFileContains":163},"@vercel\u002Fkv is deprecated — migrate to @upstash\u002Fredis (Redis.fromEnv()) instead. Run `vercel integration add upstash` for one-click setup.","error","Reload storage guidance for @vercel\u002Fkv → @upstash\u002Fredis migration steps, Marketplace provisioning, and API differences.",{"message":173,"pattern":52,"severity":170,"upgradeWhy":174,"upgradeToSkill":5,"skipIfFileContains":162},"@vercel\u002Fpostgres is deprecated — use @neondatabase\u002Fserverless with drizzle-orm instead. Run `vercel integration add neon` for one-click setup.","Reload storage guidance for @vercel\u002Fpostgres → @neondatabase\u002Fserverless migration steps, Marketplace provisioning, and drizzle-orm setup.",{"aliases":176,"intents":181,"entities":186},[177,178,179,180],"database","blob storage","redis","postgres",[182,183,184,185],"add storage","set up database","configure blob storage","use edge config",[187,188,189,190,191],"Blob","Edge Config","Neon Postgres","Upstash Redis","Vercel Storage","main","9a4409c8751439c3aeeea2bc3940ba05dc3cd3b5","plugins\u002Fvercel\u002Fskills\u002Fvercel-storage",0,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins","https:\u002F\u002Fgithub.com\u002FNagyVikt","https:\u002F\u002Fwebu.hu\u002F","Codex is a tool they said...\r\n\r\nCreator of GitGuardex, CueCards. Tech stack: Next.js · TypeScript · Rust · Linux. ","2026-03-30 02:19:53",{"source":8,"skillName":5,"commands":202,"prompt":212,"zipAvailable":213},[203,206,209],{"tool":204,"command":205},"npx","npx skills add NagyVikt\u002Fcodex-plugins --skill vercel-storage",{"tool":207,"command":208},"bunx","bunx skills add NagyVikt\u002Fcodex-plugins --skill vercel-storage",{"tool":210,"command":211},"pnpm","pnpm dlx skills add NagyVikt\u002Fcodex-plugins --skill vercel-storage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-storage\u002FSKILL.md",true,[],[216,251,282,311,333,349],{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":234,"publishedAt":44},"01M6K1ZEN8P9R2S6NPNJNJ8JVH","workflow","Vercel Workflow DevKit (WDK) expert guidance. Use when building durable workflows, long-running tasks, API routes or agents that need pause\u002Fresume, retries, step-based execution, or crash-safe orchestration with Vercel Workflow.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fworkflow\u002FSKILL.md",[222,223,226,231],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":224,"categoryName":225,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":227,"categoryName":228,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":232,"categoryName":233,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000038","人力资源",[218,235,236,42,237,238,239,240,241,242,243,39,244,245,246,32,247,248,249,250],"workflows","create","streaming","logs","start","why","loop","wait for","branch","log","conversation","human","condition","rendering","retries","sleep",{"skillNo":252,"name":253,"nameZh":6,"description":254,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":255,"categories":256,"keywords":267,"publishedAt":44},"01M6K1Z71NWFSPHK2VJJ73MVSY","verification","Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fverification\u002FSKILL.md",[257,260,261,264],{"categoryNo":258,"categoryName":259,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":262,"categoryName":263,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000031","产品经理",{"categoryNo":265,"categoryName":266,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000033","数据分析师",[253,87,237,268,269,270,243,271,272,273,274,275,276,33,277,278,170,279,280,281],"routing middleware","api","projects","user story","full stack","jest","local","project","end","false","unit","middleware","loading","unit test",{"skillNo":283,"name":284,"nameZh":6,"description":285,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":286,"categories":287,"keywords":295,"publishedAt":44},"01M6K1YFEP0GPPGMQ3D0FPTS27","vercel-services","Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-services\u002FSKILL.md",[288,291,292],{"categoryNo":289,"categoryName":290,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":293,"categoryName":294,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[296,297,25,298,299,300,301,302,303,304,305,192,306,307,275,308,33,309,170,310],"vercel services","services","frontend","docker compose","SET","configure","monorepo","go api","fastapi","up","aws lambda","go backend","get","apps","python backend",{"skillNo":312,"name":313,"nameZh":6,"description":314,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":315,"categories":316,"keywords":317,"publishedAt":44},"01M6K1Y8S3CRD43DPKX0PK1MTT","vercel-sandbox","Vercel Sandbox guidance — ephemeral Firecracker microVMs for running untrusted code safely. Supports AI agents, code generation, and experimentation. Use when executing user-generated or AI-generated code in isolation.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-sandbox\u002FSKILL.md",[],[318,319,25,320,321,236,42,322,323,324,325,326,327,328,329,330,280,331,313,332],"sandbox","vercel sandbox","safe","ai agents","code","ai sdk","Code Generation","playground","generated","spawn","install","runner","io","child","student",{"skillNo":334,"name":335,"nameZh":6,"description":336,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":337,"categories":338,"keywords":340,"publishedAt":44},"01M6K1Y1J8S7AN97H75SHBGF7J","vercel-queues","Vercel Queues guidance (public beta) — durable event streaming with topics, consumer groups, retries, and delayed delivery. $0.60\u002F1M ops. Powers Workflow DevKit. Use when building async processing, fan-out patterns, or event-driven architectures.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-queues\u002FSKILL.md",[339],{"categoryNo":224,"categoryName":225,"taxonomyType":21,"taxonomyTypeDesc":22},[341,25,218,235,237,342,300,269,301,305,343,344,345,346,33,32,347,249,280,348],"vercel queues","beta","message","delivery","across","worker","processing","at",{"skillNo":350,"name":351,"nameZh":6,"description":352,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":353,"categories":354,"keywords":356,"publishedAt":44},"01M6K1XH0K0KC0CB51QFWYQ3NM","vercel-functions","Vercel Functions expert guidance — Serverless Functions, Edge Functions, Fluid Compute, streaming, Cron Jobs, and runtime configuration. Use when configuring, debugging, or optimizing server-side code running on Vercel.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-functions\u002FSKILL.md",[355],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[357,25,358,237,238,241,38,359,27,360,274,361,275,362,34,33,309,363,249,364],"vercel functions","functions","vercel ai sdk","time","shared","express","cold","move"]