[{"data":1,"prerenderedAt":3298},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/deploy":137,"/docs/getting-started/deploy-surround":3293},[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":3286,"extension":3287,"links":3288,"meta":3289,"navigation":3290,"path":23,"seo":3291,"stem":24,"__hash__":3292},"docs/docs/1.getting-started/3.deploy.md","Deploy Nuxt on a cloud provider",{"type":141,"value":142,"toc":3257},"minimark",[143,148,152,156,161,165,187,196,201,212,517,530,535,538,683,687,690,716,719,731,751,1041,1044,1054,1256,1262,1285,1289,1297,1368,1375,1378,1381,1384,1394,1414,1417,1421,1429,1432,1436,1443,1448,1451,1460,1464,1467,1471,1495,1499,1518,1521,1525,1528,1544,1547,1575,1597,1610,1614,1622,1633,1639,1681,1686,1721,1724,1731,1735,1743,1752,1775,1778,1785,1788,1795,1799,1802,1809,2088,2092,2096,2105,2123,2127,2130,2200,2204,2207,2213,2216,2220,2223,2227,2239,2243,2252,2255,2259,2262,2265,2271,2284,2289,2294,2298,2310,2314,2317,2356,2365,2369,2380,2714,2725,2741,2746,2749,2756,2765,3028,3031,3037,3043,3243,3253],[144,145,147],"h2",{"id":146},"vercel","Vercel",[149,150,151],"tip",{},"You can deploy your NuxtHub project on Vercel with almost no configuration.",[153,154,155],"p",{},"You can use the Vercel Marketplace to add compatible storage to your project (Postgres, Turso, Redis, Vercel Blob, etc.).",[157,158,160],"callout",{"to":159},"https://nuxt.com/deploy/vercel","Read more about deploying on Vercel on the Nuxt documentation.",[144,162,164],{"id":163},"cloudflare","Cloudflare",[153,166,167,168,175,176,175,181,186],{},"You can deploy your project on your own Cloudflare account, you need to create the necessary resources in your account and configure your project to use them (",[169,170,174],"a",{"href":171,"rel":172},"https://dash.cloudflare.com/?to=/:account/workers/d1",[173],"nofollow","D1",", ",[169,177,180],{"href":178,"rel":179},"https://dash.cloudflare.com/?to=/:account/workers/kv/namespaces",[173],"KV",[169,182,185],{"href":183,"rel":184},"https://dash.cloudflare.com/?to=/:account/r2/new",[173],"R2",", etc.).",[188,189,190,191,195],"note",{},"You only need to create these resources if you have explicitly enabled them in the ",[192,193,194],"code",{},"hub"," config.",[197,198,200],"h3",{"id":199},"configure-bindings","Configure Bindings",[153,202,203,204,207,208,211],{},"NuxtHub auto-generates the ",[192,205,206],{},"wrangler.json"," file at build time when you provide resource IDs in your config. No manual ",[192,209,210],{},"wrangler.jsonc"," is required.",[213,214,220],"pre",{"className":215,"code":216,"filename":217,"language":218,"meta":219,"style":219},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","nuxt.config.ts","ts","",[192,221,222,246,259,266,276,297,314,340,346,352,362,378,394,399,405,415,430,444,449,455,465,481,496,502,508],{"__ignoreMap":219},[223,224,227,231,234,238,242],"span",{"class":225,"line":226},"line",1,[223,228,230],{"class":229},"s7zQu","export",[223,232,233],{"class":229}," default",[223,235,237],{"class":236},"s2Zo4"," defineNuxtConfig",[223,239,241],{"class":240},"sTEyZ","(",[223,243,245],{"class":244},"sMK4o","{\n",[223,247,249,253,256],{"class":225,"line":248},2,[223,250,252],{"class":251},"swJcz","  hub",[223,254,255],{"class":244},":",[223,257,258],{"class":244}," {\n",[223,260,262],{"class":225,"line":261},3,[223,263,265],{"class":264},"sHwdD","    // D1 database\n",[223,267,269,272,274],{"class":225,"line":268},4,[223,270,271],{"class":251},"    db",[223,273,255],{"class":244},[223,275,258],{"class":244},[223,277,279,282,284,287,291,294],{"class":225,"line":278},5,[223,280,281],{"class":251},"      dialect",[223,283,255],{"class":244},[223,285,286],{"class":244}," '",[223,288,290],{"class":289},"sfazB","sqlite",[223,292,293],{"class":244},"'",[223,295,296],{"class":244},",\n",[223,298,300,303,305,307,310,312],{"class":225,"line":299},6,[223,301,302],{"class":251},"      driver",[223,304,255],{"class":244},[223,306,286],{"class":244},[223,308,309],{"class":289},"d1",[223,311,293],{"class":244},[223,313,296],{"class":244},[223,315,317,320,322,325,328,330,332,335,337],{"class":225,"line":316},7,[223,318,319],{"class":251},"      connection",[223,321,255],{"class":244},[223,323,324],{"class":244}," {",[223,326,327],{"class":251}," databaseId",[223,329,255],{"class":244},[223,331,286],{"class":244},[223,333,334],{"class":289},"\u003Cdatabase-id>",[223,336,293],{"class":244},[223,338,339],{"class":244}," }\n",[223,341,343],{"class":225,"line":342},8,[223,344,345],{"class":244},"    },\n",[223,347,349],{"class":225,"line":348},9,[223,350,351],{"class":264},"    // KV namespace (binding defaults to 'KV')\n",[223,353,355,358,360],{"class":225,"line":354},10,[223,356,357],{"class":251},"    kv",[223,359,255],{"class":244},[223,361,258],{"class":244},[223,363,365,367,369,371,374,376],{"class":225,"line":364},11,[223,366,302],{"class":251},[223,368,255],{"class":244},[223,370,286],{"class":244},[223,372,373],{"class":289},"cloudflare-kv-binding",[223,375,293],{"class":244},[223,377,296],{"class":244},[223,379,381,384,386,388,391],{"class":225,"line":380},12,[223,382,383],{"class":251},"      namespaceId",[223,385,255],{"class":244},[223,387,286],{"class":244},[223,389,390],{"class":289},"\u003Ckv-namespace-id>",[223,392,393],{"class":244},"'\n",[223,395,397],{"class":225,"line":396},13,[223,398,345],{"class":244},[223,400,402],{"class":225,"line":401},14,[223,403,404],{"class":264},"    // Cache KV namespace (binding defaults to 'CACHE')\n",[223,406,408,411,413],{"class":225,"line":407},15,[223,409,410],{"class":251},"    cache",[223,412,255],{"class":244},[223,414,258],{"class":244},[223,416,418,420,422,424,426,428],{"class":225,"line":417},16,[223,419,302],{"class":251},[223,421,255],{"class":244},[223,423,286],{"class":244},[223,425,373],{"class":289},[223,427,293],{"class":244},[223,429,296],{"class":244},[223,431,433,435,437,439,442],{"class":225,"line":432},17,[223,434,383],{"class":251},[223,436,255],{"class":244},[223,438,286],{"class":244},[223,440,441],{"class":289},"\u003Ccache-namespace-id>",[223,443,393],{"class":244},[223,445,447],{"class":225,"line":446},18,[223,448,345],{"class":244},[223,450,452],{"class":225,"line":451},19,[223,453,454],{"class":264},"    // R2 bucket (binding defaults to 'BLOB')\n",[223,456,458,461,463],{"class":225,"line":457},20,[223,459,460],{"class":251},"    blob",[223,462,255],{"class":244},[223,464,258],{"class":244},[223,466,468,470,472,474,477,479],{"class":225,"line":467},21,[223,469,302],{"class":251},[223,471,255],{"class":244},[223,473,286],{"class":244},[223,475,476],{"class":289},"cloudflare-r2",[223,478,293],{"class":244},[223,480,296],{"class":244},[223,482,484,487,489,491,494],{"class":225,"line":483},22,[223,485,486],{"class":251},"      bucketName",[223,488,255],{"class":244},[223,490,286],{"class":244},[223,492,493],{"class":289},"\u003Cbucket-name>",[223,495,393],{"class":244},[223,497,499],{"class":225,"line":498},23,[223,500,501],{"class":244},"    }\n",[223,503,505],{"class":225,"line":504},24,[223,506,507],{"class":244},"  }\n",[223,509,511,514],{"class":225,"line":510},25,[223,512,513],{"class":244},"}",[223,515,516],{"class":240},")\n",[149,518,519,520,525,526,529],{},"See a working example at ",[169,521,524],{"href":522,"rel":523},"https://github.com/onmax/repros/tree/main/nuxthub-716",[173],"onmax/repros/nuxthub-716"," — deployed without a ",[192,527,528],{},"wrangler.toml"," file.",[531,532,534],"h4",{"id":533},"config-mapping-reference","Config Mapping Reference",[153,536,537],{},"The following table shows how NuxtHub configuration options map to Wrangler configuration:",[539,540,541,557],"table",{},[542,543,544],"thead",{},[545,546,547,551,554],"tr",{},[548,549,550],"th",{},"NuxtHub Config",[548,552,553],{},"Wrangler Key",[548,555,556],{},"Generated Value",[558,559,560,576,592,606,623,636,652,666],"tbody",{},[545,561,562,568,573],{},[563,564,565],"td",{},[192,566,567],{},"hub.db.connection.databaseId",[563,569,570],{},[192,571,572],{},"d1_databases[].database_id",[563,574,575],{},"From config",[545,577,578,581,586],{},[563,579,580],{},"-",[563,582,583],{},[192,584,585],{},"d1_databases[].binding",[563,587,588,591],{},[192,589,590],{},"DB"," (hardcoded)",[545,593,594,599,604],{},[563,595,596],{},[192,597,598],{},"hub.kv.namespaceId",[563,600,601],{},[192,602,603],{},"kv_namespaces[].id",[563,605,575],{},[545,607,608,613,618],{},[563,609,610],{},[192,611,612],{},"hub.kv.binding",[563,614,615],{},[192,616,617],{},"kv_namespaces[].binding",[563,619,620,622],{},[192,621,180],{}," (default)",[545,624,625,630,634],{},[563,626,627],{},[192,628,629],{},"hub.cache.namespaceId",[563,631,632],{},[192,633,603],{},[563,635,575],{},[545,637,638,643,647],{},[563,639,640],{},[192,641,642],{},"hub.cache.binding",[563,644,645],{},[192,646,617],{},[563,648,649,622],{},[192,650,651],{},"CACHE",[545,653,654,659,664],{},[563,655,656],{},[192,657,658],{},"hub.blob.bucketName",[563,660,661],{},[192,662,663],{},"r2_buckets[].bucket_name",[563,665,575],{},[545,667,668,673,678],{},[563,669,670],{},[192,671,672],{},"hub.blob.binding",[563,674,675],{},[192,676,677],{},"r2_buckets[].binding",[563,679,680,622],{},[192,681,682],{},"BLOB",[531,684,686],{"id":685},"environment-resolution","Environment Resolution",[153,688,689],{},"During the build process, NuxtHub resolves the target environment using the following steps:",[691,692,693,701,706,713],"ol",{},[694,695,696,697,700],"li",{},"Checks the ",[192,698,699],{},"CLOUDFLARE_ENV"," environment variable",[694,702,703,704],{},"If set, merges environment-specific configuration from ",[192,705,210],{},[694,707,708,709,712],{},"Generates ",[192,710,711],{},".output/server/wrangler.json"," with the resolved bindings",[694,714,715],{},"Wrangler uses this configuration during deployment",[197,717,22],{"id":718},"deploy",[153,720,721,722,727,728,730],{},"Create a ",[169,723,726],{"href":724,"rel":725},"https://dash.cloudflare.com/?to=/:account/workers-and-pages/create",[173],"Cloudflare Workers project"," and link your GitHub or GitLab repository. NuxtHub auto-configures bindings from your ",[192,729,217],{}," during build.",[732,733,735,736,739,740,743,744,746,747,750],"warning",{"to":734},"/docs/guides/ci-cd#d1-migrations-in-cicd","For Cloudflare D1, NuxtHub also generates ",[192,737,738],{},"migrations_table"," and ",[192,741,742],{},"migrations_dir"," in ",[192,745,711],{},". This enables Wrangler-managed migrations, but ",[192,748,749],{},"wrangler deploy"," and Cloudflare Git / Workers Builds do not apply D1 migrations automatically. Run a separate migration step before deploy.",[752,753,755,761],"collapsible",{"title":754},"Alternative: Manual wrangler.jsonc",[153,756,757,758,760],{},"You can also create a ",[192,759,210],{}," file manually in the root of your project:",[213,762,766],{"className":763,"code":764,"filename":210,"language":765,"meta":219,"style":219},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  // D1 database\n  \"d1_databases\": [\n    { \"binding\": \"DB\", \"database_name\": \"\u003Cname>\", \"database_id\": \"\u003Cid>\" }\n  ],\n  // R2 bucket\n  \"r2_buckets\": [\n    { \"binding\": \"BLOB\", \"bucket_name\": \"\u003Cbucket-name>\" }\n  ],\n  // KV namespaces\n  \"kv_namespaces\": [\n    { \"binding\": \"KV\", \"id\": \"\u003Ckv-namespace-id>\" },\n    { \"binding\": \"CACHE\", \"id\": \"\u003Ccache-namespace-id>\" }\n  ]\n}\n","jsonc",[192,767,768,772,796,801,815,875,880,885,898,935,939,944,957,995,1031,1036],{"__ignoreMap":219},[223,769,770],{"class":225,"line":226},[223,771,245],{"class":244},[223,773,774,777,781,784,786,789,792,794],{"class":225,"line":248},[223,775,776],{"class":244},"  \"",[223,778,780],{"class":779},"spNyl","$schema",[223,782,783],{"class":244},"\"",[223,785,255],{"class":244},[223,787,788],{"class":244}," \"",[223,790,791],{"class":289},"node_modules/wrangler/config-schema.json",[223,793,783],{"class":244},[223,795,296],{"class":244},[223,797,798],{"class":225,"line":261},[223,799,800],{"class":264},"  // D1 database\n",[223,802,803,805,808,810,812],{"class":225,"line":268},[223,804,776],{"class":244},[223,806,807],{"class":779},"d1_databases",[223,809,783],{"class":244},[223,811,255],{"class":244},[223,813,814],{"class":244}," [\n",[223,816,817,820,822,826,828,830,832,834,836,839,841,844,846,848,850,853,855,857,859,862,864,866,868,871,873],{"class":225,"line":278},[223,818,819],{"class":244},"    {",[223,821,788],{"class":244},[223,823,825],{"class":824},"sBMFI","binding",[223,827,783],{"class":244},[223,829,255],{"class":244},[223,831,788],{"class":244},[223,833,590],{"class":289},[223,835,783],{"class":244},[223,837,838],{"class":244},",",[223,840,788],{"class":244},[223,842,843],{"class":824},"database_name",[223,845,783],{"class":244},[223,847,255],{"class":244},[223,849,788],{"class":244},[223,851,852],{"class":289},"\u003Cname>",[223,854,783],{"class":244},[223,856,838],{"class":244},[223,858,788],{"class":244},[223,860,861],{"class":824},"database_id",[223,863,783],{"class":244},[223,865,255],{"class":244},[223,867,788],{"class":244},[223,869,870],{"class":289},"\u003Cid>",[223,872,783],{"class":244},[223,874,339],{"class":244},[223,876,877],{"class":225,"line":299},[223,878,879],{"class":244},"  ],\n",[223,881,882],{"class":225,"line":316},[223,883,884],{"class":264},"  // R2 bucket\n",[223,886,887,889,892,894,896],{"class":225,"line":342},[223,888,776],{"class":244},[223,890,891],{"class":779},"r2_buckets",[223,893,783],{"class":244},[223,895,255],{"class":244},[223,897,814],{"class":244},[223,899,900,902,904,906,908,910,912,914,916,918,920,923,925,927,929,931,933],{"class":225,"line":348},[223,901,819],{"class":244},[223,903,788],{"class":244},[223,905,825],{"class":824},[223,907,783],{"class":244},[223,909,255],{"class":244},[223,911,788],{"class":244},[223,913,682],{"class":289},[223,915,783],{"class":244},[223,917,838],{"class":244},[223,919,788],{"class":244},[223,921,922],{"class":824},"bucket_name",[223,924,783],{"class":244},[223,926,255],{"class":244},[223,928,788],{"class":244},[223,930,493],{"class":289},[223,932,783],{"class":244},[223,934,339],{"class":244},[223,936,937],{"class":225,"line":354},[223,938,879],{"class":244},[223,940,941],{"class":225,"line":364},[223,942,943],{"class":264},"  // KV namespaces\n",[223,945,946,948,951,953,955],{"class":225,"line":380},[223,947,776],{"class":244},[223,949,950],{"class":779},"kv_namespaces",[223,952,783],{"class":244},[223,954,255],{"class":244},[223,956,814],{"class":244},[223,958,959,961,963,965,967,969,971,973,975,977,979,982,984,986,988,990,992],{"class":225,"line":396},[223,960,819],{"class":244},[223,962,788],{"class":244},[223,964,825],{"class":824},[223,966,783],{"class":244},[223,968,255],{"class":244},[223,970,788],{"class":244},[223,972,180],{"class":289},[223,974,783],{"class":244},[223,976,838],{"class":244},[223,978,788],{"class":244},[223,980,981],{"class":824},"id",[223,983,783],{"class":244},[223,985,255],{"class":244},[223,987,788],{"class":244},[223,989,390],{"class":289},[223,991,783],{"class":244},[223,993,994],{"class":244}," },\n",[223,996,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029],{"class":225,"line":401},[223,998,819],{"class":244},[223,1000,788],{"class":244},[223,1002,825],{"class":824},[223,1004,783],{"class":244},[223,1006,255],{"class":244},[223,1008,788],{"class":244},[223,1010,651],{"class":289},[223,1012,783],{"class":244},[223,1014,838],{"class":244},[223,1016,788],{"class":244},[223,1018,981],{"class":824},[223,1020,783],{"class":244},[223,1022,255],{"class":244},[223,1024,788],{"class":244},[223,1026,441],{"class":289},[223,1028,783],{"class":244},[223,1030,339],{"class":244},[223,1032,1033],{"class":225,"line":407},[223,1034,1035],{"class":244},"  ]\n",[223,1037,1038],{"class":225,"line":417},[223,1039,1040],{"class":244},"}\n",[197,1042,30],{"id":1043},"environments",[153,1045,1046,1047,1051,1052,255],{},"Wrangler supports ",[169,1048,1043],{"href":1049,"rel":1050},"https://developers.cloudflare.com/workers/wrangler/environments/",[173]," to manage different configurations for staging, preview, or other deployment targets. You can define environment-specific bindings in your ",[192,1053,210],{},[213,1055,1057],{"className":763,"code":1056,"filename":210,"language":765,"meta":219,"style":219},"{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  // Production bindings (top-level)\n  \"d1_databases\": [\n    {\n      \"binding\": \"DB\",\n      \"database_id\": \"\u003Cproduction-database-id>\"\n    }\n  ],\n  // Preview environment\n  \"env\": {\n    \"preview\": {\n      \"d1_databases\": [\n        {\n          \"binding\": \"DB\",\n          \"database_id\": \"\u003Cpreview-database-id>\"\n        }\n      ]\n    }\n  }\n}\n",[192,1058,1059,1063,1081,1086,1098,1103,1122,1140,1144,1148,1153,1166,1180,1193,1198,1217,1234,1239,1244,1248,1252],{"__ignoreMap":219},[223,1060,1061],{"class":225,"line":226},[223,1062,245],{"class":244},[223,1064,1065,1067,1069,1071,1073,1075,1077,1079],{"class":225,"line":248},[223,1066,776],{"class":244},[223,1068,780],{"class":779},[223,1070,783],{"class":244},[223,1072,255],{"class":244},[223,1074,788],{"class":244},[223,1076,791],{"class":289},[223,1078,783],{"class":244},[223,1080,296],{"class":244},[223,1082,1083],{"class":225,"line":261},[223,1084,1085],{"class":264},"  // Production bindings (top-level)\n",[223,1087,1088,1090,1092,1094,1096],{"class":225,"line":268},[223,1089,776],{"class":244},[223,1091,807],{"class":779},[223,1093,783],{"class":244},[223,1095,255],{"class":244},[223,1097,814],{"class":244},[223,1099,1100],{"class":225,"line":278},[223,1101,1102],{"class":244},"    {\n",[223,1104,1105,1108,1110,1112,1114,1116,1118,1120],{"class":225,"line":299},[223,1106,1107],{"class":244},"      \"",[223,1109,825],{"class":824},[223,1111,783],{"class":244},[223,1113,255],{"class":244},[223,1115,788],{"class":244},[223,1117,590],{"class":289},[223,1119,783],{"class":244},[223,1121,296],{"class":244},[223,1123,1124,1126,1128,1130,1132,1134,1137],{"class":225,"line":316},[223,1125,1107],{"class":244},[223,1127,861],{"class":824},[223,1129,783],{"class":244},[223,1131,255],{"class":244},[223,1133,788],{"class":244},[223,1135,1136],{"class":289},"\u003Cproduction-database-id>",[223,1138,1139],{"class":244},"\"\n",[223,1141,1142],{"class":225,"line":342},[223,1143,501],{"class":244},[223,1145,1146],{"class":225,"line":348},[223,1147,879],{"class":244},[223,1149,1150],{"class":225,"line":354},[223,1151,1152],{"class":264},"  // Preview environment\n",[223,1154,1155,1157,1160,1162,1164],{"class":225,"line":364},[223,1156,776],{"class":244},[223,1158,1159],{"class":779},"env",[223,1161,783],{"class":244},[223,1163,255],{"class":244},[223,1165,258],{"class":244},[223,1167,1168,1171,1174,1176,1178],{"class":225,"line":380},[223,1169,1170],{"class":244},"    \"",[223,1172,1173],{"class":824},"preview",[223,1175,783],{"class":244},[223,1177,255],{"class":244},[223,1179,258],{"class":244},[223,1181,1182,1184,1187,1189,1191],{"class":225,"line":396},[223,1183,1107],{"class":244},[223,1185,807],{"class":1186},"sbssI",[223,1188,783],{"class":244},[223,1190,255],{"class":244},[223,1192,814],{"class":244},[223,1194,1195],{"class":225,"line":401},[223,1196,1197],{"class":244},"        {\n",[223,1199,1200,1203,1205,1207,1209,1211,1213,1215],{"class":225,"line":407},[223,1201,1202],{"class":244},"          \"",[223,1204,825],{"class":251},[223,1206,783],{"class":244},[223,1208,255],{"class":244},[223,1210,788],{"class":244},[223,1212,590],{"class":289},[223,1214,783],{"class":244},[223,1216,296],{"class":244},[223,1218,1219,1221,1223,1225,1227,1229,1232],{"class":225,"line":417},[223,1220,1202],{"class":244},[223,1222,861],{"class":251},[223,1224,783],{"class":244},[223,1226,255],{"class":244},[223,1228,788],{"class":244},[223,1230,1231],{"class":289},"\u003Cpreview-database-id>",[223,1233,1139],{"class":244},[223,1235,1236],{"class":225,"line":432},[223,1237,1238],{"class":244},"        }\n",[223,1240,1241],{"class":225,"line":446},[223,1242,1243],{"class":244},"      ]\n",[223,1245,1246],{"class":225,"line":451},[223,1247,501],{"class":244},[223,1249,1250],{"class":225,"line":457},[223,1251,507],{"class":244},[223,1253,1254],{"class":225,"line":467},[223,1255,1040],{"class":244},[153,1257,1258,1259,1261],{},"To deploy to a specific environment, set the ",[192,1260,699],{}," environment variable during build:",[213,1263,1268],{"className":1264,"code":1265,"filename":1266,"language":1267,"meta":219,"style":219},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CLOUDFLARE_ENV=preview nuxt build\n","Terminal","bash",[192,1269,1270],{"__ignoreMap":219},[223,1271,1272,1274,1277,1279,1282],{"class":225,"line":226},[223,1273,699],{"class":240},[223,1275,1276],{"class":244},"=",[223,1278,1173],{"class":289},[223,1280,1281],{"class":824}," nuxt",[223,1283,1284],{"class":289}," build\n",[531,1286,1288],{"id":1287},"non-inheritable-keys","Non-Inheritable Keys",[153,1290,1291,1292,1296],{},"The following bindings do ",[1293,1294,1295],"strong",{},"not"," inherit from the top-level configuration and must be specified explicitly in each environment:",[539,1298,1299,1309],{},[542,1300,1301],{},[545,1302,1303,1306],{},[548,1304,1305],{},"Key",[548,1307,1308],{},"Description",[558,1310,1311,1320,1329,1338,1348,1358],{},[545,1312,1313,1317],{},[563,1314,1315],{},[192,1316,807],{},[563,1318,1319],{},"D1 database bindings",[545,1321,1322,1326],{},[563,1323,1324],{},[192,1325,950],{},[563,1327,1328],{},"KV namespace bindings",[545,1330,1331,1335],{},[563,1332,1333],{},[192,1334,891],{},[563,1336,1337],{},"R2 bucket bindings",[545,1339,1340,1345],{},[563,1341,1342],{},[192,1343,1344],{},"vars",[563,1346,1347],{},"Environment variables",[545,1349,1350,1355],{},[563,1351,1352],{},[192,1353,1354],{},"durable_objects",[563,1356,1357],{},"Durable Object bindings",[545,1359,1360,1365],{},[563,1361,1362],{},[192,1363,1364],{},"services",[563,1366,1367],{},"Service bindings",[732,1369,1370,1371,1374],{},"If you forget to specify bindings in an environment, they will be ",[192,1372,1373],{},"undefined"," at runtime. This does not produce an error during deployment, which can lead to unexpected behavior in production.",[157,1376,1377],{"to":1049},"Learn more about Wrangler environments in the Cloudflare documentation.",[197,1379,85],{"id":1380},"cache",[153,1382,1383],{},"When self-hosting and using devtools for cache management (viewing/deleting cache entries), you need to configure additional environment variables:",[153,1385,1386,1387,1390,1391,1393],{},"In your Cloudflare project, go to ",[1293,1388,1389],{},"Settings"," → ",[1293,1392,120],{}," and add:",[1395,1396,1397,1402,1410],"field-group",{},[1398,1399,1401],"field",{"name":1400},"NUXT_HUB_CLOUDFLARE_ACCOUNT_ID","Your Cloudflare account ID (if not already set for blob storage)",[1398,1403,1405,1406,1409],{"name":1404},"NUXT_HUB_CLOUDFLARE_API_TOKEN","Your Cloudflare API token with ",[1293,1407,1408],{},"Workers KV Storage Read and Write"," permissions (if not already set for blob storage)",[1398,1411,1413],{"name":1412},"NUXT_HUB_CLOUDFLARE_CACHE_NAMESPACE_ID","Your KV namespace ID for the cache storage (found in Cloudflare Dashboard → Workers & Pages → KV)",[188,1415,1416],{},"These environment variables are only required if you use the Nuxt DevTools for cache management. Normal cache operations (reading/writing cache) work directly through the KV binding.",[144,1418,1420],{"id":1419},"workers-builds","Workers Builds",[153,1422,1423,1424,1428],{},"If deploying to Cloudflare Workers, you can use ",[169,1425,1420],{"href":1426,"rel":1427},"https://developers.cloudflare.com/workers/ci-cd/builds/",[173]," to automatically deploy your project on every commit.",[188,1430,1431],{"to":734},"If your project uses Cloudflare D1, add an explicit migration step before deploy. Workers Builds does not apply D1 migrations automatically.",[144,1433,1435],{"id":1434},"pages-ci","Pages CI",[153,1437,1438,1439,1428],{},"If deploying to Cloudflare Pages, you can use ",[169,1440,1435],{"href":1441,"rel":1442},"https://developers.cloudflare.com/pages/configuration/git-integration/github-integration/",[173],[1444,1445,1447],"h1",{"id":1446},"nuxthub-admin-deprecated","NuxtHub Admin (Deprecated)",[732,1449,1450],{},"NuxtHub Admin is being sunset on 31st December 2025. We recommend switching to self-hosting and using Pages CI, Workers CI or Wrangler to deploy.",[153,1452,1453,1454,1459],{},"The ",[169,1455,1458],{"href":1456,"rel":1457},"https://admin.hub.nuxt.com",[173],"NuxtHub Admin"," is made to simplify your experience with NuxtHub, enabling you to effortlessly manage teams and projects, as well as deploying NuxtHub application with zero-configuration on your Cloudflare account.",[144,1461,1463],{"id":1462},"production-vs-preview-deployments","Production vs Preview Deployments",[153,1465,1466],{},"NuxtHub supports two types of deployments: production and preview.",[197,1468,1470],{"id":1469},"production-deployments","Production Deployments",[1472,1473,1474,1481],"ul",{},[694,1475,1476,1477,1480],{},"When setting up your project, you can specify a production branch (defaults to ",[192,1478,1479],{},"main",")",[694,1482,1483,1484],{},"Successful deployments to the production branch will be:\n",[1472,1485,1486,1489],{},[694,1487,1488],{},"Accessible via your primary domain",[694,1490,1491,1492],{},"Also available at ",[192,1493,1494],{},"\u003Ccommit>.\u003Cproject>.pages.dev",[197,1496,1498],{"id":1497},"preview-deployments","Preview Deployments",[1472,1500,1501,1504],{},[694,1502,1503],{},"Any deployment from a non-production branch (including pull requests) is considered a preview",[694,1505,1506,1507],{},"Successful preview deployments are accessible via:\n",[1472,1508,1509,1513],{},[694,1510,1511],{},[192,1512,1494],{},[694,1514,1515],{},[192,1516,1517],{},"\u003Cbranch>.\u003Cproject>.pages.dev",[149,1519,1520],{},"Toggle between production and preview environments in the NuxtHub admin using the \"Preview mode\" switch.",[144,1522,1524],{"id":1523},"nuxthub-cli-deprecated","NuxtHub CLI (Deprecated)",[153,1526,1527],{},"Deploy your local project with a single command:",[213,1529,1531],{"className":1264,"code":1530,"filename":1266,"language":1267,"meta":219,"style":219},"npx nuxthub deploy\n",[192,1532,1533],{"__ignoreMap":219},[223,1534,1535,1538,1541],{"class":225,"line":226},[223,1536,1537],{"class":824},"npx",[223,1539,1540],{"class":289}," nuxthub",[223,1542,1543],{"class":289}," deploy\n",[153,1545,1546],{},"The command will:",[691,1548,1549,1556,1559,1562,1565,1568],{},[694,1550,1551,1552],{},"Ensure you are logged in on ",[169,1553,1555],{"href":1456,"rel":1554},[173],"admin.hub.nuxt.com",[694,1557,1558],{},"Make sure you linked your Cloudflare account",[694,1560,1561],{},"Link your local project with a NuxtHub project or help you create a new one",[694,1563,1564],{},"Build your Nuxt project with the correct preset",[694,1566,1567],{},"Deploy it to your Cloudflare account with all the necessary resources (D1, KV, R2, etc.)",[694,1569,1570,1571,1574],{},"Provide you with a URL to access your project with a free ",[192,1572,1573],{},"\u003Cmy-app>.nuxt.dev"," domain",[1576,1577,1584,1589,1593],"video",{":controls":1578,"className":1579,"poster":1583},"true",[1580,1581,1582],"w-full","h-auto","rounded","https://res.cloudinary.com/nuxt/video/upload/v1723569534/nuxthub/nuxthub-deploy_xxs5s8.jpg",[1585,1586],"source",{"src":1587,"type":1588},"https://res.cloudinary.com/nuxt/video/upload/v1723569534/nuxthub/nuxthub-deploy_xxs5s8.webm","video/webm",[1585,1590],{"src":1591,"type":1592},"https://res.cloudinary.com/nuxt/video/upload/v1723569534/nuxthub/nuxthub-deploy_xxs5s8.mp4","video/mp4",[1585,1594],{"src":1595,"type":1596},"https://res.cloudinary.com/nuxt/video/upload/v1723569534/nuxthub/nuxthub-deploy_xxs5s8.ogg","video/ogg",[188,1598,1599,1600,1605,1606,1609],{},"You can also install the ",[169,1601,1604],{"href":1602,"rel":1603},"https://github.com/nuxt-hub/cli",[173],"NuxtHub CLI"," globally with: ",[192,1607,1608],{},"npm i -g nuxthub",".",[197,1611,1613],{"id":1612},"usage-with-cicd","Usage with CI/CD",[149,1615,1616,1617,1621],{},"If you are using GitHub for your project, jump to the ",[169,1618,1620],{"href":1619},"#github-action","Github Action"," section.",[1623,1624,1453,1625,1628,1629,1632],"important",{},[192,1626,1627],{},"nuxthub deploy"," command is designed to run ",[1293,1630,1631],{},"non-interactively"," in CI/CD environments. It won’t prompt for additional input (such as logging in or linking the project). As long as the required environment variables are set, deployment will proceed automatically.",[153,1634,1635,1636,1638],{},"To integrate the ",[192,1637,1627],{}," command within your CI/CD pipeline, set the following environment variables:",[1472,1640,1641,1665],{},[694,1642,1643,1646,1647],{},[192,1644,1645],{},"NUXT_HUB_PROJECT_KEY"," – Your project key available in:\n",[1472,1648,1649,1655],{},[694,1650,1651,1652],{},"Your project settings in the ",[169,1653,1458],{"href":1456,"rel":1654},[173],[694,1656,1657,1658,1661,1662,1480],{},"Your ",[192,1659,1660],{},".env"," file (if you ran ",[192,1663,1664],{},"npx nuxthub link",[694,1666,1667,1670,1671,1390,1674,1677,1678],{},[192,1668,1669],{},"NUXT_HUB_USER_TOKEN"," – Your personal token, available in ",[1293,1672,1673],{},"User settings",[1293,1675,1676],{},"Tokens"," in the ",[169,1679,1458],{"href":1456,"rel":1680},[173],[153,1682,1683],{},[1293,1684,1685],{},"Example command:",[213,1687,1689],{"className":1264,"code":1688,"filename":1266,"language":1267,"meta":219,"style":219},"NUXT_HUB_PROJECT_KEY=\u003Cmy-project-key> NUXT_HUB_USER_TOKEN=\u003Cmy-user-token> npx nuxthub deploy\n",[192,1690,1691],{"__ignoreMap":219},[223,1692,1693,1695,1698,1701,1704,1707,1709,1712,1714,1717,1719],{"class":225,"line":226},[223,1694,1645],{"class":240},[223,1696,1697],{"class":244},"=\u003C",[223,1699,1700],{"class":289},"my-project-key",[223,1702,1703],{"class":244},">",[223,1705,1706],{"class":240}," NUXT_HUB_USER_TOKEN",[223,1708,1697],{"class":244},[223,1710,1711],{"class":289},"my-user-token",[223,1713,1703],{"class":244},[223,1715,1716],{"class":824}," npx",[223,1718,1540],{"class":289},[223,1720,1543],{"class":289},[153,1722,1723],{},"This will authenticate your user and link your NuxtHub project for deployment.",[188,1725,1726,1727,1730],{},"For security, ",[1293,1728,1729],{},"do not hardcode these values",". Instead, store them as environment variables in your CI/CD pipeline.",[144,1732,1734],{"id":1733},"github-action-deprecated","GitHub Action (Deprecated)",[153,1736,1737,1738,1609],{},"After linking a GitHub repository to your project, NuxtHub automatically adds a GitHub Actions workflow to automatically deploy your application on every commit using the ",[169,1739,1742],{"href":1740,"rel":1741},"https://github.com/marketplace/actions/deploy-to-nuxthub",[173],"NuxtHub GitHub Action",[153,1744,1745,1746,1751],{},"NuxtHub integrates with ",[169,1747,1750],{"href":1748,"rel":1749},"https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments",[173],"GitHub deployments",". This allows you to:",[1472,1753,1754,1761,1768],{},[694,1755,1756],{},[169,1757,1760],{"href":1758,"rel":1759},"https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/viewing-deployment-history",[173],"View deployment statuses within GitHub",[694,1762,1763],{},[169,1764,1767],{"href":1765,"rel":1766},"https://docs.github.com/en/actions/use-cases-and-examples/deploying/deploying-with-github-actions#using-concurrency",[173],"Setup deployment concurrency",[694,1769,1770],{},[169,1771,1774],{"href":1772,"rel":1773},"https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/reviewing-deployments",[173],"Require approvals for deploying to environments",[153,1776,1777],{},"After deploying from a pull request, NuxtHub automatically adds a comment with information about the deployment.",[1779,1780],"img",{"alt":1781,"height":1782,"src":1783,"width":1784},"NuxtHUb GitHub Action commenting on pull requests",520,"/images/docs/nuxthub-github-app-pr-comment.png",926,[149,1786,1787],{},"You can customise the workflow to tailor to any specific custom DevOps requirements.",[188,1789,1791,1792,1609],{"to":1790},"#linking-a-repository-to-existing-projects","Projects created prior to releasing our GitHub Action uses Pages CI for deployments. Read our ",[169,1793,1794],{"href":1790},"migration guide",[197,1796,1798],{"id":1797},"default-workflow","Default workflow",[153,1800,1801],{},"The GitHub Workflow added to your repository is automatically tailored to your project's package manager. This is an example of a workflow added for a project using pnpm.",[153,1803,1804,1805,1808],{},"We support pnpm, yarn, npm and Corepack. If you use a different package manager, you can customise the generated ",[192,1806,1807],{},"nuxthub.yml"," GitHub Action.",[1810,1811,1812],"code-collapse",{},[213,1813,1818],{"className":1814,"code":1815,"filename":1816,"language":1817,"meta":219,"style":219},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","name: Deploy to NuxtHub\non: push\n\njobs:\n  deploy:\n    name: \"Deploy to NuxtHub\"\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      id-token: write\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n\n      - name: Install Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 24\n          cache: 'pnpm'\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build & Deploy to NuxtHub\n        uses: nuxt-hub/action@v2\n",".github/workflows/nuxthub.yml","yml",[192,1819,1820,1830,1841,1847,1855,1862,1876,1886,1893,1903,1913,1917,1924,1937,1941,1953,1963,1970,1980,1984,1995,2004,2010,2020,2034,2038,2050,2061,2066,2078],{"__ignoreMap":219},[223,1821,1822,1825,1827],{"class":225,"line":226},[223,1823,1824],{"class":251},"name",[223,1826,255],{"class":244},[223,1828,1829],{"class":289}," Deploy to NuxtHub\n",[223,1831,1832,1836,1838],{"class":225,"line":248},[223,1833,1835],{"class":1834},"sfNiH","on",[223,1837,255],{"class":244},[223,1839,1840],{"class":289}," push\n",[223,1842,1843],{"class":225,"line":261},[223,1844,1846],{"emptyLinePlaceholder":1845},true,"\n",[223,1848,1849,1852],{"class":225,"line":268},[223,1850,1851],{"class":251},"jobs",[223,1853,1854],{"class":244},":\n",[223,1856,1857,1860],{"class":225,"line":278},[223,1858,1859],{"class":251},"  deploy",[223,1861,1854],{"class":244},[223,1863,1864,1867,1869,1871,1874],{"class":225,"line":299},[223,1865,1866],{"class":251},"    name",[223,1868,255],{"class":244},[223,1870,788],{"class":244},[223,1872,1873],{"class":289},"Deploy to NuxtHub",[223,1875,1139],{"class":244},[223,1877,1878,1881,1883],{"class":225,"line":316},[223,1879,1880],{"class":251},"    runs-on",[223,1882,255],{"class":244},[223,1884,1885],{"class":289}," ubuntu-latest\n",[223,1887,1888,1891],{"class":225,"line":342},[223,1889,1890],{"class":251},"    permissions",[223,1892,1854],{"class":244},[223,1894,1895,1898,1900],{"class":225,"line":348},[223,1896,1897],{"class":251},"      contents",[223,1899,255],{"class":244},[223,1901,1902],{"class":289}," read\n",[223,1904,1905,1908,1910],{"class":225,"line":354},[223,1906,1907],{"class":251},"      id-token",[223,1909,255],{"class":244},[223,1911,1912],{"class":289}," write\n",[223,1914,1915],{"class":225,"line":364},[223,1916,1846],{"emptyLinePlaceholder":1845},[223,1918,1919,1922],{"class":225,"line":380},[223,1920,1921],{"class":251},"    steps",[223,1923,1854],{"class":244},[223,1925,1926,1929,1932,1934],{"class":225,"line":396},[223,1927,1928],{"class":244},"      -",[223,1930,1931],{"class":251}," uses",[223,1933,255],{"class":244},[223,1935,1936],{"class":289}," actions/checkout@v4\n",[223,1938,1939],{"class":225,"line":401},[223,1940,1846],{"emptyLinePlaceholder":1845},[223,1942,1943,1945,1948,1950],{"class":225,"line":407},[223,1944,1928],{"class":244},[223,1946,1947],{"class":251}," name",[223,1949,255],{"class":244},[223,1951,1952],{"class":289}," Install pnpm\n",[223,1954,1955,1958,1960],{"class":225,"line":417},[223,1956,1957],{"class":251},"        uses",[223,1959,255],{"class":244},[223,1961,1962],{"class":289}," pnpm/action-setup@v4\n",[223,1964,1965,1968],{"class":225,"line":432},[223,1966,1967],{"class":251},"        with",[223,1969,1854],{"class":244},[223,1971,1972,1975,1977],{"class":225,"line":446},[223,1973,1974],{"class":251},"          version",[223,1976,255],{"class":244},[223,1978,1979],{"class":1186}," 10\n",[223,1981,1982],{"class":225,"line":451},[223,1983,1846],{"emptyLinePlaceholder":1845},[223,1985,1986,1988,1990,1992],{"class":225,"line":457},[223,1987,1928],{"class":244},[223,1989,1947],{"class":251},[223,1991,255],{"class":244},[223,1993,1994],{"class":289}," Install Node.js\n",[223,1996,1997,1999,2001],{"class":225,"line":467},[223,1998,1957],{"class":251},[223,2000,255],{"class":244},[223,2002,2003],{"class":289}," actions/setup-node@v4\n",[223,2005,2006,2008],{"class":225,"line":483},[223,2007,1967],{"class":251},[223,2009,1854],{"class":244},[223,2011,2012,2015,2017],{"class":225,"line":498},[223,2013,2014],{"class":251},"          node-version",[223,2016,255],{"class":244},[223,2018,2019],{"class":1186}," 24\n",[223,2021,2022,2025,2027,2029,2032],{"class":225,"line":504},[223,2023,2024],{"class":251},"          cache",[223,2026,255],{"class":244},[223,2028,286],{"class":244},[223,2030,2031],{"class":289},"pnpm",[223,2033,393],{"class":244},[223,2035,2036],{"class":225,"line":510},[223,2037,1846],{"emptyLinePlaceholder":1845},[223,2039,2041,2043,2045,2047],{"class":225,"line":2040},26,[223,2042,1928],{"class":244},[223,2044,1947],{"class":251},[223,2046,255],{"class":244},[223,2048,2049],{"class":289}," Install dependencies\n",[223,2051,2053,2056,2058],{"class":225,"line":2052},27,[223,2054,2055],{"class":251},"        run",[223,2057,255],{"class":244},[223,2059,2060],{"class":289}," pnpm install\n",[223,2062,2064],{"class":225,"line":2063},28,[223,2065,1846],{"emptyLinePlaceholder":1845},[223,2067,2069,2071,2073,2075],{"class":225,"line":2068},29,[223,2070,1928],{"class":244},[223,2072,1947],{"class":251},[223,2074,255],{"class":244},[223,2076,2077],{"class":289}," Build & Deploy to NuxtHub\n",[223,2079,2081,2083,2085],{"class":225,"line":2080},30,[223,2082,1957],{"class":251},[223,2084,255],{"class":244},[223,2086,2087],{"class":289}," nuxt-hub/action@v2\n",[197,2089,2091],{"id":2090},"options","Options",[531,2093,2095],{"id":2094},"inputs","Inputs",[153,2097,2098,2099,2104],{},"The following input parameters can be provided to the GitHub Action. Learn more about ",[169,2100,2103],{"href":2101,"rel":2102},"https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepswith",[173],"Workflow syntax for GitHub Actions"," on GitHub's documentation.",[1395,2106,2107,2112,2119],{},[1398,2108,2111],{"name":2109,"type":2110},"directory","string","The directory of the Nuxt application to build.",[1398,2113,2116,2117,1609],{"name":2114,"default":2115},"output-directory","dist","The output directory containing the built Nuxt application to deploy, relative to the directory specified in ",[192,2118,2109],{},[1398,2120,2122],{"name":2121,"type":2110},"project-key","The project key of the NuxtHub project to deploy to. If the repository is linked to more than one project, project key is required.",[531,2124,2126],{"id":2125},"outputs","Outputs",[153,2128,2129],{},"The GitHub Action provides the following outputs that you can use in subsequent workflow steps.",[1395,2131,2132,2137,2162,2183],{},[1398,2133,2136],{"name":2134,"type":2135},"environment","'production' | 'preview'","The environment of the deployment (e.g. production, preview).",[1398,2138,2140,2143,2146],{"name":2139,"type":2110},"deployment-url",[153,2141,2142],{},"The URL of the deployment. For preview environments, it links to the deployment of the commit.",[153,2144,2145],{},"Examples:",[1472,2147,2148,2155],{},[694,2149,2150,2154],{},[169,2151,2152],{"href":2152,"rel":2153},"https://example.nuxt.dev",[173]," (main)",[694,2156,2157,2161],{},[169,2158,2159],{"href":2159,"rel":2160},"https://abcdefg.example.pages.dev",[173]," (feat/example)",[1398,2163,2165,2168,2170],{"name":2164,"type":2110},"branch-url",[153,2166,2167],{},"The permanent URL for the current branch deployment.",[153,2169,2145],{},[1472,2171,2172,2177],{},[694,2173,2174,2154],{},[169,2175,2152],{"href":2152,"rel":2176},[173],[694,2178,2179,2161],{},[169,2180,2181],{"href":2181,"rel":2182},"https://feat-example.example.pages.dev",[173],[1398,2184,2186,2189,2191],{"name":2185,"type":2110},"environment-url",[153,2187,2188],{},"The permanent URL of the environment.",[153,2190,2145],{},[1472,2192,2193],{},[694,2194,2195,2199],{},[169,2196,2197],{"href":2197,"rel":2198},"https://hello-world-staging.example.workers.dev",[173]," ('staging' environment)",[197,2201,2203],{"id":2202},"environment-variables-secrets","Environment Variables & Secrets",[153,2205,2206],{},"The NuxtHub GitHub Action builds the Nuxt application using build-time environment variables and secrets specified within NuxtHub Admin.",[149,2208,2209,2210,1609],{},"You can scope variables to only be available during build-time, This is useful in cases such as ",[192,2211,2212],{},"NUXT_UI_PRO_LICENSE",[197,2214,40],{"id":2215},"setup",[531,2217,2219],{"id":2218},"creating-a-new-project","Creating a new project",[153,2221,2222],{},"When creating a new project from a template, or importing a Git repository, the GitHub Action workflow will automatically be set up for you.",[531,2224,2226],{"id":2225},"linking-a-repository-to-existing-projects","Linking a repository to existing projects",[153,2228,2229,2230,2234,2235,2238],{},"Link your project to a GitHub repository within ",[169,2231,1458],{"href":2232,"rel":2233},"https://admin.hub.nuxt.com/",[173]," → Projects → ",[192,2236,2237],{},"\u003CYour Project>"," → Settings → General → Git Repository",[531,2240,2242],{"id":2241},"migration-from-cloudflare-ci-to-github-actions","Migration from Cloudflare CI to GitHub Actions",[153,2244,2245,2246,2234,2249,2251],{},"Migrate your project to GitHub Actions within ",[169,2247,1458],{"href":2232,"rel":2248},[173],[192,2250,2237],{}," → Settings → General → Git Repository → Begin Migration.",[732,2253,2254],{},"Only non-secret environment variables are automatically copied to GitHub. Existing environment secrets are not automatically migrated to GitHub, and should be updated to sync them to GitHub.",[531,2256,2258],{"id":2257},"monorepo-setup","Monorepo setup",[153,2260,2261],{},"Our GitHub integration supports deploying multiple applications from the same repository.",[153,2263,2264],{},"When linking a Git repository, set \"project root directory\" to the base folder of your Nuxt application corresponding to that NuxtHub project.",[153,2266,2267,2268,1609],{},"When a repository is already linked to at least one project, additional projects linked will have the generated GitHub Actions workflow named ",[192,2269,2270],{},"nuxthub-\u003CprojectSlug>.yml",[188,2272,2273,2274,2279,2280,1609],{},"When multiple projects are linked to the same repository, the ",[169,2275,2277],{"href":2276},"#inputs",[192,2278,2121],{}," input parameter must be specified on each ",[169,2281,2283],{"href":1740,"rel":2282},[173],"Deploy to NuxtHub GitHub Action",[153,2285,2286],{},[1293,2287,2288],{},"Current limitations",[1472,2290,2291],{},[694,2292,2293],{},"Separate applications should be deployed using different workflow jobs.",[144,2295,2297],{"id":2296},"gitlab-ci-deprecated","GitLab CI (Deprecated)",[153,2299,2300,2301,2305,2306,739,2308,1609],{},"This section will guide you to implement the GitLab CI.\nThe integration with GitLab CI builds on the ",[169,2302,1613],{"href":2303,"rel":2304},"https://hub.nuxt.com/docs/getting-started/deploy#usage-with-cicd",[173]," section,\nmake sure you have those two variables ",[192,2307,1645],{},[192,2309,1669],{},[197,2311,2313],{"id":2312},"user-token-variable","User Token Variable",[1623,2315,2316],{},"It is good practice to place the user token inside GitLab CI Variables.",[691,2318,2319,2322,2329,2332,2335,2340,2353],{},[694,2320,2321],{},"Open your Repository (on GitLab) > Settings > CI/CD > Variables",[694,2323,2324,2325],{},"Click on ",[2326,2327,2328],"em",{},"Add variable",[694,2330,2331],{},"Set Visibility to Masked and hidden",[694,2333,2334],{},"Remove protected Flag (since we may use this variable also on non-protected branches)",[694,2336,2337,2338],{},"Give a Key name = ",[192,2339,1669],{},[694,2341,2342,2343,2345,2346,1390,2348,1677,2350],{},"Paste your ",[192,2344,1669],{}," — Your personal token, available in ",[1293,2347,1673],{},[1293,2349,1676],{},[169,2351,1458],{"href":1456,"rel":2352},[173],[694,2354,2355],{},"Click Add variable",[188,2357,1453,2358,2360,2361,1609],{},[192,2359,1645],{}," is used later in ",[169,2362,2364],{"href":2363},"#configure-projects-for-gitlab","Configure Projects for GitLab",[197,2366,2368],{"id":2367},"project-configuration","Project Configuration",[691,2370,2371,2377],{},[694,2372,721,2373,2376],{},[192,2374,2375],{},".gitlab-ci.yml"," in your repository root",[694,2378,2379],{},"Paste the following configuration",[1810,2381,2382],{},[213,2383,2385],{"className":1814,"code":2384,"filename":2375,"language":1817,"meta":219,"style":219},"# if one job fails, pipeline should fail\nworkflow:\n  auto_cancel:\n    on_job_failure: all\n\nvariables:\n  APP_PATH: \"PATH/TO/YOUR/APP\"\n  NUXT_HUB_PROJECT_KEY: \"YOUR_NUXT_HUB_PROJECT_KEY\"\n\n# add additional steps as needed\nstages:\n  - deploy\n  - callback\n\ndeploy_project:\n  stage: deploy\n  # here we use Bun, you can change this.\n  image: \"oven/bun:slim\"\n  script:\n    - echo \"Deploying project_a app...\"\n    - cd $APP_PATH\n    # you can not use node_modules from cache, since nuxthub needs write access\n    - bun install\n    # if you set up your variables correctly this should deploy successfully\n    - bunx nuxthub deploy\n  rules:\n    # here we configure auto deploy on branch: staging and main\n    - if: '$CI_COMMIT_BRANCH == \"staging\" || $CI_COMMIT_BRANCH == \"main\"'\n\nmanual_deploy_project:\n  stage: deploy\n  image: \"oven/bun:slim\"\n  when: manual\n  script:\n    - echo \"Deploying project_a app...\"\n    - cd $APP_PATH\n    - bun install\n    - bunx nuxthub deploy\n\ncallback:\n  stage: callback\n  script:\n    - echo \"Deploy reached.\"\n",[192,2386,2387,2392,2399,2406,2416,2420,2427,2441,2455,2459,2464,2471,2478,2485,2489,2496,2505,2510,2524,2531,2539,2546,2551,2558,2563,2570,2577,2582,2598,2602,2609,2618,2631,2642,2649,2656,2663,2670,2677,2682,2690,2699,2706],{"__ignoreMap":219},[223,2388,2389],{"class":225,"line":226},[223,2390,2391],{"class":264},"# if one job fails, pipeline should fail\n",[223,2393,2394,2397],{"class":225,"line":248},[223,2395,2396],{"class":251},"workflow",[223,2398,1854],{"class":244},[223,2400,2401,2404],{"class":225,"line":261},[223,2402,2403],{"class":251},"  auto_cancel",[223,2405,1854],{"class":244},[223,2407,2408,2411,2413],{"class":225,"line":268},[223,2409,2410],{"class":251},"    on_job_failure",[223,2412,255],{"class":244},[223,2414,2415],{"class":289}," all\n",[223,2417,2418],{"class":225,"line":278},[223,2419,1846],{"emptyLinePlaceholder":1845},[223,2421,2422,2425],{"class":225,"line":299},[223,2423,2424],{"class":251},"variables",[223,2426,1854],{"class":244},[223,2428,2429,2432,2434,2436,2439],{"class":225,"line":316},[223,2430,2431],{"class":251},"  APP_PATH",[223,2433,255],{"class":244},[223,2435,788],{"class":244},[223,2437,2438],{"class":289},"PATH/TO/YOUR/APP",[223,2440,1139],{"class":244},[223,2442,2443,2446,2448,2450,2453],{"class":225,"line":342},[223,2444,2445],{"class":251},"  NUXT_HUB_PROJECT_KEY",[223,2447,255],{"class":244},[223,2449,788],{"class":244},[223,2451,2452],{"class":289},"YOUR_NUXT_HUB_PROJECT_KEY",[223,2454,1139],{"class":244},[223,2456,2457],{"class":225,"line":348},[223,2458,1846],{"emptyLinePlaceholder":1845},[223,2460,2461],{"class":225,"line":354},[223,2462,2463],{"class":264},"# add additional steps as needed\n",[223,2465,2466,2469],{"class":225,"line":364},[223,2467,2468],{"class":251},"stages",[223,2470,1854],{"class":244},[223,2472,2473,2476],{"class":225,"line":380},[223,2474,2475],{"class":244},"  -",[223,2477,1543],{"class":289},[223,2479,2480,2482],{"class":225,"line":396},[223,2481,2475],{"class":244},[223,2483,2484],{"class":289}," callback\n",[223,2486,2487],{"class":225,"line":401},[223,2488,1846],{"emptyLinePlaceholder":1845},[223,2490,2491,2494],{"class":225,"line":407},[223,2492,2493],{"class":251},"deploy_project",[223,2495,1854],{"class":244},[223,2497,2498,2501,2503],{"class":225,"line":417},[223,2499,2500],{"class":251},"  stage",[223,2502,255],{"class":244},[223,2504,1543],{"class":289},[223,2506,2507],{"class":225,"line":432},[223,2508,2509],{"class":264},"  # here we use Bun, you can change this.\n",[223,2511,2512,2515,2517,2519,2522],{"class":225,"line":446},[223,2513,2514],{"class":251},"  image",[223,2516,255],{"class":244},[223,2518,788],{"class":244},[223,2520,2521],{"class":289},"oven/bun:slim",[223,2523,1139],{"class":244},[223,2525,2526,2529],{"class":225,"line":451},[223,2527,2528],{"class":251},"  script",[223,2530,1854],{"class":244},[223,2532,2533,2536],{"class":225,"line":457},[223,2534,2535],{"class":244},"    -",[223,2537,2538],{"class":289}," echo \"Deploying project_a app...\"\n",[223,2540,2541,2543],{"class":225,"line":467},[223,2542,2535],{"class":244},[223,2544,2545],{"class":289}," cd $APP_PATH\n",[223,2547,2548],{"class":225,"line":483},[223,2549,2550],{"class":264},"    # you can not use node_modules from cache, since nuxthub needs write access\n",[223,2552,2553,2555],{"class":225,"line":498},[223,2554,2535],{"class":244},[223,2556,2557],{"class":289}," bun install\n",[223,2559,2560],{"class":225,"line":504},[223,2561,2562],{"class":264},"    # if you set up your variables correctly this should deploy successfully\n",[223,2564,2565,2567],{"class":225,"line":510},[223,2566,2535],{"class":244},[223,2568,2569],{"class":289}," bunx nuxthub deploy\n",[223,2571,2572,2575],{"class":225,"line":2040},[223,2573,2574],{"class":251},"  rules",[223,2576,1854],{"class":244},[223,2578,2579],{"class":225,"line":2052},[223,2580,2581],{"class":264},"    # here we configure auto deploy on branch: staging and main\n",[223,2583,2584,2586,2589,2591,2593,2596],{"class":225,"line":2063},[223,2585,2535],{"class":244},[223,2587,2588],{"class":251}," if",[223,2590,255],{"class":244},[223,2592,286],{"class":244},[223,2594,2595],{"class":289},"$CI_COMMIT_BRANCH == \"staging\" || $CI_COMMIT_BRANCH == \"main\"",[223,2597,393],{"class":244},[223,2599,2600],{"class":225,"line":2068},[223,2601,1846],{"emptyLinePlaceholder":1845},[223,2603,2604,2607],{"class":225,"line":2080},[223,2605,2606],{"class":251},"manual_deploy_project",[223,2608,1854],{"class":244},[223,2610,2612,2614,2616],{"class":225,"line":2611},31,[223,2613,2500],{"class":251},[223,2615,255],{"class":244},[223,2617,1543],{"class":289},[223,2619,2621,2623,2625,2627,2629],{"class":225,"line":2620},32,[223,2622,2514],{"class":251},[223,2624,255],{"class":244},[223,2626,788],{"class":244},[223,2628,2521],{"class":289},[223,2630,1139],{"class":244},[223,2632,2634,2637,2639],{"class":225,"line":2633},33,[223,2635,2636],{"class":251},"  when",[223,2638,255],{"class":244},[223,2640,2641],{"class":289}," manual\n",[223,2643,2645,2647],{"class":225,"line":2644},34,[223,2646,2528],{"class":251},[223,2648,1854],{"class":244},[223,2650,2652,2654],{"class":225,"line":2651},35,[223,2653,2535],{"class":244},[223,2655,2538],{"class":289},[223,2657,2659,2661],{"class":225,"line":2658},36,[223,2660,2535],{"class":244},[223,2662,2545],{"class":289},[223,2664,2666,2668],{"class":225,"line":2665},37,[223,2667,2535],{"class":244},[223,2669,2557],{"class":289},[223,2671,2673,2675],{"class":225,"line":2672},38,[223,2674,2535],{"class":244},[223,2676,2569],{"class":289},[223,2678,2680],{"class":225,"line":2679},39,[223,2681,1846],{"emptyLinePlaceholder":1845},[223,2683,2685,2688],{"class":225,"line":2684},40,[223,2686,2687],{"class":251},"callback",[223,2689,1854],{"class":244},[223,2691,2693,2695,2697],{"class":225,"line":2692},41,[223,2694,2500],{"class":251},[223,2696,255],{"class":244},[223,2698,2484],{"class":289},[223,2700,2702,2704],{"class":225,"line":2701},42,[223,2703,2528],{"class":251},[223,2705,1854],{"class":244},[223,2707,2709,2711],{"class":225,"line":2708},43,[223,2710,2535],{"class":244},[223,2712,2713],{"class":289}," echo \"Deploy reached.\"\n",[188,2715,2716,2717,2720,2721,1621],{},"If you have a monorepo with multiple projects (apps), do this step for each of your project (e.g. ",[192,2718,2719],{},"./apps/project-foo/.gitlab-ci.yml","). Then follow the ",[169,2722,2724],{"href":2723},"#monorepo-setup-1","Monorepo Setup",[732,2726,1453,2727,2729,2730,2732,2733,2736,2737,2740],{},[192,2728,2687],{}," job is needed to mark the pipeline as successfully,\nespecially if ",[192,2731,2493],{}," has not run. ",[2734,2735],"br",{},"\nYou can avoid this by setting ",[192,2738,2739],{},"allow-failure: true"," but this will result in other drawbacks.\nOr simply deploy on every branch, which results in more traffic.",[149,2742,2743,2744,1609],{},"You can always deploy from your working branches, just use the manual trigger.\nDeployed branches different from 'main' (or what you configured in nuxthub dashboard as your main) will be marked as ",[192,2745,1173],{},[197,2747,2724],{"id":2748},"monorepo-setup-1",[153,2750,2751,2752,2755],{},"If you have a monorepo with multiple apps (e.g. ",[192,2753,2754],{},"./apps/project-foo","), then we make sure our pipelines can run parallel.",[691,2757,2758,2763],{},[694,2759,2760,2761],{},"Create in your repository root a ",[192,2762,2375],{},[694,2764,2379],{},[1810,2766,2767],{},[213,2768,2770],{"className":1814,"code":2769,"filename":2375,"language":1817,"meta":219,"style":219},"# if one job fails, pipeline should fail\nworkflow:\n  auto_cancel:\n    on_job_failure: all\nstages:\n  - trigger_apps\n\ntrigger_project_a:\n  stage: trigger_apps\n  rules:\n    - changes:\n        - \"apps/project-foo/**/*\"\n  trigger:\n    strategy: depend\n    include:\n      - local: \"apps/project-foo/.gitlab-ci.yml\"\n\ntrigger_project_b:\n  stage: trigger_apps\n  rules:\n    - changes:\n        - \"apps/project-bar/**/*\"\n  trigger:\n    strategy: depend\n    include:\n      - local: \"apps/project-bar/.gitlab-ci.yml\"\n\nadd_manual_triggers:\n  stage: trigger_apps\n  trigger:\n    strategy: depend\n    include:\n      - local: \".manual-triggers.yml\"\n",[192,2771,2772,2776,2782,2788,2796,2802,2809,2813,2820,2828,2834,2843,2855,2862,2872,2879,2895,2899,2906,2914,2920,2928,2939,2945,2953,2959,2974,2978,2985,2993,2999,3007,3013],{"__ignoreMap":219},[223,2773,2774],{"class":225,"line":226},[223,2775,2391],{"class":264},[223,2777,2778,2780],{"class":225,"line":248},[223,2779,2396],{"class":251},[223,2781,1854],{"class":244},[223,2783,2784,2786],{"class":225,"line":261},[223,2785,2403],{"class":251},[223,2787,1854],{"class":244},[223,2789,2790,2792,2794],{"class":225,"line":268},[223,2791,2410],{"class":251},[223,2793,255],{"class":244},[223,2795,2415],{"class":289},[223,2797,2798,2800],{"class":225,"line":278},[223,2799,2468],{"class":251},[223,2801,1854],{"class":244},[223,2803,2804,2806],{"class":225,"line":299},[223,2805,2475],{"class":244},[223,2807,2808],{"class":289}," trigger_apps\n",[223,2810,2811],{"class":225,"line":316},[223,2812,1846],{"emptyLinePlaceholder":1845},[223,2814,2815,2818],{"class":225,"line":342},[223,2816,2817],{"class":251},"trigger_project_a",[223,2819,1854],{"class":244},[223,2821,2822,2824,2826],{"class":225,"line":348},[223,2823,2500],{"class":251},[223,2825,255],{"class":244},[223,2827,2808],{"class":289},[223,2829,2830,2832],{"class":225,"line":354},[223,2831,2574],{"class":251},[223,2833,1854],{"class":244},[223,2835,2836,2838,2841],{"class":225,"line":364},[223,2837,2535],{"class":244},[223,2839,2840],{"class":251}," changes",[223,2842,1854],{"class":244},[223,2844,2845,2848,2850,2853],{"class":225,"line":380},[223,2846,2847],{"class":244},"        -",[223,2849,788],{"class":244},[223,2851,2852],{"class":289},"apps/project-foo/**/*",[223,2854,1139],{"class":244},[223,2856,2857,2860],{"class":225,"line":396},[223,2858,2859],{"class":251},"  trigger",[223,2861,1854],{"class":244},[223,2863,2864,2867,2869],{"class":225,"line":401},[223,2865,2866],{"class":251},"    strategy",[223,2868,255],{"class":244},[223,2870,2871],{"class":289}," depend\n",[223,2873,2874,2877],{"class":225,"line":407},[223,2875,2876],{"class":251},"    include",[223,2878,1854],{"class":244},[223,2880,2881,2883,2886,2888,2890,2893],{"class":225,"line":417},[223,2882,1928],{"class":244},[223,2884,2885],{"class":251}," local",[223,2887,255],{"class":244},[223,2889,788],{"class":244},[223,2891,2892],{"class":289},"apps/project-foo/.gitlab-ci.yml",[223,2894,1139],{"class":244},[223,2896,2897],{"class":225,"line":432},[223,2898,1846],{"emptyLinePlaceholder":1845},[223,2900,2901,2904],{"class":225,"line":446},[223,2902,2903],{"class":251},"trigger_project_b",[223,2905,1854],{"class":244},[223,2907,2908,2910,2912],{"class":225,"line":451},[223,2909,2500],{"class":251},[223,2911,255],{"class":244},[223,2913,2808],{"class":289},[223,2915,2916,2918],{"class":225,"line":457},[223,2917,2574],{"class":251},[223,2919,1854],{"class":244},[223,2921,2922,2924,2926],{"class":225,"line":467},[223,2923,2535],{"class":244},[223,2925,2840],{"class":251},[223,2927,1854],{"class":244},[223,2929,2930,2932,2934,2937],{"class":225,"line":483},[223,2931,2847],{"class":244},[223,2933,788],{"class":244},[223,2935,2936],{"class":289},"apps/project-bar/**/*",[223,2938,1139],{"class":244},[223,2940,2941,2943],{"class":225,"line":498},[223,2942,2859],{"class":251},[223,2944,1854],{"class":244},[223,2946,2947,2949,2951],{"class":225,"line":504},[223,2948,2866],{"class":251},[223,2950,255],{"class":244},[223,2952,2871],{"class":289},[223,2954,2955,2957],{"class":225,"line":510},[223,2956,2876],{"class":251},[223,2958,1854],{"class":244},[223,2960,2961,2963,2965,2967,2969,2972],{"class":225,"line":2040},[223,2962,1928],{"class":244},[223,2964,2885],{"class":251},[223,2966,255],{"class":244},[223,2968,788],{"class":244},[223,2970,2971],{"class":289},"apps/project-bar/.gitlab-ci.yml",[223,2973,1139],{"class":244},[223,2975,2976],{"class":225,"line":2052},[223,2977,1846],{"emptyLinePlaceholder":1845},[223,2979,2980,2983],{"class":225,"line":2063},[223,2981,2982],{"class":251},"add_manual_triggers",[223,2984,1854],{"class":244},[223,2986,2987,2989,2991],{"class":225,"line":2068},[223,2988,2500],{"class":251},[223,2990,255],{"class":244},[223,2992,2808],{"class":289},[223,2994,2995,2997],{"class":225,"line":2080},[223,2996,2859],{"class":251},[223,2998,1854],{"class":244},[223,3000,3001,3003,3005],{"class":225,"line":2611},[223,3002,2866],{"class":251},[223,3004,255],{"class":244},[223,3006,2871],{"class":289},[223,3008,3009,3011],{"class":225,"line":2620},[223,3010,2876],{"class":251},[223,3012,1854],{"class":244},[223,3014,3015,3017,3019,3021,3023,3026],{"class":225,"line":2633},[223,3016,1928],{"class":244},[223,3018,2885],{"class":251},[223,3020,255],{"class":244},[223,3022,788],{"class":244},[223,3024,3025],{"class":289},".manual-triggers.yml",[223,3027,1139],{"class":244},[188,3029,3030],{},"Change the paths to your own project paths.",[153,3032,3033,3034,3036],{},"This configuration separates your main pipeline from child pipelines, each project (app) has its own ",[192,3035,2375],{}," Those child pipelines are only triggered if changes are made in their app folder.",[153,3038,3039,3040,3042],{},"Sometimes GitLab changes are not recognized (previous pipeline failed and new push has no changes in app folder), for that case, you can add manual triggers for the child pipelines by adding a ",[192,3041,3025],{}," in the project root.",[1810,3044,3045],{},[213,3046,3048],{"className":1814,"code":3047,"filename":3025,"language":1817,"meta":219,"style":219},"workflow:\n  auto_cancel:\n    on_job_failure: all\n\nstages:\n  - trigger_apps\n  - callback\n\ntrigger_project_a:\n  stage: trigger_apps\n  when: manual\n  trigger:\n    strategy: depend\n    include:\n      - local: \"apps/project-foo/.gitlab-ci.yml\"\n\ntrigger_project_b:\n  stage: trigger_apps\n  when: manual\n  trigger:\n    strategy: depend\n    include:\n      - local: \"apps/project-bar/.gitlab-ci.yml\"\n\ncallback:\n  stage: callback\n  script:\n    - echo \"manual triggers set\"\n",[192,3049,3050,3056,3062,3070,3074,3080,3086,3092,3096,3102,3110,3118,3124,3132,3138,3152,3156,3162,3170,3178,3184,3192,3198,3212,3216,3222,3230,3236],{"__ignoreMap":219},[223,3051,3052,3054],{"class":225,"line":226},[223,3053,2396],{"class":251},[223,3055,1854],{"class":244},[223,3057,3058,3060],{"class":225,"line":248},[223,3059,2403],{"class":251},[223,3061,1854],{"class":244},[223,3063,3064,3066,3068],{"class":225,"line":261},[223,3065,2410],{"class":251},[223,3067,255],{"class":244},[223,3069,2415],{"class":289},[223,3071,3072],{"class":225,"line":268},[223,3073,1846],{"emptyLinePlaceholder":1845},[223,3075,3076,3078],{"class":225,"line":278},[223,3077,2468],{"class":251},[223,3079,1854],{"class":244},[223,3081,3082,3084],{"class":225,"line":299},[223,3083,2475],{"class":244},[223,3085,2808],{"class":289},[223,3087,3088,3090],{"class":225,"line":316},[223,3089,2475],{"class":244},[223,3091,2484],{"class":289},[223,3093,3094],{"class":225,"line":342},[223,3095,1846],{"emptyLinePlaceholder":1845},[223,3097,3098,3100],{"class":225,"line":348},[223,3099,2817],{"class":251},[223,3101,1854],{"class":244},[223,3103,3104,3106,3108],{"class":225,"line":354},[223,3105,2500],{"class":251},[223,3107,255],{"class":244},[223,3109,2808],{"class":289},[223,3111,3112,3114,3116],{"class":225,"line":364},[223,3113,2636],{"class":251},[223,3115,255],{"class":244},[223,3117,2641],{"class":289},[223,3119,3120,3122],{"class":225,"line":380},[223,3121,2859],{"class":251},[223,3123,1854],{"class":244},[223,3125,3126,3128,3130],{"class":225,"line":396},[223,3127,2866],{"class":251},[223,3129,255],{"class":244},[223,3131,2871],{"class":289},[223,3133,3134,3136],{"class":225,"line":401},[223,3135,2876],{"class":251},[223,3137,1854],{"class":244},[223,3139,3140,3142,3144,3146,3148,3150],{"class":225,"line":407},[223,3141,1928],{"class":244},[223,3143,2885],{"class":251},[223,3145,255],{"class":244},[223,3147,788],{"class":244},[223,3149,2892],{"class":289},[223,3151,1139],{"class":244},[223,3153,3154],{"class":225,"line":417},[223,3155,1846],{"emptyLinePlaceholder":1845},[223,3157,3158,3160],{"class":225,"line":432},[223,3159,2903],{"class":251},[223,3161,1854],{"class":244},[223,3163,3164,3166,3168],{"class":225,"line":446},[223,3165,2500],{"class":251},[223,3167,255],{"class":244},[223,3169,2808],{"class":289},[223,3171,3172,3174,3176],{"class":225,"line":451},[223,3173,2636],{"class":251},[223,3175,255],{"class":244},[223,3177,2641],{"class":289},[223,3179,3180,3182],{"class":225,"line":457},[223,3181,2859],{"class":251},[223,3183,1854],{"class":244},[223,3185,3186,3188,3190],{"class":225,"line":467},[223,3187,2866],{"class":251},[223,3189,255],{"class":244},[223,3191,2871],{"class":289},[223,3193,3194,3196],{"class":225,"line":483},[223,3195,2876],{"class":251},[223,3197,1854],{"class":244},[223,3199,3200,3202,3204,3206,3208,3210],{"class":225,"line":498},[223,3201,1928],{"class":244},[223,3203,2885],{"class":251},[223,3205,255],{"class":244},[223,3207,788],{"class":244},[223,3209,2971],{"class":289},[223,3211,1139],{"class":244},[223,3213,3214],{"class":225,"line":504},[223,3215,1846],{"emptyLinePlaceholder":1845},[223,3217,3218,3220],{"class":225,"line":510},[223,3219,2687],{"class":251},[223,3221,1854],{"class":244},[223,3223,3224,3226,3228],{"class":225,"line":2040},[223,3225,2500],{"class":251},[223,3227,255],{"class":244},[223,3229,2484],{"class":289},[223,3231,3232,3234],{"class":225,"line":2052},[223,3233,2528],{"class":251},[223,3235,1854],{"class":244},[223,3237,3238,3240],{"class":225,"line":2063},[223,3239,2535],{"class":244},[223,3241,3242],{"class":289}," echo \"manual triggers set\"\n",[732,3244,3245,3246,739,3249,3252],{},"With the options ",[192,3247,3248],{},"depends",[192,3250,3251],{},"workflow.auto_cancel.on_job_failure: all"," a pipeline is failed, if one job fails.\nThis assures a clean main / staging branch. Change it to your needs.",[3254,3255,3256],"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 .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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":219,"searchDepth":248,"depth":248,"links":3258},[3259,3260,3266,3267,3268,3272,3275,3281],{"id":146,"depth":248,"text":147},{"id":163,"depth":248,"text":164,"children":3261},[3262,3263,3264,3265],{"id":199,"depth":261,"text":200},{"id":718,"depth":261,"text":22},{"id":1043,"depth":261,"text":30},{"id":1380,"depth":261,"text":85},{"id":1419,"depth":248,"text":1420},{"id":1434,"depth":248,"text":1435},{"id":1462,"depth":248,"text":1463,"children":3269},[3270,3271],{"id":1469,"depth":261,"text":1470},{"id":1497,"depth":261,"text":1498},{"id":1523,"depth":248,"text":1524,"children":3273},[3274],{"id":1612,"depth":261,"text":1613},{"id":1733,"depth":248,"text":1734,"children":3276},[3277,3278,3279,3280],{"id":1797,"depth":261,"text":1798},{"id":2090,"depth":261,"text":2091},{"id":2202,"depth":261,"text":2203},{"id":2215,"depth":261,"text":40},{"id":2296,"depth":248,"text":2297,"children":3282},[3283,3284,3285],{"id":2312,"depth":261,"text":2313},{"id":2367,"depth":261,"text":2368},{"id":2748,"depth":261,"text":2724},"Learn how to host a full-stack Nuxt application with minimal configuration.","md",null,{},{"title":22},{"title":139,"description":3286},"aFhv4wP0TmT5Ljbyo3XE15aXnkazm2Klu_c5mZiBh98",[3294,3296],{"title":18,"path":19,"stem":20,"description":3295,"children":-1},"Learn how to create a NuxtHub project or add it to your current Nuxt project.",{"title":26,"path":27,"stem":28,"description":3297,"children":-1},"Learn how to migrate your NuxtHub project to be multi-cloud compatible.",1774893097709]