[{"data":1,"prerenderedAt":1753},["ShallowReactive",2],{"navigation":3,"-docs-prerendering":445,"-docs-prerendering-surround":1748},[4,123,260,266,430,442],{"title":5,"path":6,"stem":7,"children":8,"icon":122},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87,92,97,102,107,112,117],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Prerendering","\u002Fdocs\u002Fprerendering","1.docs\u002F50.prerendering","ri:file-copy-2-line",{"title":63,"path":64,"stem":65,"icon":66},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":68,"path":69,"stem":70,"icon":71},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":73,"path":74,"stem":75,"icon":76},"Modules","\u002Fdocs\u002Fmodules","1.docs\u002F55.modules","i-lucide-puzzle",{"title":78,"path":79,"stem":80,"icon":81},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":83,"path":84,"stem":85,"icon":86},"CLI","\u002Fdocs\u002Fcli","1.docs\u002F60.cli","i-lucide-terminal",{"title":88,"path":89,"stem":90,"icon":91},"Vite","\u002Fdocs\u002Fvite","1.docs\u002F61.vite","i-logos-vitejs",{"title":93,"path":94,"stem":95,"icon":96},"Utils","\u002Fdocs\u002Futils","1.docs\u002F62.utils","i-lucide-braces",{"title":98,"path":99,"stem":100,"icon":101},"TypeScript","\u002Fdocs\u002Ftypescript","1.docs\u002F63.typescript","i-logos-typescript-icon",{"title":103,"path":104,"stem":105,"icon":106},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":108,"path":109,"stem":110,"icon":111},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":113,"path":114,"stem":115,"icon":116},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":118,"path":119,"stem":120,"icon":121},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":124,"path":125,"stem":126,"children":127,"icon":129},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[128,130,155],{"title":124,"path":125,"stem":126,"icon":129},"ri:upload-cloud-2-line",{"title":131,"path":132,"stem":133,"children":134,"page":154},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[135,140,145,150],{"title":136,"path":137,"stem":138,"icon":139},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":141,"path":142,"stem":143,"icon":144},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":146,"path":147,"stem":148,"icon":149},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",{"title":151,"path":152,"stem":153},"Standard","\u002Fdeploy\u002Fruntimes\u002Fstandard","2.deploy\u002F10.runtimes\u002Fstandard",false,{"title":156,"path":157,"stem":158,"children":159,"page":154},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256],{"title":161,"path":162,"stem":163},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":165,"path":166,"stem":167},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":169,"path":170,"stem":171},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":173,"path":174,"stem":175},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":177,"path":178,"stem":179},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":181,"path":182,"stem":183},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":185,"path":186,"stem":187},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":189,"path":190,"stem":191},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":193,"path":194,"stem":195},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":197,"path":198,"stem":199},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":201,"path":202,"stem":203},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":205,"path":206,"stem":207},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":209,"path":210,"stem":211},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":213,"path":214,"stem":215},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":217,"path":218,"stem":219},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":221,"path":222,"stem":223},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":225,"path":226,"stem":227},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":229,"path":230,"stem":231},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":233,"path":234,"stem":235},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":237,"path":238,"stem":239},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":241,"path":242,"stem":243},"Stormkit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":245,"path":246,"stem":247},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":249,"path":250,"stem":251},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":253,"path":254,"stem":255},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":257,"path":258,"stem":259},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":261,"path":262,"stem":263,"children":264,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[265],{"title":261,"path":262,"stem":263,"icon":36},{"title":267,"path":268,"stem":269,"children":270,"icon":272},"Examples","\u002Fexamples","4.examples\u002F0.index",[271,273,278,283,288,293,297,302,307,312,317,322,327,331,336,340,344,349,354,359,364,369,374,379,383,388,393,398,402,407,412,416,421,426],{"title":267,"path":268,"stem":269,"icon":272},"i-lucide-folder-code",{"title":274,"path":275,"stem":276,"icon":277},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":279,"path":280,"stem":281,"icon":282},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":284,"path":285,"stem":286,"icon":287},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":289,"path":290,"stem":291,"icon":292},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":294,"stem":295,"icon":296},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":298,"path":299,"stem":300,"icon":301},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":303,"path":304,"stem":305,"icon":306},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":308,"path":309,"stem":310,"icon":311},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":313,"path":314,"stem":315,"icon":316},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":318,"path":319,"stem":320,"icon":321},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":323,"path":324,"stem":325,"icon":326},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":328,"path":329,"stem":330,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":332,"path":333,"stem":334,"icon":335},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":337,"path":338,"stem":339,"icon":335},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":341,"stem":342,"icon":343},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":345,"path":346,"stem":347,"icon":348},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":350,"path":351,"stem":352,"icon":353},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":355,"path":356,"stem":357,"icon":358},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":360,"path":361,"stem":362,"icon":363},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":365,"path":366,"stem":367,"icon":368},"Takumi","\u002Fexamples\u002Ftakumi","4.examples\u002Ftakumi","i-lucide-image",{"title":370,"path":371,"stem":372,"icon":373},"Tracing","\u002Fexamples\u002Ftracing","4.examples\u002Ftracing","i-lucide-activity",{"title":375,"path":376,"stem":377,"icon":378},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":380,"path":381,"stem":382,"icon":91},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin",{"title":384,"path":385,"stem":386,"icon":387},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":389,"path":390,"stem":391,"icon":392},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":394,"path":395,"stem":396,"icon":397},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":399,"path":400,"stem":401,"icon":387},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":403,"path":404,"stem":405,"icon":406},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":408,"path":409,"stem":410,"icon":411},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":413,"path":414,"stem":415,"icon":411},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":417,"path":418,"stem":419,"icon":420},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":422,"path":423,"stem":424,"icon":425},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":68,"path":427,"stem":428,"icon":429},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":431,"path":432,"stem":433,"children":434},"Blog","\u002Fblog","9.blog",[435,438],{"title":431,"path":432,"stem":436,"icon":437},"9.blog\u002Findex","i-lucide-file-text",{"title":439,"path":440,"stem":441,"icon":437},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":443,"stem":444},"\u002F","index",{"id":446,"title":58,"body":447,"description":1742,"extension":1743,"meta":1744,"navigation":1745,"path":59,"seo":1746,"stem":60,"__hash__":1747},"content\u002F1.docs\u002F50.prerendering.md",{"type":448,"value":449,"toc":1727,"icon":61},"minimark",[450,459,462,467,475,481,577,607,614,625,684,716,720,727,789,800,808,821,825,832,966,977,1032,1036,1047,1107,1111,1225,1237,1250,1257,1298,1304,1383,1387,1397,1473,1476,1676,1680,1708,1723],[451,452,453,454,458],"p",{},"When prerendering is enabled, Nitro fetches the specified routes during the build and writes the responses to the ",[455,456,457],"code",{},".output\u002Fpublic"," directory. Prerendered routes are then served as static files — no server rendering happens at request time, which makes them fast, cacheable, and deployable to any static hosting or CDN.",[451,460,461],{},"Prerendering is a good fit for routes whose content does not change per request: landing pages, documentation, blog posts, or JSON endpoints with constant output. Dynamic routes can keep being served by the server — you can freely mix prerendered and server-rendered routes in the same app.",[463,464,466],"h2",{"id":465},"prerendering-routes","Prerendering routes",[468,469,471,474],"h3",{"id":470},"prerenderroutes-config",[455,472,473],{},"prerender.routes"," config",[451,476,477,478,480],{},"List the routes to prerender using the ",[455,479,473],{}," option:",[482,483,488],"pre",{"className":484,"code":485,"filename":486,"language":487,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  prerender: {\n    routes: [\"\u002F\", \"\u002Fabout\", \"\u002Fapi\u002Fcontent.json\"],\n  },\n});\n","nitro.config.ts","ts",[455,489,490,513,520,536,542,565,571],{"__ignoreMap":5},[491,492,495,499,503,506,510],"span",{"class":493,"line":494},"line",1,[491,496,498],{"class":497},"so5gQ","import",[491,500,502],{"class":501},"slsVL"," { defineConfig } ",[491,504,505],{"class":497},"from",[491,507,509],{"class":508},"sfrk1"," \"nitro\"",[491,511,512],{"class":501},";\n",[491,514,516],{"class":493,"line":515},2,[491,517,519],{"emptyLinePlaceholder":518},true,"\n",[491,521,523,526,529,533],{"class":493,"line":522},3,[491,524,525],{"class":497},"export",[491,527,528],{"class":497}," default",[491,530,532],{"class":531},"shcOC"," defineConfig",[491,534,535],{"class":501},"({\n",[491,537,539],{"class":493,"line":538},4,[491,540,541],{"class":501},"  prerender: {\n",[491,543,545,548,551,554,557,559,562],{"class":493,"line":544},5,[491,546,547],{"class":501},"    routes: [",[491,549,550],{"class":508},"\"\u002F\"",[491,552,553],{"class":501},", ",[491,555,556],{"class":508},"\"\u002Fabout\"",[491,558,553],{"class":501},[491,560,561],{"class":508},"\"\u002Fapi\u002Fcontent.json\"",[491,563,564],{"class":501},"],\n",[491,566,568],{"class":493,"line":567},6,[491,569,570],{"class":501},"  },\n",[491,572,574],{"class":493,"line":573},7,[491,575,576],{"class":501},"});\n",[451,578,579,580,583,584,587,588,591,592,587,595,598,599,606],{},"HTML responses are written as ",[455,581,582],{},"index.html"," files within subfolders (",[455,585,586],{},"\u002Fabout"," produces ",[455,589,590],{},"about\u002Findex.html","), while other responses keep their path (",[455,593,594],{},"\u002Fapi\u002Fcontent.json",[455,596,597],{},"api\u002Fcontent.json","). See ",[600,601,603],"a",{"href":602},"#options",[455,604,605],{},"autoSubfolderIndex"," to change this behavior.",[468,608,610,613],{"id":609},"prerender-route-rule",[455,611,612],{},"prerender"," route rule",[451,615,616,617,619,620,624],{},"Alternatively, mark routes for prerendering with the ",[455,618,612],{}," ",[600,621,623],{"href":622},"\u002Fdocs\u002Frouting#route-rules","route rule",":",[482,626,628],{"className":484,"code":627,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \"\u002Fabout\": { prerender: true },\n  },\n});\n",[455,629,630,642,646,656,661,676,680],{"__ignoreMap":5},[491,631,632,634,636,638,640],{"class":493,"line":494},[491,633,498],{"class":497},[491,635,502],{"class":501},[491,637,505],{"class":497},[491,639,509],{"class":508},[491,641,512],{"class":501},[491,643,644],{"class":493,"line":515},[491,645,519],{"emptyLinePlaceholder":518},[491,647,648,650,652,654],{"class":493,"line":522},[491,649,525],{"class":497},[491,651,528],{"class":497},[491,653,532],{"class":531},[491,655,535],{"class":501},[491,657,658],{"class":493,"line":538},[491,659,660],{"class":501},"  routeRules: {\n",[491,662,663,666,669,673],{"class":493,"line":544},[491,664,665],{"class":508},"    \"\u002Fabout\"",[491,667,668],{"class":501},": { prerender: ",[491,670,672],{"class":671},"suiK_","true",[491,674,675],{"class":501}," },\n",[491,677,678],{"class":493,"line":567},[491,679,570],{"class":501},[491,681,682],{"class":493,"line":573},[491,683,576],{"class":501},[685,686,687],"warning",{},[451,688,689,690,694,695,698,699,702,703,707,708,715],{},"Only ",[691,692,693],"strong",{},"exact paths"," are added to the prerender list from route rules. Wildcard patterns like ",[455,696,697],{},"\"\u002Fblog\u002F**\": { prerender: true }"," are ",[691,700,701],{},"not"," auto-expanded, since Nitro cannot know which routes match the pattern. To prerender a dynamic set of routes, use ",[600,704,706],{"href":705},"#crawling-links","link crawling"," or the ",[600,709,711,714],{"href":710},"#hooks",[455,712,713],{},"prerender:routes"," hook",".",[463,717,719],{"id":718},"crawling-links","Crawling links",[451,721,722,723,726],{},"Instead of (or in addition to) listing every route, enable ",[455,724,725],{},"crawlLinks"," to let Nitro discover routes by following links in prerendered HTML pages:",[482,728,730],{"className":484,"code":729,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  prerender: {\n    crawlLinks: true,\n    routes: [\"\u002F\"],\n  },\n});\n",[455,731,732,744,748,758,762,772,780,784],{"__ignoreMap":5},[491,733,734,736,738,740,742],{"class":493,"line":494},[491,735,498],{"class":497},[491,737,502],{"class":501},[491,739,505],{"class":497},[491,741,509],{"class":508},[491,743,512],{"class":501},[491,745,746],{"class":493,"line":515},[491,747,519],{"emptyLinePlaceholder":518},[491,749,750,752,754,756],{"class":493,"line":522},[491,751,525],{"class":497},[491,753,528],{"class":497},[491,755,532],{"class":531},[491,757,535],{"class":501},[491,759,760],{"class":493,"line":538},[491,761,541],{"class":501},[491,763,764,767,769],{"class":493,"line":544},[491,765,766],{"class":501},"    crawlLinks: ",[491,768,672],{"class":671},[491,770,771],{"class":501},",\n",[491,773,774,776,778],{"class":493,"line":567},[491,775,547],{"class":501},[491,777,550],{"class":508},[491,779,564],{"class":501},[491,781,782],{"class":493,"line":573},[491,783,570],{"class":501},[491,785,787],{"class":493,"line":786},8,[491,788,576],{"class":501},[451,790,791,792,795,796,799],{},"The crawler extracts ",[455,793,794],{},"href"," attributes from each prerendered HTML page and queues the discovered routes for prerendering. External links, hash links, and links to files with extensions (except ",[455,797,798],{},".json",") are skipped. Relative links are resolved against the page they were found on.",[451,801,802,803,805,806,715],{},"If ",[455,804,725],{}," is enabled and no routes are specified, crawling starts from ",[455,807,443],{},[809,810,811],"tip",{},[451,812,813,814,817,818,820],{},"Handlers can queue additional routes for prerendering by setting the ",[455,815,816],{},"x-nitro-prerender"," response header to a comma-separated list of paths. This works even when ",[455,819,725],{}," is disabled.",[463,822,824],{"id":823},"ignoring-routes","Ignoring routes",[451,826,827,828,831],{},"Use ",[455,829,830],{},"prerender.ignore"," to skip routes. Each entry can be a string prefix, a regular expression, or a function receiving the path:",[482,833,835],{"className":484,"code":834,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  prerender: {\n    crawlLinks: true,\n    ignore: [\n      \"\u002Fadmin\",                        \u002F\u002F Ignore routes starting with \u002Fadmin\n      \u002F\\\u002Fpreview$\u002F,                     \u002F\u002F Ignore routes ending with \u002Fpreview\n      (path) => path.includes(\"draft\"), \u002F\u002F Ignore routes containing \"draft\"\n    ],\n  },\n});\n",[455,836,837,849,853,863,867,875,880,892,916,950,956,961],{"__ignoreMap":5},[491,838,839,841,843,845,847],{"class":493,"line":494},[491,840,498],{"class":497},[491,842,502],{"class":501},[491,844,505],{"class":497},[491,846,509],{"class":508},[491,848,512],{"class":501},[491,850,851],{"class":493,"line":515},[491,852,519],{"emptyLinePlaceholder":518},[491,854,855,857,859,861],{"class":493,"line":522},[491,856,525],{"class":497},[491,858,528],{"class":497},[491,860,532],{"class":531},[491,862,535],{"class":501},[491,864,865],{"class":493,"line":538},[491,866,541],{"class":501},[491,868,869,871,873],{"class":493,"line":544},[491,870,766],{"class":501},[491,872,672],{"class":671},[491,874,771],{"class":501},[491,876,877],{"class":493,"line":567},[491,878,879],{"class":501},"    ignore: [\n",[491,881,882,885,888],{"class":493,"line":573},[491,883,884],{"class":508},"      \"\u002Fadmin\"",[491,886,887],{"class":501},",                        ",[491,889,891],{"class":890},"sCsY4","\u002F\u002F Ignore routes starting with \u002Fadmin\n",[491,893,894,897,901,905,908,910,913],{"class":493,"line":786},[491,895,896],{"class":508},"      \u002F",[491,898,900],{"class":899},"sAxt1","\\\u002F",[491,902,904],{"class":903},"sQeJH","preview",[491,906,907],{"class":497},"$",[491,909,443],{"class":508},[491,911,912],{"class":501},",                     ",[491,914,915],{"class":890},"\u002F\u002F Ignore routes ending with \u002Fpreview\n",[491,917,919,922,926,929,932,935,938,941,944,947],{"class":493,"line":918},9,[491,920,921],{"class":501},"      (",[491,923,925],{"class":924},"sQHwn","path",[491,927,928],{"class":501},") ",[491,930,931],{"class":497},"=>",[491,933,934],{"class":501}," path.",[491,936,937],{"class":531},"includes",[491,939,940],{"class":501},"(",[491,942,943],{"class":508},"\"draft\"",[491,945,946],{"class":501},"), ",[491,948,949],{"class":890},"\u002F\u002F Ignore routes containing \"draft\"\n",[491,951,953],{"class":493,"line":952},10,[491,954,955],{"class":501},"    ],\n",[491,957,959],{"class":493,"line":958},11,[491,960,570],{"class":501},[491,962,964],{"class":493,"line":963},12,[491,965,576],{"class":501},[451,967,968,969,972,973,976],{},"You can also exclude routes with the ",[455,970,971],{},"prerender: false"," route rule. Unlike enabling prerendering, wildcard patterns ",[691,974,975],{},"do"," work for exclusion since they are matched against each candidate route:",[482,978,980],{"className":484,"code":979,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \"\u002Fdynamic\u002F**\": { prerender: false },\n  },\n});\n",[455,981,982,994,998,1008,1012,1024,1028],{"__ignoreMap":5},[491,983,984,986,988,990,992],{"class":493,"line":494},[491,985,498],{"class":497},[491,987,502],{"class":501},[491,989,505],{"class":497},[491,991,509],{"class":508},[491,993,512],{"class":501},[491,995,996],{"class":493,"line":515},[491,997,519],{"emptyLinePlaceholder":518},[491,999,1000,1002,1004,1006],{"class":493,"line":522},[491,1001,525],{"class":497},[491,1003,528],{"class":497},[491,1005,532],{"class":531},[491,1007,535],{"class":501},[491,1009,1010],{"class":493,"line":538},[491,1011,660],{"class":501},[491,1013,1014,1017,1019,1022],{"class":493,"line":544},[491,1015,1016],{"class":508},"    \"\u002Fdynamic\u002F**\"",[491,1018,668],{"class":501},[491,1020,1021],{"class":671},"false",[491,1023,675],{"class":501},[491,1025,1026],{"class":493,"line":567},[491,1027,570],{"class":501},[491,1029,1030],{"class":493,"line":573},[491,1031,576],{"class":501},[468,1033,1035],{"id":1034},"public-assets","Public assets",[451,1037,1038,1039,1042,1043,1046],{},"Routes served by ",[600,1040,1041],{"href":29},"public assets"," with a base URL prefix are always skipped. Additionally, you can set ",[455,1044,1045],{},"prerender.ignoreUnprefixedPublicAssets: true"," to skip prerendering routes that are already served by unprefixed public assets, avoiding duplicate files in the output:",[482,1048,1050],{"className":484,"code":1049,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  prerender: {\n    crawlLinks: true,\n    ignoreUnprefixedPublicAssets: true,\n  },\n});\n",[455,1051,1052,1064,1068,1078,1082,1090,1099,1103],{"__ignoreMap":5},[491,1053,1054,1056,1058,1060,1062],{"class":493,"line":494},[491,1055,498],{"class":497},[491,1057,502],{"class":501},[491,1059,505],{"class":497},[491,1061,509],{"class":508},[491,1063,512],{"class":501},[491,1065,1066],{"class":493,"line":515},[491,1067,519],{"emptyLinePlaceholder":518},[491,1069,1070,1072,1074,1076],{"class":493,"line":522},[491,1071,525],{"class":497},[491,1073,528],{"class":497},[491,1075,532],{"class":531},[491,1077,535],{"class":501},[491,1079,1080],{"class":493,"line":538},[491,1081,541],{"class":501},[491,1083,1084,1086,1088],{"class":493,"line":544},[491,1085,766],{"class":501},[491,1087,672],{"class":671},[491,1089,771],{"class":501},[491,1091,1092,1095,1097],{"class":493,"line":567},[491,1093,1094],{"class":501},"    ignoreUnprefixedPublicAssets: ",[491,1096,672],{"class":671},[491,1098,771],{"class":501},[491,1100,1101],{"class":493,"line":573},[491,1102,570],{"class":501},[491,1104,1105],{"class":493,"line":786},[491,1106,576],{"class":501},[463,1108,1110],{"id":1109},"options","Options",[1112,1113,1114,1130],"table",{},[1115,1116,1117],"thead",{},[1118,1119,1120,1124,1127],"tr",{},[1121,1122,1123],"th",{},"Option",[1121,1125,1126],{},"Default",[1121,1128,1129],{},"Description",[1131,1132,1133,1148,1167,1182,1197,1212],"tbody",{},[1118,1134,1135,1141,1145],{},[1136,1137,1138],"td",{},[455,1139,1140],{},"failOnError",[1136,1142,1143],{},[455,1144,1021],{},[1136,1146,1147],{},"Fail the build when a route cannot be prerendered. Useful in CI.",[1118,1149,1150,1155,1160],{},[1136,1151,1152],{},[455,1153,1154],{},"retry",[1136,1156,1157],{},[455,1158,1159],{},"3",[1136,1161,1162,1163,1166],{},"Number of times to retry a failed route. Pass ",[455,1164,1165],{},"Infinity"," to retry indefinitely.",[1118,1168,1169,1174,1179],{},[1136,1170,1171],{},[455,1172,1173],{},"retryDelay",[1136,1175,1176],{},[455,1177,1178],{},"500",[1136,1180,1181],{},"Delay between each retry in milliseconds.",[1118,1183,1184,1189,1194],{},[1136,1185,1186],{},[455,1187,1188],{},"concurrency",[1136,1190,1191],{},[455,1192,1193],{},"1",[1136,1195,1196],{},"Maximum number of routes prerendered in parallel.",[1118,1198,1199,1204,1209],{},[1136,1200,1201],{},[455,1202,1203],{},"interval",[1136,1205,1206],{},[455,1207,1208],{},"0",[1136,1210,1211],{},"Delay in milliseconds between prerender requests.",[1118,1213,1214,1218,1222],{},[1136,1215,1216],{},[455,1217,605],{},[1136,1219,1220],{},[455,1221,672],{},[1136,1223,1224],{},"Write HTML routes as subfolder indexes.",[1226,1227,1228],"note",{},[451,1229,1230,1231,1233,1234,1236],{},"The ",[455,1232,1154],{}," and ",[455,1235,1173],{}," options are accepted by the config but are not applied by the current v3 prerenderer yet.",[451,1238,1230,1239,1233,1241,1243,1244,1246,1247,1249],{},[455,1240,1188],{},[455,1242,1203],{}," options control prerendering speed. Increase ",[455,1245,1188],{}," to speed up large sites, or add an ",[455,1248,1203],{}," to avoid hitting rate limits when routes call external APIs.",[451,1251,1252,1254,1255,624],{},[455,1253,605],{}," controls how HTML files are written to ",[455,1256,457],{},[482,1258,1262],{"className":1259,"code":1260,"language":1261,"meta":5,"style":5},"language-bash shiki shiki-themes github-light github-dark github-dark","# autoSubfolderIndex: true (default)\n\u002Fabout -> .output\u002Fpublic\u002Fabout\u002Findex.html\n# autoSubfolderIndex: false\n\u002Fabout -> .output\u002Fpublic\u002Fabout.html\n","bash",[455,1263,1264,1269,1282,1287],{"__ignoreMap":5},[491,1265,1266],{"class":493,"line":494},[491,1267,1268],{"class":890},"# autoSubfolderIndex: true (default)\n",[491,1270,1271,1273,1276,1279],{"class":493,"line":515},[491,1272,586],{"class":531},[491,1274,1275],{"class":501}," -",[491,1277,1278],{"class":497},">",[491,1280,1281],{"class":508}," .output\u002Fpublic\u002Fabout\u002Findex.html\n",[491,1283,1284],{"class":493,"line":522},[491,1285,1286],{"class":890},"# autoSubfolderIndex: false\n",[491,1288,1289,1291,1293,1295],{"class":493,"line":538},[491,1290,586],{"class":531},[491,1292,1275],{"class":501},[491,1294,1278],{"class":497},[491,1296,1297],{"class":508}," .output\u002Fpublic\u002Fabout.html\n",[451,1299,1300,1301,1303],{},"Set it to ",[455,1302,1021],{}," when your hosting provider does not let you configure trailing slash behavior.",[482,1305,1307],{"className":484,"code":1306,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  prerender: {\n    crawlLinks: true,\n    failOnError: true,\n    concurrency: 8,\n    autoSubfolderIndex: false,\n  },\n});\n",[455,1308,1309,1321,1325,1335,1339,1347,1356,1366,1375,1379],{"__ignoreMap":5},[491,1310,1311,1313,1315,1317,1319],{"class":493,"line":494},[491,1312,498],{"class":497},[491,1314,502],{"class":501},[491,1316,505],{"class":497},[491,1318,509],{"class":508},[491,1320,512],{"class":501},[491,1322,1323],{"class":493,"line":515},[491,1324,519],{"emptyLinePlaceholder":518},[491,1326,1327,1329,1331,1333],{"class":493,"line":522},[491,1328,525],{"class":497},[491,1330,528],{"class":497},[491,1332,532],{"class":531},[491,1334,535],{"class":501},[491,1336,1337],{"class":493,"line":538},[491,1338,541],{"class":501},[491,1340,1341,1343,1345],{"class":493,"line":544},[491,1342,766],{"class":501},[491,1344,672],{"class":671},[491,1346,771],{"class":501},[491,1348,1349,1352,1354],{"class":493,"line":567},[491,1350,1351],{"class":501},"    failOnError: ",[491,1353,672],{"class":671},[491,1355,771],{"class":501},[491,1357,1358,1361,1364],{"class":493,"line":573},[491,1359,1360],{"class":501},"    concurrency: ",[491,1362,1363],{"class":671},"8",[491,1365,771],{"class":501},[491,1367,1368,1371,1373],{"class":493,"line":786},[491,1369,1370],{"class":501},"    autoSubfolderIndex: ",[491,1372,1021],{"class":671},[491,1374,771],{"class":501},[491,1376,1377],{"class":493,"line":918},[491,1378,570],{"class":501},[491,1380,1381],{"class":493,"line":952},[491,1382,576],{"class":501},[463,1384,1386],{"id":1385},"hooks","Hooks",[451,1388,1389,1390,1393,1394,1396],{},"For advanced use cases, you can hook into the prerendering lifecycle at build time. These hooks are available to ",[600,1391,1392],{"href":74},"modules"," and the ",[455,1395,1385],{}," config option:",[1112,1398,1399,1408],{},[1115,1400,1401],{},[1118,1402,1403,1406],{},[1121,1404,1405],{},"Hook",[1121,1407,1129],{},[1131,1409,1410,1423,1433,1453,1463],{},[1118,1411,1412,1416],{},[1136,1413,1414],{},[455,1415,713],{},[1136,1417,1418,1419,1422],{},"Called with the initial ",[455,1420,1421],{},"Set"," of routes — add or remove entries before prerendering starts.",[1118,1424,1425,1430],{},[1136,1426,1427],{},[455,1428,1429],{},"prerender:config",[1136,1431,1432],{},"Called with the config of the internal Nitro instance used for prerendering.",[1118,1434,1435,1440],{},[1136,1436,1437],{},[455,1438,1439],{},"prerender:generate",[1136,1441,1442,1443,553,1446,1449,1450,715],{},"Called for each route before its file is written — inspect or modify the route object (",[455,1444,1445],{},"route.contents",[455,1447,1448],{},"route.fileName",", ...) or set ",[455,1451,1452],{},"route.skip = true",[1118,1454,1455,1460],{},[1136,1456,1457],{},[455,1458,1459],{},"prerender:route",[1136,1461,1462],{},"Called after each route is generated.",[1118,1464,1465,1470],{},[1136,1466,1467],{},[455,1468,1469],{},"prerender:done",[1136,1471,1472],{},"Called once prerendering is finished, with the lists of prerendered and failed routes.",[451,1474,1475],{},"A common use case is registering routes dynamically, for example from a CMS or database:",[482,1477,1479],{"className":484,"code":1478,"filename":486,"language":487,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  modules: [\n    (nitro) => {\n      nitro.hooks.hook(\"prerender:routes\", async (routes) => {\n        const posts = await fetch(\"https:\u002F\u002Fapi.example.com\u002Fposts\").then((res) => res.json());\n        for (const post of posts) {\n          routes.add(`\u002Fblog\u002F${post.slug}`);\n        }\n      });\n    },\n  ],\n});\n",[455,1480,1481,1493,1497,1507,1512,1527,1557,1604,1623,1650,1655,1660,1665,1671],{"__ignoreMap":5},[491,1482,1483,1485,1487,1489,1491],{"class":493,"line":494},[491,1484,498],{"class":497},[491,1486,502],{"class":501},[491,1488,505],{"class":497},[491,1490,509],{"class":508},[491,1492,512],{"class":501},[491,1494,1495],{"class":493,"line":515},[491,1496,519],{"emptyLinePlaceholder":518},[491,1498,1499,1501,1503,1505],{"class":493,"line":522},[491,1500,525],{"class":497},[491,1502,528],{"class":497},[491,1504,532],{"class":531},[491,1506,535],{"class":501},[491,1508,1509],{"class":493,"line":538},[491,1510,1511],{"class":501},"  modules: [\n",[491,1513,1514,1517,1520,1522,1524],{"class":493,"line":544},[491,1515,1516],{"class":501},"    (",[491,1518,1519],{"class":924},"nitro",[491,1521,928],{"class":501},[491,1523,931],{"class":497},[491,1525,1526],{"class":501}," {\n",[491,1528,1529,1532,1535,1537,1540,1542,1545,1548,1551,1553,1555],{"class":493,"line":567},[491,1530,1531],{"class":501},"      nitro.hooks.",[491,1533,1534],{"class":531},"hook",[491,1536,940],{"class":501},[491,1538,1539],{"class":508},"\"prerender:routes\"",[491,1541,553],{"class":501},[491,1543,1544],{"class":497},"async",[491,1546,1547],{"class":501}," (",[491,1549,1550],{"class":924},"routes",[491,1552,928],{"class":501},[491,1554,931],{"class":497},[491,1556,1526],{"class":501},[491,1558,1559,1562,1565,1568,1571,1574,1576,1579,1582,1585,1588,1591,1593,1595,1598,1601],{"class":493,"line":573},[491,1560,1561],{"class":497},"        const",[491,1563,1564],{"class":671}," posts",[491,1566,1567],{"class":497}," =",[491,1569,1570],{"class":497}," await",[491,1572,1573],{"class":531}," fetch",[491,1575,940],{"class":501},[491,1577,1578],{"class":508},"\"https:\u002F\u002Fapi.example.com\u002Fposts\"",[491,1580,1581],{"class":501},").",[491,1583,1584],{"class":531},"then",[491,1586,1587],{"class":501},"((",[491,1589,1590],{"class":924},"res",[491,1592,928],{"class":501},[491,1594,931],{"class":497},[491,1596,1597],{"class":501}," res.",[491,1599,1600],{"class":531},"json",[491,1602,1603],{"class":501},"());\n",[491,1605,1606,1609,1611,1614,1617,1620],{"class":493,"line":786},[491,1607,1608],{"class":497},"        for",[491,1610,1547],{"class":501},[491,1612,1613],{"class":497},"const",[491,1615,1616],{"class":671}," post",[491,1618,1619],{"class":497}," of",[491,1621,1622],{"class":501}," posts) {\n",[491,1624,1625,1628,1631,1633,1636,1639,1641,1644,1647],{"class":493,"line":918},[491,1626,1627],{"class":501},"          routes.",[491,1629,1630],{"class":531},"add",[491,1632,940],{"class":501},[491,1634,1635],{"class":508},"`\u002Fblog\u002F${",[491,1637,1638],{"class":501},"post",[491,1640,715],{"class":508},[491,1642,1643],{"class":501},"slug",[491,1645,1646],{"class":508},"}`",[491,1648,1649],{"class":501},");\n",[491,1651,1652],{"class":493,"line":952},[491,1653,1654],{"class":501},"        }\n",[491,1656,1657],{"class":493,"line":958},[491,1658,1659],{"class":501},"      });\n",[491,1661,1662],{"class":493,"line":963},[491,1663,1664],{"class":501},"    },\n",[491,1666,1668],{"class":493,"line":1667},13,[491,1669,1670],{"class":501},"  ],\n",[491,1672,1674],{"class":493,"line":1673},14,[491,1675,576],{"class":501},[463,1677,1679],{"id":1678},"static-hosting","Static hosting",[451,1681,1682,1683,553,1686,1689,1690,1693,1694,1696,1697,1700,1701,1704,1705,1707],{},"To ship a fully prerendered site without a server bundle, use a static preset such as ",[455,1684,1685],{},"static",[455,1687,1688],{},"github_pages",", or ",[455,1691,1692],{},"gitlab_pages",". These presets skip the server build, enable ",[455,1695,725],{},", and only output the ",[455,1698,1699],{},"public"," directory, ready to upload to any static hosting. See the ",[600,1702,1703],{"href":125},"deploy documentation"," and providers like ",[600,1706,209],{"href":210}," for details.",[1226,1709,1710],{},[451,1711,1230,1712,1715,1716,1718,1719,1722],{},[455,1713,1714],{},"static: true"," config option only disables the server build — it does not enable prerendering by itself. When using it directly instead of a static preset, configure ",[455,1717,612],{}," options (typically ",[455,1720,1721],{},"crawlLinks: true",") to generate the pages.",[1724,1725,1726],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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 pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}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}html pre.shiki code .sAxt1, html code.shiki .sAxt1{--shiki-light:#22863A;--shiki-light-font-weight:bold;--shiki-default:#85E89D;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .sQeJH, html code.shiki .sQeJH{--shiki-light:#032F62;--shiki-default:#DBEDFF;--shiki-dark:#DBEDFF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":5,"searchDepth":515,"depth":515,"links":1728},[1729,1735,1736,1739,1740,1741],{"id":465,"depth":515,"text":466,"children":1730},[1731,1733],{"id":470,"depth":522,"text":1732},"prerender.routes config",{"id":609,"depth":522,"text":1734},"prerender route rule",{"id":718,"depth":515,"text":719},{"id":823,"depth":515,"text":824,"children":1737},[1738],{"id":1034,"depth":522,"text":1035},{"id":1109,"depth":515,"text":1110},{"id":1385,"depth":515,"text":1386},{"id":1678,"depth":515,"text":1679},"Render routes at build time and serve them as static assets.","md",{"icon":61},{"icon":61},{"title":58,"description":1742},"zo7vGVXvlL2ioNnq0D2cayjj2uRWK0pRgNJNwAscNXE",[1749,1751],{"title":53,"path":54,"stem":55,"description":1750,"icon":56,"children":-1},"Use runtime plugins to extend Nitro's runtime behavior.",{"title":63,"path":64,"stem":65,"description":1752,"icon":66,"children":-1},"Nitro tasks allow one-off operations at runtime: named server-side actions such as database migrations, cache cleanup, or content syncing that you can run on demand, on a schedule, or from the CLI.",1784019071919]