[{"data":1,"prerenderedAt":2015},["ShallowReactive",2],{"navigation":3,"/docs/guides/ci-cd":137,"/docs/guides/ci-cd-surround":2010},[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":2003,"extension":2004,"links":2005,"meta":2006,"navigation":2007,"path":111,"seo":2008,"stem":112,"__hash__":2009},"docs/docs/6.guides/3.ci-cd.md","CI/CD Deployment",{"type":141,"value":142,"toc":1982},"minimark",[143,147,152,157,168,208,220,254,266,270,273,640,644,648,652,655,666,670,673,690,704,713,818,823,954,958,963,971,977,1026,1032,1147,1404,1412,1415,1476,1490,1494,1497,1537,1543,1547,1550,1728,1732,1735,1738,1757,1761,1764,1831,1836,1840,1843,1849,1909,1913,1916,1974,1978],[144,145,146],"p",{},"NuxtHub applications deploy through standard CI/CD pipelines. Database migrations require special attention, particularly for Cloudflare D1.",[148,149,151],"h2",{"id":150},"cloudflare-deployment","Cloudflare Deployment",[153,154,156],"h3",{"id":155},"workers-builds","Workers Builds",[144,158,159,160,167],{},"The simplest approach is to use ",[161,162,166],"a",{"href":163,"rel":164},"https://developers.cloudflare.com/workers/ci-cd/builds/",[165],"nofollow","Cloudflare Workers Builds",", which automatically deploys your application on every commit.",[169,170,171,180,183],"ol",{},[172,173,174,175],"li",{},"Create a Workers project in the ",[161,176,179],{"href":177,"rel":178},"https://dash.cloudflare.com/?to=/:account/workers-and-pages/create",[165],"Cloudflare dashboard",[172,181,182],{},"Connect your GitHub or GitLab repository",[172,184,185,186],{},"Configure the build settings:\n",[187,188,189,200],"ul",{},[172,190,191,195,196],{},[192,193,194],"strong",{},"Build command",": ",[197,198,199],"code",{},"npm run build",[172,201,202,195,205],{},[192,203,204],{},"Build output directory",[197,206,207],{},"dist",[209,210,211,212,215,216,219],"tip",{},"NuxtHub automatically generates wrangler bindings from your ",[197,213,214],{},"nuxt.config.ts"," during the build process. No manual ",[197,217,218],{},"wrangler.jsonc"," file is required.",[221,222,223,237],"note",{},[144,224,225,226,228,229,232,233,236],{},"If you use a custom ",[197,227,218],{}," with named environments, set ",[197,230,231],{},"CLOUDFLARE_ENV"," as a build-time variable for non-production environments in ",[192,234,235],{},"Workers Builds → Build configuration → Environment variables",":",[187,238,239,245,251],{},[172,240,241,244],{},[197,242,243],{},"CLOUDFLARE_ENV=preview"," for preview deployments",[172,246,247,250],{},[197,248,249],{},"CLOUDFLARE_ENV=staging"," for staging deployments",[172,252,253],{},"Leave unset for production (uses default environment)",[255,256,258,259,261,262,265],"warning",{"to":257},"#d1-migrations-in-cicd","If your project uses Cloudflare D1, Workers Builds still requires an explicit migration step before deploy. The default ",[197,260,199],{}," and ",[197,263,264],{},"wrangler deploy"," flow does not apply D1 migrations automatically.",[153,267,269],{"id":268},"github-actions","GitHub Actions",[144,271,272],{},"For more control over your deployment process, you can use GitHub Actions:",[274,275,281],"pre",{"className":276,"code":277,"filename":278,"language":279,"meta":280,"style":280},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","name: Deploy to Cloudflare\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build\n        run: pnpm build\n        env:\n          CLOUDFLARE_ENV: ${{ github.ref == 'refs/heads/main' && '' || 'preview' }}\n\n      - name: Deploy\n        run: npx wrangler deploy\n        env:\n          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n",".github/workflows/deploy.yml","yaml","",[197,282,283,299,306,316,324,341,349,362,367,375,383,394,402,416,421,434,445,453,465,470,482,492,499,510,521,526,538,549,554,566,576,584,595,600,612,622,629],{"__ignoreMap":280},[284,285,288,292,295],"span",{"class":286,"line":287},"line",1,[284,289,291],{"class":290},"swJcz","name",[284,293,236],{"class":294},"sMK4o",[284,296,298],{"class":297},"sfazB"," Deploy to Cloudflare\n",[284,300,302],{"class":286,"line":301},2,[284,303,305],{"emptyLinePlaceholder":304},true,"\n",[284,307,309,313],{"class":286,"line":308},3,[284,310,312],{"class":311},"sfNiH","on",[284,314,315],{"class":294},":\n",[284,317,319,322],{"class":286,"line":318},4,[284,320,321],{"class":290},"  push",[284,323,315],{"class":294},[284,325,327,330,332,335,338],{"class":286,"line":326},5,[284,328,329],{"class":290},"    branches",[284,331,236],{"class":294},[284,333,334],{"class":294}," [",[284,336,337],{"class":297},"main",[284,339,340],{"class":294},"]\n",[284,342,344,347],{"class":286,"line":343},6,[284,345,346],{"class":290},"  pull_request",[284,348,315],{"class":294},[284,350,352,354,356,358,360],{"class":286,"line":351},7,[284,353,329],{"class":290},[284,355,236],{"class":294},[284,357,334],{"class":294},[284,359,337],{"class":297},[284,361,340],{"class":294},[284,363,365],{"class":286,"line":364},8,[284,366,305],{"emptyLinePlaceholder":304},[284,368,370,373],{"class":286,"line":369},9,[284,371,372],{"class":290},"jobs",[284,374,315],{"class":294},[284,376,378,381],{"class":286,"line":377},10,[284,379,380],{"class":290},"  deploy",[284,382,315],{"class":294},[284,384,386,389,391],{"class":286,"line":385},11,[284,387,388],{"class":290},"    runs-on",[284,390,236],{"class":294},[284,392,393],{"class":297}," ubuntu-latest\n",[284,395,397,400],{"class":286,"line":396},12,[284,398,399],{"class":290},"    steps",[284,401,315],{"class":294},[284,403,405,408,411,413],{"class":286,"line":404},13,[284,406,407],{"class":294},"      -",[284,409,410],{"class":290}," uses",[284,412,236],{"class":294},[284,414,415],{"class":297}," actions/checkout@v4\n",[284,417,419],{"class":286,"line":418},14,[284,420,305],{"emptyLinePlaceholder":304},[284,422,424,426,429,431],{"class":286,"line":423},15,[284,425,407],{"class":294},[284,427,428],{"class":290}," name",[284,430,236],{"class":294},[284,432,433],{"class":297}," Setup pnpm\n",[284,435,437,440,442],{"class":286,"line":436},16,[284,438,439],{"class":290},"        uses",[284,441,236],{"class":294},[284,443,444],{"class":297}," pnpm/action-setup@v4\n",[284,446,448,451],{"class":286,"line":447},17,[284,449,450],{"class":290},"        with",[284,452,315],{"class":294},[284,454,456,459,461],{"class":286,"line":455},18,[284,457,458],{"class":290},"          version",[284,460,236],{"class":294},[284,462,464],{"class":463},"sbssI"," 10\n",[284,466,468],{"class":286,"line":467},19,[284,469,305],{"emptyLinePlaceholder":304},[284,471,473,475,477,479],{"class":286,"line":472},20,[284,474,407],{"class":294},[284,476,428],{"class":290},[284,478,236],{"class":294},[284,480,481],{"class":297}," Setup Node.js\n",[284,483,485,487,489],{"class":286,"line":484},21,[284,486,439],{"class":290},[284,488,236],{"class":294},[284,490,491],{"class":297}," actions/setup-node@v4\n",[284,493,495,497],{"class":286,"line":494},22,[284,496,450],{"class":290},[284,498,315],{"class":294},[284,500,502,505,507],{"class":286,"line":501},23,[284,503,504],{"class":290},"          node-version",[284,506,236],{"class":294},[284,508,509],{"class":463}," 22\n",[284,511,513,516,518],{"class":286,"line":512},24,[284,514,515],{"class":290},"          cache",[284,517,236],{"class":294},[284,519,520],{"class":297}," pnpm\n",[284,522,524],{"class":286,"line":523},25,[284,525,305],{"emptyLinePlaceholder":304},[284,527,529,531,533,535],{"class":286,"line":528},26,[284,530,407],{"class":294},[284,532,428],{"class":290},[284,534,236],{"class":294},[284,536,537],{"class":297}," Install dependencies\n",[284,539,541,544,546],{"class":286,"line":540},27,[284,542,543],{"class":290},"        run",[284,545,236],{"class":294},[284,547,548],{"class":297}," pnpm install\n",[284,550,552],{"class":286,"line":551},28,[284,553,305],{"emptyLinePlaceholder":304},[284,555,557,559,561,563],{"class":286,"line":556},29,[284,558,407],{"class":294},[284,560,428],{"class":290},[284,562,236],{"class":294},[284,564,565],{"class":297}," Build\n",[284,567,569,571,573],{"class":286,"line":568},30,[284,570,543],{"class":290},[284,572,236],{"class":294},[284,574,575],{"class":297}," pnpm build\n",[284,577,579,582],{"class":286,"line":578},31,[284,580,581],{"class":290},"        env",[284,583,315],{"class":294},[284,585,587,590,592],{"class":286,"line":586},32,[284,588,589],{"class":290},"          CLOUDFLARE_ENV",[284,591,236],{"class":294},[284,593,594],{"class":297}," ${{ github.ref == 'refs/heads/main' && '' || 'preview' }}\n",[284,596,598],{"class":286,"line":597},33,[284,599,305],{"emptyLinePlaceholder":304},[284,601,603,605,607,609],{"class":286,"line":602},34,[284,604,407],{"class":294},[284,606,428],{"class":290},[284,608,236],{"class":294},[284,610,611],{"class":297}," Deploy\n",[284,613,615,617,619],{"class":286,"line":614},35,[284,616,543],{"class":290},[284,618,236],{"class":294},[284,620,621],{"class":297}," npx wrangler deploy\n",[284,623,625,627],{"class":286,"line":624},36,[284,626,581],{"class":290},[284,628,315],{"class":294},[284,630,632,635,637],{"class":286,"line":631},37,[284,633,634],{"class":290},"          CLOUDFLARE_API_TOKEN",[284,636,236],{"class":294},[284,638,639],{"class":297}," ${{ secrets.CLOUDFLARE_API_TOKEN }}\n",[148,641,643],{"id":642},"d1-migrations-in-cicd","D1 Migrations in CI/CD",[645,646,647],"important",{},"Cloudflare D1 databases require special handling because they are not accessible during build time in CI environments.",[153,649,651],{"id":650},"the-problem","The Problem",[144,653,654],{},"Unlike PostgreSQL or MySQL, where build-time migrations work because the database is reachable over the network, Cloudflare D1 presents unique challenges:",[187,656,657,660,663],{},[172,658,659],{},"It requires Worker bindings to access the database",[172,661,662],{},"These bindings are only available at runtime",[172,664,665],{},"CI build environments have no database connection",[153,667,669],{"id":668},"solution-pre-deployment-migration-step","Solution: Pre-Deployment Migration Step",[144,671,672],{},"Run migrations before deployment using Wrangler or the NuxtHub CLI.",[144,674,675,676,261,679,682,683,686,687,689],{},"NuxtHub generates ",[197,677,678],{},"migrations_table",[197,680,681],{},"migrations_dir"," in ",[197,684,685],{},".output/server/wrangler.json"," for D1 projects. This enables Wrangler-managed migrations, but it does not execute them automatically during ",[197,688,264],{},".",[255,691,692,693,696,697,700,701,703],{},"If you applied migrations with NuxtHub before v0.10 and you use Cloudflare D1, some rows in ",[197,694,695],{},"_hub_migrations"," may be missing the ",[197,698,699],{},".sql"," suffix. Wrangler requires ",[197,702,699],{}," in order to recognize the migration files.",[144,705,706,707,709,710,712],{},"Fix: Update the migration names in the ",[197,708,695],{}," table to include the ",[197,711,699],{}," suffix.",[274,714,718],{"className":715,"code":716,"language":717,"meta":280,"style":280},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Preview affected rows\nSELECT id, name FROM _hub_migrations WHERE name NOT LIKE '%.sql';\n\n-- Append .sql\nUPDATE _hub_migrations SET name = name || '.sql' WHERE name NOT LIKE '%.sql';\n","sql",[197,719,720,726,766,770,775],{"__ignoreMap":280},[284,721,722],{"class":286,"line":287},[284,723,725],{"class":724},"sHwdD","-- Preview affected rows\n",[284,727,728,731,735,737,740,743,746,748,751,754,757,760,763],{"class":286,"line":301},[284,729,730],{"class":463},"SELECT",[284,732,734],{"class":733},"sTEyZ"," id, ",[284,736,291],{"class":463},[284,738,739],{"class":463}," FROM",[284,741,742],{"class":733}," _hub_migrations ",[284,744,745],{"class":463},"WHERE",[284,747,428],{"class":463},[284,749,750],{"class":463}," NOT",[284,752,753],{"class":463}," LIKE",[284,755,756],{"class":294}," '",[284,758,759],{"class":297},"%.sql",[284,761,762],{"class":294},"'",[284,764,765],{"class":733},";\n",[284,767,768],{"class":286,"line":308},[284,769,305],{"emptyLinePlaceholder":304},[284,771,772],{"class":286,"line":318},[284,773,774],{"class":724},"-- Append .sql\n",[284,776,777,780,782,785,787,790,792,795,797,799,801,804,806,808,810,812,814,816],{"class":286,"line":326},[284,778,779],{"class":463},"UPDATE",[284,781,742],{"class":733},[284,783,784],{"class":463},"SET",[284,786,428],{"class":463},[284,788,789],{"class":294}," =",[284,791,428],{"class":463},[284,793,794],{"class":294}," ||",[284,796,756],{"class":294},[284,798,699],{"class":297},[284,800,762],{"class":294},[284,802,803],{"class":463}," WHERE",[284,805,428],{"class":463},[284,807,750],{"class":463},[284,809,753],{"class":463},[284,811,756],{"class":294},[284,813,759],{"class":297},[284,815,762],{"class":294},[284,817,765],{"class":733},[819,820,822],"h4",{"id":821},"_1-disable-build-time-migrations","1. Disable Build-Time Migrations",[274,824,828],{"className":825,"code":826,"filename":214,"language":827,"meta":280,"style":280},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  hub: {\n    db: {\n      dialect: 'sqlite',\n      driver: 'd1',\n      connection: { databaseId: '\u003Cdatabase-id>' },\n      applyMigrationsDuringBuild: false\n    }\n  }\n})\n","ts",[197,829,830,849,859,868,885,901,926,936,941,946],{"__ignoreMap":280},[284,831,832,836,839,843,846],{"class":286,"line":287},[284,833,835],{"class":834},"s7zQu","export",[284,837,838],{"class":834}," default",[284,840,842],{"class":841},"s2Zo4"," defineNuxtConfig",[284,844,845],{"class":733},"(",[284,847,848],{"class":294},"{\n",[284,850,851,854,856],{"class":286,"line":301},[284,852,853],{"class":290},"  hub",[284,855,236],{"class":294},[284,857,858],{"class":294}," {\n",[284,860,861,864,866],{"class":286,"line":308},[284,862,863],{"class":290},"    db",[284,865,236],{"class":294},[284,867,858],{"class":294},[284,869,870,873,875,877,880,882],{"class":286,"line":318},[284,871,872],{"class":290},"      dialect",[284,874,236],{"class":294},[284,876,756],{"class":294},[284,878,879],{"class":297},"sqlite",[284,881,762],{"class":294},[284,883,884],{"class":294},",\n",[284,886,887,890,892,894,897,899],{"class":286,"line":326},[284,888,889],{"class":290},"      driver",[284,891,236],{"class":294},[284,893,756],{"class":294},[284,895,896],{"class":297},"d1",[284,898,762],{"class":294},[284,900,884],{"class":294},[284,902,903,906,908,911,914,916,918,921,923],{"class":286,"line":343},[284,904,905],{"class":290},"      connection",[284,907,236],{"class":294},[284,909,910],{"class":294}," {",[284,912,913],{"class":290}," databaseId",[284,915,236],{"class":294},[284,917,756],{"class":294},[284,919,920],{"class":297},"\u003Cdatabase-id>",[284,922,762],{"class":294},[284,924,925],{"class":294}," },\n",[284,927,928,931,933],{"class":286,"line":351},[284,929,930],{"class":290},"      applyMigrationsDuringBuild",[284,932,236],{"class":294},[284,934,935],{"class":311}," false\n",[284,937,938],{"class":286,"line":364},[284,939,940],{"class":294},"    }\n",[284,942,943],{"class":286,"line":369},[284,944,945],{"class":294},"  }\n",[284,947,948,951],{"class":286,"line":377},[284,949,950],{"class":294},"}",[284,952,953],{"class":733},")\n",[819,955,957],{"id":956},"_2-add-the-migration-step-to-your-cicd-pipeline","2. Add the Migration Step to Your CI/CD Pipeline",[144,959,960],{},[192,961,962],{},"Option A: Using Wrangler (recommended)",[144,964,965,966,689],{},"Use Wrangler's built-in D1 migrations command. This requires your migrations to follow ",[161,967,970],{"href":968,"rel":969},"https://developers.cloudflare.com/d1/build-with-d1/d1-migrations/",[165],"Wrangler's migration format",[144,972,973,974,976],{},"NuxtHub already generates the required metadata in ",[197,975,685],{},", so you can run migrations directly against the generated config:",[274,978,983],{"className":979,"code":980,"filename":981,"language":982,"meta":280,"style":280},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx wrangler d1 migrations apply DB --remote --config .output/server/wrangler.json && npx wrangler deploy\n","Terminal","bash",[197,984,985],{"__ignoreMap":280},[284,986,987,991,994,997,1000,1003,1006,1009,1012,1015,1018,1021,1023],{"class":286,"line":287},[284,988,990],{"class":989},"sBMFI","npx",[284,992,993],{"class":297}," wrangler",[284,995,996],{"class":297}," d1",[284,998,999],{"class":297}," migrations",[284,1001,1002],{"class":297}," apply",[284,1004,1005],{"class":297}," DB",[284,1007,1008],{"class":297}," --remote",[284,1010,1011],{"class":297}," --config",[284,1013,1014],{"class":297}," .output/server/wrangler.json",[284,1016,1017],{"class":294}," &&",[284,1019,1020],{"class":989}," npx",[284,1022,993],{"class":297},[284,1024,1025],{"class":297}," deploy\n",[144,1027,1028,1029,1031],{},"If you maintain a manual ",[197,1030,218],{},", configure it to use NuxtHub's migration table and output directory:",[274,1033,1037],{"className":1034,"code":1035,"filename":218,"language":1036,"meta":280,"style":280},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"d1_databases\": [{\n    \"binding\": \"DB\",\n    \"database_id\": \"\u003Cdatabase-id>\",\n    \"migrations_table\": \"_hub_migrations\",\n    \"migrations_dir\": \".output/server/db/migrations/sqlite/\"\n  }]\n}\n","jsonc",[197,1038,1039,1043,1060,1082,1101,1119,1137,1142],{"__ignoreMap":280},[284,1040,1041],{"class":286,"line":287},[284,1042,848],{"class":294},[284,1044,1045,1048,1052,1055,1057],{"class":286,"line":301},[284,1046,1047],{"class":294},"  \"",[284,1049,1051],{"class":1050},"spNyl","d1_databases",[284,1053,1054],{"class":294},"\"",[284,1056,236],{"class":294},[284,1058,1059],{"class":294}," [{\n",[284,1061,1062,1065,1068,1070,1072,1075,1078,1080],{"class":286,"line":308},[284,1063,1064],{"class":294},"    \"",[284,1066,1067],{"class":989},"binding",[284,1069,1054],{"class":294},[284,1071,236],{"class":294},[284,1073,1074],{"class":294}," \"",[284,1076,1077],{"class":297},"DB",[284,1079,1054],{"class":294},[284,1081,884],{"class":294},[284,1083,1084,1086,1089,1091,1093,1095,1097,1099],{"class":286,"line":318},[284,1085,1064],{"class":294},[284,1087,1088],{"class":989},"database_id",[284,1090,1054],{"class":294},[284,1092,236],{"class":294},[284,1094,1074],{"class":294},[284,1096,920],{"class":297},[284,1098,1054],{"class":294},[284,1100,884],{"class":294},[284,1102,1103,1105,1107,1109,1111,1113,1115,1117],{"class":286,"line":326},[284,1104,1064],{"class":294},[284,1106,678],{"class":989},[284,1108,1054],{"class":294},[284,1110,236],{"class":294},[284,1112,1074],{"class":294},[284,1114,695],{"class":297},[284,1116,1054],{"class":294},[284,1118,884],{"class":294},[284,1120,1121,1123,1125,1127,1129,1131,1134],{"class":286,"line":343},[284,1122,1064],{"class":294},[284,1124,681],{"class":989},[284,1126,1054],{"class":294},[284,1128,236],{"class":294},[284,1130,1074],{"class":294},[284,1132,1133],{"class":297},".output/server/db/migrations/sqlite/",[284,1135,1136],{"class":294},"\"\n",[284,1138,1139],{"class":286,"line":351},[284,1140,1141],{"class":294},"  }]\n",[284,1143,1144],{"class":286,"line":364},[284,1145,1146],{"class":294},"}\n",[274,1148,1150],{"className":276,"code":1149,"filename":278,"language":279,"meta":280,"style":280},"jobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build\n        run: pnpm build\n\n      - name: Apply D1 Migrations\n        run: npx wrangler d1 migrations apply DB --remote --config .output/server/wrangler.json\n        env:\n          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\n\n      - name: Deploy\n        run: npx wrangler deploy\n        env:\n          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\n          \n",[197,1151,1152,1158,1164,1172,1178,1188,1192,1202,1210,1216,1224,1228,1238,1246,1252,1260,1268,1272,1282,1290,1294,1304,1312,1316,1327,1336,1342,1350,1360,1364,1374,1382,1388,1396],{"__ignoreMap":280},[284,1153,1154,1156],{"class":286,"line":287},[284,1155,372],{"class":290},[284,1157,315],{"class":294},[284,1159,1160,1162],{"class":286,"line":301},[284,1161,380],{"class":290},[284,1163,315],{"class":294},[284,1165,1166,1168,1170],{"class":286,"line":308},[284,1167,388],{"class":290},[284,1169,236],{"class":294},[284,1171,393],{"class":297},[284,1173,1174,1176],{"class":286,"line":318},[284,1175,399],{"class":290},[284,1177,315],{"class":294},[284,1179,1180,1182,1184,1186],{"class":286,"line":326},[284,1181,407],{"class":294},[284,1183,410],{"class":290},[284,1185,236],{"class":294},[284,1187,415],{"class":297},[284,1189,1190],{"class":286,"line":343},[284,1191,305],{"emptyLinePlaceholder":304},[284,1193,1194,1196,1198,1200],{"class":286,"line":351},[284,1195,407],{"class":294},[284,1197,428],{"class":290},[284,1199,236],{"class":294},[284,1201,433],{"class":297},[284,1203,1204,1206,1208],{"class":286,"line":364},[284,1205,439],{"class":290},[284,1207,236],{"class":294},[284,1209,444],{"class":297},[284,1211,1212,1214],{"class":286,"line":369},[284,1213,450],{"class":290},[284,1215,315],{"class":294},[284,1217,1218,1220,1222],{"class":286,"line":377},[284,1219,458],{"class":290},[284,1221,236],{"class":294},[284,1223,464],{"class":463},[284,1225,1226],{"class":286,"line":385},[284,1227,305],{"emptyLinePlaceholder":304},[284,1229,1230,1232,1234,1236],{"class":286,"line":396},[284,1231,407],{"class":294},[284,1233,428],{"class":290},[284,1235,236],{"class":294},[284,1237,481],{"class":297},[284,1239,1240,1242,1244],{"class":286,"line":404},[284,1241,439],{"class":290},[284,1243,236],{"class":294},[284,1245,491],{"class":297},[284,1247,1248,1250],{"class":286,"line":418},[284,1249,450],{"class":290},[284,1251,315],{"class":294},[284,1253,1254,1256,1258],{"class":286,"line":423},[284,1255,504],{"class":290},[284,1257,236],{"class":294},[284,1259,509],{"class":463},[284,1261,1262,1264,1266],{"class":286,"line":436},[284,1263,515],{"class":290},[284,1265,236],{"class":294},[284,1267,520],{"class":297},[284,1269,1270],{"class":286,"line":447},[284,1271,305],{"emptyLinePlaceholder":304},[284,1273,1274,1276,1278,1280],{"class":286,"line":455},[284,1275,407],{"class":294},[284,1277,428],{"class":290},[284,1279,236],{"class":294},[284,1281,537],{"class":297},[284,1283,1284,1286,1288],{"class":286,"line":467},[284,1285,543],{"class":290},[284,1287,236],{"class":294},[284,1289,548],{"class":297},[284,1291,1292],{"class":286,"line":472},[284,1293,305],{"emptyLinePlaceholder":304},[284,1295,1296,1298,1300,1302],{"class":286,"line":484},[284,1297,407],{"class":294},[284,1299,428],{"class":290},[284,1301,236],{"class":294},[284,1303,565],{"class":297},[284,1305,1306,1308,1310],{"class":286,"line":494},[284,1307,543],{"class":290},[284,1309,236],{"class":294},[284,1311,575],{"class":297},[284,1313,1314],{"class":286,"line":501},[284,1315,305],{"emptyLinePlaceholder":304},[284,1317,1318,1320,1322,1324],{"class":286,"line":512},[284,1319,407],{"class":294},[284,1321,428],{"class":290},[284,1323,236],{"class":294},[284,1325,1326],{"class":297}," Apply D1 Migrations\n",[284,1328,1329,1331,1333],{"class":286,"line":523},[284,1330,543],{"class":290},[284,1332,236],{"class":294},[284,1334,1335],{"class":297}," npx wrangler d1 migrations apply DB --remote --config .output/server/wrangler.json\n",[284,1337,1338,1340],{"class":286,"line":528},[284,1339,581],{"class":290},[284,1341,315],{"class":294},[284,1343,1344,1346,1348],{"class":286,"line":540},[284,1345,634],{"class":290},[284,1347,236],{"class":294},[284,1349,639],{"class":297},[284,1351,1352,1355,1357],{"class":286,"line":551},[284,1353,1354],{"class":290},"          CLOUDFLARE_ACCOUNT_ID",[284,1356,236],{"class":294},[284,1358,1359],{"class":297}," ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\n",[284,1361,1362],{"class":286,"line":556},[284,1363,305],{"emptyLinePlaceholder":304},[284,1365,1366,1368,1370,1372],{"class":286,"line":568},[284,1367,407],{"class":294},[284,1369,428],{"class":290},[284,1371,236],{"class":294},[284,1373,611],{"class":297},[284,1375,1376,1378,1380],{"class":286,"line":578},[284,1377,543],{"class":290},[284,1379,236],{"class":294},[284,1381,621],{"class":297},[284,1383,1384,1386],{"class":286,"line":586},[284,1385,581],{"class":290},[284,1387,315],{"class":294},[284,1389,1390,1392,1394],{"class":286,"line":597},[284,1391,634],{"class":290},[284,1393,236],{"class":294},[284,1395,639],{"class":297},[284,1397,1398,1400,1402],{"class":286,"line":602},[284,1399,1354],{"class":290},[284,1401,236],{"class":294},[284,1403,1359],{"class":297},[144,1405,1406],{},[192,1407,1408,1409],{},"Option B: Using ",[197,1410,1411],{},"nuxt db migrate",[144,1413,1414],{},"If you have the D1 HTTP credentials configured, you can use the Nuxt CLI to apply migrations:",[274,1416,1418],{"className":276,"code":1417,"filename":278,"language":279,"meta":280,"style":280},"- name: Apply D1 Migrations\n  run: npx nuxt db migrate\n  env:\n    NUXT_HUB_CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\n    NUXT_HUB_CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n    NUXT_HUB_CLOUDFLARE_DATABASE_ID: ${{ secrets.CLOUDFLARE_DATABASE_ID }}\n",[197,1419,1420,1431,1441,1448,1457,1466],{"__ignoreMap":280},[284,1421,1422,1425,1427,1429],{"class":286,"line":287},[284,1423,1424],{"class":294},"-",[284,1426,428],{"class":290},[284,1428,236],{"class":294},[284,1430,1326],{"class":297},[284,1432,1433,1436,1438],{"class":286,"line":301},[284,1434,1435],{"class":290},"  run",[284,1437,236],{"class":294},[284,1439,1440],{"class":297}," npx nuxt db migrate\n",[284,1442,1443,1446],{"class":286,"line":308},[284,1444,1445],{"class":290},"  env",[284,1447,315],{"class":294},[284,1449,1450,1453,1455],{"class":286,"line":318},[284,1451,1452],{"class":290},"    NUXT_HUB_CLOUDFLARE_ACCOUNT_ID",[284,1454,236],{"class":294},[284,1456,1359],{"class":297},[284,1458,1459,1462,1464],{"class":286,"line":326},[284,1460,1461],{"class":290},"    NUXT_HUB_CLOUDFLARE_API_TOKEN",[284,1463,236],{"class":294},[284,1465,639],{"class":297},[284,1467,1468,1471,1473],{"class":286,"line":343},[284,1469,1470],{"class":290},"    NUXT_HUB_CLOUDFLARE_DATABASE_ID",[284,1472,236],{"class":294},[284,1474,1475],{"class":297}," ${{ secrets.CLOUDFLARE_DATABASE_ID }}\n",[221,1477,1478,1479,1481,1482,1485,1486,1489],{},"This uses the D1 HTTP API to apply migrations remotely. Make sure your ",[197,1480,214],{}," has ",[197,1483,1484],{},"driver: 'd1'"," or ",[197,1487,1488],{},"driver: 'd1-http'"," configured.",[148,1491,1493],{"id":1492},"postgresql-mysql-cicd","PostgreSQL / MySQL CI/CD",[144,1495,1496],{},"PostgreSQL and MySQL migrations can run at build time because the database is reachable via a connection string.",[274,1498,1500],{"className":276,"code":1499,"filename":278,"language":279,"meta":280,"style":280},"- name: Build with migrations\n  run: pnpm build\n  env:\n    DATABASE_URL: ${{ secrets.DATABASE_URL }}\n",[197,1501,1502,1513,1521,1527],{"__ignoreMap":280},[284,1503,1504,1506,1508,1510],{"class":286,"line":287},[284,1505,1424],{"class":294},[284,1507,428],{"class":290},[284,1509,236],{"class":294},[284,1511,1512],{"class":297}," Build with migrations\n",[284,1514,1515,1517,1519],{"class":286,"line":301},[284,1516,1435],{"class":290},[284,1518,236],{"class":294},[284,1520,575],{"class":297},[284,1522,1523,1525],{"class":286,"line":308},[284,1524,1445],{"class":290},[284,1526,315],{"class":294},[284,1528,1529,1532,1534],{"class":286,"line":318},[284,1530,1531],{"class":290},"    DATABASE_URL",[284,1533,236],{"class":294},[284,1535,1536],{"class":297}," ${{ secrets.DATABASE_URL }}\n",[209,1538,1539,1540,689],{},"Build-time migrations are enabled by default. NuxtHub automatically applies them during ",[197,1541,1542],{},"nuxt build",[153,1544,1546],{"id":1545},"running-migrations-in-a-dedicated-job","Running Migrations in a Dedicated Job",[144,1548,1549],{},"For more control over the migration process, you can run migrations in a separate job:",[274,1551,1553],{"className":276,"code":1552,"filename":278,"language":279,"meta":280,"style":280},"jobs:\n  migrate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: pnpm\n      - run: pnpm install\n      - name: Run migrations\n        run: npx nuxt db migrate\n        env:\n          DATABASE_URL: ${{ secrets.DATABASE_URL }}\n\n  deploy:\n    needs: migrate\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # ... build and deploy steps\n",[197,1554,1555,1561,1568,1576,1582,1592,1602,1612,1618,1626,1634,1645,1656,1664,1670,1679,1683,1689,1699,1707,1713,1723],{"__ignoreMap":280},[284,1556,1557,1559],{"class":286,"line":287},[284,1558,372],{"class":290},[284,1560,315],{"class":294},[284,1562,1563,1566],{"class":286,"line":301},[284,1564,1565],{"class":290},"  migrate",[284,1567,315],{"class":294},[284,1569,1570,1572,1574],{"class":286,"line":308},[284,1571,388],{"class":290},[284,1573,236],{"class":294},[284,1575,393],{"class":297},[284,1577,1578,1580],{"class":286,"line":318},[284,1579,399],{"class":290},[284,1581,315],{"class":294},[284,1583,1584,1586,1588,1590],{"class":286,"line":326},[284,1585,407],{"class":294},[284,1587,410],{"class":290},[284,1589,236],{"class":294},[284,1591,415],{"class":297},[284,1593,1594,1596,1598,1600],{"class":286,"line":343},[284,1595,407],{"class":294},[284,1597,410],{"class":290},[284,1599,236],{"class":294},[284,1601,444],{"class":297},[284,1603,1604,1606,1608,1610],{"class":286,"line":351},[284,1605,407],{"class":294},[284,1607,410],{"class":290},[284,1609,236],{"class":294},[284,1611,491],{"class":297},[284,1613,1614,1616],{"class":286,"line":364},[284,1615,450],{"class":290},[284,1617,315],{"class":294},[284,1619,1620,1622,1624],{"class":286,"line":369},[284,1621,504],{"class":290},[284,1623,236],{"class":294},[284,1625,509],{"class":463},[284,1627,1628,1630,1632],{"class":286,"line":377},[284,1629,515],{"class":290},[284,1631,236],{"class":294},[284,1633,520],{"class":297},[284,1635,1636,1638,1641,1643],{"class":286,"line":385},[284,1637,407],{"class":294},[284,1639,1640],{"class":290}," run",[284,1642,236],{"class":294},[284,1644,548],{"class":297},[284,1646,1647,1649,1651,1653],{"class":286,"line":396},[284,1648,407],{"class":294},[284,1650,428],{"class":290},[284,1652,236],{"class":294},[284,1654,1655],{"class":297}," Run migrations\n",[284,1657,1658,1660,1662],{"class":286,"line":404},[284,1659,543],{"class":290},[284,1661,236],{"class":294},[284,1663,1440],{"class":297},[284,1665,1666,1668],{"class":286,"line":418},[284,1667,581],{"class":290},[284,1669,315],{"class":294},[284,1671,1672,1675,1677],{"class":286,"line":423},[284,1673,1674],{"class":290},"          DATABASE_URL",[284,1676,236],{"class":294},[284,1678,1536],{"class":297},[284,1680,1681],{"class":286,"line":436},[284,1682,305],{"emptyLinePlaceholder":304},[284,1684,1685,1687],{"class":286,"line":447},[284,1686,380],{"class":290},[284,1688,315],{"class":294},[284,1690,1691,1694,1696],{"class":286,"line":455},[284,1692,1693],{"class":290},"    needs",[284,1695,236],{"class":294},[284,1697,1698],{"class":297}," migrate\n",[284,1700,1701,1703,1705],{"class":286,"line":467},[284,1702,388],{"class":290},[284,1704,236],{"class":294},[284,1706,393],{"class":297},[284,1708,1709,1711],{"class":286,"line":472},[284,1710,399],{"class":290},[284,1712,315],{"class":294},[284,1714,1715,1717,1719,1721],{"class":286,"line":484},[284,1716,407],{"class":294},[284,1718,410],{"class":290},[284,1720,236],{"class":294},[284,1722,415],{"class":297},[284,1724,1725],{"class":286,"line":494},[284,1726,1727],{"class":724},"      # ... build and deploy steps\n",[148,1729,1731],{"id":1730},"vercel-deployment","Vercel Deployment",[144,1733,1734],{},"Vercel handles CI/CD automatically when you connect your repository.",[153,1736,40],{"id":1737},"setup",[169,1739,1740,1748,1754],{},[172,1741,1742,1743],{},"Import your project in the ",[161,1744,1747],{"href":1745,"rel":1746},"https://vercel.com/new",[165],"Vercel dashboard",[172,1749,1750,1751],{},"Configure environment variables under ",[192,1752,1753],{},"Project Settings → Environment Variables",[172,1755,1756],{},"Vercel will deploy automatically on every push",[153,1758,1760],{"id":1759},"database-migrations","Database Migrations",[144,1762,1763],{},"For Vercel deployments with PostgreSQL or MySQL, migrations run during the build process because Vercel's build environment has network access:",[274,1765,1767],{"className":825,"code":1766,"filename":214,"language":827,"meta":280,"style":280},"export default defineNuxtConfig({\n  hub: {\n    db: {\n      dialect: 'postgresql',\n      // Migrations run during build since Vercel's build environment has network access\n    }\n  }\n})\n",[197,1768,1769,1781,1789,1797,1812,1817,1821,1825],{"__ignoreMap":280},[284,1770,1771,1773,1775,1777,1779],{"class":286,"line":287},[284,1772,835],{"class":834},[284,1774,838],{"class":834},[284,1776,842],{"class":841},[284,1778,845],{"class":733},[284,1780,848],{"class":294},[284,1782,1783,1785,1787],{"class":286,"line":301},[284,1784,853],{"class":290},[284,1786,236],{"class":294},[284,1788,858],{"class":294},[284,1790,1791,1793,1795],{"class":286,"line":308},[284,1792,863],{"class":290},[284,1794,236],{"class":294},[284,1796,858],{"class":294},[284,1798,1799,1801,1803,1805,1808,1810],{"class":286,"line":318},[284,1800,872],{"class":290},[284,1802,236],{"class":294},[284,1804,756],{"class":294},[284,1806,1807],{"class":297},"postgresql",[284,1809,762],{"class":294},[284,1811,884],{"class":294},[284,1813,1814],{"class":286,"line":326},[284,1815,1816],{"class":724},"      // Migrations run during build since Vercel's build environment has network access\n",[284,1818,1819],{"class":286,"line":343},[284,1820,940],{"class":294},[284,1822,1823],{"class":286,"line":351},[284,1824,945],{"class":294},[284,1826,1827,1829],{"class":286,"line":364},[284,1828,950],{"class":294},[284,1830,953],{"class":733},[1832,1833,1835],"callout",{"to":1834},"https://vercel.com/docs/deployments/git","Learn more about Vercel Git integrations in the Vercel documentation.",[148,1837,1839],{"id":1838},"environment-specific-secrets","Environment-Specific Secrets",[153,1841,269],{"id":1842},"github-actions-1",[144,1844,1845,1846,236],{},"Store your secrets in ",[192,1847,1848],{},"Repository Settings → Secrets and variables → Actions",[1850,1851,1852,1865],"table",{},[1853,1854,1855],"thead",{},[1856,1857,1858,1862],"tr",{},[1859,1860,1861],"th",{},"Secret",[1859,1863,1864],{},"Description",[1866,1867,1868,1879,1889,1899],"tbody",{},[1856,1869,1870,1876],{},[1871,1872,1873],"td",{},[197,1874,1875],{},"CLOUDFLARE_API_TOKEN",[1871,1877,1878],{},"Cloudflare API token with Workers, D1, KV, and R2 permissions",[1856,1880,1881,1886],{},[1871,1882,1883],{},[197,1884,1885],{},"CLOUDFLARE_ACCOUNT_ID",[1871,1887,1888],{},"Your Cloudflare account ID",[1856,1890,1891,1896],{},[1871,1892,1893],{},[197,1894,1895],{},"CLOUDFLARE_DATABASE_ID",[1871,1897,1898],{},"The D1 database ID",[1856,1900,1901,1906],{},[1871,1902,1903],{},[197,1904,1905],{},"DATABASE_URL",[1871,1907,1908],{},"PostgreSQL or MySQL connection string",[153,1910,1912],{"id":1911},"per-environment-secrets","Per-Environment Secrets",[144,1914,1915],{},"Use GitHub Environments to separate production and staging secrets:",[274,1917,1919],{"className":276,"code":1918,"filename":278,"language":279,"meta":280,"style":280},"jobs:\n  deploy-production:\n    environment: production\n    # This job uses secrets from the production environment\n\n  deploy-preview:\n    environment: preview\n    # This job uses secrets from the preview environment\n",[197,1920,1921,1927,1934,1944,1949,1953,1960,1969],{"__ignoreMap":280},[284,1922,1923,1925],{"class":286,"line":287},[284,1924,372],{"class":290},[284,1926,315],{"class":294},[284,1928,1929,1932],{"class":286,"line":301},[284,1930,1931],{"class":290},"  deploy-production",[284,1933,315],{"class":294},[284,1935,1936,1939,1941],{"class":286,"line":308},[284,1937,1938],{"class":290},"    environment",[284,1940,236],{"class":294},[284,1942,1943],{"class":297}," production\n",[284,1945,1946],{"class":286,"line":318},[284,1947,1948],{"class":724},"    # This job uses secrets from the production environment\n",[284,1950,1951],{"class":286,"line":326},[284,1952,305],{"emptyLinePlaceholder":304},[284,1954,1955,1958],{"class":286,"line":343},[284,1956,1957],{"class":290},"  deploy-preview",[284,1959,315],{"class":294},[284,1961,1962,1964,1966],{"class":286,"line":351},[284,1963,1938],{"class":290},[284,1965,236],{"class":294},[284,1967,1968],{"class":297}," preview\n",[284,1970,1971],{"class":286,"line":364},[284,1972,1973],{"class":724},"    # This job uses secrets from the preview environment\n",[1832,1975,1977],{"to":1976},"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment","Learn more about GitHub Environments in the GitHub documentation.",[1979,1980,1981],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .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 .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}",{"title":280,"searchDepth":301,"depth":301,"links":1983},[1984,1988,1992,1995,1999],{"id":150,"depth":301,"text":151,"children":1985},[1986,1987],{"id":155,"depth":308,"text":156},{"id":268,"depth":308,"text":269},{"id":642,"depth":301,"text":643,"children":1989},[1990,1991],{"id":650,"depth":308,"text":651},{"id":668,"depth":308,"text":669},{"id":1492,"depth":301,"text":1493,"children":1993},[1994],{"id":1545,"depth":308,"text":1546},{"id":1730,"depth":301,"text":1731,"children":1996},[1997,1998],{"id":1737,"depth":308,"text":40},{"id":1759,"depth":308,"text":1760},{"id":1838,"depth":301,"text":1839,"children":2000},[2001,2002],{"id":1842,"depth":308,"text":269},{"id":1911,"depth":308,"text":1912},"Set up continuous integration and deployment for your NuxtHub application with proper database migration handling.","md",null,{},{"title":110},{"title":139,"description":2003},"kQkHHxITzcRlNZQVK-R4NGOg7ul0GAAfXKH5ijFiplY",[2011,2013],{"title":106,"path":107,"stem":108,"description":2012,"children":-1},"Build real-time experiences with NuxtHub.",{"title":120,"path":121,"stem":122,"description":2014,"children":-1},"Reference for all environment variables used by NuxtHub for database, blob storage, KV, cache, and deployment configuration.",1774053876235]