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