[{"data":1,"prerenderedAt":3112},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/migration":137,"/docs/getting-started/migration-surround":3107},[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":139,"body":140,"description":3100,"extension":3101,"links":3102,"meta":3103,"navigation":3104,"path":27,"seo":3105,"stem":28,"__hash__":3106},"docs/docs/1.getting-started/4.migration.md","Migrating from v0.9 to v0.10",{"type":141,"value":142,"toc":3071},"minimark",[143,156,164,169,185,190,218,222,382,386,389,398,456,459,601,605,613,658,662,665,741,745,749,755,760,860,865,959,965,969,972,1486,1489,1508,1512,1520,1524,1606,1610,1706,1710,1716,1720,1787,1791,1864,1868,1871,1882,1886,1889,1894,1904,1957,2213,2222,2241,2245,2251,2544,2548,2552,2557,2623,2637,2641,2644,2647,2660,2842,2846,2853,2857,2870,2874,2880,2904,2908,3025,3029,3032,3067],[144,145,146,147,151,152,155],"p",{},"NuxtHub v0.10 introduces a significant shift toward ",[148,149,150],"strong",{},"multi-cloud support"," and ",[148,153,154],{},"self-hosting",", moving away from the Cloudflare-exclusive approach of older versions. This guide will help you migrate your existing v0.9 project to v0.10.",[157,158,159,160,163],"important",{},"This guide covers migration from ",[148,161,162],{},"v0.9 to v0.10",". If you're using the NuxtHub Admin migration wizard, note that some instructions may reference older versions and can be disregarded in favor of this documentation.",[165,166,168],"h2",{"id":167},"overview-of-changes","Overview of Changes",[170,171,172,173,180,181,184],"callout",{},"You can visit ",[174,175,179],"a",{"href":176,"rel":177},"https://legacy.hub.nuxt.com",[178],"nofollow","legacy.hub.nuxt.com"," to read the documentation for ",[148,182,183],{},"v0.9",".",[186,187,189],"h3",{"id":188},"philosophy-shift","Philosophy Shift",[191,192,193,200,206,212],"ul",{},[194,195,196,199],"li",{},[148,197,198],{},"Multi-cloud first",": NuxtHub now supports Cloudflare, Vercel, AWS, and other providers",[194,201,202,205],{},[148,203,204],{},"Self-hosting recommended",": Direct integration with your cloud provider instead of NuxtHub Admin (sunset Dec 31, 2025)",[194,207,208,211],{},[148,209,210],{},"Drizzle ORM integration",": Type-safe database access with PostgreSQL, MySQL, and SQLite support",[194,213,214,217],{},[148,215,216],{},"Cloud-agnostic storage",": Blob, KV, and Cache work across multiple providers",[186,219,221],{"id":220},"breaking-changes-summary","Breaking Changes Summary",[223,224,225,241],"table",{},[226,227,228],"thead",{},[229,230,231,235,238],"tr",{},[232,233,234],"th",{},"Feature",[232,236,237],{},"v0.x",[232,239,240],{},"v0.10",[242,243,244,270,285,305,323,341,359,370],"tbody",{},[229,245,246,250,256],{},[247,248,249],"td",{},"Database config",[247,251,252],{},[253,254,255],"code",{},"hub.database: true",[247,257,258,261,262,265,266,269],{},[253,259,260],{},"hub.db: 'sqlite'"," (or ",[253,263,264],{},"'postgresql'",", ",[253,267,268],{},"'mysql'",")",[229,271,272,275,280],{},[247,273,274],{},"Database directory",[247,276,277],{},[253,278,279],{},"server/database/",[247,281,282],{},[253,283,284],{},"server/db/",[229,286,287,290,295],{},[247,288,289],{},"Database access",[247,291,292],{},[253,293,294],{},"hubDatabase()",[247,296,297,300,301,304],{},[253,298,299],{},"db"," from ",[253,302,303],{},"hub:db"," (Drizzle ORM)",[229,306,307,310,315],{},[247,308,309],{},"Blob access",[247,311,312],{},[253,313,314],{},"hubBlob()",[247,316,317,300,320],{},[253,318,319],{},"blob",[253,321,322],{},"hub:blob",[229,324,325,328,333],{},[247,326,327],{},"KV access",[247,329,330],{},[253,331,332],{},"hubKV()",[247,334,335,300,338],{},[253,336,337],{},"kv",[253,339,340],{},"hub:kv",[229,342,343,346,351],{},[247,344,345],{},"AI & AutoRAG",[247,347,348],{},[253,349,350],{},"hubAI()",[247,352,353,354,269],{},"Removed (use ",[174,355,358],{"href":356,"rel":357},"https://ai-sdk.dev",[178],"AI SDK",[229,360,361,364,367],{},[247,362,363],{},"NuxtHub Admin",[247,365,366],{},"Supported",[247,368,369],{},"Deprecated (sunset Dec 31, 2025)",[229,371,372,377,379],{},[247,373,374],{},[253,375,376],{},"nuxthub deploy",[247,378,366],{},[247,380,381],{},"Deprecated (sunset Jan 31, 2026)",[165,383,385],{"id":384},"configuration-migration","Configuration Migration",[186,387,35],{"id":388},"database",[144,390,391,392,394,395,397],{},"The ",[253,393,388],{}," option has been renamed to ",[253,396,299],{}," and now requires specifying the SQL dialect:",[399,400,406],"pre",{"className":401,"code":402,"filename":403,"language":404,"meta":405,"style":405},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  hub: {\n-   database: true\n+   db: 'sqlite' // or 'postgresql', 'mysql'\n  }\n})\n","nuxt.config.ts","diff","",[253,407,408,417,423,434,444,450],{"__ignoreMap":405},[409,410,413],"span",{"class":411,"line":412},"line",1,[409,414,416],{"class":415},"sTEyZ","export default defineNuxtConfig({\n",[409,418,420],{"class":411,"line":419},2,[409,421,422],{"class":415},"  hub: {\n",[409,424,426,430],{"class":411,"line":425},3,[409,427,429],{"class":428},"sMK4o","-",[409,431,433],{"class":432},"swJcz","   database: true\n",[409,435,437,440],{"class":411,"line":436},4,[409,438,439],{"class":428},"+",[409,441,443],{"class":442},"sfazB","   db: 'sqlite' // or 'postgresql', 'mysql'\n",[409,445,447],{"class":411,"line":446},5,[409,448,449],{"class":415},"  }\n",[409,451,453],{"class":411,"line":452},6,[409,454,455],{"class":415},"})\n",[144,457,458],{},"For advanced configuration with explicit driver and connection details:",[399,460,464],{"className":461,"code":462,"filename":403,"language":463,"meta":405,"style":405},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  hub: {\n    db: {\n      dialect: 'postgresql',\n      driver: 'postgres-js', // Optional: auto-detected from env vars\n      connection: {\n        connectionString: process.env.DATABASE_URL\n      }\n    }\n  }\n})\n","ts",[253,465,466,485,496,505,524,545,554,575,581,587,592],{"__ignoreMap":405},[409,467,468,472,475,479,482],{"class":411,"line":412},[409,469,471],{"class":470},"s7zQu","export",[409,473,474],{"class":470}," default",[409,476,478],{"class":477},"s2Zo4"," defineNuxtConfig",[409,480,481],{"class":415},"(",[409,483,484],{"class":428},"{\n",[409,486,487,490,493],{"class":411,"line":419},[409,488,489],{"class":432},"  hub",[409,491,492],{"class":428},":",[409,494,495],{"class":428}," {\n",[409,497,498,501,503],{"class":411,"line":425},[409,499,500],{"class":432},"    db",[409,502,492],{"class":428},[409,504,495],{"class":428},[409,506,507,510,512,515,518,521],{"class":411,"line":436},[409,508,509],{"class":432},"      dialect",[409,511,492],{"class":428},[409,513,514],{"class":428}," '",[409,516,517],{"class":442},"postgresql",[409,519,520],{"class":428},"'",[409,522,523],{"class":428},",\n",[409,525,526,529,531,533,536,538,541],{"class":411,"line":446},[409,527,528],{"class":432},"      driver",[409,530,492],{"class":428},[409,532,514],{"class":428},[409,534,535],{"class":442},"postgres-js",[409,537,520],{"class":428},[409,539,540],{"class":428},",",[409,542,544],{"class":543},"sHwdD"," // Optional: auto-detected from env vars\n",[409,546,547,550,552],{"class":411,"line":452},[409,548,549],{"class":432},"      connection",[409,551,492],{"class":428},[409,553,495],{"class":428},[409,555,557,560,562,565,567,570,572],{"class":411,"line":556},7,[409,558,559],{"class":432},"        connectionString",[409,561,492],{"class":428},[409,563,564],{"class":415}," process",[409,566,184],{"class":428},[409,568,569],{"class":415},"env",[409,571,184],{"class":428},[409,573,574],{"class":415},"DATABASE_URL\n",[409,576,578],{"class":411,"line":577},8,[409,579,580],{"class":428},"      }\n",[409,582,584],{"class":411,"line":583},9,[409,585,586],{"class":428},"    }\n",[409,588,590],{"class":411,"line":589},10,[409,591,449],{"class":428},[409,593,595,598],{"class":411,"line":594},11,[409,596,597],{"class":428},"}",[409,599,600],{"class":415},")\n",[186,602,604],{"id":603},"directory-structure","Directory Structure",[144,606,607,608,610,611,492],{},"Move your database files from ",[253,609,279],{}," to ",[253,612,284],{},[399,614,618],{"className":615,"code":616,"language":617,"meta":405,"style":405},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Move schema files\nmv server/database/schema.ts server/db/schema.ts\n\n# Move migrations\nmv server/database/migrations/ server/db/migrations/\n","bash",[253,619,620,625,637,643,648],{"__ignoreMap":405},[409,621,622],{"class":411,"line":412},[409,623,624],{"class":543},"# Move schema files\n",[409,626,627,631,634],{"class":411,"line":419},[409,628,630],{"class":629},"sBMFI","mv",[409,632,633],{"class":442}," server/database/schema.ts",[409,635,636],{"class":442}," server/db/schema.ts\n",[409,638,639],{"class":411,"line":425},[409,640,642],{"emptyLinePlaceholder":641},true,"\n",[409,644,645],{"class":411,"line":436},[409,646,647],{"class":543},"# Move migrations\n",[409,649,650,652,655],{"class":411,"line":446},[409,651,630],{"class":629},[409,653,654],{"class":442}," server/database/migrations/",[409,656,657],{"class":442}," server/db/migrations/\n",[186,659,661],{"id":660},"blob-kv-cache","Blob, KV & Cache",[144,663,664],{},"These features remain largely the same but now support multiple providers:",[399,666,668],{"className":461,"code":667,"filename":403,"language":463,"meta":405,"style":405},"export default defineNuxtConfig({\n  hub: {\n    blob: true,  // Auto-configures based on provider\n    kv: true,    // Auto-configures based on provider\n    cache: true  // Auto-configures based on provider\n  }\n})\n",[253,669,670,682,690,706,720,731,735],{"__ignoreMap":405},[409,671,672,674,676,678,680],{"class":411,"line":412},[409,673,471],{"class":470},[409,675,474],{"class":470},[409,677,478],{"class":477},[409,679,481],{"class":415},[409,681,484],{"class":428},[409,683,684,686,688],{"class":411,"line":419},[409,685,489],{"class":432},[409,687,492],{"class":428},[409,689,495],{"class":428},[409,691,692,695,697,701,703],{"class":411,"line":425},[409,693,694],{"class":432},"    blob",[409,696,492],{"class":428},[409,698,700],{"class":699},"sfNiH"," true",[409,702,540],{"class":428},[409,704,705],{"class":543},"  // Auto-configures based on provider\n",[409,707,708,711,713,715,717],{"class":411,"line":436},[409,709,710],{"class":432},"    kv",[409,712,492],{"class":428},[409,714,700],{"class":699},[409,716,540],{"class":428},[409,718,719],{"class":543},"    // Auto-configures based on provider\n",[409,721,722,725,727,729],{"class":411,"line":446},[409,723,724],{"class":432},"    cache",[409,726,492],{"class":428},[409,728,700],{"class":699},[409,730,705],{"class":543},[409,732,733],{"class":411,"line":452},[409,734,449],{"class":428},[409,736,737,739],{"class":411,"line":556},[409,738,597],{"class":428},[409,740,600],{"class":415},[165,742,744],{"id":743},"code-migration","Code Migration",[186,746,748],{"id":747},"database-access","Database Access",[144,750,751,752,754],{},"Replace ",[253,753,294],{}," with Drizzle ORM:",[144,756,757],{},[148,758,759],{},"Before (v0.x):",[399,761,763],{"className":461,"code":762,"language":463,"meta":405,"style":405},"export default eventHandler(async () => {\n  const db = hubDatabase()\n  const users = await db.prepare('SELECT * FROM users').all()\n  return users.results\n})\n",[253,764,765,788,805,842,854],{"__ignoreMap":405},[409,766,767,769,771,774,776,780,783,786],{"class":411,"line":412},[409,768,471],{"class":470},[409,770,474],{"class":470},[409,772,773],{"class":477}," eventHandler",[409,775,481],{"class":415},[409,777,779],{"class":778},"spNyl","async",[409,781,782],{"class":428}," ()",[409,784,785],{"class":778}," =>",[409,787,495],{"class":428},[409,789,790,793,796,799,802],{"class":411,"line":419},[409,791,792],{"class":778},"  const",[409,794,795],{"class":415}," db",[409,797,798],{"class":428}," =",[409,800,801],{"class":477}," hubDatabase",[409,803,804],{"class":432},"()\n",[409,806,807,809,812,814,817,819,821,824,826,828,831,833,835,837,840],{"class":411,"line":425},[409,808,792],{"class":778},[409,810,811],{"class":415}," users",[409,813,798],{"class":428},[409,815,816],{"class":470}," await",[409,818,795],{"class":415},[409,820,184],{"class":428},[409,822,823],{"class":477},"prepare",[409,825,481],{"class":432},[409,827,520],{"class":428},[409,829,830],{"class":442},"SELECT * FROM users",[409,832,520],{"class":428},[409,834,269],{"class":432},[409,836,184],{"class":428},[409,838,839],{"class":477},"all",[409,841,804],{"class":432},[409,843,844,847,849,851],{"class":411,"line":436},[409,845,846],{"class":470},"  return",[409,848,811],{"class":415},[409,850,184],{"class":428},[409,852,853],{"class":415},"results\n",[409,855,856,858],{"class":411,"line":446},[409,857,597],{"class":428},[409,859,600],{"class":415},[144,861,862],{},[148,863,864],{},"After (v0.10):",[399,866,868],{"className":461,"code":867,"language":463,"meta":405,"style":405},"import { db, schema } from 'hub:db'\n\nexport default eventHandler(async () => {\n  return await db.select().from(schema.users)\n})\n",[253,869,870,898,902,920,953],{"__ignoreMap":405},[409,871,872,875,878,880,882,885,888,891,893,895],{"class":411,"line":412},[409,873,874],{"class":470},"import",[409,876,877],{"class":428}," {",[409,879,795],{"class":415},[409,881,540],{"class":428},[409,883,884],{"class":415}," schema",[409,886,887],{"class":428}," }",[409,889,890],{"class":470}," from",[409,892,514],{"class":428},[409,894,303],{"class":442},[409,896,897],{"class":428},"'\n",[409,899,900],{"class":411,"line":419},[409,901,642],{"emptyLinePlaceholder":641},[409,903,904,906,908,910,912,914,916,918],{"class":411,"line":425},[409,905,471],{"class":470},[409,907,474],{"class":470},[409,909,773],{"class":477},[409,911,481],{"class":415},[409,913,779],{"class":778},[409,915,782],{"class":428},[409,917,785],{"class":778},[409,919,495],{"class":428},[409,921,922,924,926,928,930,933,936,938,941,943,946,948,951],{"class":411,"line":436},[409,923,846],{"class":470},[409,925,816],{"class":470},[409,927,795],{"class":415},[409,929,184],{"class":428},[409,931,932],{"class":477},"select",[409,934,935],{"class":432},"()",[409,937,184],{"class":428},[409,939,940],{"class":477},"from",[409,942,481],{"class":432},[409,944,945],{"class":415},"schema",[409,947,184],{"class":428},[409,949,950],{"class":415},"users",[409,952,600],{"class":432},[409,954,955,957],{"class":411,"line":446},[409,956,597],{"class":428},[409,958,600],{"class":415},[960,961,391,962,964],"tip",{},[253,963,299],{}," instance is auto-imported on server-side, so you can use it directly without importing.",[186,966,968],{"id":967},"schema-definition","Schema Definition",[144,970,971],{},"Create your schema using Drizzle ORM syntax:",[973,974,976,1169,1329],"tabs",{"sync":975},"database-dialect",[977,978,981],"tabs-item",{"icon":979,"label":980},"i-simple-icons-sqlite","SQLite",[399,982,985],{"className":461,"code":983,"filename":984,"language":463,"meta":405,"style":405},"import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'\n\nexport const users = sqliteTable('users', {\n  id: integer().primaryKey({ autoIncrement: true }),\n  name: text().notNull(),\n  email: text().notNull().unique(),\n  createdAt: integer({ mode: 'timestamp' }).notNull()\n})\n","server/db/schema.ts",[253,986,987,1017,1021,1048,1082,1102,1128,1163],{"__ignoreMap":405},[409,988,989,991,993,996,998,1001,1003,1006,1008,1010,1012,1015],{"class":411,"line":412},[409,990,874],{"class":470},[409,992,877],{"class":428},[409,994,995],{"class":415}," sqliteTable",[409,997,540],{"class":428},[409,999,1000],{"class":415}," text",[409,1002,540],{"class":428},[409,1004,1005],{"class":415}," integer",[409,1007,887],{"class":428},[409,1009,890],{"class":470},[409,1011,514],{"class":428},[409,1013,1014],{"class":442},"drizzle-orm/sqlite-core",[409,1016,897],{"class":428},[409,1018,1019],{"class":411,"line":419},[409,1020,642],{"emptyLinePlaceholder":641},[409,1022,1023,1025,1028,1031,1034,1036,1038,1040,1042,1044,1046],{"class":411,"line":425},[409,1024,471],{"class":470},[409,1026,1027],{"class":778}," const",[409,1029,1030],{"class":415}," users ",[409,1032,1033],{"class":428},"=",[409,1035,995],{"class":477},[409,1037,481],{"class":415},[409,1039,520],{"class":428},[409,1041,950],{"class":442},[409,1043,520],{"class":428},[409,1045,540],{"class":428},[409,1047,495],{"class":428},[409,1049,1050,1053,1055,1057,1059,1061,1064,1066,1069,1072,1074,1076,1078,1080],{"class":411,"line":436},[409,1051,1052],{"class":432},"  id",[409,1054,492],{"class":428},[409,1056,1005],{"class":477},[409,1058,935],{"class":415},[409,1060,184],{"class":428},[409,1062,1063],{"class":477},"primaryKey",[409,1065,481],{"class":415},[409,1067,1068],{"class":428},"{",[409,1070,1071],{"class":432}," autoIncrement",[409,1073,492],{"class":428},[409,1075,700],{"class":699},[409,1077,887],{"class":428},[409,1079,269],{"class":415},[409,1081,523],{"class":428},[409,1083,1084,1087,1089,1091,1093,1095,1098,1100],{"class":411,"line":446},[409,1085,1086],{"class":432},"  name",[409,1088,492],{"class":428},[409,1090,1000],{"class":477},[409,1092,935],{"class":415},[409,1094,184],{"class":428},[409,1096,1097],{"class":477},"notNull",[409,1099,935],{"class":415},[409,1101,523],{"class":428},[409,1103,1104,1107,1109,1111,1113,1115,1117,1119,1121,1124,1126],{"class":411,"line":452},[409,1105,1106],{"class":432},"  email",[409,1108,492],{"class":428},[409,1110,1000],{"class":477},[409,1112,935],{"class":415},[409,1114,184],{"class":428},[409,1116,1097],{"class":477},[409,1118,935],{"class":415},[409,1120,184],{"class":428},[409,1122,1123],{"class":477},"unique",[409,1125,935],{"class":415},[409,1127,523],{"class":428},[409,1129,1130,1133,1135,1137,1139,1141,1144,1146,1148,1151,1153,1155,1157,1159,1161],{"class":411,"line":556},[409,1131,1132],{"class":432},"  createdAt",[409,1134,492],{"class":428},[409,1136,1005],{"class":477},[409,1138,481],{"class":415},[409,1140,1068],{"class":428},[409,1142,1143],{"class":432}," mode",[409,1145,492],{"class":428},[409,1147,514],{"class":428},[409,1149,1150],{"class":442},"timestamp",[409,1152,520],{"class":428},[409,1154,887],{"class":428},[409,1156,269],{"class":415},[409,1158,184],{"class":428},[409,1160,1097],{"class":477},[409,1162,804],{"class":415},[409,1164,1165,1167],{"class":411,"line":577},[409,1166,597],{"class":428},[409,1168,600],{"class":415},[977,1170,1173],{"icon":1171,"label":1172},"i-simple-icons-postgresql","PostgreSQL",[399,1174,1176],{"className":461,"code":1175,"filename":984,"language":463,"meta":405,"style":405},"import { pgTable, text, serial, timestamp } from 'drizzle-orm/pg-core'\n\nexport const users = pgTable('users', {\n  id: serial().primaryKey(),\n  name: text().notNull(),\n  email: text().notNull().unique(),\n  createdAt: timestamp().notNull().defaultNow()\n})\n",[253,1177,1178,1212,1216,1240,1258,1276,1300,1323],{"__ignoreMap":405},[409,1179,1180,1182,1184,1187,1189,1191,1193,1196,1198,1201,1203,1205,1207,1210],{"class":411,"line":412},[409,1181,874],{"class":470},[409,1183,877],{"class":428},[409,1185,1186],{"class":415}," pgTable",[409,1188,540],{"class":428},[409,1190,1000],{"class":415},[409,1192,540],{"class":428},[409,1194,1195],{"class":415}," serial",[409,1197,540],{"class":428},[409,1199,1200],{"class":415}," timestamp",[409,1202,887],{"class":428},[409,1204,890],{"class":470},[409,1206,514],{"class":428},[409,1208,1209],{"class":442},"drizzle-orm/pg-core",[409,1211,897],{"class":428},[409,1213,1214],{"class":411,"line":419},[409,1215,642],{"emptyLinePlaceholder":641},[409,1217,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238],{"class":411,"line":425},[409,1219,471],{"class":470},[409,1221,1027],{"class":778},[409,1223,1030],{"class":415},[409,1225,1033],{"class":428},[409,1227,1186],{"class":477},[409,1229,481],{"class":415},[409,1231,520],{"class":428},[409,1233,950],{"class":442},[409,1235,520],{"class":428},[409,1237,540],{"class":428},[409,1239,495],{"class":428},[409,1241,1242,1244,1246,1248,1250,1252,1254,1256],{"class":411,"line":436},[409,1243,1052],{"class":432},[409,1245,492],{"class":428},[409,1247,1195],{"class":477},[409,1249,935],{"class":415},[409,1251,184],{"class":428},[409,1253,1063],{"class":477},[409,1255,935],{"class":415},[409,1257,523],{"class":428},[409,1259,1260,1262,1264,1266,1268,1270,1272,1274],{"class":411,"line":446},[409,1261,1086],{"class":432},[409,1263,492],{"class":428},[409,1265,1000],{"class":477},[409,1267,935],{"class":415},[409,1269,184],{"class":428},[409,1271,1097],{"class":477},[409,1273,935],{"class":415},[409,1275,523],{"class":428},[409,1277,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298],{"class":411,"line":452},[409,1279,1106],{"class":432},[409,1281,492],{"class":428},[409,1283,1000],{"class":477},[409,1285,935],{"class":415},[409,1287,184],{"class":428},[409,1289,1097],{"class":477},[409,1291,935],{"class":415},[409,1293,184],{"class":428},[409,1295,1123],{"class":477},[409,1297,935],{"class":415},[409,1299,523],{"class":428},[409,1301,1302,1304,1306,1308,1310,1312,1314,1316,1318,1321],{"class":411,"line":556},[409,1303,1132],{"class":432},[409,1305,492],{"class":428},[409,1307,1200],{"class":477},[409,1309,935],{"class":415},[409,1311,184],{"class":428},[409,1313,1097],{"class":477},[409,1315,935],{"class":415},[409,1317,184],{"class":428},[409,1319,1320],{"class":477},"defaultNow",[409,1322,804],{"class":415},[409,1324,1325,1327],{"class":411,"line":577},[409,1326,597],{"class":428},[409,1328,600],{"class":415},[977,1330,1333],{"icon":1331,"label":1332},"i-simple-icons-mysql","MySQL",[399,1334,1336],{"className":461,"code":1335,"filename":984,"language":463,"meta":405,"style":405},"import { mysqlTable, text, serial, timestamp } from 'drizzle-orm/mysql-core'\n\nexport const users = mysqlTable('users', {\n  id: serial().primaryKey(),\n  name: text().notNull(),\n  email: text().notNull().unique(),\n  createdAt: timestamp().notNull().defaultNow()\n})\n",[253,1337,1338,1370,1374,1398,1416,1434,1458,1480],{"__ignoreMap":405},[409,1339,1340,1342,1344,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1368],{"class":411,"line":412},[409,1341,874],{"class":470},[409,1343,877],{"class":428},[409,1345,1346],{"class":415}," mysqlTable",[409,1348,540],{"class":428},[409,1350,1000],{"class":415},[409,1352,540],{"class":428},[409,1354,1195],{"class":415},[409,1356,540],{"class":428},[409,1358,1200],{"class":415},[409,1360,887],{"class":428},[409,1362,890],{"class":470},[409,1364,514],{"class":428},[409,1366,1367],{"class":442},"drizzle-orm/mysql-core",[409,1369,897],{"class":428},[409,1371,1372],{"class":411,"line":419},[409,1373,642],{"emptyLinePlaceholder":641},[409,1375,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396],{"class":411,"line":425},[409,1377,471],{"class":470},[409,1379,1027],{"class":778},[409,1381,1030],{"class":415},[409,1383,1033],{"class":428},[409,1385,1346],{"class":477},[409,1387,481],{"class":415},[409,1389,520],{"class":428},[409,1391,950],{"class":442},[409,1393,520],{"class":428},[409,1395,540],{"class":428},[409,1397,495],{"class":428},[409,1399,1400,1402,1404,1406,1408,1410,1412,1414],{"class":411,"line":436},[409,1401,1052],{"class":432},[409,1403,492],{"class":428},[409,1405,1195],{"class":477},[409,1407,935],{"class":415},[409,1409,184],{"class":428},[409,1411,1063],{"class":477},[409,1413,935],{"class":415},[409,1415,523],{"class":428},[409,1417,1418,1420,1422,1424,1426,1428,1430,1432],{"class":411,"line":446},[409,1419,1086],{"class":432},[409,1421,492],{"class":428},[409,1423,1000],{"class":477},[409,1425,935],{"class":415},[409,1427,184],{"class":428},[409,1429,1097],{"class":477},[409,1431,935],{"class":415},[409,1433,523],{"class":428},[409,1435,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456],{"class":411,"line":452},[409,1437,1106],{"class":432},[409,1439,492],{"class":428},[409,1441,1000],{"class":477},[409,1443,935],{"class":415},[409,1445,184],{"class":428},[409,1447,1097],{"class":477},[409,1449,935],{"class":415},[409,1451,184],{"class":428},[409,1453,1123],{"class":477},[409,1455,935],{"class":415},[409,1457,523],{"class":428},[409,1459,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478],{"class":411,"line":556},[409,1461,1132],{"class":432},[409,1463,492],{"class":428},[409,1465,1200],{"class":477},[409,1467,935],{"class":415},[409,1469,184],{"class":428},[409,1471,1097],{"class":477},[409,1473,935],{"class":415},[409,1475,184],{"class":428},[409,1477,1320],{"class":477},[409,1479,804],{"class":415},[409,1481,1482,1484],{"class":411,"line":577},[409,1483,597],{"class":428},[409,1485,600],{"class":415},[144,1487,1488],{},"Then generate migrations:",[399,1490,1493],{"className":615,"code":1491,"filename":1492,"language":617,"meta":405,"style":405},"npx nuxt db generate\n","Terminal",[253,1494,1495],{"__ignoreMap":405},[409,1496,1497,1500,1503,1505],{"class":411,"line":412},[409,1498,1499],{"class":629},"npx",[409,1501,1502],{"class":442}," nuxt",[409,1504,795],{"class":442},[409,1506,1507],{"class":442}," generate\n",[186,1509,1511],{"id":1510},"blob-access","Blob Access",[144,1513,751,1514,1516,1517,1519],{},[253,1515,314],{}," with the new ",[253,1518,319],{}," import:",[144,1521,1522],{},[148,1523,759],{},[399,1525,1527],{"className":461,"code":1526,"language":463,"meta":405,"style":405},"export default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n  return hubBlob().serve(event, pathname)\n})\n",[253,1528,1529,1554,1576,1600],{"__ignoreMap":405},[409,1530,1531,1533,1535,1537,1539,1541,1544,1548,1550,1552],{"class":411,"line":412},[409,1532,471],{"class":470},[409,1534,474],{"class":470},[409,1536,773],{"class":477},[409,1538,481],{"class":415},[409,1540,779],{"class":778},[409,1542,1543],{"class":428}," (",[409,1545,1547],{"class":1546},"sHdIc","event",[409,1549,269],{"class":428},[409,1551,785],{"class":778},[409,1553,495],{"class":428},[409,1555,1556,1558,1560,1563,1565,1567,1570,1572,1574],{"class":411,"line":419},[409,1557,792],{"class":778},[409,1559,877],{"class":428},[409,1561,1562],{"class":415}," pathname",[409,1564,887],{"class":428},[409,1566,798],{"class":428},[409,1568,1569],{"class":477}," getRouterParams",[409,1571,481],{"class":432},[409,1573,1547],{"class":415},[409,1575,600],{"class":432},[409,1577,1578,1580,1583,1585,1587,1590,1592,1594,1596,1598],{"class":411,"line":425},[409,1579,846],{"class":470},[409,1581,1582],{"class":477}," hubBlob",[409,1584,935],{"class":432},[409,1586,184],{"class":428},[409,1588,1589],{"class":477},"serve",[409,1591,481],{"class":432},[409,1593,1547],{"class":415},[409,1595,540],{"class":428},[409,1597,1562],{"class":415},[409,1599,600],{"class":432},[409,1601,1602,1604],{"class":411,"line":436},[409,1603,597],{"class":428},[409,1605,600],{"class":415},[144,1607,1608],{},[148,1609,864],{},[399,1611,1613],{"className":461,"code":1612,"language":463,"meta":405,"style":405},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n  return blob.serve(event, pathname)\n})\n",[253,1614,1615,1634,1638,1660,1680,1700],{"__ignoreMap":405},[409,1616,1617,1619,1621,1624,1626,1628,1630,1632],{"class":411,"line":412},[409,1618,874],{"class":470},[409,1620,877],{"class":428},[409,1622,1623],{"class":415}," blob",[409,1625,887],{"class":428},[409,1627,890],{"class":470},[409,1629,514],{"class":428},[409,1631,322],{"class":442},[409,1633,897],{"class":428},[409,1635,1636],{"class":411,"line":419},[409,1637,642],{"emptyLinePlaceholder":641},[409,1639,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658],{"class":411,"line":425},[409,1641,471],{"class":470},[409,1643,474],{"class":470},[409,1645,773],{"class":477},[409,1647,481],{"class":415},[409,1649,779],{"class":778},[409,1651,1543],{"class":428},[409,1653,1547],{"class":1546},[409,1655,269],{"class":428},[409,1657,785],{"class":778},[409,1659,495],{"class":428},[409,1661,1662,1664,1666,1668,1670,1672,1674,1676,1678],{"class":411,"line":436},[409,1663,792],{"class":778},[409,1665,877],{"class":428},[409,1667,1562],{"class":415},[409,1669,887],{"class":428},[409,1671,798],{"class":428},[409,1673,1569],{"class":477},[409,1675,481],{"class":432},[409,1677,1547],{"class":415},[409,1679,600],{"class":432},[409,1681,1682,1684,1686,1688,1690,1692,1694,1696,1698],{"class":411,"line":446},[409,1683,846],{"class":470},[409,1685,1623],{"class":415},[409,1687,184],{"class":428},[409,1689,1589],{"class":477},[409,1691,481],{"class":432},[409,1693,1547],{"class":415},[409,1695,540],{"class":428},[409,1697,1562],{"class":415},[409,1699,600],{"class":432},[409,1701,1702,1704],{"class":411,"line":452},[409,1703,597],{"class":428},[409,1705,600],{"class":415},[186,1707,1709],{"id":1708},"kv-access","KV Access",[144,1711,751,1712,1516,1714,1519],{},[253,1713,332],{},[253,1715,337],{},[144,1717,1718],{},[148,1719,759],{},[399,1721,1723],{"className":461,"code":1722,"language":463,"meta":405,"style":405},"export default eventHandler(async () => {\n  const kv = hubKV()\n  return await kv.get('my-key')\n})\n",[253,1724,1725,1743,1757,1781],{"__ignoreMap":405},[409,1726,1727,1729,1731,1733,1735,1737,1739,1741],{"class":411,"line":412},[409,1728,471],{"class":470},[409,1730,474],{"class":470},[409,1732,773],{"class":477},[409,1734,481],{"class":415},[409,1736,779],{"class":778},[409,1738,782],{"class":428},[409,1740,785],{"class":778},[409,1742,495],{"class":428},[409,1744,1745,1747,1750,1752,1755],{"class":411,"line":419},[409,1746,792],{"class":778},[409,1748,1749],{"class":415}," kv",[409,1751,798],{"class":428},[409,1753,1754],{"class":477}," hubKV",[409,1756,804],{"class":432},[409,1758,1759,1761,1763,1765,1767,1770,1772,1774,1777,1779],{"class":411,"line":425},[409,1760,846],{"class":470},[409,1762,816],{"class":470},[409,1764,1749],{"class":415},[409,1766,184],{"class":428},[409,1768,1769],{"class":477},"get",[409,1771,481],{"class":432},[409,1773,520],{"class":428},[409,1775,1776],{"class":442},"my-key",[409,1778,520],{"class":428},[409,1780,600],{"class":432},[409,1782,1783,1785],{"class":411,"line":436},[409,1784,597],{"class":428},[409,1786,600],{"class":415},[144,1788,1789],{},[148,1790,864],{},[399,1792,1794],{"className":461,"code":1793,"language":463,"meta":405,"style":405},"import { kv } from 'hub:kv'\n\nexport default eventHandler(async () => {\n  return await kv.get('my-key')\n})\n",[253,1795,1796,1814,1818,1836,1858],{"__ignoreMap":405},[409,1797,1798,1800,1802,1804,1806,1808,1810,1812],{"class":411,"line":412},[409,1799,874],{"class":470},[409,1801,877],{"class":428},[409,1803,1749],{"class":415},[409,1805,887],{"class":428},[409,1807,890],{"class":470},[409,1809,514],{"class":428},[409,1811,340],{"class":442},[409,1813,897],{"class":428},[409,1815,1816],{"class":411,"line":419},[409,1817,642],{"emptyLinePlaceholder":641},[409,1819,1820,1822,1824,1826,1828,1830,1832,1834],{"class":411,"line":425},[409,1821,471],{"class":470},[409,1823,474],{"class":470},[409,1825,773],{"class":477},[409,1827,481],{"class":415},[409,1829,779],{"class":778},[409,1831,782],{"class":428},[409,1833,785],{"class":778},[409,1835,495],{"class":428},[409,1837,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856],{"class":411,"line":436},[409,1839,846],{"class":470},[409,1841,816],{"class":470},[409,1843,1749],{"class":415},[409,1845,184],{"class":428},[409,1847,1769],{"class":477},[409,1849,481],{"class":432},[409,1851,520],{"class":428},[409,1853,1776],{"class":442},[409,1855,520],{"class":428},[409,1857,600],{"class":432},[409,1859,1860,1862],{"class":411,"line":446},[409,1861,597],{"class":428},[409,1863,600],{"class":415},[165,1865,1867],{"id":1866},"self-hosting-setup","Self-Hosting Setup",[144,1869,1870],{},"With NuxtHub v0.10, you deploy your project directly to your cloud provider using their tooling.",[1872,1873,1874,1875,1877,1878,1881],"note",{},"Since v0.10.3, NuxtHub auto-generates Cloudflare bindings from your ",[253,1876,403],{}," at build time. Manual ",[253,1879,1880],{},"wrangler.jsonc"," configuration is optional.",[186,1883,1885],{"id":1884},"cloudflare","Cloudflare",[144,1887,1888],{},"NuxtHub supports two approaches for Cloudflare deployment. Choose based on your preference.",[1890,1891,1893],"h4",{"id":1892},"option-a-auto-configuration-recommended","Option A: Auto-Configuration (Recommended)",[144,1895,1896,1897,1900,1901,1903],{},"NuxtHub auto-generates the ",[253,1898,1899],{},"wrangler.json"," file at build time when you provide resource IDs in your config. No manual ",[253,1902,1880],{}," is required.",[1905,1906,1907,1952],"ol",{},[194,1908,1909,1910,492,1915],{},"Create the necessary resources in your ",[174,1911,1914],{"href":1912,"rel":1913},"https://dash.cloudflare.com",[178],"Cloudflare dashboard",[191,1916,1917,1928,1942],{},[194,1918,1919,1924,1925,269],{},[174,1920,1923],{"href":1921,"rel":1922},"https://dash.cloudflare.com/?to=/:account/workers/d1",[178],"D1 Database"," (if using ",[253,1926,1927],{},"hub.db",[194,1929,1930,1924,1935,1938,1939,269],{},[174,1931,1934],{"href":1932,"rel":1933},"https://dash.cloudflare.com/?to=/:account/workers/kv/namespaces",[178],"KV Namespace",[253,1936,1937],{},"hub.kv"," or ",[253,1940,1941],{},"hub.cache",[194,1943,1944,1924,1949,269],{},[174,1945,1948],{"href":1946,"rel":1947},"https://dash.cloudflare.com/?to=/:account/r2/new",[178],"R2 Bucket",[253,1950,1951],{},"hub.blob",[194,1953,1954,1955,492],{},"Configure bindings in ",[253,1956,403],{},[399,1958,1960],{"className":461,"code":1959,"filename":403,"language":463,"meta":405,"style":405},"export default defineNuxtConfig({\n  hub: {\n    // D1 database\n    db: {\n      dialect: 'sqlite',\n      driver: 'd1',\n      connection: { databaseId: '\u003Cdatabase-id>' }\n    },\n    // KV namespace (binding defaults to 'KV')\n    kv: {\n      driver: 'cloudflare-kv-binding',\n      namespaceId: '\u003Ckv-namespace-id>'\n    },\n    // Cache KV namespace (binding defaults to 'CACHE')\n    cache: {\n      driver: 'cloudflare-kv-binding',\n      namespaceId: '\u003Ccache-namespace-id>'\n    },\n    // R2 bucket (binding defaults to 'BLOB')\n    blob: {\n      driver: 'cloudflare-r2',\n      bucketName: '\u003Cbucket-name>'\n    }\n  }\n})\n",[253,1961,1962,1974,1982,1987,1995,2010,2025,2048,2053,2058,2066,2081,2096,2101,2107,2116,2131,2145,2150,2156,2165,2181,2196,2201,2206],{"__ignoreMap":405},[409,1963,1964,1966,1968,1970,1972],{"class":411,"line":412},[409,1965,471],{"class":470},[409,1967,474],{"class":470},[409,1969,478],{"class":477},[409,1971,481],{"class":415},[409,1973,484],{"class":428},[409,1975,1976,1978,1980],{"class":411,"line":419},[409,1977,489],{"class":432},[409,1979,492],{"class":428},[409,1981,495],{"class":428},[409,1983,1984],{"class":411,"line":425},[409,1985,1986],{"class":543},"    // D1 database\n",[409,1988,1989,1991,1993],{"class":411,"line":436},[409,1990,500],{"class":432},[409,1992,492],{"class":428},[409,1994,495],{"class":428},[409,1996,1997,1999,2001,2003,2006,2008],{"class":411,"line":446},[409,1998,509],{"class":432},[409,2000,492],{"class":428},[409,2002,514],{"class":428},[409,2004,2005],{"class":442},"sqlite",[409,2007,520],{"class":428},[409,2009,523],{"class":428},[409,2011,2012,2014,2016,2018,2021,2023],{"class":411,"line":452},[409,2013,528],{"class":432},[409,2015,492],{"class":428},[409,2017,514],{"class":428},[409,2019,2020],{"class":442},"d1",[409,2022,520],{"class":428},[409,2024,523],{"class":428},[409,2026,2027,2029,2031,2033,2036,2038,2040,2043,2045],{"class":411,"line":556},[409,2028,549],{"class":432},[409,2030,492],{"class":428},[409,2032,877],{"class":428},[409,2034,2035],{"class":432}," databaseId",[409,2037,492],{"class":428},[409,2039,514],{"class":428},[409,2041,2042],{"class":442},"\u003Cdatabase-id>",[409,2044,520],{"class":428},[409,2046,2047],{"class":428}," }\n",[409,2049,2050],{"class":411,"line":577},[409,2051,2052],{"class":428},"    },\n",[409,2054,2055],{"class":411,"line":583},[409,2056,2057],{"class":543},"    // KV namespace (binding defaults to 'KV')\n",[409,2059,2060,2062,2064],{"class":411,"line":589},[409,2061,710],{"class":432},[409,2063,492],{"class":428},[409,2065,495],{"class":428},[409,2067,2068,2070,2072,2074,2077,2079],{"class":411,"line":594},[409,2069,528],{"class":432},[409,2071,492],{"class":428},[409,2073,514],{"class":428},[409,2075,2076],{"class":442},"cloudflare-kv-binding",[409,2078,520],{"class":428},[409,2080,523],{"class":428},[409,2082,2084,2087,2089,2091,2094],{"class":411,"line":2083},12,[409,2085,2086],{"class":432},"      namespaceId",[409,2088,492],{"class":428},[409,2090,514],{"class":428},[409,2092,2093],{"class":442},"\u003Ckv-namespace-id>",[409,2095,897],{"class":428},[409,2097,2099],{"class":411,"line":2098},13,[409,2100,2052],{"class":428},[409,2102,2104],{"class":411,"line":2103},14,[409,2105,2106],{"class":543},"    // Cache KV namespace (binding defaults to 'CACHE')\n",[409,2108,2110,2112,2114],{"class":411,"line":2109},15,[409,2111,724],{"class":432},[409,2113,492],{"class":428},[409,2115,495],{"class":428},[409,2117,2119,2121,2123,2125,2127,2129],{"class":411,"line":2118},16,[409,2120,528],{"class":432},[409,2122,492],{"class":428},[409,2124,514],{"class":428},[409,2126,2076],{"class":442},[409,2128,520],{"class":428},[409,2130,523],{"class":428},[409,2132,2134,2136,2138,2140,2143],{"class":411,"line":2133},17,[409,2135,2086],{"class":432},[409,2137,492],{"class":428},[409,2139,514],{"class":428},[409,2141,2142],{"class":442},"\u003Ccache-namespace-id>",[409,2144,897],{"class":428},[409,2146,2148],{"class":411,"line":2147},18,[409,2149,2052],{"class":428},[409,2151,2153],{"class":411,"line":2152},19,[409,2154,2155],{"class":543},"    // R2 bucket (binding defaults to 'BLOB')\n",[409,2157,2159,2161,2163],{"class":411,"line":2158},20,[409,2160,694],{"class":432},[409,2162,492],{"class":428},[409,2164,495],{"class":428},[409,2166,2168,2170,2172,2174,2177,2179],{"class":411,"line":2167},21,[409,2169,528],{"class":432},[409,2171,492],{"class":428},[409,2173,514],{"class":428},[409,2175,2176],{"class":442},"cloudflare-r2",[409,2178,520],{"class":428},[409,2180,523],{"class":428},[409,2182,2184,2187,2189,2191,2194],{"class":411,"line":2183},22,[409,2185,2186],{"class":432},"      bucketName",[409,2188,492],{"class":428},[409,2190,514],{"class":428},[409,2192,2193],{"class":442},"\u003Cbucket-name>",[409,2195,897],{"class":428},[409,2197,2199],{"class":411,"line":2198},23,[409,2200,586],{"class":428},[409,2202,2204],{"class":411,"line":2203},24,[409,2205,449],{"class":428},[409,2207,2209,2211],{"class":411,"line":2208},25,[409,2210,597],{"class":428},[409,2212,600],{"class":415},[2214,2215,2217,2218,2221],"warning",{"to":2216},"/docs/guides/ci-cd#d1-migrations-in-cicd","For Cloudflare D1, NuxtHub generates the Wrangler migration metadata for you, but ",[253,2219,2220],{},"wrangler deploy"," and Cloudflare Git / Workers Builds do not apply D1 migrations automatically. Add a separate migration step before deploy.",[1905,2223,2224],{"start":425},[194,2225,2226,2227,1938,2232,2237,2238,184],{},"Deploy using ",[174,2228,2231],{"href":2229,"rel":2230},"https://developers.cloudflare.com/workers/ci-cd/builds/",[178],"Workers Builds",[174,2233,2236],{"href":2234,"rel":2235},"https://developers.cloudflare.com/pages/configuration/git-integration/github-integration/",[178],"Pages CI",". If you use D1, follow the ",[174,2239,2240],{"href":2216},"CI/CD D1 migration workflow",[1890,2242,2244],{"id":2243},"option-b-manual-wranglerjsonc","Option B: Manual wrangler.jsonc",[144,2246,2247,2248,2250],{},"Alternatively, you can create a ",[253,2249,1880],{}," file manually in your project root:",[399,2252,2256],{"className":2253,"code":2254,"filename":1880,"language":2255,"meta":405,"style":405},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  \"d1_databases\": [\n    {\n      \"binding\": \"DB\",\n      \"database_name\": \"\u003Cdatabase-name>\",\n      \"database_id\": \"\u003Cdatabase-id>\"\n    }\n  ],\n  \"r2_buckets\": [\n    {\n      \"binding\": \"BLOB\",\n      \"bucket_name\": \"\u003Cbucket-name>\"\n    }\n  ],\n  \"kv_namespaces\": [\n    {\n      \"binding\": \"KV\",\n      \"id\": \"\u003Ckv-namespace-id>\"\n    },\n    {\n      \"binding\": \"CACHE\",\n      \"id\": \"\u003Ccache-namespace-id>\"\n    }\n  ]\n}\n","jsonc",[253,2257,2258,2262,2285,2299,2304,2325,2345,2363,2367,2372,2385,2389,2408,2425,2429,2433,2446,2450,2469,2486,2490,2494,2513,2529,2533,2538],{"__ignoreMap":405},[409,2259,2260],{"class":411,"line":412},[409,2261,484],{"class":428},[409,2263,2264,2267,2270,2273,2275,2278,2281,2283],{"class":411,"line":419},[409,2265,2266],{"class":428},"  \"",[409,2268,2269],{"class":778},"$schema",[409,2271,2272],{"class":428},"\"",[409,2274,492],{"class":428},[409,2276,2277],{"class":428}," \"",[409,2279,2280],{"class":442},"node_modules/wrangler/config-schema.json",[409,2282,2272],{"class":428},[409,2284,523],{"class":428},[409,2286,2287,2289,2292,2294,2296],{"class":411,"line":425},[409,2288,2266],{"class":428},[409,2290,2291],{"class":778},"d1_databases",[409,2293,2272],{"class":428},[409,2295,492],{"class":428},[409,2297,2298],{"class":428}," [\n",[409,2300,2301],{"class":411,"line":436},[409,2302,2303],{"class":428},"    {\n",[409,2305,2306,2309,2312,2314,2316,2318,2321,2323],{"class":411,"line":446},[409,2307,2308],{"class":428},"      \"",[409,2310,2311],{"class":629},"binding",[409,2313,2272],{"class":428},[409,2315,492],{"class":428},[409,2317,2277],{"class":428},[409,2319,2320],{"class":442},"DB",[409,2322,2272],{"class":428},[409,2324,523],{"class":428},[409,2326,2327,2329,2332,2334,2336,2338,2341,2343],{"class":411,"line":452},[409,2328,2308],{"class":428},[409,2330,2331],{"class":629},"database_name",[409,2333,2272],{"class":428},[409,2335,492],{"class":428},[409,2337,2277],{"class":428},[409,2339,2340],{"class":442},"\u003Cdatabase-name>",[409,2342,2272],{"class":428},[409,2344,523],{"class":428},[409,2346,2347,2349,2352,2354,2356,2358,2360],{"class":411,"line":556},[409,2348,2308],{"class":428},[409,2350,2351],{"class":629},"database_id",[409,2353,2272],{"class":428},[409,2355,492],{"class":428},[409,2357,2277],{"class":428},[409,2359,2042],{"class":442},[409,2361,2362],{"class":428},"\"\n",[409,2364,2365],{"class":411,"line":577},[409,2366,586],{"class":428},[409,2368,2369],{"class":411,"line":583},[409,2370,2371],{"class":428},"  ],\n",[409,2373,2374,2376,2379,2381,2383],{"class":411,"line":589},[409,2375,2266],{"class":428},[409,2377,2378],{"class":778},"r2_buckets",[409,2380,2272],{"class":428},[409,2382,492],{"class":428},[409,2384,2298],{"class":428},[409,2386,2387],{"class":411,"line":594},[409,2388,2303],{"class":428},[409,2390,2391,2393,2395,2397,2399,2401,2404,2406],{"class":411,"line":2083},[409,2392,2308],{"class":428},[409,2394,2311],{"class":629},[409,2396,2272],{"class":428},[409,2398,492],{"class":428},[409,2400,2277],{"class":428},[409,2402,2403],{"class":442},"BLOB",[409,2405,2272],{"class":428},[409,2407,523],{"class":428},[409,2409,2410,2412,2415,2417,2419,2421,2423],{"class":411,"line":2098},[409,2411,2308],{"class":428},[409,2413,2414],{"class":629},"bucket_name",[409,2416,2272],{"class":428},[409,2418,492],{"class":428},[409,2420,2277],{"class":428},[409,2422,2193],{"class":442},[409,2424,2362],{"class":428},[409,2426,2427],{"class":411,"line":2103},[409,2428,586],{"class":428},[409,2430,2431],{"class":411,"line":2109},[409,2432,2371],{"class":428},[409,2434,2435,2437,2440,2442,2444],{"class":411,"line":2118},[409,2436,2266],{"class":428},[409,2438,2439],{"class":778},"kv_namespaces",[409,2441,2272],{"class":428},[409,2443,492],{"class":428},[409,2445,2298],{"class":428},[409,2447,2448],{"class":411,"line":2133},[409,2449,2303],{"class":428},[409,2451,2452,2454,2456,2458,2460,2462,2465,2467],{"class":411,"line":2147},[409,2453,2308],{"class":428},[409,2455,2311],{"class":629},[409,2457,2272],{"class":428},[409,2459,492],{"class":428},[409,2461,2277],{"class":428},[409,2463,2464],{"class":442},"KV",[409,2466,2272],{"class":428},[409,2468,523],{"class":428},[409,2470,2471,2473,2476,2478,2480,2482,2484],{"class":411,"line":2152},[409,2472,2308],{"class":428},[409,2474,2475],{"class":629},"id",[409,2477,2272],{"class":428},[409,2479,492],{"class":428},[409,2481,2277],{"class":428},[409,2483,2093],{"class":442},[409,2485,2362],{"class":428},[409,2487,2488],{"class":411,"line":2158},[409,2489,2052],{"class":428},[409,2491,2492],{"class":411,"line":2167},[409,2493,2303],{"class":428},[409,2495,2496,2498,2500,2502,2504,2506,2509,2511],{"class":411,"line":2183},[409,2497,2308],{"class":428},[409,2499,2311],{"class":629},[409,2501,2272],{"class":428},[409,2503,492],{"class":428},[409,2505,2277],{"class":428},[409,2507,2508],{"class":442},"CACHE",[409,2510,2272],{"class":428},[409,2512,523],{"class":428},[409,2514,2515,2517,2519,2521,2523,2525,2527],{"class":411,"line":2198},[409,2516,2308],{"class":428},[409,2518,2475],{"class":629},[409,2520,2272],{"class":428},[409,2522,492],{"class":428},[409,2524,2277],{"class":428},[409,2526,2142],{"class":442},[409,2528,2362],{"class":428},[409,2530,2531],{"class":411,"line":2203},[409,2532,586],{"class":428},[409,2534,2535],{"class":411,"line":2208},[409,2536,2537],{"class":428},"  ]\n",[409,2539,2541],{"class":411,"line":2540},26,[409,2542,2543],{"class":428},"}\n",[170,2545,2547],{"to":2546},"/docs/getting-started/deploy#cloudflare","See the deployment documentation for more details on Cloudflare configuration, environments, and CI/CD setup.",[186,2549,2551],{"id":2550},"vercel","Vercel",[1905,2553,2554],{},[194,2555,2556],{},"Install required packages based on features used:",[399,2558,2560],{"className":615,"code":2559,"filename":1492,"language":617,"meta":405,"style":405},"# For blob storage\nnpm install @vercel/blob\n\n# For KV/Cache (Upstash Redis)\nnpm install @upstash/redis\n\n# For PostgreSQL database\nnpm install drizzle-orm drizzle-kit postgres @electric-sql/pglite\n",[253,2561,2562,2567,2578,2582,2587,2596,2600,2605],{"__ignoreMap":405},[409,2563,2564],{"class":411,"line":412},[409,2565,2566],{"class":543},"# For blob storage\n",[409,2568,2569,2572,2575],{"class":411,"line":419},[409,2570,2571],{"class":629},"npm",[409,2573,2574],{"class":442}," install",[409,2576,2577],{"class":442}," @vercel/blob\n",[409,2579,2580],{"class":411,"line":425},[409,2581,642],{"emptyLinePlaceholder":641},[409,2583,2584],{"class":411,"line":436},[409,2585,2586],{"class":543},"# For KV/Cache (Upstash Redis)\n",[409,2588,2589,2591,2593],{"class":411,"line":446},[409,2590,2571],{"class":629},[409,2592,2574],{"class":442},[409,2594,2595],{"class":442}," @upstash/redis\n",[409,2597,2598],{"class":411,"line":452},[409,2599,642],{"emptyLinePlaceholder":641},[409,2601,2602],{"class":411,"line":556},[409,2603,2604],{"class":543},"# For PostgreSQL database\n",[409,2606,2607,2609,2611,2614,2617,2620],{"class":411,"line":577},[409,2608,2571],{"class":629},[409,2610,2574],{"class":442},[409,2612,2613],{"class":442}," drizzle-orm",[409,2615,2616],{"class":442}," drizzle-kit",[409,2618,2619],{"class":442}," postgres",[409,2621,2622],{"class":442}," @electric-sql/pglite\n",[1905,2624,2625,2634],{"start":419},[194,2626,2627,2628,2633],{},"Add storage from the ",[174,2629,2632],{"href":2630,"rel":2631},"https://vercel.com",[178],"Vercel dashboard"," → Project → Storage",[194,2635,2636],{},"Deploy as usual - NuxtHub auto-detects Vercel environment variables",[165,2638,2640],{"id":2639},"deprecated-features","Deprecated Features",[144,2642,2643],{},"The following features have been removed in v0.10 as part of the multi-cloud strategy:",[186,2645,345],{"id":2646},"ai-autorag",[144,2648,2649,2650,2653,2654,2659],{},"Use the ",[174,2651,358],{"href":356,"rel":2652},[178]," with the ",[174,2655,2658],{"href":2656,"rel":2657},"https://ai-sdk.dev/providers/community-providers/cloudflare-workers-ai",[178],"Workers AI Provider"," instead:",[399,2661,2663],{"className":461,"code":2662,"language":463,"meta":405,"style":405},"// Before (v0.x)\nconst ai = hubAI()\nconst result = await ai.run('@cf/meta/llama-2-7b-chat-int8', { prompt: 'Hello' })\n\n// After (v0.10) - use AI SDK\nimport { generateText } from 'ai'\nimport { workersai } from 'workers-ai-provider'\n\nconst result = await generateText({\n  model: workersai('@cf/meta/llama-2-7b-chat-int8'),\n  prompt: 'Hello'\n})\n",[253,2664,2665,2670,2685,2733,2737,2742,2762,2782,2786,2802,2823,2836],{"__ignoreMap":405},[409,2666,2667],{"class":411,"line":412},[409,2668,2669],{"class":543},"// Before (v0.x)\n",[409,2671,2672,2675,2678,2680,2683],{"class":411,"line":419},[409,2673,2674],{"class":778},"const",[409,2676,2677],{"class":415}," ai ",[409,2679,1033],{"class":428},[409,2681,2682],{"class":477}," hubAI",[409,2684,804],{"class":415},[409,2686,2687,2689,2692,2694,2696,2699,2701,2704,2706,2708,2711,2713,2715,2717,2720,2722,2724,2727,2729,2731],{"class":411,"line":425},[409,2688,2674],{"class":778},[409,2690,2691],{"class":415}," result ",[409,2693,1033],{"class":428},[409,2695,816],{"class":470},[409,2697,2698],{"class":415}," ai",[409,2700,184],{"class":428},[409,2702,2703],{"class":477},"run",[409,2705,481],{"class":415},[409,2707,520],{"class":428},[409,2709,2710],{"class":442},"@cf/meta/llama-2-7b-chat-int8",[409,2712,520],{"class":428},[409,2714,540],{"class":428},[409,2716,877],{"class":428},[409,2718,2719],{"class":432}," prompt",[409,2721,492],{"class":428},[409,2723,514],{"class":428},[409,2725,2726],{"class":442},"Hello",[409,2728,520],{"class":428},[409,2730,887],{"class":428},[409,2732,600],{"class":415},[409,2734,2735],{"class":411,"line":436},[409,2736,642],{"emptyLinePlaceholder":641},[409,2738,2739],{"class":411,"line":446},[409,2740,2741],{"class":543},"// After (v0.10) - use AI SDK\n",[409,2743,2744,2746,2748,2751,2753,2755,2757,2760],{"class":411,"line":452},[409,2745,874],{"class":470},[409,2747,877],{"class":428},[409,2749,2750],{"class":415}," generateText",[409,2752,887],{"class":428},[409,2754,890],{"class":470},[409,2756,514],{"class":428},[409,2758,2759],{"class":442},"ai",[409,2761,897],{"class":428},[409,2763,2764,2766,2768,2771,2773,2775,2777,2780],{"class":411,"line":556},[409,2765,874],{"class":470},[409,2767,877],{"class":428},[409,2769,2770],{"class":415}," workersai",[409,2772,887],{"class":428},[409,2774,890],{"class":470},[409,2776,514],{"class":428},[409,2778,2779],{"class":442},"workers-ai-provider",[409,2781,897],{"class":428},[409,2783,2784],{"class":411,"line":577},[409,2785,642],{"emptyLinePlaceholder":641},[409,2787,2788,2790,2792,2794,2796,2798,2800],{"class":411,"line":583},[409,2789,2674],{"class":778},[409,2791,2691],{"class":415},[409,2793,1033],{"class":428},[409,2795,816],{"class":470},[409,2797,2750],{"class":477},[409,2799,481],{"class":415},[409,2801,484],{"class":428},[409,2803,2804,2807,2809,2811,2813,2815,2817,2819,2821],{"class":411,"line":589},[409,2805,2806],{"class":432},"  model",[409,2808,492],{"class":428},[409,2810,2770],{"class":477},[409,2812,481],{"class":415},[409,2814,520],{"class":428},[409,2816,2710],{"class":442},[409,2818,520],{"class":428},[409,2820,269],{"class":415},[409,2822,523],{"class":428},[409,2824,2825,2828,2830,2832,2834],{"class":411,"line":594},[409,2826,2827],{"class":432},"  prompt",[409,2829,492],{"class":428},[409,2831,514],{"class":428},[409,2833,2726],{"class":442},[409,2835,897],{"class":428},[409,2837,2838,2840],{"class":411,"line":2083},[409,2839,597],{"class":428},[409,2841,600],{"class":415},[186,2843,2845],{"id":2844},"browser-puppeteer","Browser (Puppeteer)",[144,2847,2848,2849,2852],{},"Access Cloudflare's Browser Rendering directly via ",[253,2850,2851],{},"process.env.BROWSER"," binding.",[186,2854,2856],{"id":2855},"vectorize","Vectorize",[144,2858,2859,2860,1938,2865,184],{},"Use Cloudflare's Vectorize binding directly or consider alternatives like ",[174,2861,2864],{"href":2862,"rel":2863},"https://www.pinecone.io/",[178],"Pinecone",[174,2866,2869],{"href":2867,"rel":2868},"https://weaviate.io/",[178],"Weaviate",[186,2871,2873],{"id":2872},"nuxthub-cli","NuxtHub CLI",[144,2875,751,2876,2879],{},[253,2877,2878],{},"npx nuxthub deploy"," with your provider's deployment method:",[191,2881,2882,2890,2898],{},[194,2883,2884,2886,2887,2889],{},[148,2885,1885],{},": Use ",[253,2888,2220],{}," or Workers/Pages CI",[194,2891,2892,2886,2894,2897],{},[148,2893,2551],{},[253,2895,2896],{},"vercel deploy"," or Git integration",[194,2899,2900,2903],{},[148,2901,2902],{},"Other",": Use your provider's CLI or CI/CD",[165,2905,2907],{"id":2906},"migration-checklist","Migration Checklist",[191,2909,2912,2930,2940,2946,2952,2961,2974,2985,2996,3002,3013,3019],{"className":2910},[2911],"contains-task-list",[194,2913,2916,2920,2921,2923,2924,610,2927],{"className":2914},[2915],"task-list-item",[2917,2918],"input",{"disabled":641,"type":2919},"checkbox"," Update ",[253,2922,403],{},": Change ",[253,2925,2926],{},"database: true",[253,2928,2929],{},"db: '\u003Cdialect>'",[194,2931,2933,2935,2936,610,2938],{"className":2932},[2915],[2917,2934],{"disabled":641,"type":2919}," Move files from ",[253,2937,279],{},[253,2939,284],{},[194,2941,2943,2945],{"className":2942},[2915],[2917,2944],{"disabled":641,"type":2919}," Install Drizzle ORM and appropriate database driver",[194,2947,2949,2951],{"className":2948},[2915],[2917,2950],{"disabled":641,"type":2919}," Update schema files to use Drizzle ORM syntax",[194,2953,2955,2957,2958],{"className":2954},[2915],[2917,2956],{"disabled":641,"type":2919}," Generate migrations with ",[253,2959,2960],{},"npx nuxt db generate",[194,2962,2964,2966,2967,2969,2970,300,2972],{"className":2963},[2915],[2917,2965],{"disabled":641,"type":2919}," Replace ",[253,2968,294],{}," calls with ",[253,2971,299],{},[253,2973,303],{},[194,2975,2977,2966,2979,2969,2981,300,2983],{"className":2976},[2915],[2917,2978],{"disabled":641,"type":2919},[253,2980,314],{},[253,2982,319],{},[253,2984,322],{},[194,2986,2988,2966,2990,2969,2992,300,2994],{"className":2987},[2915],[2917,2989],{"disabled":641,"type":2919},[253,2991,332],{},[253,2993,337],{},[253,2995,340],{},[194,2997,2999,3001],{"className":2998},[2915],[2917,3000],{"disabled":641,"type":2919}," Remove AI/AutoRAG usage or migrate to AI SDK",[194,3003,3005,3007,3008,3010,3011],{"className":3004},[2915],[2917,3006],{"disabled":641,"type":2919}," For Cloudflare: Configure resource IDs in ",[253,3009,403],{}," (v0.10.3+) OR create manual ",[253,3012,1880],{},[194,3014,3016,3018],{"className":3015},[2915],[2917,3017],{"disabled":641,"type":2919}," For Vercel: Add storage from dashboard and install required packages",[194,3020,3022,3024],{"className":3021},[2915],[2917,3023],{"disabled":641,"type":2919}," Update CI/CD from NuxtHub GitHub Action to provider's deployment (Workers/Pages CI, Vercel Git integration, etc.)",[165,3026,3028],{"id":3027},"getting-help","Getting Help",[144,3030,3031],{},"If you encounter issues during migration:",[191,3033,3034,3042,3050,3059],{},[194,3035,2649,3036,3041],{},[174,3037,3040],{"href":3038,"rel":3039},"https://github.com/onmax/nuxthub-v1-skill",[178],"Claude Code migration skill"," for AI-assisted migration",[194,3043,3044,3045],{},"Check the ",[174,3046,3049],{"href":3047,"rel":3048},"https://hub.nuxt.com/docs",[178],"NuxtHub documentation",[194,3051,3052,3053,3058],{},"Join the ",[174,3054,3057],{"href":3055,"rel":3056},"https://discord.com/invite/nuxt",[178],"Nuxt Discord"," for community support",[194,3060,3061,3062],{},"Open an issue on ",[174,3063,3066],{"href":3064,"rel":3065},"https://github.com/nuxt-hub/core/issues",[178],"GitHub",[3068,3069,3070],"style",{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":405,"searchDepth":419,"depth":419,"links":3072},[3073,3077,3082,3088,3092,3098,3099],{"id":167,"depth":419,"text":168,"children":3074},[3075,3076],{"id":188,"depth":425,"text":189},{"id":220,"depth":425,"text":221},{"id":384,"depth":419,"text":385,"children":3078},[3079,3080,3081],{"id":388,"depth":425,"text":35},{"id":603,"depth":425,"text":604},{"id":660,"depth":425,"text":661},{"id":743,"depth":419,"text":744,"children":3083},[3084,3085,3086,3087],{"id":747,"depth":425,"text":748},{"id":967,"depth":425,"text":968},{"id":1510,"depth":425,"text":1511},{"id":1708,"depth":425,"text":1709},{"id":1866,"depth":419,"text":1867,"children":3089},[3090,3091],{"id":1884,"depth":425,"text":1885},{"id":2550,"depth":425,"text":2551},{"id":2639,"depth":419,"text":2640,"children":3093},[3094,3095,3096,3097],{"id":2646,"depth":425,"text":345},{"id":2844,"depth":425,"text":2845},{"id":2855,"depth":425,"text":2856},{"id":2872,"depth":425,"text":2873},{"id":2906,"depth":419,"text":2907},{"id":3027,"depth":419,"text":3028},"Learn how to migrate your NuxtHub project to be multi-cloud compatible.","md",null,{},{"title":26},{"title":139,"description":3100},"hn1g5R0XrqMXTjT0sIO2a1Jp-_QhcqRaJi2KJ9bCubc",[3108,3110],{"title":22,"path":23,"stem":24,"description":3109,"children":-1},"Learn how to host a full-stack Nuxt application with minimal configuration.",{"title":30,"path":31,"stem":32,"description":3111,"children":-1},"Configure and manage multiple environments for your NuxtHub application, including production, preview, staging, and local development.",1775064431720]