[{"data":1,"prerenderedAt":511},["ShallowReactive",2],{"navigation":3,"changelog-self-hosting-first":137,"changelog-self-hosting-first-surround":507},[4,123],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":113},"Docs","i-lucide-book","/docs","docs",[10,34,58,73,84,95,114],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[15,17,21,25,29],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":22,"path":23,"stem":24},"Deploy","/docs/getting-started/deploy","docs/1.getting-started/3.deploy",{"title":26,"path":27,"stem":28},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration",{"title":30,"path":31,"stem":32},"Environments","/docs/getting-started/environments","docs/1.getting-started/5.environments","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":57},"Database","/docs/database","docs/2.database/1.index",[39,41,45,49,53],{"title":40,"path":36,"stem":37},"Setup",{"title":42,"path":43,"stem":44},"Schema","/docs/database/schema","docs/2.database/2.schema",{"title":46,"path":47,"stem":48},"Queries","/docs/database/query","docs/2.database/3.query",{"title":50,"path":51,"stem":52},"Migrations","/docs/database/migrations","docs/2.database/4.migrations",{"title":54,"path":55,"stem":56},"CLI","/docs/database/cli","docs/2.database/cli","i-lucide-database",{"title":59,"path":60,"stem":61,"children":62,"icon":72},"Blob","/docs/blob","docs/3.blob/1.index",[63,64,68],{"title":40,"path":60,"stem":61},{"title":65,"path":66,"stem":67},"Upload","/docs/blob/upload","docs/3.blob/2.upload",{"title":69,"path":70,"stem":71},"Blob SDK","/docs/blob/usage","docs/3.blob/3.usage","i-lucide-shapes",{"title":74,"path":75,"stem":76,"children":77,"icon":83},"Key Value","/docs/kv","docs/4.kv/1.index",[78,79],{"title":40,"path":75,"stem":76},{"title":80,"path":81,"stem":82},"KV SDK","/docs/kv/usage","docs/4.kv/2.usage","i-lucide-list",{"title":85,"path":86,"stem":87,"children":88,"icon":94},"Cache","/docs/cache","docs/5.cache/1.index",[89,90],{"title":40,"path":86,"stem":87},{"title":91,"path":92,"stem":93},"Usage","/docs/cache/usage","docs/5.cache/2.usage","i-lucide-zap",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":113},"Guides","i-lucide-book-text","/docs/guides","docs/6.guides",[101,105,109],{"title":102,"path":103,"stem":104},"Pre-rendering","/docs/guides/pre-rendering","docs/6.guides/1.pre-rendering",{"title":106,"path":107,"stem":108},"Realtime","/docs/guides/realtime","docs/6.guides/2.realtime",{"title":110,"path":111,"stem":112},"CI/CD","/docs/guides/ci-cd","docs/6.guides/3.ci-cd",false,{"title":115,"path":116,"stem":117,"children":118,"page":113},"Reference","/docs/reference","docs/7.reference",[119],{"title":120,"path":121,"stem":122},"Environment Variables","/docs/reference/environment-variables","docs/7.reference/1.environment-variables",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":113},"Changelog","i-lucide-megaphone","/changelog","changelog",[129,133],{"title":130,"path":131,"stem":132},"NuxtHub Multi-Vendor is now available","/changelog/nuxthub-multi-vendor","changelog/nuxthub-multi-vendor",{"title":134,"path":135,"stem":136},"Self-Hosting First & Cloud-Agnostic Future","/changelog/self-hosting-first","changelog/self-hosting-first",{"id":138,"title":134,"authors":139,"body":152,"date":500,"description":501,"extension":502,"image":503,"meta":504,"navigation":426,"path":135,"seo":505,"stem":136,"__hash__":506},"changelog/changelog/self-hosting-first.md",[140,146],{"name":141,"avatar":142,"to":144,"username":145},"Rihan Arfan",{"src":143},"https://avatars.githubusercontent.com/u/20425781?v=4","https://bsky.app/profile/rihan.dev","rihan.dev",{"name":147,"avatar":148,"to":150,"username":151},"Sebastien Chopin",{"src":149},"https://avatars.githubusercontent.com/u/904724?v=4","https://x.com/atinux","atinux",{"type":153,"value":154,"toc":489},"minimark",[155,170,180,185,190,197,202,206,209,216,239,243,249,252,278,281,292,296,299,341,344,348,352,378,382,385,482,485],[156,157,158,159,169],"tip",{},"This feature is available in ",[160,161,165],"a",{"href":162,"rel":163},"https://github.com/nuxt-hub/core/releases/tag/v0.9.1",[164],"nofollow",[166,167,168],"code",{},"@nuxthub/core >= v0.9.1",".",[171,172,173,174,179],"p",{},"Following the ",[160,175,178],{"href":176,"rel":177},"https://nuxtlabs.com",[164],"acquisition of NuxtLabs",", we are evolving NuxtHub to become a truly multi-cloud platform. This transition requires us to move away from features tightly coupled to a single cloud provider and adopt a more flexible, cloud-agnostic approach.",[181,182,184],"h2",{"id":183},"whats-changing","What's Changing",[186,187,189],"h3",{"id":188},"nuxthub-admin-sunset","NuxtHub Admin Sunset",[171,191,192,196],{},[193,194,195],"strong",{},"NuxtHub Admin will be sunset on December 31st, 2025."," This platform was designed specifically for Cloudflare deployments, which conflicts with our multi-cloud vision. We are now recommending all projects to adopt self-hosting practices.",[198,199,201],"note",{"to":200},"/docs/getting-started/deploy#self-hosted-recommended","Read more about self-hosting.",[186,203,205],{"id":204},"enhanced-self-hosting-support","Enhanced Self-Hosting Support",[171,207,208],{},"To ensure a smooth transition, we've significantly improved the self-hosting experience with direct Cloudflare API integration. You can now use more features without relying on NuxtHub Admin:",[210,211,213],"h4",{"id":212},"simplified-remote-storage-setup",[193,214,215],{},"Simplified Remote Storage Setup",[217,218,219,227,230,236],"ul",{},[220,221,222,223,226],"li",{},"New ",[166,224,225],{},"hub.projectUrl"," configuration option for cleaner setup",[220,228,229],{},"Environment-based project URL selection (production/preview)",[220,231,232,233],{},"Direct project-to-project authentication via ",[166,234,235],{},"NUXT_HUB_PROJECT_SECRET_KEY",[220,237,238],{},"No more CLI linking required for remote storage access",[198,240,242],{"to":241},"/docs/getting-started/remote-storage","Read more about the remote storage setup.",[210,244,246],{"id":245},"direct-cloudflare-api-support",[193,247,248],{},"Direct Cloudflare API Support",[171,250,251],{},"New environment variables enable direct API access for self-hosted projects:",[217,253,254,260,266,272],{},[220,255,256,259],{},[166,257,258],{},"NUXT_HUB_CLOUDFLARE_ACCOUNT_ID"," - Your Cloudflare account ID",[220,261,262,265],{},[166,263,264],{},"NUXT_HUB_CLOUDFLARE_API_TOKEN"," - API token for service access",[220,267,268,271],{},[166,269,270],{},"NUXT_HUB_CLOUDFLARE_BUCKET_ID"," - For R2 blob operations",[220,273,274,277],{},[166,275,276],{},"NUXT_HUB_CLOUDFLARE_CACHE_NAMESPACE_ID"," - For KV cache operations",[171,279,280],{},"These credentials allow you to:",[217,282,283,286,289],{},[220,284,285],{},"Run AI and AutoRAG models during local development",[220,287,288],{},"Perform cache bulk deletion operations with the Nuxt DevTools",[220,290,291],{},"Generate presigned URLs for blob uploads at runtime",[186,293,295],{"id":294},"cloud-specific-features-deprecated","Cloud-Specific Features Deprecated",[171,297,298],{},"As part of our multi-cloud strategy, we are deprecating features that are specific to Cloudflare:",[217,300,301,323,329,335],{},[220,302,303,306,307,312,313,318,319,322],{},[193,304,305],{},"AI & AutoRAG"," - Use ",[160,308,311],{"href":309,"rel":310},"https://ai-sdk.dev/",[164],"AI SDK"," with the ",[160,314,317],{"href":315,"rel":316},"https://ai-sdk.dev/providers/community-providers/cloudflare-workers-ai",[164],"Workers AI Provider"," instead, or access ",[166,320,321],{},"process.env.AI"," directly",[220,324,325,328],{},[193,326,327],{},"Browser (Puppeteer)"," - Cloudflare-specific browser automation",[220,330,331,334],{},[193,332,333],{},"Vectorize"," - Cloudflare's vector database",[220,336,337,340],{},[193,338,339],{},"Additional Bindings"," - Direct Cloudflare Workers bindings",[171,342,343],{},"These features are now marked as deprecated in the documentation and will be removed in a future major version to maintain framework neutrality.",[181,345,347],{"id":346},"migration-guide","Migration Guide",[186,349,351],{"id":350},"for-current-nuxthub-admin-users","For Current NuxtHub Admin Users",[353,354,355,364,372],"ol",{},[220,356,357,360,361],{},[193,358,359],{},"Switch to self-hosting"," by following the updated ",[160,362,363],{"href":241},"remote storage documentation",[220,365,366,369,370],{},[193,367,368],{},"Set up direct authentication"," using ",[166,371,235],{},[220,373,374,377],{},[193,375,376],{},"Configure Cloudflare credentials"," if using AI, AutoRAG, or advanced blob/cache features",[186,379,381],{"id":380},"for-self-hosted-projects","For Self-Hosted Projects",[171,383,384],{},"Update your environment configuration to use the new Cloudflare API credentials:",[386,387,393],"pre",{"className":388,"code":389,"filename":390,"language":391,"meta":392,"style":392},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Required for remote storage\nNUXT_HUB_PROJECT_SECRET_KEY=\u003Cyour-secret-key>\n\n# Optional: for direct Cloudflare API features (AI, AutoRAG, etc.)\nNUXT_HUB_CLOUDFLARE_ACCOUNT_ID=\u003Cyour-account-id>\nNUXT_HUB_CLOUDFLARE_API_TOKEN=\u003Cyour-api-token>\nNUXT_HUB_CLOUDFLARE_BUCKET_ID=\u003Cyour-bucket-id>\nNUXT_HUB_CLOUDFLARE_CACHE_NAMESPACE_ID=\u003Cyour-namespace-id>\n",".env","bash","",[166,394,395,404,421,428,434,446,458,470],{"__ignoreMap":392},[396,397,400],"span",{"class":398,"line":399},"line",1,[396,401,403],{"class":402},"sHwdD","# Required for remote storage\n",[396,405,407,410,414,418],{"class":398,"line":406},2,[396,408,235],{"class":409},"sTEyZ",[396,411,413],{"class":412},"sMK4o","=\u003C",[396,415,417],{"class":416},"sfazB","your-secret-key",[396,419,420],{"class":412},">\n",[396,422,424],{"class":398,"line":423},3,[396,425,427],{"emptyLinePlaceholder":426},true,"\n",[396,429,431],{"class":398,"line":430},4,[396,432,433],{"class":402},"# Optional: for direct Cloudflare API features (AI, AutoRAG, etc.)\n",[396,435,437,439,441,444],{"class":398,"line":436},5,[396,438,258],{"class":409},[396,440,413],{"class":412},[396,442,443],{"class":416},"your-account-id",[396,445,420],{"class":412},[396,447,449,451,453,456],{"class":398,"line":448},6,[396,450,264],{"class":409},[396,452,413],{"class":412},[396,454,455],{"class":416},"your-api-token",[396,457,420],{"class":412},[396,459,461,463,465,468],{"class":398,"line":460},7,[396,462,270],{"class":409},[396,464,413],{"class":412},[396,466,467],{"class":416},"your-bucket-id",[396,469,420],{"class":412},[396,471,473,475,477,480],{"class":398,"line":472},8,[396,474,276],{"class":409},[396,476,413],{"class":412},[396,478,479],{"class":416},"your-namespace-id",[396,481,420],{"class":412},[198,483,484],{},"In the coming weeks, we will update the NuxtHub Admin with an easier migration path to help you either stay on Cloudflare or move to Vercel.",[486,487,488],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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);}",{"title":392,"searchDepth":406,"depth":406,"links":490},[491,496],{"id":183,"depth":406,"text":184,"children":492},[493,494,495],{"id":188,"depth":423,"text":189},{"id":204,"depth":423,"text":205},{"id":294,"depth":423,"text":295},{"id":346,"depth":406,"text":347,"children":497},[498,499],{"id":350,"depth":423,"text":351},{"id":380,"depth":423,"text":381},"2025-11-26T00:00:00.000Z","We are evolving NuxtHub to become a truly multi-cloud platform. This transition requires us to move away from features tightly coupled to a single cloud provider and adopt a more flexible, cloud-agnostic approach.","md","/images/changelog/self-hosting-first.png",{},{"title":134,"description":501},"BOR5zW7DRdVk1vFqmUUx_cB5fr5LnpwPNxWO1F9_rZQ",[508,510],{"title":130,"path":131,"stem":132,"description":509,"children":-1},"NuxtHub is now available on multiple cloud providers. You can now deploy your NuxtHub project on your own hosting provider.",null,1774893100221]