[{"data":1,"prerenderedAt":1494},["ShallowReactive",2],{"navigation":3,"-deploy-providers-vercel":393,"-deploy-providers-vercel-surround":1489},[4,88,217,223,378,390],{"title":5,"path":6,"stem":7,"children":8,"icon":87},"","/docs","1.docs/1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","/docs/quick-start","1.docs/2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","/docs/renderer","1.docs/4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/docs/routing","1.docs/5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","/docs/assets","1.docs/50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","/docs/configuration","1.docs/50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","/docs/database","1.docs/50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","/docs/lifecycle","1.docs/50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"Plugins","/docs/plugins","1.docs/50.plugins","ri:plug-line",{"title":53,"path":54,"stem":55,"icon":56},"Tasks","/docs/tasks","1.docs/50.tasks","codicon:run-all",{"title":58,"path":59,"stem":60,"icon":61},"WebSocket","/docs/websocket","1.docs/50.websocket","ri:broadcast-fill",{"title":63,"path":64,"stem":65,"icon":66},"Server Entry","/docs/server-entry","1.docs/6.server-entry","ri:server-line",{"title":68,"path":69,"stem":70,"icon":71},"Cache","/docs/cache","1.docs/7.cache","ri:speed-line",{"title":73,"path":74,"stem":75,"icon":76},"KV Storage","/docs/storage","1.docs/8.storage","carbon:datastore",{"title":78,"path":79,"stem":80,"icon":81},"Migration Guide","/docs/migration","1.docs/99.migration","ri:arrow-right-up-line",{"title":83,"path":84,"stem":85,"icon":86},"Nightly Channel","/docs/nightly","1.docs/99.nightly","ri:moon-fill","i-lucide-book-open",{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Deploy","/deploy","2.deploy/0.index",[93,95,116],{"title":89,"path":90,"stem":91,"icon":94},"ri:upload-cloud-2-line",{"title":96,"path":97,"stem":98,"children":99,"page":115},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[100,105,110],{"title":101,"path":102,"stem":103,"icon":104},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":106,"path":107,"stem":108,"icon":109},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":111,"path":112,"stem":113,"icon":114},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":117,"path":118,"stem":119,"children":120,"page":115},"Providers","/deploy/providers","2.deploy/20.providers",[121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213],{"title":122,"path":123,"stem":124},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":126,"path":127,"stem":128},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":130,"path":131,"stem":132},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":134,"path":135,"stem":136},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":138,"path":139,"stem":140},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":142,"path":143,"stem":144},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":146,"path":147,"stem":148},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":150,"path":151,"stem":152},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":154,"path":155,"stem":156},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":158,"path":159,"stem":160},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":162,"path":163,"stem":164},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":166,"path":167,"stem":168},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":170,"path":171,"stem":172},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":174,"path":175,"stem":176},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":178,"path":179,"stem":180},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":182,"path":183,"stem":184},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":186,"path":187,"stem":188},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":190,"path":191,"stem":192},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":194,"path":195,"stem":196},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":198,"path":199,"stem":200},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":202,"path":203,"stem":204},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":206,"path":207,"stem":208},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":210,"path":211,"stem":212},"Zephyr Cloud","/deploy/providers/zephyr","2.deploy/20.providers/zephyr",{"title":214,"path":215,"stem":216},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":218,"path":219,"stem":220,"children":221,"icon":36},"Config","/config","3.config/0.index",[222],{"title":218,"path":219,"stem":220,"icon":36},{"title":224,"path":225,"stem":226,"children":227,"icon":229},"Examples","/examples","4.examples/0.index",[228,230,235,240,245,250,254,259,264,269,274,279,284,288,293,297,301,306,311,316,321,326,331,336,341,346,350,355,360,364,369,374],{"title":224,"path":225,"stem":226,"icon":229},"i-lucide-folder-code",{"title":231,"path":232,"stem":233,"icon":234},"API Routes","/examples/api-routes","4.examples/api-routes","i-lucide-route",{"title":236,"path":237,"stem":238,"icon":239},"Auto Imports","/examples/auto-imports","4.examples/auto-imports","i-lucide-import",{"title":241,"path":242,"stem":243,"icon":244},"Cached Handler","/examples/cached-handler","4.examples/cached-handler","i-lucide-clock",{"title":246,"path":247,"stem":248,"icon":249},"Custom Error Handler","/examples/custom-error-handler","4.examples/custom-error-handler","i-lucide-alert-circle",{"title":38,"path":251,"stem":252,"icon":253},"/examples/database","4.examples/database","i-lucide-database",{"title":255,"path":256,"stem":257,"icon":258},"Elysia","/examples/elysia","4.examples/elysia","i-skill-icons-elysia-dark",{"title":260,"path":261,"stem":262,"icon":263},"Express","/examples/express","4.examples/express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Fastify","/examples/fastify","4.examples/fastify","i-simple-icons-fastify",{"title":270,"path":271,"stem":272,"icon":273},"Hello World","/examples/hello-world","4.examples/hello-world","i-lucide-sparkles",{"title":275,"path":276,"stem":277,"icon":278},"Hono","/examples/hono","4.examples/hono","i-logos-hono",{"title":280,"path":281,"stem":282,"icon":283},"Import Alias","/examples/import-alias","4.examples/import-alias","i-lucide-at-sign",{"title":285,"path":286,"stem":287,"icon":46},"Middleware","/examples/middleware","4.examples/middleware",{"title":289,"path":290,"stem":291,"icon":292},"Mono JSX","/examples/mono-jsx","4.examples/mono-jsx","i-lucide-brackets",{"title":294,"path":295,"stem":296,"icon":292},"Nano JSX","/examples/nano-jsx","4.examples/nano-jsx",{"title":48,"path":298,"stem":299,"icon":300},"/examples/plugins","4.examples/plugins","i-lucide-plug",{"title":302,"path":303,"stem":304,"icon":305},"Custom Renderer","/examples/renderer","4.examples/renderer","i-lucide-code",{"title":307,"path":308,"stem":309,"icon":310},"Runtime Config","/examples/runtime-config","4.examples/runtime-config","i-lucide-settings",{"title":312,"path":313,"stem":314,"icon":315},"Server Fetch","/examples/server-fetch","4.examples/server-fetch","i-lucide-arrow-right-left",{"title":317,"path":318,"stem":319,"icon":320},"Shiki","/examples/shiki","4.examples/shiki","i-lucide-highlighter",{"title":322,"path":323,"stem":324,"icon":325},"Virtual Routes","/examples/virtual-routes","4.examples/virtual-routes","i-lucide-box",{"title":327,"path":328,"stem":329,"icon":330},"Vite Nitro Plugin","/examples/vite-nitro-plugin","4.examples/vite-nitro-plugin","i-logos-vitejs",{"title":332,"path":333,"stem":334,"icon":335},"Vite RSC","/examples/vite-rsc","4.examples/vite-rsc","i-logos-react",{"title":337,"path":338,"stem":339,"icon":340},"Vite SSR HTML","/examples/vite-ssr-html","4.examples/vite-ssr-html","i-logos-html-5",{"title":342,"path":343,"stem":344,"icon":345},"SSR with Preact","/examples/vite-ssr-preact","4.examples/vite-ssr-preact","i-logos-preact",{"title":347,"path":348,"stem":349,"icon":335},"SSR with React","/examples/vite-ssr-react","4.examples/vite-ssr-react",{"title":351,"path":352,"stem":353,"icon":354},"SSR with SolidJS","/examples/vite-ssr-solid","4.examples/vite-ssr-solid","i-logos-solidjs-icon",{"title":356,"path":357,"stem":358,"icon":359},"SSR with TanStack Router","/examples/vite-ssr-tsr-react","4.examples/vite-ssr-tsr-react","i-simple-icons-tanstack",{"title":361,"path":362,"stem":363,"icon":359},"SSR with TanStack Start","/examples/vite-ssr-tss-react","4.examples/vite-ssr-tss-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with Vue Router","/examples/vite-ssr-vue-router","4.examples/vite-ssr-vue-router","i-logos-vue",{"title":370,"path":371,"stem":372,"icon":373},"Vite + tRPC","/examples/vite-trpc","4.examples/vite-trpc","i-simple-icons-trpc",{"title":58,"path":375,"stem":376,"icon":377},"/examples/websocket","4.examples/websocket","i-lucide-radio",{"title":379,"path":380,"stem":381,"children":382},"Blog","/blog","9.blog",[383,386],{"title":379,"path":380,"stem":384,"icon":385},"9.blog/index","i-lucide-file-text",{"title":387,"path":388,"stem":389,"icon":385},"Nitro v3 Beta is here!","/blog/v3-beta","9.blog/1.v3-beta",{"title":5,"path":391,"stem":392},"/","index",{"id":394,"title":202,"body":395,"description":1483,"extension":1484,"meta":1485,"navigation":1486,"path":203,"seo":1487,"stem":204,"__hash__":1488},"content/2.deploy/20.providers/vercel.md",{"type":396,"value":397,"toc":1464},"minimark",[398,410,415,427,432,435,468,476,481,489,493,500,508,512,515,531,600,610,652,656,676,684,846,863,867,880,935,939,946,969,973,979,1018,1030,1034,1038,1055,1152,1156,1160,1174,1178,1193,1197,1200,1203,1295,1299,1302,1309,1387,1460],[399,400,401,405,406],"p",{},[402,403,404],"strong",{},"Preset:"," ",[407,408,409],"code",{},"vercel",[411,412],"read-more",{"title":413,"to":414},"Vercel Framework Support","https://vercel.com/docs/frameworks",[416,417,418],"note",{},[399,419,420,421,426],{},"Integration with this provider is possible with ",[422,423,425],"a",{"href":424},"/deploy/#zero-config-providers","zero configuration",".",[428,429,431],"h2",{"id":430},"getting-started","Getting started",[399,433,434],{},"Deploying to Vercel comes with the following features:",[436,437,438,447,454,461],"ul",{},[439,440,441],"li",{},[422,442,446],{"href":443,"rel":444},"https://vercel.com/docs/deployments/environments",[445],"nofollow","Preview deployments",[439,448,449],{},[422,450,453],{"href":451,"rel":452},"https://vercel.com/docs/fluid-compute",[445],"Fluid compute",[439,455,456],{},[422,457,460],{"href":458,"rel":459},"https://vercel.com/docs/observability",[445],"Observability",[439,462,463],{},[422,464,467],{"href":465,"rel":466},"https://vercel.com/docs/vercel-firewall",[445],"Vercel Firewall",[399,469,470,471,426],{},"And much more. Learn more in ",[422,472,475],{"href":473,"rel":474},"https://vercel.com/docs",[445],"the Vercel documentation",[477,478,480],"h3",{"id":479},"deploy-with-git","Deploy with Git",[399,482,483,484,426],{},"Vercel supports Nitro with zero-configuration. ",[422,485,488],{"href":486,"rel":487},"https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fvercel%2Ftree%2Fmain%2Fexamples%2Fnitro",[445],"Deploy Nitro to Vercel now",[428,490,492],{"id":491},"api-routes","API routes",[399,494,495,496,499],{},"Nitro ",[407,497,498],{},"/api"," directory isn't compatible with Vercel. Instead, you should use:",[436,501,502],{},[439,503,504,507],{},[407,505,506],{},"routes/api/"," for standalone usage",[428,509,511],{"id":510},"bun-runtime","Bun runtime",[411,513],{"title":202,"to":514},"https://vercel.com/docs/functions/runtimes/bun",[399,516,517,518,522,523,526,527,530],{},"You can use ",[422,519,106],{"href":520,"rel":521},"https://bun.com",[445]," instead of Node.js by specifying the runtime using the ",[407,524,525],{},"vercel.functions"," key inside ",[407,528,529],{},"nitro.config",":",[532,533,538],"pre",{"className":534,"code":535,"filename":536,"language":537,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","export default defineNitroConfig({\n  vercel: {\n    functions: {\n      runtime: \"bun1.x\"\n    }\n  }\n})\n","nitro.config.ts","ts",[407,539,540,560,566,572,582,588,594],{"__ignoreMap":5},[541,542,545,549,552,556],"span",{"class":543,"line":544},"line",1,[541,546,548],{"class":547},"so5gQ","export",[541,550,551],{"class":547}," default",[541,553,555],{"class":554},"shcOC"," defineNitroConfig",[541,557,559],{"class":558},"slsVL","({\n",[541,561,563],{"class":543,"line":562},2,[541,564,565],{"class":558},"  vercel: {\n",[541,567,569],{"class":543,"line":568},3,[541,570,571],{"class":558},"    functions: {\n",[541,573,575,578],{"class":543,"line":574},4,[541,576,577],{"class":558},"      runtime: ",[541,579,581],{"class":580},"sfrk1","\"bun1.x\"\n",[541,583,585],{"class":543,"line":584},5,[541,586,587],{"class":558},"    }\n",[541,589,591],{"class":543,"line":590},6,[541,592,593],{"class":558},"  }\n",[541,595,597],{"class":543,"line":596},7,[541,598,599],{"class":558},"})\n",[399,601,602,603,606,607,530],{},"Alternatively, Nitro also detects Bun automatically if you specify a ",[407,604,605],{},"bunVersion"," property in your ",[407,608,609],{},"vercel.json",[532,611,615],{"className":612,"code":613,"filename":609,"language":614,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"bunVersion\": \"1.x\"\n}\n","json",[407,616,617,622,637,647],{"__ignoreMap":5},[541,618,619],{"class":543,"line":544},[541,620,621],{"class":558},"{\n",[541,623,624,628,631,634],{"class":543,"line":562},[541,625,627],{"class":626},"suiK_","  \"$schema\"",[541,629,630],{"class":558},": ",[541,632,633],{"class":580},"\"https://openapi.vercel.sh/vercel.json\"",[541,635,636],{"class":558},",\n",[541,638,639,642,644],{"class":543,"line":568},[541,640,641],{"class":626},"  \"bunVersion\"",[541,643,630],{"class":558},[541,645,646],{"class":580},"\"1.x\"\n",[541,648,649],{"class":543,"line":574},[541,650,651],{"class":558},"}\n",[428,653,655],{"id":654},"per-route-function-configuration","Per-route function configuration",[399,657,658,659,662,663,668,669,671,672,675],{},"Use ",[407,660,661],{},"vercel.functionRules"," to override ",[422,664,667],{"href":665,"rel":666},"https://vercel.com/docs/build-output-api/primitives#serverless-function-configuration",[445],"serverless function settings"," for specific routes. Each key is a route pattern and its value is a partial function configuration object that gets merged with the base ",[407,670,525],{}," config. Note: array properties (e.g., ",[407,673,674],{},"regions",") from route config will replace the base config arrays rather than merging them.",[399,677,678,679,426],{},"This is useful when certain routes need different resource limits, regions, or features like ",[422,680,683],{"href":681,"rel":682},"https://vercel.com/docs/queues",[445],"Vercel Queues triggers",[532,685,687],{"className":534,"code":686,"filename":536,"language":537,"meta":5,"style":5},"import { defineNitroConfig } from \"nitro/config\";\n\nexport default defineNitroConfig({\n  vercel: {\n    functionRules: {\n      \"/api/heavy-computation\": {\n        maxDuration: 800,\n        memory: 4096,\n      },\n      \"/api/regional\": {\n        regions: [\"lhr1\", \"cdg1\"],\n      },\n      \"/api/queues/process-order\": {\n        experimentalTriggers: [{ type: \"queue/v2beta\", topic: \"orders\" }],\n      },\n    },\n  },\n});\n",[407,688,689,706,712,722,726,731,739,749,760,766,774,792,797,805,823,828,834,840],{"__ignoreMap":5},[541,690,691,694,697,700,703],{"class":543,"line":544},[541,692,693],{"class":547},"import",[541,695,696],{"class":558}," { defineNitroConfig } ",[541,698,699],{"class":547},"from",[541,701,702],{"class":580}," \"nitro/config\"",[541,704,705],{"class":558},";\n",[541,707,708],{"class":543,"line":562},[541,709,711],{"emptyLinePlaceholder":710},true,"\n",[541,713,714,716,718,720],{"class":543,"line":568},[541,715,548],{"class":547},[541,717,551],{"class":547},[541,719,555],{"class":554},[541,721,559],{"class":558},[541,723,724],{"class":543,"line":574},[541,725,565],{"class":558},[541,727,728],{"class":543,"line":584},[541,729,730],{"class":558},"    functionRules: {\n",[541,732,733,736],{"class":543,"line":590},[541,734,735],{"class":580},"      \"/api/heavy-computation\"",[541,737,738],{"class":558},": {\n",[541,740,741,744,747],{"class":543,"line":596},[541,742,743],{"class":558},"        maxDuration: ",[541,745,746],{"class":626},"800",[541,748,636],{"class":558},[541,750,752,755,758],{"class":543,"line":751},8,[541,753,754],{"class":558},"        memory: ",[541,756,757],{"class":626},"4096",[541,759,636],{"class":558},[541,761,763],{"class":543,"line":762},9,[541,764,765],{"class":558},"      },\n",[541,767,769,772],{"class":543,"line":768},10,[541,770,771],{"class":580},"      \"/api/regional\"",[541,773,738],{"class":558},[541,775,777,780,783,786,789],{"class":543,"line":776},11,[541,778,779],{"class":558},"        regions: [",[541,781,782],{"class":580},"\"lhr1\"",[541,784,785],{"class":558},", ",[541,787,788],{"class":580},"\"cdg1\"",[541,790,791],{"class":558},"],\n",[541,793,795],{"class":543,"line":794},12,[541,796,765],{"class":558},[541,798,800,803],{"class":543,"line":799},13,[541,801,802],{"class":580},"      \"/api/queues/process-order\"",[541,804,738],{"class":558},[541,806,808,811,814,817,820],{"class":543,"line":807},14,[541,809,810],{"class":558},"        experimentalTriggers: [{ type: ",[541,812,813],{"class":580},"\"queue/v2beta\"",[541,815,816],{"class":558},", topic: ",[541,818,819],{"class":580},"\"orders\"",[541,821,822],{"class":558}," }],\n",[541,824,826],{"class":543,"line":825},15,[541,827,765],{"class":558},[541,829,831],{"class":543,"line":830},16,[541,832,833],{"class":558},"    },\n",[541,835,837],{"class":543,"line":836},17,[541,838,839],{"class":558},"  },\n",[541,841,843],{"class":543,"line":842},18,[541,844,845],{"class":558},"});\n",[399,847,848,849,854,855,858,859,862],{},"Route patterns support wildcards via ",[422,850,853],{"href":851,"rel":852},"https://github.com/h3js/rou3",[445],"rou3"," matching (e.g., ",[407,856,857],{},"/api/slow/**"," matches all routes under ",[407,860,861],{},"/api/slow/",").",[428,864,866],{"id":865},"proxy-route-rules","Proxy route rules",[399,868,869,870,873,874,879],{},"Nitro automatically optimizes ",[407,871,872],{},"proxy"," route rules on Vercel by generating ",[422,875,878],{"href":876,"rel":877},"https://vercel.com/docs/rewrites",[445],"CDN-level rewrites"," at build time. This means matching requests are proxied at the edge without invoking a serverless function, reducing latency and cost.",[532,881,883],{"className":534,"code":882,"filename":536,"language":537,"meta":5,"style":5},"export default defineNitroConfig({\n  routeRules: {\n    // Proxied at CDN level — no function invocation\n    \"/api/**\": {\n      proxy: \"https://api.example.com/**\",\n    },\n  },\n});\n",[407,884,885,895,900,906,913,923,927,931],{"__ignoreMap":5},[541,886,887,889,891,893],{"class":543,"line":544},[541,888,548],{"class":547},[541,890,551],{"class":547},[541,892,555],{"class":554},[541,894,559],{"class":558},[541,896,897],{"class":543,"line":562},[541,898,899],{"class":558},"  routeRules: {\n",[541,901,902],{"class":543,"line":568},[541,903,905],{"class":904},"sCsY4","    // Proxied at CDN level — no function invocation\n",[541,907,908,911],{"class":543,"line":574},[541,909,910],{"class":580},"    \"/api/**\"",[541,912,738],{"class":558},[541,914,915,918,921],{"class":543,"line":584},[541,916,917],{"class":558},"      proxy: ",[541,919,920],{"class":580},"\"https://api.example.com/**\"",[541,922,636],{"class":558},[541,924,925],{"class":543,"line":590},[541,926,833],{"class":558},[541,928,929],{"class":543,"line":596},[541,930,839],{"class":558},[541,932,933],{"class":543,"line":751},[541,934,845],{"class":558},[477,936,938],{"id":937},"when-cdn-rewrites-apply","When CDN rewrites apply",[399,940,941,942,945],{},"A proxy rule is offloaded to a Vercel CDN rewrite when ",[402,943,944],{},"all"," of the following are true:",[436,947,948,962],{},[439,949,950,951,954,955,958,959,862],{},"The target is an ",[402,952,953],{},"external URL"," (starts with ",[407,956,957],{},"http://"," or ",[407,960,961],{},"https://",[439,963,964,965,968],{},"No advanced ",[407,966,967],{},"ProxyOptions"," are set on the rule.",[477,970,972],{"id":971},"fallback-to-runtime-proxy","Fallback to runtime proxy",[399,974,975,976,978],{},"When the proxy rule uses any of the following ",[407,977,967],{},", Nitro keeps it as a runtime proxy handled by the serverless function:",[436,980,981,987,997,1003,1012],{},[439,982,983,986],{},[407,984,985],{},"headers"," — custom headers on the outgoing request to the upstream",[439,988,989,992,993,996],{},[407,990,991],{},"forwardHeaders"," / ",[407,994,995],{},"filterHeaders"," — header filtering",[439,998,999,1002],{},[407,1000,1001],{},"fetchOptions"," — custom fetch options",[439,1004,1005,992,1008,1011],{},[407,1006,1007],{},"cookieDomainRewrite",[407,1009,1010],{},"cookiePathRewrite"," — cookie manipulation",[439,1013,1014,1017],{},[407,1015,1016],{},"onResponse"," — response callback",[416,1019,1020],{},[399,1021,1022,1023,1025,1026,1029],{},"Response headers defined on the route rule via the ",[407,1024,985],{}," option are still applied to CDN-level rewrites. Only request-level ",[407,1027,1028],{},"ProxyOptions.headers"," (sent to the upstream) require a runtime proxy.",[428,1031,1033],{"id":1032},"scheduled-tasks-cron-jobs","Scheduled tasks (Cron Jobs)",[411,1035],{"title":1036,"to":1037},"Vercel Cron Jobs","https://vercel.com/docs/cron-jobs",[399,1039,1040,1041,1047,1048,1051,1052,1054],{},"Nitro automatically converts your ",[422,1042,1044],{"href":1043},"/docs/tasks#scheduled-tasks",[407,1045,1046],{},"scheduledTasks"," configuration into ",[422,1049,1036],{"href":1037,"rel":1050},[445]," at build time. Define your schedules in your Nitro config and deploy - no manual ",[407,1053,609],{}," cron configuration required.",[532,1056,1058],{"className":534,"code":1057,"filename":536,"language":537,"meta":5,"style":5},"import { defineNitroConfig } from \"nitro/config\";\n\nexport default defineNitroConfig({\n  experimental: {\n    tasks: true\n  },\n  scheduledTasks: {\n    // Run `cms:update` every hour\n    '0 * * * *': ['cms:update'],\n    // Run `db:cleanup` every day at midnight\n    '0 0 * * *': ['db:cleanup']\n  }\n})\n",[407,1059,1060,1072,1076,1086,1091,1099,1103,1108,1113,1126,1131,1144,1148],{"__ignoreMap":5},[541,1061,1062,1064,1066,1068,1070],{"class":543,"line":544},[541,1063,693],{"class":547},[541,1065,696],{"class":558},[541,1067,699],{"class":547},[541,1069,702],{"class":580},[541,1071,705],{"class":558},[541,1073,1074],{"class":543,"line":562},[541,1075,711],{"emptyLinePlaceholder":710},[541,1077,1078,1080,1082,1084],{"class":543,"line":568},[541,1079,548],{"class":547},[541,1081,551],{"class":547},[541,1083,555],{"class":554},[541,1085,559],{"class":558},[541,1087,1088],{"class":543,"line":574},[541,1089,1090],{"class":558},"  experimental: {\n",[541,1092,1093,1096],{"class":543,"line":584},[541,1094,1095],{"class":558},"    tasks: ",[541,1097,1098],{"class":626},"true\n",[541,1100,1101],{"class":543,"line":590},[541,1102,839],{"class":558},[541,1104,1105],{"class":543,"line":596},[541,1106,1107],{"class":558},"  scheduledTasks: {\n",[541,1109,1110],{"class":543,"line":751},[541,1111,1112],{"class":904},"    // Run `cms:update` every hour\n",[541,1114,1115,1118,1121,1124],{"class":543,"line":762},[541,1116,1117],{"class":580},"    '0 * * * *'",[541,1119,1120],{"class":558},": [",[541,1122,1123],{"class":580},"'cms:update'",[541,1125,791],{"class":558},[541,1127,1128],{"class":543,"line":768},[541,1129,1130],{"class":904},"    // Run `db:cleanup` every day at midnight\n",[541,1132,1133,1136,1138,1141],{"class":543,"line":776},[541,1134,1135],{"class":580},"    '0 0 * * *'",[541,1137,1120],{"class":558},[541,1139,1140],{"class":580},"'db:cleanup'",[541,1142,1143],{"class":558},"]\n",[541,1145,1146],{"class":543,"line":794},[541,1147,593],{"class":558},[541,1149,1150],{"class":543,"line":799},[541,1151,599],{"class":558},[477,1153,1155],{"id":1154},"secure-cron-job-endpoints","Secure cron job endpoints",[411,1157],{"title":1158,"to":1159},"Securing cron jobs","https://vercel.com/docs/cron-jobs/manage-cron-jobs#securing-cron-jobs",[399,1161,1162,1163,1166,1167,1169,1170,1173],{},"To prevent unauthorized access to the cron handler, set a ",[407,1164,1165],{},"CRON_SECRET"," environment variable in your Vercel project settings. When ",[407,1168,1165],{}," is set, Nitro validates the ",[407,1171,1172],{},"Authorization"," header on every cron invocation.",[428,1175,1177],{"id":1176},"custom-build-output-configuration","Custom build output configuration",[399,1179,1180,1181,1186,1187,526,1190,1192],{},"You can provide additional ",[422,1182,1185],{"href":1183,"rel":1184},"https://vercel.com/docs/build-output-api/v3",[445],"build output configuration"," using ",[407,1188,1189],{},"vercel.config",[407,1191,529],{},". It will be merged with built-in auto-generated config.",[428,1194,1196],{"id":1195},"on-demand-incremental-static-regeneration-isr","On-Demand incremental static regeneration (ISR)",[399,1198,1199],{},"On-demand revalidation allows you to purge the cache for an ISR route whenever you want, foregoing the time interval required with background revalidation.",[399,1201,1202],{},"To revalidate a page on demand:",[1204,1205,1207,1225,1288],"steps",{"level":1206},"4",[1208,1209,1210,1211],"h4",{},"Create an Environment Variable which will store a revalidation secret",[436,1212,1213],{},[439,1214,1215,1216,958,1219,1224],{},"You can use the command ",[407,1217,1218],{},"openssl rand -base64 32",[422,1220,1223],{"href":1221,"rel":1222},"https://generate-secret.vercel.app/32",[445],"Generate a Secret"," to generate a random value.",[1208,1226,1227,1228],{},"Update your configuration:",[532,1229,1231],{"className":534,"code":1230,"filename":536,"language":537,"meta":5,"style":5},"import { defineNitroConfig } from \"nitro/config\";\n\nexport default defineNitroConfig({\n  vercel: {\n    config: {\n      bypassToken: process.env.VERCEL_BYPASS_TOKEN\n    }\n  }\n})\n",[407,1232,1233,1245,1249,1259,1263,1268,1276,1280,1284],{"__ignoreMap":5},[541,1234,1235,1237,1239,1241,1243],{"class":543,"line":544},[541,1236,693],{"class":547},[541,1238,696],{"class":558},[541,1240,699],{"class":547},[541,1242,702],{"class":580},[541,1244,705],{"class":558},[541,1246,1247],{"class":543,"line":562},[541,1248,711],{"emptyLinePlaceholder":710},[541,1250,1251,1253,1255,1257],{"class":543,"line":568},[541,1252,548],{"class":547},[541,1254,551],{"class":547},[541,1256,555],{"class":554},[541,1258,559],{"class":558},[541,1260,1261],{"class":543,"line":574},[541,1262,565],{"class":558},[541,1264,1265],{"class":543,"line":584},[541,1266,1267],{"class":558},"    config: {\n",[541,1269,1270,1273],{"class":543,"line":590},[541,1271,1272],{"class":558},"      bypassToken: process.env.",[541,1274,1275],{"class":626},"VERCEL_BYPASS_TOKEN\n",[541,1277,1278],{"class":543,"line":596},[541,1279,587],{"class":558},[541,1281,1282],{"class":543,"line":751},[541,1283,593],{"class":558},[541,1285,1286],{"class":543,"line":762},[541,1287,599],{"class":558},[1208,1289,1290,1291,1294],{},"To trigger \"On-Demand Incremental Static Regeneration (ISR)\" and revalidate a path to a Prerender Function, make a GET or HEAD request to that path with a header of x-prerender-revalidate: ",[407,1292,1293],{},"bypassToken",". When that Prerender Function endpoint is accessed with this header set, the cache will be revalidated. The next request to that function should return a fresh response.",[477,1296,1298],{"id":1297},"fine-grained-isr-config-via-route-rules","Fine-grained ISR config via route rules",[399,1300,1301],{},"By default, query params affect cache keys but are not passed to the route handler unless specified.",[399,1303,1304,1305,1308],{},"You can pass an options object to ",[407,1306,1307],{},"isr"," route rule to configure caching behavior.",[436,1310,1311,1325,1331,1360,1377],{},[439,1312,1313,1316,1317,1320,1321,1324],{},[407,1314,1315],{},"expiration",": Expiration time (in seconds) before the cached asset will be re-generated by invoking the Serverless Function. Setting the value to ",[407,1318,1319],{},"false"," (or ",[407,1322,1323],{},"isr: true"," route rule) means it will never expire.",[439,1326,1327,1330],{},[407,1328,1329],{},"group",": Group number of the asset. Prerender assets with the same group number will all be re-validated at the same time.",[439,1332,1333,1336,1337],{},[407,1334,1335],{},"allowQuery",": List of query string parameter names that will be cached independently.\n",[436,1338,1339,1342,1349],{},[439,1340,1341],{},"If an empty array, query values are not considered for caching.",[439,1343,1344,1345,1348],{},"If ",[407,1346,1347],{},"undefined"," each unique query value is cached independently.",[439,1350,1351,1352,1355,1356,1359],{},"For wildcard ",[407,1353,1354],{},"/**"," route rules, ",[407,1357,1358],{},"url"," is always added",[439,1361,1362,1365,1366,1369,1370,1373,1374,1376],{},[407,1363,1364],{},"passQuery",": When ",[407,1367,1368],{},"true",", the query string will be present on the ",[407,1371,1372],{},"request"," argument passed to the invoked function. The ",[407,1375,1335],{}," filter still applies.",[439,1378,1379,1365,1382,1384,1385],{},[407,1380,1381],{},"exposeErrBody",[407,1383,1368],{},", expose the response body regardless of status code including error status codes. (default ",[407,1386,1319],{},[532,1388,1390],{"className":534,"code":1389,"language":537,"meta":5,"style":5},"export default defineNitroConfig({\n  routeRules: {\n    \"/products/**\": {\n      isr: {\n        allowQuery: [\"q\"],\n        passQuery: true,\n        exposeErrBody: true\n      },\n    },\n  },\n});\n",[407,1391,1392,1402,1406,1413,1418,1428,1437,1444,1448,1452,1456],{"__ignoreMap":5},[541,1393,1394,1396,1398,1400],{"class":543,"line":544},[541,1395,548],{"class":547},[541,1397,551],{"class":547},[541,1399,555],{"class":554},[541,1401,559],{"class":558},[541,1403,1404],{"class":543,"line":562},[541,1405,899],{"class":558},[541,1407,1408,1411],{"class":543,"line":568},[541,1409,1410],{"class":580},"    \"/products/**\"",[541,1412,738],{"class":558},[541,1414,1415],{"class":543,"line":574},[541,1416,1417],{"class":558},"      isr: {\n",[541,1419,1420,1423,1426],{"class":543,"line":584},[541,1421,1422],{"class":558},"        allowQuery: [",[541,1424,1425],{"class":580},"\"q\"",[541,1427,791],{"class":558},[541,1429,1430,1433,1435],{"class":543,"line":590},[541,1431,1432],{"class":558},"        passQuery: ",[541,1434,1368],{"class":626},[541,1436,636],{"class":558},[541,1438,1439,1442],{"class":543,"line":596},[541,1440,1441],{"class":558},"        exposeErrBody: ",[541,1443,1098],{"class":626},[541,1445,1446],{"class":543,"line":751},[541,1447,765],{"class":558},[541,1449,1450],{"class":543,"line":762},[541,1451,833],{"class":558},[541,1453,1454],{"class":543,"line":768},[541,1455,839],{"class":558},[541,1457,1458],{"class":543,"line":776},[541,1459,845],{"class":558},[1461,1462,1463],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":562,"depth":562,"links":1465},[1466,1469,1470,1471,1472,1476,1479,1480],{"id":430,"depth":562,"text":431,"children":1467},[1468],{"id":479,"depth":568,"text":480},{"id":491,"depth":562,"text":492},{"id":510,"depth":562,"text":511},{"id":654,"depth":562,"text":655},{"id":865,"depth":562,"text":866,"children":1473},[1474,1475],{"id":937,"depth":568,"text":938},{"id":971,"depth":568,"text":972},{"id":1032,"depth":562,"text":1033,"children":1477},[1478],{"id":1154,"depth":568,"text":1155},{"id":1176,"depth":562,"text":1177},{"id":1195,"depth":562,"text":1196,"children":1481},[1482],{"id":1297,"depth":568,"text":1298},"Deploy Nitro apps to Vercel.","md",{},{},{"title":202,"description":1483},"4mjPKuTVOK4U6lI_Vq0OAKqa6RY-eU1SHCsNivex2WM",[1490,1492],{"title":198,"path":199,"stem":200,"description":1491,"children":-1},"Deploy Nitro apps to StormKit.",{"title":206,"path":207,"stem":208,"description":1493,"children":-1},"Deploy Nitro apps to Zeabur.",1775753655502]