[{"data":1,"prerenderedAt":1439},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fnuxt\u002Fkv":618,"\u002Fdocs\u002Fnuxt\u002Fkv:surround":1436},[4],{"title":5,"path":6,"children":7},"Docs","\u002Fdocs",[8,316,467],{"title":9,"path":10,"children":11},"Vite","\u002Fdocs\u002Fvite",[12,30,52,63,78,100,174,183,219,238,255,273,304],{"title":13,"path":14,"description":15,"icon":16,"children":17},"Getting Started","\u002Fdocs\u002Fvite\u002Fgetting-started","Learn the ViteHub package model, pick a starting path, and get to a working feature quickly.","i-lucide-rocket",[18,22,26],{"title":19,"path":20,"description":21},"Choose a Package","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Fchoose-a-package","Pick the right ViteHub feature by the job you need to solve on the server.",{"title":23,"path":24,"description":25},"Entrypoints","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Fentrypoints","Understand what belongs on the package root and what each framework-specific entrypoint owns.",{"title":27,"path":28,"description":29},"Architecture","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Farchitecture","How ViteHub keeps one shared feature bridge across Vite, Nitro, and Nuxt.",{"title":31,"path":32,"description":33,"icon":34,"children":35},"Database","\u002Fdocs\u002Fvite\u002Fdatabase","Set up Drizzle or Prisma with `@vitehub\u002Fdb` and explicit ORM runtime imports.","i-lucide-database",[36,40,44,48],{"title":37,"path":38,"description":39},"Drizzle","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fdrizzle","Configure Drizzle with `@vitehub\u002Fdb\u002Fdrizzle`, schema discovery, and committed SQL migrations.",{"title":41,"path":42,"description":43},"Prisma","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fprisma","Configure Prisma with `@vitehub\u002Fdb\u002Fprisma`, generated client output, and native Prisma migrations.",{"title":45,"path":46,"description":47},"Migrations","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fmigrations","Understand when ViteHub applies committed Drizzle and Prisma migrations during development and build.",{"title":49,"path":50,"description":51},"Platform notes","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fplatform-notes","Review driver defaults, hosting behavior, and current runtime limits for Drizzle and Prisma.",{"title":53,"path":54,"description":55,"icon":56,"children":57},"KV","\u002Fdocs\u002Fvite\u002Fkv","Set up key-value storage with the same provider detection used by NuxtHub.","i-lucide-database-zap",[58],{"title":59,"path":60,"description":61,"icon":62},"Usage","\u002Fdocs\u002Fvite\u002Fkv\u002Fusage","Use the KV SDK to set, get, delete, clear, and list key-value pairs.","i-lucide-code",{"title":64,"path":65,"description":66,"icon":67,"children":68},"Blob","\u002Fdocs\u002Fvite\u002Fblob","Add blob storage for images, videos, documents, and other files with `@vitehub\u002Fblob`.","i-lucide-shapes",[69,74],{"title":70,"path":71,"description":72,"icon":73},"Upload","\u002Fdocs\u002Fvite\u002Fblob\u002Fupload","Upload files with validation, simple form handlers, and multipart flows using `@vitehub\u002Fblob`.","i-lucide-upload",{"title":75,"path":76,"description":77,"icon":62},"Blob SDK","\u002Fdocs\u002Fvite\u002Fblob\u002Fusage","Store, read, list, validate, serve, and delete files with `@vitehub\u002Fblob`.",{"title":79,"path":80,"description":81,"icon":82,"children":83},"Vector","\u002Fdocs\u002Fvite\u002Fvector","Add provider-agnostic named vector indexes with similarity search.","i-lucide-scan-search",[84,90,95],{"title":85,"path":86,"description":87,"icon":88,"group":89},"Cloudflare","\u002Fdocs\u002Fvite\u002Fvector\u002Fcloudflare","Configure @vitehub\u002Fvector against Cloudflare Vectorize.","i-simple-icons-cloudflare","Providers",{"title":91,"path":92,"description":93,"icon":94,"group":89},"Postgres","\u002Fdocs\u002Fvite\u002Fvector\u002Fpostgres","Configure @vitehub\u002Fvector against a pgvector-backed Postgres database.","i-simple-icons-postgresql",{"title":96,"path":97,"description":98,"icon":99,"group":89},"Upstash","\u002Fdocs\u002Fvite\u002Fvector\u002Fupstash","Configure @vitehub\u002Fvector against the Upstash Vector HTTP API.","i-simple-icons-upstash",{"title":101,"path":102,"description":103,"icon":104,"children":105},"Queue","\u002Fdocs\u002Fvite\u002Fqueue","Send background jobs through Platformatic, Cloudflare, Vercel, Netlify, Upstash QStash, or Memory.","i-lucide-layers",[106,110,114,118,123,127,131,135,139,144,147,152,157,161,166,170],{"title":107,"path":108,"description":109},"Quickstart","\u002Fdocs\u002Fvite\u002Fqueue\u002Fquickstart","Get a first queue working locally with the memory provider.",{"title":111,"path":112,"description":113},"Runtime API","\u002Fdocs\u002Fvite\u002Fqueue\u002Fruntime-api","Reference for defineQueue, runQueue, deferQueue, getQueue, and the core Queue types.",{"title":115,"path":116,"description":117},"When to use Queue","\u002Fdocs\u002Fvite\u002Fqueue\u002Fwhen-to-use","Decide when Queue is the right primitive compared with Workflow, Cron, or inline request handling.",{"title":119,"path":120,"description":121,"group":122},"Send a job","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fsend-a-job","Enqueue payloads with runQueue and the common delivery patterns.","Guides",{"title":124,"path":125,"description":126,"group":122},"Defer after response","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fdefer-after-response","Use deferQueue when the queue send should happen after the current response is committed.",{"title":128,"path":129,"description":130,"group":122},"Validate payloads","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fvalidate-payloads","Validate payloads before enqueueing and before running queue handlers.",{"title":132,"path":133,"description":134,"group":122},"Local development","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Flocal-development","Use the memory provider for local development and understand how auto-selection works.",{"title":136,"path":137,"description":138,"group":122},"Native handles","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fnative-handles","Know when to use getQueue and provider-native methods instead of the portable runtime API.",{"title":140,"path":141,"description":142,"icon":143,"group":89},"Platformatic","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fplatformatic","Configure Platformatic Job Queue with local or self-hosted workers.","i-brand-platformatic",{"title":85,"path":145,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fcloudflare","Configure Cloudflare Queues and process named queues in Workers.",{"title":148,"path":149,"description":150,"icon":151,"group":89},"Vercel","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fvercel","Configure Vercel Queue and send named jobs through Vercel.","i-simple-icons-vercel",{"title":153,"path":154,"description":155,"icon":156,"group":89},"Netlify","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fnetlify","Configure Netlify Async Workloads and run named queues on Netlify.","i-simple-icons-netlify",{"title":158,"path":159,"description":160,"icon":99,"group":89},"Upstash QStash","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fupstash-qstash","Configure Upstash QStash for queues and signed callback delivery.",{"title":162,"path":163,"description":164,"icon":165,"group":89},"Memory","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fmemory","Process queue jobs in-memory for local development and testing.","i-lucide-memory-stick",{"title":167,"path":168,"description":169},"Troubleshooting","\u002Fdocs\u002Fvite\u002Fqueue\u002Ftroubleshooting","Diagnose common Queue setup and runtime problems across local and hosted providers.",{"title":171,"path":172,"description":173},"Playground","\u002Fdocs\u002Fvite\u002Fqueue\u002Fplayground","Explore the existing Queue playground app and the files that show the end-to-end runtime flow.",{"title":175,"path":176,"description":177,"icon":178,"children":179},"Cache","\u002Fdocs\u002Fvite\u002Fcache","Configure Nitro cache storage for local development, Vercel, and Cloudflare deployments.","i-lucide-timer-reset",[180],{"title":59,"path":181,"description":182,"icon":62},"\u002Fdocs\u002Fvite\u002Fcache\u002Fusage","Cache routes and server functions with practical invalidation examples.",{"title":184,"path":185,"description":186,"icon":187,"children":188},"Email","\u002Fdocs\u002Fvite\u002Femail","Render markdown email files and send them through Resend, SendGrid, or Postmark.","i-lucide-mail",[189,194,199,204,209,214],{"title":190,"path":191,"description":192,"icon":193},"Frontmatter","\u002Fdocs\u002Fvite\u002Femail\u002Ffrontmatter","Define subject lines, recipients, metadata, and delivery defaults directly in the Markdown email file.","i-lucide-file-text",{"title":195,"path":196,"description":197,"icon":198},"Input Schemas","\u002Fdocs\u002Fvite\u002Femail\u002Finput-schemas","Add an embedded schema block when you want email input validation and stronger TypeScript inference.","i-brand-standard-schema",{"title":200,"path":201,"description":202,"icon":203},"i18n","\u002Fdocs\u002Fvite\u002Femail\u002Fi18n","Localize Markdown emails with locale-specific template files and ICU message formatting.","i-lucide-languages",{"title":205,"path":206,"description":207,"icon":208,"group":89},"Resend","\u002Fdocs\u002Fvite\u002Femail\u002Fresend","Configure Resend for transactional delivery and native batch sending.","i-provider-resend",{"title":210,"path":211,"description":212,"icon":213,"group":89},"SendGrid","\u002Fdocs\u002Fvite\u002Femail\u002Fsendgrid","Configure SendGrid when you need advanced delivery controls and template support.","i-provider-sendgrid",{"title":215,"path":216,"description":217,"icon":218,"group":89},"Postmark","\u002Fdocs\u002Fvite\u002Femail\u002Fpostmark","Configure Postmark for transactional streams and template-first sends.","i-provider-postmark",{"title":220,"path":221,"description":222,"icon":223,"children":224},"Workflow","\u002Fdocs\u002Fvite\u002Fworkflow","Run durable workflows on Cloudflare, Netlify, Vercel, or OpenWorkflow.","i-lucide-workflow",[225,228,231,235],{"title":85,"path":226,"description":227,"icon":88},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fcloudflare","Configure Cloudflare Workflows and inspect runs from your app.",{"title":148,"path":229,"description":230,"icon":151},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fvercel","Configure Vercel Workflow and run durable workflows on Vercel.",{"title":232,"path":233,"description":234,"icon":223},"OpenWorkflow","\u002Fdocs\u002Fvite\u002Fworkflow\u002Fopenworkflow","Connect OpenWorkflow and use your own workflow backend behind the ViteHub API.",{"title":153,"path":236,"description":237,"icon":156},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fnetlify","Configure Netlify Async Workloads and run discovered workflows on Netlify.",{"title":239,"path":240,"description":241,"icon":242,"children":243},"Cron","\u002Fdocs\u002Fvite\u002Fcron","Schedule crons with Node, Cloudflare, or Vercel.","i-lucide-list-check",[244,249,252],{"title":245,"path":246,"description":247,"icon":248},"Node","\u002Fdocs\u002Fvite\u002Fcron\u002Fnode","Configure in-process scheduling for local crons and lightweight cron tasks.","i-simple-icons-nodedotjs",{"title":85,"path":250,"description":251,"icon":88},"\u002Fdocs\u002Fvite\u002Fcron\u002Fcloudflare","Configure Cloudflare-triggered schedules for your crons.",{"title":148,"path":253,"description":254,"icon":151},"\u002Fdocs\u002Fvite\u002Fcron\u002Fvercel","Generate Vercel cron config from discovered crons.",{"title":256,"path":257,"description":258,"icon":259,"children":260},"Browser","\u002Fdocs\u002Fvite\u002Fbrowser","Run named browser automations against Playwright, Browserbase, or Cloudflare Browser Rendering.","i-lucide-monitor-play",[261,264,269],{"title":85,"path":262,"description":263,"icon":88},"\u002Fdocs\u002Fvite\u002Fbrowser\u002Fcloudflare","Configure Cloudflare Browser Rendering through the official `cloudflare` package.",{"title":265,"path":266,"description":267,"icon":268},"Browserbase","\u002Fdocs\u002Fvite\u002Fbrowser\u002Fbrowserbase","Configure Browserbase for managed CDP sessions and session-aware browser calls.","i-lucide-orbit",{"title":270,"path":271,"description":272,"icon":259},"Playwright","\u002Fdocs\u002Fvite\u002Fbrowser\u002Fplaywright","Configure remote Playwright browser sessions over a WebSocket endpoint.",{"title":274,"path":275,"description":276,"icon":277,"children":278},"Sandbox","\u002Fdocs\u002Fvite\u002Fsandbox","Run isolated sandboxes on Cloudflare Durable Objects, Cloudflare Dynamic Workers, Vercel, Deno, Docker, or locally.","i-lucide-box",[279,282,286,289,294,299],{"title":85,"path":280,"description":281,"icon":88},"\u002Fdocs\u002Fvite\u002Fsandbox\u002Fcloudflare","Configure Cloudflare Sandbox on top of Durable Objects.",{"title":283,"path":284,"description":285,"icon":88},"Cloudflare Dynamic","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fcloudflare-dynamic","Configure Cloudflare Dynamic Workers with the Worker Loader API.",{"title":148,"path":287,"description":288,"icon":151},"\u002Fdocs\u002Fvite\u002Fsandbox\u002Fvercel","Configure Vercel Sandbox and run isolated sandboxes on Vercel.",{"title":290,"path":291,"description":292,"icon":293},"Deno","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fdeno","Configure Deno Sandbox and run isolated sandboxes on Deno Deploy.","i-simple-icons-deno",{"title":295,"path":296,"description":297,"icon":298},"Docker","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fdocker","Configure Docker Sandbox and run isolated sandboxes locally.","i-simple-icons-docker",{"title":300,"path":301,"description":302,"icon":303},"Local","\u002Fdocs\u002Fvite\u002Fsandbox\u002Flocal","Run sandboxes locally with OS-level isolation using platform primitives.","i-lucide-monitor",{"title":305,"path":306,"description":307,"icon":308,"children":309},"Analytics","\u002Fdocs\u002Fvite\u002Fanalytics","Integrate explicit analytics backends with a small shared runtime API.","i-lucide-megaphone",[310,313],{"title":148,"path":311,"description":312,"icon":151},"\u002Fdocs\u002Fvite\u002Fanalytics\u002Fvercel","Configure Vercel Analytics through the official SDK and keep a small portable runtime API.",{"title":85,"path":314,"description":315,"icon":88},"\u002Fdocs\u002Fvite\u002Fanalytics\u002Fcloudflare","Configure first-party analytics ingestion on Cloudflare and query a semantic event shape on top of Analytics Engine slots.",{"title":317,"path":318,"children":319},"Nitro","\u002Fdocs\u002Fnitro",[320,329,340,345,352,361,396,401,416,427,436,445,460],{"title":13,"path":321,"description":15,"icon":16,"children":322},"\u002Fdocs\u002Fnitro\u002Fgetting-started",[323,325,327],{"title":19,"path":324,"description":21},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Fchoose-a-package",{"title":23,"path":326,"description":25},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Fentrypoints",{"title":27,"path":328,"description":29},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Farchitecture",{"title":31,"path":330,"description":33,"icon":34,"children":331},"\u002Fdocs\u002Fnitro\u002Fdatabase",[332,334,336,338],{"title":37,"path":333,"description":39},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fdrizzle",{"title":41,"path":335,"description":43},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fprisma",{"title":45,"path":337,"description":47},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fmigrations",{"title":49,"path":339,"description":51},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fplatform-notes",{"title":53,"path":341,"description":55,"icon":56,"children":342},"\u002Fdocs\u002Fnitro\u002Fkv",[343],{"title":59,"path":344,"description":61,"icon":62},"\u002Fdocs\u002Fnitro\u002Fkv\u002Fusage",{"title":64,"path":346,"description":66,"icon":67,"children":347},"\u002Fdocs\u002Fnitro\u002Fblob",[348,350],{"title":70,"path":349,"description":72,"icon":73},"\u002Fdocs\u002Fnitro\u002Fblob\u002Fupload",{"title":75,"path":351,"description":77,"icon":62},"\u002Fdocs\u002Fnitro\u002Fblob\u002Fusage",{"title":79,"path":353,"description":81,"icon":82,"children":354},"\u002Fdocs\u002Fnitro\u002Fvector",[355,357,359],{"title":85,"path":356,"description":87,"icon":88,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fcloudflare",{"title":91,"path":358,"description":93,"icon":94,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fpostgres",{"title":96,"path":360,"description":98,"icon":99,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fupstash",{"title":101,"path":362,"description":103,"icon":104,"children":363},"\u002Fdocs\u002Fnitro\u002Fqueue",[364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394],{"title":107,"path":365,"description":109},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fquickstart",{"title":111,"path":367,"description":113},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fruntime-api",{"title":115,"path":369,"description":117},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fwhen-to-use",{"title":119,"path":371,"description":121,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fsend-a-job",{"title":124,"path":373,"description":126,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fdefer-after-response",{"title":128,"path":375,"description":130,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fvalidate-payloads",{"title":132,"path":377,"description":134,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Flocal-development",{"title":136,"path":379,"description":138,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fnative-handles",{"title":140,"path":381,"description":142,"icon":143,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fplatformatic",{"title":85,"path":383,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fcloudflare",{"title":148,"path":385,"description":150,"icon":151,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fvercel",{"title":153,"path":387,"description":155,"icon":156,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fnetlify",{"title":158,"path":389,"description":160,"icon":99,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fupstash-qstash",{"title":162,"path":391,"description":164,"icon":165,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fmemory",{"title":167,"path":393,"description":169},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Ftroubleshooting",{"title":171,"path":395,"description":173},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fplayground",{"title":175,"path":397,"description":177,"icon":178,"children":398},"\u002Fdocs\u002Fnitro\u002Fcache",[399],{"title":59,"path":400,"description":182,"icon":62},"\u002Fdocs\u002Fnitro\u002Fcache\u002Fusage",{"title":184,"path":402,"description":186,"icon":187,"children":403},"\u002Fdocs\u002Fnitro\u002Femail",[404,406,408,410,412,414],{"title":190,"path":405,"description":192,"icon":193},"\u002Fdocs\u002Fnitro\u002Femail\u002Ffrontmatter",{"title":195,"path":407,"description":197,"icon":198},"\u002Fdocs\u002Fnitro\u002Femail\u002Finput-schemas",{"title":200,"path":409,"description":202,"icon":203},"\u002Fdocs\u002Fnitro\u002Femail\u002Fi18n",{"title":205,"path":411,"description":207,"icon":208,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fresend",{"title":210,"path":413,"description":212,"icon":213,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fsendgrid",{"title":215,"path":415,"description":217,"icon":218,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fpostmark",{"title":220,"path":417,"description":222,"icon":223,"children":418},"\u002Fdocs\u002Fnitro\u002Fworkflow",[419,421,423,425],{"title":85,"path":420,"description":227,"icon":88},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fcloudflare",{"title":148,"path":422,"description":230,"icon":151},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fvercel",{"title":232,"path":424,"description":234,"icon":223},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fopenworkflow",{"title":153,"path":426,"description":237,"icon":156},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fnetlify",{"title":239,"path":428,"description":241,"icon":242,"children":429},"\u002Fdocs\u002Fnitro\u002Fcron",[430,432,434],{"title":245,"path":431,"description":247,"icon":248},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fnode",{"title":85,"path":433,"description":251,"icon":88},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fcloudflare",{"title":148,"path":435,"description":254,"icon":151},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fvercel",{"title":256,"path":437,"description":258,"icon":259,"children":438},"\u002Fdocs\u002Fnitro\u002Fbrowser",[439,441,443],{"title":85,"path":440,"description":263,"icon":88},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fcloudflare",{"title":265,"path":442,"description":267,"icon":268},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fbrowserbase",{"title":270,"path":444,"description":272,"icon":259},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fplaywright",{"title":274,"path":446,"description":276,"icon":277,"children":447},"\u002Fdocs\u002Fnitro\u002Fsandbox",[448,450,452,454,456,458],{"title":85,"path":449,"description":281,"icon":88},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fcloudflare",{"title":283,"path":451,"description":285,"icon":88},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fcloudflare-dynamic",{"title":148,"path":453,"description":288,"icon":151},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fvercel",{"title":290,"path":455,"description":292,"icon":293},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fdeno",{"title":295,"path":457,"description":297,"icon":298},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fdocker",{"title":300,"path":459,"description":302,"icon":303},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Flocal",{"title":305,"path":461,"description":307,"icon":308,"children":462},"\u002Fdocs\u002Fnitro\u002Fanalytics",[463,465],{"title":148,"path":464,"description":312,"icon":151},"\u002Fdocs\u002Fnitro\u002Fanalytics\u002Fvercel",{"title":85,"path":466,"description":315,"icon":88},"\u002Fdocs\u002Fnitro\u002Fanalytics\u002Fcloudflare",{"title":468,"path":469,"children":470},"Nuxt","\u002Fdocs\u002Fnuxt",[471,480,491,496,503,512,547,552,567,578,587,596,611],{"title":13,"path":472,"description":15,"icon":16,"children":473},"\u002Fdocs\u002Fnuxt\u002Fgetting-started",[474,476,478],{"title":19,"path":475,"description":21},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fchoose-a-package",{"title":23,"path":477,"description":25},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fentrypoints",{"title":27,"path":479,"description":29},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Farchitecture",{"title":31,"path":481,"description":33,"icon":34,"children":482},"\u002Fdocs\u002Fnuxt\u002Fdatabase",[483,485,487,489],{"title":37,"path":484,"description":39},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fdrizzle",{"title":41,"path":486,"description":43},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fprisma",{"title":45,"path":488,"description":47},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fmigrations",{"title":49,"path":490,"description":51},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fplatform-notes",{"title":53,"path":492,"description":55,"icon":56,"children":493},"\u002Fdocs\u002Fnuxt\u002Fkv",[494],{"title":59,"path":495,"description":61,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fkv\u002Fusage",{"title":64,"path":497,"description":66,"icon":67,"children":498},"\u002Fdocs\u002Fnuxt\u002Fblob",[499,501],{"title":70,"path":500,"description":72,"icon":73},"\u002Fdocs\u002Fnuxt\u002Fblob\u002Fupload",{"title":75,"path":502,"description":77,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fblob\u002Fusage",{"title":79,"path":504,"description":81,"icon":82,"children":505},"\u002Fdocs\u002Fnuxt\u002Fvector",[506,508,510],{"title":85,"path":507,"description":87,"icon":88,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fcloudflare",{"title":91,"path":509,"description":93,"icon":94,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fpostgres",{"title":96,"path":511,"description":98,"icon":99,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fupstash",{"title":101,"path":513,"description":103,"icon":104,"children":514},"\u002Fdocs\u002Fnuxt\u002Fqueue",[515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545],{"title":107,"path":516,"description":109},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fquickstart",{"title":111,"path":518,"description":113},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fruntime-api",{"title":115,"path":520,"description":117},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fwhen-to-use",{"title":119,"path":522,"description":121,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fsend-a-job",{"title":124,"path":524,"description":126,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fdefer-after-response",{"title":128,"path":526,"description":130,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fvalidate-payloads",{"title":132,"path":528,"description":134,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Flocal-development",{"title":136,"path":530,"description":138,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fnative-handles",{"title":140,"path":532,"description":142,"icon":143,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fplatformatic",{"title":85,"path":534,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fcloudflare",{"title":148,"path":536,"description":150,"icon":151,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fvercel",{"title":153,"path":538,"description":155,"icon":156,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fnetlify",{"title":158,"path":540,"description":160,"icon":99,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fupstash-qstash",{"title":162,"path":542,"description":164,"icon":165,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fmemory",{"title":167,"path":544,"description":169},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Ftroubleshooting",{"title":171,"path":546,"description":173},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fplayground",{"title":175,"path":548,"description":177,"icon":178,"children":549},"\u002Fdocs\u002Fnuxt\u002Fcache",[550],{"title":59,"path":551,"description":182,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fcache\u002Fusage",{"title":184,"path":553,"description":186,"icon":187,"children":554},"\u002Fdocs\u002Fnuxt\u002Femail",[555,557,559,561,563,565],{"title":190,"path":556,"description":192,"icon":193},"\u002Fdocs\u002Fnuxt\u002Femail\u002Ffrontmatter",{"title":195,"path":558,"description":197,"icon":198},"\u002Fdocs\u002Fnuxt\u002Femail\u002Finput-schemas",{"title":200,"path":560,"description":202,"icon":203},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fi18n",{"title":205,"path":562,"description":207,"icon":208,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fresend",{"title":210,"path":564,"description":212,"icon":213,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fsendgrid",{"title":215,"path":566,"description":217,"icon":218,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fpostmark",{"title":220,"path":568,"description":222,"icon":223,"children":569},"\u002Fdocs\u002Fnuxt\u002Fworkflow",[570,572,574,576],{"title":85,"path":571,"description":227,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fcloudflare",{"title":148,"path":573,"description":230,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fvercel",{"title":232,"path":575,"description":234,"icon":223},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fopenworkflow",{"title":153,"path":577,"description":237,"icon":156},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fnetlify",{"title":239,"path":579,"description":241,"icon":242,"children":580},"\u002Fdocs\u002Fnuxt\u002Fcron",[581,583,585],{"title":245,"path":582,"description":247,"icon":248},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fnode",{"title":85,"path":584,"description":251,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fcloudflare",{"title":148,"path":586,"description":254,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fvercel",{"title":256,"path":588,"description":258,"icon":259,"children":589},"\u002Fdocs\u002Fnuxt\u002Fbrowser",[590,592,594],{"title":85,"path":591,"description":263,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fcloudflare",{"title":265,"path":593,"description":267,"icon":268},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fbrowserbase",{"title":270,"path":595,"description":272,"icon":259},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fplaywright",{"title":274,"path":597,"description":276,"icon":277,"children":598},"\u002Fdocs\u002Fnuxt\u002Fsandbox",[599,601,603,605,607,609],{"title":85,"path":600,"description":281,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fcloudflare",{"title":283,"path":602,"description":285,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fcloudflare-dynamic",{"title":148,"path":604,"description":288,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fvercel",{"title":290,"path":606,"description":292,"icon":293},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fdeno",{"title":295,"path":608,"description":297,"icon":298},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fdocker",{"title":300,"path":610,"description":302,"icon":303},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Flocal",{"title":305,"path":612,"description":307,"icon":308,"children":613},"\u002Fdocs\u002Fnuxt\u002Fanalytics",[614,616],{"title":148,"path":615,"description":312,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fanalytics\u002Fvercel",{"title":85,"path":617,"description":315,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fanalytics\u002Fcloudflare",{"id":619,"title":53,"body":620,"description":55,"extension":1429,"meta":1430,"navigation":1431,"path":492,"seo":1433,"stem":1434,"__hash__":1435},"docs\u002Fdocs\u002Fnuxt\u002Fkv\u002Findex.md",{"type":621,"value":622,"toc":1419},"minimark",[623,640,645,1107,1111,1114,1142,1160,1174,1180,1188,1192,1204,1290,1294,1378,1404,1415],[624,625,626,627,634,635,639],"p",{},"ViteHub KV automatically configures Nitro Storage, which is built on ",[628,629,633],"a",{"href":630,"rel":631},"https:\u002F\u002Funstorage.unjs.io\u002F",[632],"nofollow","Unstorage",". Register the integration to enable automatic driver detection, and add a ",[636,637,638],"code",{},"kv"," config object only when you need to override the driver.",[641,642,644],"h2",{"id":643},"getting-started","Getting started",[646,647,648,653,774,778,847,947,951],"steps",{},[649,650,652],"h3",{"id":651},"install-the-package","Install the package",[654,655,657,687,701,720,740,760],"tabs",{"sync":656},"kv-install",[658,659,661],"tabs-item",{"icon":660,"label":300},"i-lucide-hard-drive",[662,663,669],"pre",{"className":664,"code":665,"filename":666,"language":667,"meta":668,"style":668},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main\n","Terminal","bash","",[636,670,671],{"__ignoreMap":668},[672,673,676,680,684],"span",{"class":674,"line":675},"line",1,[672,677,679],{"class":678},"sBMFI","pnpm",[672,681,683],{"class":682},"sfazB"," add",[672,685,686],{"class":682}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main\n",[658,688,689],{"icon":88,"label":85},[662,690,691],{"className":664,"code":665,"filename":666,"language":667,"meta":668,"style":668},[636,692,693],{"__ignoreMap":668},[672,694,695,697,699],{"class":674,"line":675},[672,696,679],{"class":678},[672,698,683],{"class":682},[672,700,686],{"class":682},[658,702,703],{"icon":99,"label":96},[662,704,706],{"className":664,"code":705,"filename":666,"language":667,"meta":668,"style":668},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main @upstash\u002Fredis\n",[636,707,708],{"__ignoreMap":668},[672,709,710,712,714,717],{"class":674,"line":675},[672,711,679],{"class":678},[672,713,683],{"class":682},[672,715,716],{"class":682}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main",[672,718,719],{"class":682}," @upstash\u002Fredis\n",[658,721,724],{"icon":722,"label":723},"i-simple-icons-redis","Redis",[662,725,727],{"className":664,"code":726,"filename":666,"language":667,"meta":668,"style":668},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main ioredis\n",[636,728,729],{"__ignoreMap":668},[672,730,731,733,735,737],{"class":674,"line":675},[672,732,679],{"class":678},[672,734,683],{"class":682},[672,736,716],{"class":682},[672,738,739],{"class":682}," ioredis\n",[658,741,744],{"icon":742,"label":743},"i-lucide-database-backup","S3",[662,745,747],{"className":664,"code":746,"filename":666,"language":667,"meta":668,"style":668},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fkv@main aws4fetch\n",[636,748,749],{"__ignoreMap":668},[672,750,751,753,755,757],{"class":674,"line":675},[672,752,679],{"class":678},[672,754,683],{"class":682},[672,756,716],{"class":682},[672,758,759],{"class":682}," aws4fetch\n",[658,761,762],{"icon":293,"label":290},[662,763,764],{"className":664,"code":665,"filename":666,"language":667,"meta":668,"style":668},[636,765,766],{"__ignoreMap":668},[672,767,768,770,772],{"class":674,"line":675},[672,769,679],{"class":678},[672,771,683],{"class":682},[672,773,686],{"class":682},[649,775,777],{"id":776},"choose-an-integration-surface","Choose an integration surface",[779,780,782],"fw",{"id":781},"nuxt",[662,783,788],{"className":784,"code":785,"filename":786,"language":787,"meta":668,"style":668},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fkv\u002Fnuxt'],\n})\n","nuxt.config.ts","ts",[636,789,790,811,838],{"__ignoreMap":668},[672,791,792,796,799,803,807],{"class":674,"line":675},[672,793,795],{"class":794},"s7zQu","export",[672,797,798],{"class":794}," default",[672,800,802],{"class":801},"s2Zo4"," defineNuxtConfig",[672,804,806],{"class":805},"sTEyZ","(",[672,808,810],{"class":809},"sMK4o","{\n",[672,812,814,818,821,824,827,830,832,835],{"class":674,"line":813},2,[672,815,817],{"class":816},"swJcz","  modules",[672,819,820],{"class":809},":",[672,822,823],{"class":805}," [",[672,825,826],{"class":809},"'",[672,828,829],{"class":682},"@vitehub\u002Fkv\u002Fnuxt",[672,831,826],{"class":809},[672,833,834],{"class":805},"]",[672,836,837],{"class":809},",\n",[672,839,841,844],{"class":674,"line":840},3,[672,842,843],{"class":809},"}",[672,845,846],{"class":805},")\n",[654,848,850],{"sync":849},"kv-setup",[658,851,852],{"icon":88,"label":85},[779,853,854],{"id":781},[662,855,857],{"className":784,"code":856,"filename":786,"language":787,"meta":668,"style":668},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fkv\u002Fnuxt'],\n  kv: {\n    driver: 'cloudflare-kv-binding',\n    namespaceId: '\u003Ckv-namespace-id>',\n  },\n})\n",[636,858,859,871,889,899,917,934,940],{"__ignoreMap":668},[672,860,861,863,865,867,869],{"class":674,"line":675},[672,862,795],{"class":794},[672,864,798],{"class":794},[672,866,802],{"class":801},[672,868,806],{"class":805},[672,870,810],{"class":809},[672,872,873,875,877,879,881,883,885,887],{"class":674,"line":813},[672,874,817],{"class":816},[672,876,820],{"class":809},[672,878,823],{"class":805},[672,880,826],{"class":809},[672,882,829],{"class":682},[672,884,826],{"class":809},[672,886,834],{"class":805},[672,888,837],{"class":809},[672,890,891,894,896],{"class":674,"line":840},[672,892,893],{"class":816},"  kv",[672,895,820],{"class":809},[672,897,898],{"class":809}," {\n",[672,900,902,905,907,910,913,915],{"class":674,"line":901},4,[672,903,904],{"class":816},"    driver",[672,906,820],{"class":809},[672,908,909],{"class":809}," '",[672,911,912],{"class":682},"cloudflare-kv-binding",[672,914,826],{"class":809},[672,916,837],{"class":809},[672,918,920,923,925,927,930,932],{"class":674,"line":919},5,[672,921,922],{"class":816},"    namespaceId",[672,924,820],{"class":809},[672,926,909],{"class":809},[672,928,929],{"class":682},"\u003Ckv-namespace-id>",[672,931,826],{"class":809},[672,933,837],{"class":809},[672,935,937],{"class":674,"line":936},6,[672,938,939],{"class":809},"  },\n",[672,941,943,945],{"class":674,"line":942},7,[672,944,843],{"class":809},[672,946,846],{"class":805},[649,948,950],{"id":949},"read-and-write-values","Read and write values",[779,952,953],{"id":781},[662,954,957],{"className":784,"code":955,"filename":956,"language":787,"meta":668,"style":668},"import { kv } from '@vitehub\u002Fkv'\n\nexport default defineEventHandler(async () => {\n  await kv.set('landing:cta', { clicked: true })\n\n  return {\n    landing: await kv.get('landing:cta'),\n  }\n})\n","server\u002Fapi\u002Fkv.put.ts",[636,958,959,984,990,1013,1053,1057,1064,1094,1100],{"__ignoreMap":668},[672,960,961,964,967,970,973,976,978,981],{"class":674,"line":675},[672,962,963],{"class":794},"import",[672,965,966],{"class":809}," {",[672,968,969],{"class":805}," kv",[672,971,972],{"class":809}," }",[672,974,975],{"class":794}," from",[672,977,909],{"class":809},[672,979,980],{"class":682},"@vitehub\u002Fkv",[672,982,983],{"class":809},"'\n",[672,985,986],{"class":674,"line":813},[672,987,989],{"emptyLinePlaceholder":988},true,"\n",[672,991,992,994,996,999,1001,1005,1008,1011],{"class":674,"line":840},[672,993,795],{"class":794},[672,995,798],{"class":794},[672,997,998],{"class":801}," defineEventHandler",[672,1000,806],{"class":805},[672,1002,1004],{"class":1003},"spNyl","async",[672,1006,1007],{"class":809}," ()",[672,1009,1010],{"class":1003}," =>",[672,1012,898],{"class":809},[672,1014,1015,1018,1020,1023,1026,1028,1030,1033,1035,1038,1040,1043,1045,1049,1051],{"class":674,"line":901},[672,1016,1017],{"class":794},"  await",[672,1019,969],{"class":805},[672,1021,1022],{"class":809},".",[672,1024,1025],{"class":801},"set",[672,1027,806],{"class":816},[672,1029,826],{"class":809},[672,1031,1032],{"class":682},"landing:cta",[672,1034,826],{"class":809},[672,1036,1037],{"class":809},",",[672,1039,966],{"class":809},[672,1041,1042],{"class":816}," clicked",[672,1044,820],{"class":809},[672,1046,1048],{"class":1047},"sfNiH"," true",[672,1050,972],{"class":809},[672,1052,846],{"class":816},[672,1054,1055],{"class":674,"line":919},[672,1056,989],{"emptyLinePlaceholder":988},[672,1058,1059,1062],{"class":674,"line":936},[672,1060,1061],{"class":794},"  return",[672,1063,898],{"class":809},[672,1065,1066,1069,1071,1074,1076,1078,1081,1083,1085,1087,1089,1092],{"class":674,"line":942},[672,1067,1068],{"class":816},"    landing",[672,1070,820],{"class":809},[672,1072,1073],{"class":794}," await",[672,1075,969],{"class":805},[672,1077,1022],{"class":809},[672,1079,1080],{"class":801},"get",[672,1082,806],{"class":816},[672,1084,826],{"class":809},[672,1086,1032],{"class":682},[672,1088,826],{"class":809},[672,1090,1091],{"class":816},")",[672,1093,837],{"class":809},[672,1095,1097],{"class":674,"line":1096},8,[672,1098,1099],{"class":809},"  }\n",[672,1101,1103,1105],{"class":674,"line":1102},9,[672,1104,843],{"class":809},[672,1106,846],{"class":805},[641,1108,1110],{"id":1109},"automatic-configuration","Automatic configuration",[624,1112,1113],{},"ViteHub resolves the KV driver during build in the same order NuxtHub uses:",[1115,1116,1117,1124,1127,1130,1133,1136,1139],"ol",{},[1118,1119,1120,1121],"li",{},"explicit ",[636,1122,1123],{},"driver",[1118,1125,1126],{},"Upstash env",[1118,1128,1129],{},"Redis env",[1118,1131,1132],{},"S3 env",[1118,1134,1135],{},"Cloudflare hosting",[1118,1137,1138],{},"Deno hosting",[1118,1140,1141],{},"local filesystem fallback",[1143,1144,1145],"tip",{},[624,1146,1147,1148,1151,1152,1155,1156,1159],{},"On Vercel, ViteHub also detects ",[636,1149,1150],{},"KV_REST_API_URL"," and ",[636,1153,1154],{},"KV_REST_API_TOKEN"," for Upstash, and ",[636,1157,1158],{},"KV_URL"," for Redis.",[1161,1162,1163],"note",{},[624,1164,1165,1166,1169,1170,1173],{},"ViteHub reads KV auto-configuration from ",[636,1167,1168],{},"process.env",". Nuxt, Nitro, Vite, or your process manager must load ",[636,1171,1172],{},".env"," before startup.",[1175,1176,1177],"important",{},[624,1178,1179],{},"On Vercel, KV should be backed by Redis or Upstash. If ViteHub still resolves to the filesystem driver, setup emits an explicit error because local KV is not a valid production store there.",[1161,1181,1182],{},[624,1183,1184,1185,1022],{},"Outside hosted environments, ViteHub falls back to the filesystem driver and stores data in ",[636,1186,1187],{},".data\u002Fkv",[641,1189,1191],{"id":1190},"manual-configuration","Manual configuration",[624,1193,1194,1195,1200,1201,1203],{},"You can use any ",[628,1196,1199],{"href":1197,"rel":1198},"https:\u002F\u002Funstorage.unjs.io\u002Fdrivers",[632],"Unstorage driver"," by configuring ",[636,1202,638],{}," with a driver and its options.",[779,1205,1206],{"id":781},[662,1207,1209],{"className":784,"code":1208,"filename":786,"language":787,"meta":668,"style":668},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fkv\u002Fnuxt'],\n  kv: {\n    driver: 'redis',\n    url: 'redis:\u002F\u002Flocalhost:6379',\n  },\n})\n",[636,1210,1211,1223,1241,1249,1264,1280,1284],{"__ignoreMap":668},[672,1212,1213,1215,1217,1219,1221],{"class":674,"line":675},[672,1214,795],{"class":794},[672,1216,798],{"class":794},[672,1218,802],{"class":801},[672,1220,806],{"class":805},[672,1222,810],{"class":809},[672,1224,1225,1227,1229,1231,1233,1235,1237,1239],{"class":674,"line":813},[672,1226,817],{"class":816},[672,1228,820],{"class":809},[672,1230,823],{"class":805},[672,1232,826],{"class":809},[672,1234,829],{"class":682},[672,1236,826],{"class":809},[672,1238,834],{"class":805},[672,1240,837],{"class":809},[672,1242,1243,1245,1247],{"class":674,"line":840},[672,1244,893],{"class":816},[672,1246,820],{"class":809},[672,1248,898],{"class":809},[672,1250,1251,1253,1255,1257,1260,1262],{"class":674,"line":901},[672,1252,904],{"class":816},[672,1254,820],{"class":809},[672,1256,909],{"class":809},[672,1258,1259],{"class":682},"redis",[672,1261,826],{"class":809},[672,1263,837],{"class":809},[672,1265,1266,1269,1271,1273,1276,1278],{"class":674,"line":919},[672,1267,1268],{"class":816},"    url",[672,1270,820],{"class":809},[672,1272,909],{"class":809},[672,1274,1275],{"class":682},"redis:\u002F\u002Flocalhost:6379",[672,1277,826],{"class":809},[672,1279,837],{"class":809},[672,1281,1282],{"class":674,"line":936},[672,1283,939],{"class":809},[672,1285,1286,1288],{"class":674,"line":942},[672,1287,843],{"class":809},[672,1289,846],{"class":805},[641,1291,1293],{"id":1292},"public-api","Public API",[1295,1296,1297,1310],"table",{},[1298,1299,1300],"thead",{},[1301,1302,1303,1307],"tr",{},[1304,1305,1306],"th",{},"Method",[1304,1308,1309],{},"Use it for",[1311,1312,1313,1328,1338,1348,1358,1368],"tbody",{},[1301,1314,1315,1321],{},[1316,1317,1318],"td",{},[636,1319,1320],{},"kv.set(key, value, options?)",[1316,1322,1323,1324,1327],{},"Store a value. Pass ",[636,1325,1326],{},"{ ttl }"," when the driver supports expiration.",[1301,1329,1330,1335],{},[1316,1331,1332],{},[636,1333,1334],{},"kv.get(key)",[1316,1336,1337],{},"Retrieve a value by key.",[1301,1339,1340,1345],{},[1316,1341,1342],{},[636,1343,1344],{},"kv.has(key)",[1316,1346,1347],{},"Check whether a key exists.",[1301,1349,1350,1355],{},[1316,1351,1352],{},[636,1353,1354],{},"kv.del(key)",[1316,1356,1357],{},"Remove a key.",[1301,1359,1360,1365],{},[1316,1361,1362],{},[636,1363,1364],{},"kv.keys(prefix?)",[1316,1366,1367],{},"List all keys, optionally filtered by prefix.",[1301,1369,1370,1375],{},[1316,1371,1372],{},[636,1373,1374],{},"kv.clear(prefix?)",[1316,1376,1377],{},"Remove all keys, optionally scoped to a prefix.",[1161,1379,1380],{},[624,1381,1382,1384,1385,1389,1390,1393,1394,1393,1397,1393,1400,1403],{},[636,1383,638],{}," is an ",[628,1386,633],{"href":1387,"rel":1388},"https:\u002F\u002Funstorage.unjs.io",[632]," instance with short aliases. The full Unstorage API (",[636,1391,1392],{},"getItem",", ",[636,1395,1396],{},"setItem",[636,1398,1399],{},"removeItem",[636,1401,1402],{},"getKeys",") is also available.",[1405,1406,1409],"u-page-grid",{"className":1407},[1408],"pb-2",[1410,1411],"u-page-card",{"description":1412,"icon":1413,"title":59,"to":1414},"Import `kv` and use the common key-value helpers for reads, writes, deletes, and key listing.","i-lucide-key-round",".\u002Fkv\u002Fusage",[1416,1417,1418],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":668,"searchDepth":813,"depth":813,"links":1420},[1421,1426,1427,1428],{"id":643,"depth":813,"text":644,"children":1422},[1423,1424,1425],{"id":651,"depth":840,"text":652},{"id":776,"depth":840,"text":777},{"id":949,"depth":840,"text":950},{"id":1109,"depth":813,"text":1110},{"id":1190,"depth":813,"text":1191},{"id":1292,"depth":813,"text":1293},"md",{},{"title":1432},"Overview",{"title":53,"description":55},"docs\u002Fnuxt\u002Fkv\u002Findex","aPNj5uTrEylOCD769N8QDKcKHKWtTPme5p6ACGaIkUM",[1437,1438],{"title":49,"path":490,"description":51},{"title":59,"path":495,"description":61},1775391843875]