[{"data":1,"prerenderedAt":1700},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/environments":137,"/docs/getting-started/environments-surround":1695},[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":30,"body":139,"description":1688,"extension":1689,"links":1690,"meta":1691,"navigation":1692,"path":31,"seo":1693,"stem":32,"__hash__":1694},"docs/docs/1.getting-started/5.environments.md",{"type":140,"value":141,"toc":1680},"minimark",[142,146,151,231,235,242,304,315,320,323,445,449,453,464,621,633,643,647,1676],[143,144,145],"p",{},"NuxtHub supports multiple deployment environments, each with isolated resources such as databases, KV stores, and buckets. This guide explains how to configure environments across different hosting providers.",[147,148,150],"h2",{"id":149},"environment-types","Environment Types",[152,153,154,170],"table",{},[155,156,157],"thead",{},[158,159,160,164,167],"tr",{},[161,162,163],"th",{},"Environment",[161,165,166],{},"Purpose",[161,168,169],{},"Trigger",[171,172,173,188,201,214],"tbody",{},[158,174,175,182,185],{},[176,177,178],"td",{},[179,180,181],"strong",{},"Production",[176,183,184],{},"Live application serving end users",[176,186,187],{},"Push to main branch",[158,189,190,195,198],{},[176,191,192],{},[179,193,194],{},"Preview",[176,196,197],{},"Testing pull requests and feature branches",[176,199,200],{},"Push to non-main branches",[158,202,203,208,211],{},[176,204,205],{},[179,206,207],{},"Staging",[176,209,210],{},"Pre-production testing environment",[176,212,213],{},"Named environment in configuration",[158,215,216,221,224],{},[176,217,218],{},[179,219,220],{},"Local",[176,222,223],{},"Development on your machine",[176,225,226,227],{},"Running ",[228,229,230],"code",{},"nuxt dev",[147,232,234],{"id":233},"local-development","Local Development",[143,236,237,238,241],{},"During local development, NuxtHub stores data in the ",[228,239,240],{},".data/"," directory:",[152,243,244,254],{},[155,245,246],{},[158,247,248,251],{},[161,249,250],{},"Resource",[161,252,253],{},"Local Path",[171,255,256,266,276,286,295],{},[158,257,258,261],{},[176,259,260],{},"SQLite/D1",[176,262,263],{},[228,264,265],{},".data/db/sqlite.db",[158,267,268,271],{},[176,269,270],{},"PostgreSQL",[176,272,273],{},[228,274,275],{},".data/db/",[158,277,278,281],{},[176,279,280],{},"KV",[176,282,283],{},[228,284,285],{},".data/kv/",[158,287,288,290],{},[176,289,59],{},[176,291,292],{},[228,293,294],{},".data/blob/",[158,296,297,299],{},[176,298,85],{},[176,300,301],{},[228,302,303],{},".data/cache/",[305,306,307,308,310,311,314],"tip",{},"The ",[228,309,240],{}," directory is included in ",[228,312,313],{},".gitignore"," by default in Nuxt projects.",[316,317,319],"h3",{"id":318},"connecting-to-remote-resources","Connecting to Remote Resources",[143,321,322],{},"To develop against production or preview data, set environment variables that point to your remote resources:",[324,325,331],"pre",{"className":326,"code":327,"filename":328,"language":329,"meta":330,"style":330},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Connect to a remote Turso database\nTURSO_DATABASE_URL=libsql://\u003Cyour-db>.turso.io\nTURSO_AUTH_TOKEN=\u003Cyour-token>\n\n# Or connect to a remote PostgreSQL database\nPOSTGRES_URL=postgresql://\u003Cuser>:\u003Cpassword>@\u003Chost>/\u003Cdatabase>\n",".env.local","bash","",[228,332,333,342,369,384,391,397],{"__ignoreMap":330},[334,335,338],"span",{"class":336,"line":337},"line",1,[334,339,341],{"class":340},"sHwdD","# Connect to a remote Turso database\n",[334,343,345,349,353,357,360,363,366],{"class":336,"line":344},2,[334,346,348],{"class":347},"sTEyZ","TURSO_DATABASE_URL",[334,350,352],{"class":351},"sMK4o","=",[334,354,356],{"class":355},"sfazB","libsql://",[334,358,359],{"class":351},"\u003C",[334,361,362],{"class":355},"your-db",[334,364,365],{"class":351},">",[334,367,368],{"class":355},".turso.io\n",[334,370,372,375,378,381],{"class":336,"line":371},3,[334,373,374],{"class":347},"TURSO_AUTH_TOKEN",[334,376,377],{"class":351},"=\u003C",[334,379,380],{"class":355},"your-token",[334,382,383],{"class":351},">\n",[334,385,387],{"class":336,"line":386},4,[334,388,390],{"emptyLinePlaceholder":389},true,"\n",[334,392,394],{"class":336,"line":393},5,[334,395,396],{"class":340},"# Or connect to a remote PostgreSQL database\n",[334,398,400,403,405,408,410,413,415,418,420,423,425,428,430,433,435,438,440,443],{"class":336,"line":399},6,[334,401,402],{"class":347},"POSTGRES_URL",[334,404,352],{"class":351},[334,406,407],{"class":355},"postgresql://",[334,409,359],{"class":351},[334,411,412],{"class":355},"user",[334,414,365],{"class":351},[334,416,417],{"class":355},":",[334,419,359],{"class":351},[334,421,422],{"class":355},"password",[334,424,365],{"class":351},[334,426,427],{"class":355},"@",[334,429,359],{"class":351},[334,431,432],{"class":355},"host",[334,434,365],{"class":351},[334,436,437],{"class":355},"/",[334,439,359],{"class":351},[334,441,442],{"class":355},"database",[334,444,383],{"class":351},[446,447,448],"warning",{},"Connecting to production databases during development risks accidental data modifications. Use a preview or staging environment instead.",[316,450,452],{"id":451},"cloudflare-dev-emulation","Cloudflare Dev Emulation",[143,454,455,456,459,460,463],{},"Nitro runs Cloudflare's local dev emulation when you use the ",[228,457,458],{},"cloudflare_module"," preset. This replaces NuxtHub's default local storage and requires a ",[228,461,462],{},"wrangler.jsonc"," with bindings:",[324,465,469],{"className":466,"code":467,"filename":462,"language":468,"meta":330,"style":330},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  \"d1_databases\": [{ \"binding\": \"DB\" }],\n  \"kv_namespaces\": [{ \"binding\": \"KV\" }, { \"binding\": \"CACHE\" }],\n  \"r2_buckets\": [{ \"binding\": \"BLOB\" }]\n}\n","jsonc",[228,470,471,476,501,535,585,616],{"__ignoreMap":330},[334,472,473],{"class":336,"line":337},[334,474,475],{"class":351},"{\n",[334,477,478,481,485,488,490,493,496,498],{"class":336,"line":344},[334,479,480],{"class":351},"  \"",[334,482,484],{"class":483},"spNyl","$schema",[334,486,487],{"class":351},"\"",[334,489,417],{"class":351},[334,491,492],{"class":351}," \"",[334,494,495],{"class":355},"node_modules/wrangler/config-schema.json",[334,497,487],{"class":351},[334,499,500],{"class":351},",\n",[334,502,503,505,508,510,512,515,517,521,523,525,527,530,532],{"class":336,"line":371},[334,504,480],{"class":351},[334,506,507],{"class":483},"d1_databases",[334,509,487],{"class":351},[334,511,417],{"class":351},[334,513,514],{"class":351}," [{",[334,516,492],{"class":351},[334,518,520],{"class":519},"sBMFI","binding",[334,522,487],{"class":351},[334,524,417],{"class":351},[334,526,492],{"class":351},[334,528,529],{"class":355},"DB",[334,531,487],{"class":351},[334,533,534],{"class":351}," }],\n",[334,536,537,539,542,544,546,548,550,552,554,556,558,560,562,565,568,570,572,574,576,578,581,583],{"class":336,"line":386},[334,538,480],{"class":351},[334,540,541],{"class":483},"kv_namespaces",[334,543,487],{"class":351},[334,545,417],{"class":351},[334,547,514],{"class":351},[334,549,492],{"class":351},[334,551,520],{"class":519},[334,553,487],{"class":351},[334,555,417],{"class":351},[334,557,492],{"class":351},[334,559,280],{"class":355},[334,561,487],{"class":351},[334,563,564],{"class":351}," },",[334,566,567],{"class":351}," {",[334,569,492],{"class":351},[334,571,520],{"class":519},[334,573,487],{"class":351},[334,575,417],{"class":351},[334,577,492],{"class":351},[334,579,580],{"class":355},"CACHE",[334,582,487],{"class":351},[334,584,534],{"class":351},[334,586,587,589,592,594,596,598,600,602,604,606,608,611,613],{"class":336,"line":393},[334,588,480],{"class":351},[334,590,591],{"class":483},"r2_buckets",[334,593,487],{"class":351},[334,595,417],{"class":351},[334,597,514],{"class":351},[334,599,492],{"class":351},[334,601,520],{"class":519},[334,603,487],{"class":351},[334,605,417],{"class":351},[334,607,492],{"class":351},[334,609,610],{"class":355},"BLOB",[334,612,487],{"class":351},[334,614,615],{"class":351}," }]\n",[334,617,618],{"class":336,"line":399},[334,619,620],{"class":351},"}\n",[622,623,624,625,628,629,632],"note",{},"Without this file, Nitro throws binding errors such as ",[228,626,627],{},"R2 binding \"BLOB\" not found"," or ",[228,630,631],{},"D1 binding \"DB\" not found",".",[305,634,635,636,639,640,632],{},"Cloudflare dev emulation is only used when you explicitly set ",[228,637,638],{},"nitro.preset: 'cloudflare_module'"," in your ",[228,641,642],{},"nuxt.config.ts",[147,644,646],{"id":645},"production-environments","Production Environments",[648,649,651,1554],"tabs",{"sync":650},"provider",[652,653,656,667,671,677,1297,1321,1325,1332,1378,1384,1389,1393,1396,1401,1442,1447,1503,1508,1551],"tabs-item",{"icon":654,"label":655},"i-simple-icons-cloudflare","Cloudflare",[143,657,658,659,666],{},"Cloudflare Workers supports ",[660,661,665],"a",{"href":662,"rel":663},"https://developers.cloudflare.com/workers/wrangler/environments/",[664],"nofollow","named environments"," for managing staging, preview, and other deployment targets.",[316,668,670],{"id":669},"configuration","Configuration",[143,672,673,674,676],{},"Define environment-specific bindings in your ",[228,675,462],{}," file:",[324,678,680],{"className":466,"code":679,"filename":462,"language":468,"meta":330,"style":330},"{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  // Production configuration (default)\n  \"d1_databases\": [\n    { \"binding\": \"DB\", \"database_id\": \"\u003Cproduction-db-id>\" }\n  ],\n  \"kv_namespaces\": [\n    { \"binding\": \"KV\", \"id\": \"\u003Cproduction-kv-id>\" }\n  ],\n  \"r2_buckets\": [\n    { \"binding\": \"BLOB\", \"bucket_name\": \"\u003Cproduction-bucket>\" }\n  ],\n  // Named environments\n  \"env\": {\n    \"preview\": {\n      \"d1_databases\": [\n        { \"binding\": \"DB\", \"database_id\": \"\u003Cpreview-db-id>\" }\n      ],\n      \"kv_namespaces\": [\n        { \"binding\": \"KV\", \"id\": \"\u003Cpreview-kv-id>\" }\n      ],\n      \"r2_buckets\": [\n        { \"binding\": \"BLOB\", \"bucket_name\": \"\u003Cpreview-bucket>\" }\n      ]\n    },\n    \"staging\": {\n      \"d1_databases\": [\n        { \"binding\": \"DB\", \"database_id\": \"\u003Cstaging-db-id>\" }\n      ],\n      \"kv_namespaces\": [\n        { \"binding\": \"KV\", \"id\": \"\u003Cstaging-kv-id>\" }\n      ],\n      \"r2_buckets\": [\n        { \"binding\": \"BLOB\", \"bucket_name\": \"\u003Cstaging-bucket>\" }\n      ]\n    }\n  }\n}\n",[228,681,682,686,704,709,722,763,768,781,820,825,838,877,882,888,903,918,933,973,979,992,1030,1035,1048,1086,1092,1098,1112,1125,1163,1168,1181,1219,1224,1237,1275,1280,1286,1292],{"__ignoreMap":330},[334,683,684],{"class":336,"line":337},[334,685,475],{"class":351},[334,687,688,690,692,694,696,698,700,702],{"class":336,"line":344},[334,689,480],{"class":351},[334,691,484],{"class":483},[334,693,487],{"class":351},[334,695,417],{"class":351},[334,697,492],{"class":351},[334,699,495],{"class":355},[334,701,487],{"class":351},[334,703,500],{"class":351},[334,705,706],{"class":336,"line":371},[334,707,708],{"class":340},"  // Production configuration (default)\n",[334,710,711,713,715,717,719],{"class":336,"line":386},[334,712,480],{"class":351},[334,714,507],{"class":483},[334,716,487],{"class":351},[334,718,417],{"class":351},[334,720,721],{"class":351}," [\n",[334,723,724,727,729,731,733,735,737,739,741,744,746,749,751,753,755,758,760],{"class":336,"line":393},[334,725,726],{"class":351},"    {",[334,728,492],{"class":351},[334,730,520],{"class":519},[334,732,487],{"class":351},[334,734,417],{"class":351},[334,736,492],{"class":351},[334,738,529],{"class":355},[334,740,487],{"class":351},[334,742,743],{"class":351},",",[334,745,492],{"class":351},[334,747,748],{"class":519},"database_id",[334,750,487],{"class":351},[334,752,417],{"class":351},[334,754,492],{"class":351},[334,756,757],{"class":355},"\u003Cproduction-db-id>",[334,759,487],{"class":351},[334,761,762],{"class":351}," }\n",[334,764,765],{"class":336,"line":399},[334,766,767],{"class":351},"  ],\n",[334,769,771,773,775,777,779],{"class":336,"line":770},7,[334,772,480],{"class":351},[334,774,541],{"class":483},[334,776,487],{"class":351},[334,778,417],{"class":351},[334,780,721],{"class":351},[334,782,784,786,788,790,792,794,796,798,800,802,804,807,809,811,813,816,818],{"class":336,"line":783},8,[334,785,726],{"class":351},[334,787,492],{"class":351},[334,789,520],{"class":519},[334,791,487],{"class":351},[334,793,417],{"class":351},[334,795,492],{"class":351},[334,797,280],{"class":355},[334,799,487],{"class":351},[334,801,743],{"class":351},[334,803,492],{"class":351},[334,805,806],{"class":519},"id",[334,808,487],{"class":351},[334,810,417],{"class":351},[334,812,492],{"class":351},[334,814,815],{"class":355},"\u003Cproduction-kv-id>",[334,817,487],{"class":351},[334,819,762],{"class":351},[334,821,823],{"class":336,"line":822},9,[334,824,767],{"class":351},[334,826,828,830,832,834,836],{"class":336,"line":827},10,[334,829,480],{"class":351},[334,831,591],{"class":483},[334,833,487],{"class":351},[334,835,417],{"class":351},[334,837,721],{"class":351},[334,839,841,843,845,847,849,851,853,855,857,859,861,864,866,868,870,873,875],{"class":336,"line":840},11,[334,842,726],{"class":351},[334,844,492],{"class":351},[334,846,520],{"class":519},[334,848,487],{"class":351},[334,850,417],{"class":351},[334,852,492],{"class":351},[334,854,610],{"class":355},[334,856,487],{"class":351},[334,858,743],{"class":351},[334,860,492],{"class":351},[334,862,863],{"class":519},"bucket_name",[334,865,487],{"class":351},[334,867,417],{"class":351},[334,869,492],{"class":351},[334,871,872],{"class":355},"\u003Cproduction-bucket>",[334,874,487],{"class":351},[334,876,762],{"class":351},[334,878,880],{"class":336,"line":879},12,[334,881,767],{"class":351},[334,883,885],{"class":336,"line":884},13,[334,886,887],{"class":340},"  // Named environments\n",[334,889,891,893,896,898,900],{"class":336,"line":890},14,[334,892,480],{"class":351},[334,894,895],{"class":483},"env",[334,897,487],{"class":351},[334,899,417],{"class":351},[334,901,902],{"class":351}," {\n",[334,904,906,909,912,914,916],{"class":336,"line":905},15,[334,907,908],{"class":351},"    \"",[334,910,911],{"class":519},"preview",[334,913,487],{"class":351},[334,915,417],{"class":351},[334,917,902],{"class":351},[334,919,921,924,927,929,931],{"class":336,"line":920},16,[334,922,923],{"class":351},"      \"",[334,925,507],{"class":926},"sbssI",[334,928,487],{"class":351},[334,930,417],{"class":351},[334,932,721],{"class":351},[334,934,936,939,941,944,946,948,950,952,954,956,958,960,962,964,966,969,971],{"class":336,"line":935},17,[334,937,938],{"class":351},"        {",[334,940,492],{"class":351},[334,942,520],{"class":943},"swJcz",[334,945,487],{"class":351},[334,947,417],{"class":351},[334,949,492],{"class":351},[334,951,529],{"class":355},[334,953,487],{"class":351},[334,955,743],{"class":351},[334,957,492],{"class":351},[334,959,748],{"class":943},[334,961,487],{"class":351},[334,963,417],{"class":351},[334,965,492],{"class":351},[334,967,968],{"class":355},"\u003Cpreview-db-id>",[334,970,487],{"class":351},[334,972,762],{"class":351},[334,974,976],{"class":336,"line":975},18,[334,977,978],{"class":351},"      ],\n",[334,980,982,984,986,988,990],{"class":336,"line":981},19,[334,983,923],{"class":351},[334,985,541],{"class":926},[334,987,487],{"class":351},[334,989,417],{"class":351},[334,991,721],{"class":351},[334,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1026,1028],{"class":336,"line":994},20,[334,996,938],{"class":351},[334,998,492],{"class":351},[334,1000,520],{"class":943},[334,1002,487],{"class":351},[334,1004,417],{"class":351},[334,1006,492],{"class":351},[334,1008,280],{"class":355},[334,1010,487],{"class":351},[334,1012,743],{"class":351},[334,1014,492],{"class":351},[334,1016,806],{"class":943},[334,1018,487],{"class":351},[334,1020,417],{"class":351},[334,1022,492],{"class":351},[334,1024,1025],{"class":355},"\u003Cpreview-kv-id>",[334,1027,487],{"class":351},[334,1029,762],{"class":351},[334,1031,1033],{"class":336,"line":1032},21,[334,1034,978],{"class":351},[334,1036,1038,1040,1042,1044,1046],{"class":336,"line":1037},22,[334,1039,923],{"class":351},[334,1041,591],{"class":926},[334,1043,487],{"class":351},[334,1045,417],{"class":351},[334,1047,721],{"class":351},[334,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1082,1084],{"class":336,"line":1050},23,[334,1052,938],{"class":351},[334,1054,492],{"class":351},[334,1056,520],{"class":943},[334,1058,487],{"class":351},[334,1060,417],{"class":351},[334,1062,492],{"class":351},[334,1064,610],{"class":355},[334,1066,487],{"class":351},[334,1068,743],{"class":351},[334,1070,492],{"class":351},[334,1072,863],{"class":943},[334,1074,487],{"class":351},[334,1076,417],{"class":351},[334,1078,492],{"class":351},[334,1080,1081],{"class":355},"\u003Cpreview-bucket>",[334,1083,487],{"class":351},[334,1085,762],{"class":351},[334,1087,1089],{"class":336,"line":1088},24,[334,1090,1091],{"class":351},"      ]\n",[334,1093,1095],{"class":336,"line":1094},25,[334,1096,1097],{"class":351},"    },\n",[334,1099,1101,1103,1106,1108,1110],{"class":336,"line":1100},26,[334,1102,908],{"class":351},[334,1104,1105],{"class":519},"staging",[334,1107,487],{"class":351},[334,1109,417],{"class":351},[334,1111,902],{"class":351},[334,1113,1115,1117,1119,1121,1123],{"class":336,"line":1114},27,[334,1116,923],{"class":351},[334,1118,507],{"class":926},[334,1120,487],{"class":351},[334,1122,417],{"class":351},[334,1124,721],{"class":351},[334,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1159,1161],{"class":336,"line":1127},28,[334,1129,938],{"class":351},[334,1131,492],{"class":351},[334,1133,520],{"class":943},[334,1135,487],{"class":351},[334,1137,417],{"class":351},[334,1139,492],{"class":351},[334,1141,529],{"class":355},[334,1143,487],{"class":351},[334,1145,743],{"class":351},[334,1147,492],{"class":351},[334,1149,748],{"class":943},[334,1151,487],{"class":351},[334,1153,417],{"class":351},[334,1155,492],{"class":351},[334,1157,1158],{"class":355},"\u003Cstaging-db-id>",[334,1160,487],{"class":351},[334,1162,762],{"class":351},[334,1164,1166],{"class":336,"line":1165},29,[334,1167,978],{"class":351},[334,1169,1171,1173,1175,1177,1179],{"class":336,"line":1170},30,[334,1172,923],{"class":351},[334,1174,541],{"class":926},[334,1176,487],{"class":351},[334,1178,417],{"class":351},[334,1180,721],{"class":351},[334,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1215,1217],{"class":336,"line":1183},31,[334,1185,938],{"class":351},[334,1187,492],{"class":351},[334,1189,520],{"class":943},[334,1191,487],{"class":351},[334,1193,417],{"class":351},[334,1195,492],{"class":351},[334,1197,280],{"class":355},[334,1199,487],{"class":351},[334,1201,743],{"class":351},[334,1203,492],{"class":351},[334,1205,806],{"class":943},[334,1207,487],{"class":351},[334,1209,417],{"class":351},[334,1211,492],{"class":351},[334,1213,1214],{"class":355},"\u003Cstaging-kv-id>",[334,1216,487],{"class":351},[334,1218,762],{"class":351},[334,1220,1222],{"class":336,"line":1221},32,[334,1223,978],{"class":351},[334,1225,1227,1229,1231,1233,1235],{"class":336,"line":1226},33,[334,1228,923],{"class":351},[334,1230,591],{"class":926},[334,1232,487],{"class":351},[334,1234,417],{"class":351},[334,1236,721],{"class":351},[334,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1271,1273],{"class":336,"line":1239},34,[334,1241,938],{"class":351},[334,1243,492],{"class":351},[334,1245,520],{"class":943},[334,1247,487],{"class":351},[334,1249,417],{"class":351},[334,1251,492],{"class":351},[334,1253,610],{"class":355},[334,1255,487],{"class":351},[334,1257,743],{"class":351},[334,1259,492],{"class":351},[334,1261,863],{"class":943},[334,1263,487],{"class":351},[334,1265,417],{"class":351},[334,1267,492],{"class":351},[334,1269,1270],{"class":355},"\u003Cstaging-bucket>",[334,1272,487],{"class":351},[334,1274,762],{"class":351},[334,1276,1278],{"class":336,"line":1277},35,[334,1279,1091],{"class":351},[334,1281,1283],{"class":336,"line":1282},36,[334,1284,1285],{"class":351},"    }\n",[334,1287,1289],{"class":336,"line":1288},37,[334,1290,1291],{"class":351},"  }\n",[334,1293,1295],{"class":336,"line":1294},38,[334,1296,620],{"class":351},[446,1298,307,1299,1301,1302,1301,1304,1301,1306,1301,1309,1312,1313,1316,1317,1320],{},[228,1300,507],{},", ",[228,1303,541],{},[228,1305,591],{},[228,1307,1308],{},"vars",[228,1310,1311],{},"durable_objects",", and ",[228,1314,1315],{},"services"," properties are ",[179,1318,1319],{},"non-inheritable",". You must specify them explicitly in each environment configuration.",[316,1322,1324],{"id":1323},"deploying-to-an-environment","Deploying to an Environment",[143,1326,1327,1328,1331],{},"Set the ",[228,1329,1330],{},"CLOUDFLARE_ENV"," environment variable during the build process:",[324,1333,1336],{"className":326,"code":1334,"filename":1335,"language":329,"meta":330,"style":330},"# Deploy to the preview environment\nCLOUDFLARE_ENV=preview nuxt build\n\n# Deploy to the staging environment\nCLOUDFLARE_ENV=staging nuxt build\n","Terminal",[228,1337,1338,1343,1357,1361,1366],{"__ignoreMap":330},[334,1339,1340],{"class":336,"line":337},[334,1341,1342],{"class":340},"# Deploy to the preview environment\n",[334,1344,1345,1347,1349,1351,1354],{"class":336,"line":344},[334,1346,1330],{"class":347},[334,1348,352],{"class":351},[334,1350,911],{"class":355},[334,1352,1353],{"class":519}," nuxt",[334,1355,1356],{"class":355}," build\n",[334,1358,1359],{"class":336,"line":371},[334,1360,390],{"emptyLinePlaceholder":389},[334,1362,1363],{"class":336,"line":386},[334,1364,1365],{"class":340},"# Deploy to the staging environment\n",[334,1367,1368,1370,1372,1374,1376],{"class":336,"line":393},[334,1369,1330],{"class":347},[334,1371,352],{"class":351},[334,1373,1105],{"class":355},[334,1375,1353],{"class":519},[334,1377,1356],{"class":355},[622,1379,1380,1381,1383],{},"When ",[228,1382,1330],{}," is empty or unset, the default production environment is used.",[1385,1386,1388],"callout",{"to":1387},"/docs/guides/ci-cd#github-actions","See the CI/CD guide for complete GitHub Actions workflows with environment handling.",[316,1390,1392],{"id":1391},"creating-resources","Creating Resources",[143,1394,1395],{},"Create separate resources for each environment using the Wrangler CLI:",[143,1397,1398],{},[179,1399,1400],{},"D1 Databases:",[324,1402,1404],{"className":326,"code":1403,"filename":1335,"language":329,"meta":330,"style":330},"wrangler d1 create my-app-production\nwrangler d1 create my-app-preview\nwrangler d1 create my-app-staging\n",[228,1405,1406,1420,1431],{"__ignoreMap":330},[334,1407,1408,1411,1414,1417],{"class":336,"line":337},[334,1409,1410],{"class":519},"wrangler",[334,1412,1413],{"class":355}," d1",[334,1415,1416],{"class":355}," create",[334,1418,1419],{"class":355}," my-app-production\n",[334,1421,1422,1424,1426,1428],{"class":336,"line":344},[334,1423,1410],{"class":519},[334,1425,1413],{"class":355},[334,1427,1416],{"class":355},[334,1429,1430],{"class":355}," my-app-preview\n",[334,1432,1433,1435,1437,1439],{"class":336,"line":371},[334,1434,1410],{"class":519},[334,1436,1413],{"class":355},[334,1438,1416],{"class":355},[334,1440,1441],{"class":355}," my-app-staging\n",[143,1443,1444],{},[179,1445,1446],{},"KV Namespaces:",[324,1448,1450],{"className":326,"code":1449,"filename":1335,"language":329,"meta":330,"style":330},"wrangler kv namespace create KV\nwrangler kv namespace create KV --env preview\nwrangler kv namespace create KV --env staging\n",[228,1451,1452,1467,1486],{"__ignoreMap":330},[334,1453,1454,1456,1459,1462,1464],{"class":336,"line":337},[334,1455,1410],{"class":519},[334,1457,1458],{"class":355}," kv",[334,1460,1461],{"class":355}," namespace",[334,1463,1416],{"class":355},[334,1465,1466],{"class":355}," KV\n",[334,1468,1469,1471,1473,1475,1477,1480,1483],{"class":336,"line":344},[334,1470,1410],{"class":519},[334,1472,1458],{"class":355},[334,1474,1461],{"class":355},[334,1476,1416],{"class":355},[334,1478,1479],{"class":355}," KV",[334,1481,1482],{"class":355}," --env",[334,1484,1485],{"class":355}," preview\n",[334,1487,1488,1490,1492,1494,1496,1498,1500],{"class":336,"line":371},[334,1489,1410],{"class":519},[334,1491,1458],{"class":355},[334,1493,1461],{"class":355},[334,1495,1416],{"class":355},[334,1497,1479],{"class":355},[334,1499,1482],{"class":355},[334,1501,1502],{"class":355}," staging\n",[143,1504,1505],{},[179,1506,1507],{},"R2 Buckets:",[324,1509,1511],{"className":326,"code":1510,"filename":1335,"language":329,"meta":330,"style":330},"wrangler r2 bucket create my-app-production\nwrangler r2 bucket create my-app-preview\nwrangler r2 bucket create my-app-staging\n",[228,1512,1513,1527,1539],{"__ignoreMap":330},[334,1514,1515,1517,1520,1523,1525],{"class":336,"line":337},[334,1516,1410],{"class":519},[334,1518,1519],{"class":355}," r2",[334,1521,1522],{"class":355}," bucket",[334,1524,1416],{"class":355},[334,1526,1419],{"class":355},[334,1528,1529,1531,1533,1535,1537],{"class":336,"line":344},[334,1530,1410],{"class":519},[334,1532,1519],{"class":355},[334,1534,1522],{"class":355},[334,1536,1416],{"class":355},[334,1538,1430],{"class":355},[334,1540,1541,1543,1545,1547,1549],{"class":336,"line":371},[334,1542,1410],{"class":519},[334,1544,1519],{"class":355},[334,1546,1522],{"class":355},[334,1548,1416],{"class":355},[334,1550,1441],{"class":355},[1385,1552,1553],{"to":662},"Learn more about Wrangler environments in the Cloudflare documentation.",[652,1555,1558,1561,1564,1570,1620,1629,1633,1636,1657,1660,1663,1672],{"icon":1556,"label":1557},"i-simple-icons-vercel","Vercel",[143,1559,1560],{},"Vercel automatically manages environments based on branch and deployment type.",[316,1562,670],{"id":1563},"configuration-1",[143,1565,1566,1567,417],{},"Configure environment variables in the Vercel dashboard under ",[179,1568,1569],{},"Project Settings → Environment Variables",[152,1571,1572,1586],{},[155,1573,1574],{},[158,1575,1576,1579,1581,1583],{},[161,1577,1578],{},"Variable",[161,1580,181],{},[161,1582,194],{},[161,1584,1585],{},"Development",[171,1587,1588,1604],{},[158,1589,1590,1595,1598,1601],{},[176,1591,1592],{},[228,1593,1594],{},"DATABASE_URL",[176,1596,1597],{},"Production connection",[176,1599,1600],{},"Preview connection",[176,1602,1603],{},"Local connection",[158,1605,1606,1611,1614,1617],{},[176,1607,1608],{},[228,1609,1610],{},"BLOB_READ_WRITE_TOKEN",[176,1612,1613],{},"Production token",[176,1615,1616],{},"Preview token",[176,1618,1619],{},"Development token",[305,1621,1622,1623,1628],{},"Add storage through the ",[660,1624,1627],{"href":1625,"rel":1626},"https://vercel.com/marketplace",[664],"Vercel Marketplace",". By default, marketplace integrations connect to all environments—create separate storage instances per environment for isolation.",[316,1630,1632],{"id":1631},"branch-specific-variables","Branch-Specific Variables",[143,1634,1635],{},"For preview deployments, you can configure variables that apply only to specific branches:",[1637,1638,1639,1645,1650],"ol",{},[1640,1641,1642,1643],"li",{},"Navigate to ",[179,1644,1569],{},[1640,1646,1647,1648],{},"Add a variable and select ",[179,1649,194],{},[1640,1651,1652,1653,1656],{},"Click ",[179,1654,1655],{},"Add Branch"," to target specific branches",[316,1658,110],{"id":1659},"cicd",[143,1661,1662],{},"Vercel handles CI/CD automatically when you connect your repository. Every push triggers a deployment:",[1664,1665,1666,1669],"ul",{},[1640,1667,1668],{},"Pushes to the production branch deploy to production",[1640,1670,1671],{},"Pushes to other branches create preview deployments",[1385,1673,1675],{"to":1674},"https://vercel.com/docs/deployments/environments","Learn more about Vercel environments in the Vercel documentation.",[1677,1678,1679],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":330,"searchDepth":344,"depth":344,"links":1681},[1682,1683,1687],{"id":149,"depth":344,"text":150},{"id":233,"depth":344,"text":234,"children":1684},[1685,1686],{"id":318,"depth":371,"text":319},{"id":451,"depth":371,"text":452},{"id":645,"depth":344,"text":646},"Configure and manage multiple environments for your NuxtHub application, including production, preview, staging, and local development.","md",null,{},{"title":30},{"title":30,"description":1688},"xAewU1sPcUfGo78M4Zqz3OWAgINsl-pG4JSvsNfYgTQ",[1696,1698],{"title":26,"path":27,"stem":28,"description":1697,"children":-1},"Learn how to migrate your NuxtHub project to be multi-cloud compatible.",{"title":40,"path":36,"stem":37,"description":1699,"children":-1},"Setup your SQL database in Nuxt with Drizzle ORM, including installation, environment setup, and database connection.",1774053874839]