[{"data":1,"prerenderedAt":1784},["ShallowReactive",2],{"navigation":3,"-docs-assets":407,"-docs-assets-surround":1779},[4,93,226,232,392,404],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"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},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","\u002Fexamples","4.examples\u002F0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,360,364,369,374,378,383,388],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Takumi","\u002Fexamples\u002Ftakumi","4.examples\u002Ftakumi","i-lucide-image",{"title":336,"path":337,"stem":338,"icon":339},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":341,"path":342,"stem":343,"icon":344},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":346,"path":347,"stem":348,"icon":349},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":351,"path":352,"stem":353,"icon":354},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":356,"path":357,"stem":358,"icon":359},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":361,"path":362,"stem":363,"icon":349},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":370,"path":371,"stem":372,"icon":373},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":375,"path":376,"stem":377,"icon":373},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":379,"path":380,"stem":381,"icon":382},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":384,"path":385,"stem":386,"icon":387},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":389,"stem":390,"icon":391},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":393,"path":394,"stem":395,"children":396},"Blog","\u002Fblog","9.blog",[397,400],{"title":393,"path":394,"stem":398,"icon":399},"9.blog\u002Findex","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":399},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":405,"stem":406},"\u002F","index",{"id":408,"title":28,"body":409,"description":5,"extension":449,"meta":1775,"navigation":1776,"path":29,"seo":1777,"stem":30,"__hash__":1778},"content\u002F1.docs\u002F50.assets.md",{"type":410,"value":411,"toc":1763,"icon":31},"minimark",[412,425,430,438,444,479,484,507,522,526,536,764,767,771,778,844,946,956,960,978,985,1029,1032,1103,1113,1117,1127,1137,1148,1155,1252,1256,1261,1268,1299,1370,1377,1471,1480,1484,1515,1635,1638,1641,1685,1698,1734,1743,1759],[413,414,415,416,420,421,424],"p",{},"Nitro supports two types of assets: ",[417,418,419],"strong",{},"public assets"," served directly to clients and ",[417,422,423],{},"server assets"," bundled into the server for programmatic access.",[426,427,429],"h2",{"id":428},"public-assets","Public Assets",[413,431,432,433,437],{},"Nitro handles assets via the ",[434,435,436],"code",{},"public\u002F"," directory.",[413,439,440,441,443],{},"All assets in ",[434,442,436],{}," directory will be automatically served. This means that you can access them directly from the browser without any special configuration.",[445,446,450],"pre",{"className":447,"code":448,"language":449,"meta":5,"style":5},"language-md shiki shiki-themes github-light github-dark github-dark","public\u002F\n  image.png     \u003C-- \u002Fimage.png\n  video.mp4     \u003C-- \u002Fvideo.mp4\n  robots.txt    \u003C-- \u002Frobots.txt\n","md",[434,451,452,461,467,473],{"__ignoreMap":5},[453,454,457],"span",{"class":455,"line":456},"line",1,[453,458,460],{"class":459},"slsVL","public\u002F\n",[453,462,464],{"class":455,"line":463},2,[453,465,466],{"class":459},"  image.png     \u003C-- \u002Fimage.png\n",[453,468,470],{"class":455,"line":469},3,[453,471,472],{"class":459},"  video.mp4     \u003C-- \u002Fvideo.mp4\n",[453,474,476],{"class":455,"line":475},4,[453,477,478],{"class":459},"  robots.txt    \u003C-- \u002Frobots.txt\n",[480,481,483],"h3",{"id":482},"caching-and-headers","Caching and Headers",[413,485,486,487,490,491,494,495,498,499,502,503,506],{},"Public assets are served with automatic ",[434,488,489],{},"ETag"," and ",[434,492,493],{},"Last-Modified"," headers for conditional requests. When the client sends ",[434,496,497],{},"If-None-Match"," or ",[434,500,501],{},"If-Modified-Since"," headers, Nitro returns a ",[434,504,505],{},"304 Not Modified"," response.",[413,508,509,510,513,514,517,518,521],{},"For assets served from a non-root ",[434,511,512],{},"baseURL"," (such as ",[434,515,516],{},"\u002Fbuild\u002F","), Nitro prevents fallthrough to application handlers. If a request matches a public asset base but the file is not found, a ",[434,519,520],{},"404"," is returned immediately.",[480,523,525],{"id":524},"production-public-assets","Production Public Assets",[413,527,528,529,531,532,535],{},"When building your Nitro app, the ",[434,530,436],{}," directory will be copied to ",[434,533,534],{},".output\u002Fpublic\u002F"," and a manifest with metadata will be created and embedded in the server bundle.",[445,537,541],{"className":538,"code":539,"language":540,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","{\n  \"\u002Fimage.png\": {\n    \"type\": \"image\u002Fpng\",\n    \"etag\": \"\\\"4a0c-6utWq0Kbk5OqDmksYCa9XV8irnM\\\"\",\n    \"mtime\": \"2023-03-04T21:39:45.086Z\",\n    \"size\": 18956\n  },\n  \"\u002Frobots.txt\": {\n    \"type\": \"text\u002Fplain; charset=utf-8\",\n    \"etag\": \"\\\"8-hMqyDrA8fJ0R904zgEPs3L55Jls\\\"\",\n    \"mtime\": \"2023-03-04T21:39:45.086Z\",\n    \"size\": 8\n  },\n  \"\u002Fvideo.mp4\": {\n    \"type\": \"video\u002Fmp4\",\n    \"etag\": \"\\\"9b943-4UwfQXKUjPCesGPr6J5j7GzNYGU\\\"\",\n    \"mtime\": \"2023-03-04T21:39:45.085Z\",\n    \"size\": 637251\n  }\n}\n","json",[434,542,543,548,557,572,594,607,618,624,632,644,664,675,685,690,698,710,730,742,752,758],{"__ignoreMap":5},[453,544,545],{"class":455,"line":456},[453,546,547],{"class":459},"{\n",[453,549,550,554],{"class":455,"line":463},[453,551,553],{"class":552},"suiK_","  \"\u002Fimage.png\"",[453,555,556],{"class":459},": {\n",[453,558,559,562,565,569],{"class":455,"line":469},[453,560,561],{"class":552},"    \"type\"",[453,563,564],{"class":459},": ",[453,566,568],{"class":567},"sfrk1","\"image\u002Fpng\"",[453,570,571],{"class":459},",\n",[453,573,574,577,579,582,585,588,590,592],{"class":455,"line":475},[453,575,576],{"class":552},"    \"etag\"",[453,578,564],{"class":459},[453,580,581],{"class":567},"\"",[453,583,584],{"class":552},"\\\"",[453,586,587],{"class":567},"4a0c-6utWq0Kbk5OqDmksYCa9XV8irnM",[453,589,584],{"class":552},[453,591,581],{"class":567},[453,593,571],{"class":459},[453,595,597,600,602,605],{"class":455,"line":596},5,[453,598,599],{"class":552},"    \"mtime\"",[453,601,564],{"class":459},[453,603,604],{"class":567},"\"2023-03-04T21:39:45.086Z\"",[453,606,571],{"class":459},[453,608,610,613,615],{"class":455,"line":609},6,[453,611,612],{"class":552},"    \"size\"",[453,614,564],{"class":459},[453,616,617],{"class":552},"18956\n",[453,619,621],{"class":455,"line":620},7,[453,622,623],{"class":459},"  },\n",[453,625,627,630],{"class":455,"line":626},8,[453,628,629],{"class":552},"  \"\u002Frobots.txt\"",[453,631,556],{"class":459},[453,633,635,637,639,642],{"class":455,"line":634},9,[453,636,561],{"class":552},[453,638,564],{"class":459},[453,640,641],{"class":567},"\"text\u002Fplain; charset=utf-8\"",[453,643,571],{"class":459},[453,645,647,649,651,653,655,658,660,662],{"class":455,"line":646},10,[453,648,576],{"class":552},[453,650,564],{"class":459},[453,652,581],{"class":567},[453,654,584],{"class":552},[453,656,657],{"class":567},"8-hMqyDrA8fJ0R904zgEPs3L55Jls",[453,659,584],{"class":552},[453,661,581],{"class":567},[453,663,571],{"class":459},[453,665,667,669,671,673],{"class":455,"line":666},11,[453,668,599],{"class":552},[453,670,564],{"class":459},[453,672,604],{"class":567},[453,674,571],{"class":459},[453,676,678,680,682],{"class":455,"line":677},12,[453,679,612],{"class":552},[453,681,564],{"class":459},[453,683,684],{"class":552},"8\n",[453,686,688],{"class":455,"line":687},13,[453,689,623],{"class":459},[453,691,693,696],{"class":455,"line":692},14,[453,694,695],{"class":552},"  \"\u002Fvideo.mp4\"",[453,697,556],{"class":459},[453,699,701,703,705,708],{"class":455,"line":700},15,[453,702,561],{"class":552},[453,704,564],{"class":459},[453,706,707],{"class":567},"\"video\u002Fmp4\"",[453,709,571],{"class":459},[453,711,713,715,717,719,721,724,726,728],{"class":455,"line":712},16,[453,714,576],{"class":552},[453,716,564],{"class":459},[453,718,581],{"class":567},[453,720,584],{"class":552},[453,722,723],{"class":567},"9b943-4UwfQXKUjPCesGPr6J5j7GzNYGU",[453,725,584],{"class":552},[453,727,581],{"class":567},[453,729,571],{"class":459},[453,731,733,735,737,740],{"class":455,"line":732},17,[453,734,599],{"class":552},[453,736,564],{"class":459},[453,738,739],{"class":567},"\"2023-03-04T21:39:45.085Z\"",[453,741,571],{"class":459},[453,743,745,747,749],{"class":455,"line":744},18,[453,746,612],{"class":552},[453,748,564],{"class":459},[453,750,751],{"class":552},"637251\n",[453,753,755],{"class":455,"line":754},19,[453,756,757],{"class":459},"  }\n",[453,759,761],{"class":455,"line":760},20,[453,762,763],{"class":459},"}\n",[413,765,766],{},"This allows Nitro to know the public assets without scanning the directory, giving high performance with caching headers.",[480,768,770],{"id":769},"custom-public-asset-directories","Custom Public Asset Directories",[413,772,773,774,777],{},"You can configure additional public asset directories using the ",[434,775,776],{},"publicAssets"," config option. Each entry supports the following properties:",[779,780,781,792,800,814,832],"ul",{},[782,783,784,787,788,791],"li",{},[434,785,786],{},"dir"," -- Path to the directory (resolved relative to ",[434,789,790],{},"rootDir",").",[782,793,794,796,797,791],{},[434,795,512],{}," -- URL prefix for serving assets (default: ",[434,798,799],{},"\"\u002F\"",[782,801,802,805,806,809,810,813],{},[434,803,804],{},"maxAge"," -- Cache ",[434,807,808],{},"max-age"," in seconds. When set, a ",[434,811,812],{},"Cache-Control: public, max-age=\u003Cvalue>, immutable"," header is applied via route rules.",[782,815,816,819,820,823,824,827,828,831],{},[434,817,818],{},"fallthrough"," -- Whether requests should fall through to application handlers when the asset is not found. Top-level (",[434,821,822],{},"baseURL: \"\u002F\"",") directories default to ",[434,825,826],{},"true","; non-root directories default to ",[434,829,830],{},"false",".",[782,833,834,837,838,840,841,843],{},[434,835,836],{},"ignore"," -- Pass ",[434,839,830],{}," to disable ignore patterns, or an array of glob patterns to override the global ",[434,842,836],{}," option.",[445,845,850],{"className":846,"code":847,"filename":848,"language":849,"meta":5,"style":5},"language-js shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  publicAssets: [\n    {\n      baseURL: \"build\",\n      dir: \"public\u002Fbuild\",\n      maxAge: 3600,\n    },\n  ],\n});\n","nitro.config.ts","js",[434,851,852,870,876,891,896,901,911,921,931,936,941],{"__ignoreMap":5},[453,853,854,858,861,864,867],{"class":455,"line":456},[453,855,857],{"class":856},"so5gQ","import",[453,859,860],{"class":459}," { defineConfig } ",[453,862,863],{"class":856},"from",[453,865,866],{"class":567}," \"nitro\"",[453,868,869],{"class":459},";\n",[453,871,872],{"class":455,"line":463},[453,873,875],{"emptyLinePlaceholder":874},true,"\n",[453,877,878,881,884,888],{"class":455,"line":469},[453,879,880],{"class":856},"export",[453,882,883],{"class":856}," default",[453,885,887],{"class":886},"shcOC"," defineConfig",[453,889,890],{"class":459},"({\n",[453,892,893],{"class":455,"line":475},[453,894,895],{"class":459},"  publicAssets: [\n",[453,897,898],{"class":455,"line":596},[453,899,900],{"class":459},"    {\n",[453,902,903,906,909],{"class":455,"line":609},[453,904,905],{"class":459},"      baseURL: ",[453,907,908],{"class":567},"\"build\"",[453,910,571],{"class":459},[453,912,913,916,919],{"class":455,"line":620},[453,914,915],{"class":459},"      dir: ",[453,917,918],{"class":567},"\"public\u002Fbuild\"",[453,920,571],{"class":459},[453,922,923,926,929],{"class":455,"line":626},[453,924,925],{"class":459},"      maxAge: ",[453,927,928],{"class":552},"3600",[453,930,571],{"class":459},[453,932,933],{"class":455,"line":634},[453,934,935],{"class":459},"    },\n",[453,937,938],{"class":455,"line":646},[453,939,940],{"class":459},"  ],\n",[453,942,943],{"class":455,"line":666},[453,944,945],{"class":459},"});\n",[413,947,948,949,952,953,955],{},"In this example, files in ",[434,950,951],{},"public\u002Fbuild\u002F"," are served under ",[434,954,516],{}," with a one-hour cache and no fallthrough to application handlers.",[480,957,959],{"id":958},"compressed-public-assets","Compressed Public Assets",[413,961,962,963,966,967,970,971,974,975,791],{},"Nitro can generate pre-compressed versions of your public assets during the build. When a client sends an ",[434,964,965],{},"Accept-Encoding"," header, the server will serve the compressed version if available. Supported encodings are gzip (",[434,968,969],{},".gz","), brotli (",[434,972,973],{},".br","), and zstd (",[434,976,977],{},".zst",[413,979,980,981,984],{},"Set ",[434,982,983],{},"compressPublicAssets: true"," to enable all encodings:",[445,986,988],{"className":846,"code":987,"filename":848,"language":849,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  compressPublicAssets: true,\n});\n",[434,989,990,1002,1006,1016,1025],{"__ignoreMap":5},[453,991,992,994,996,998,1000],{"class":455,"line":456},[453,993,857],{"class":856},[453,995,860],{"class":459},[453,997,863],{"class":856},[453,999,866],{"class":567},[453,1001,869],{"class":459},[453,1003,1004],{"class":455,"line":463},[453,1005,875],{"emptyLinePlaceholder":874},[453,1007,1008,1010,1012,1014],{"class":455,"line":469},[453,1009,880],{"class":856},[453,1011,883],{"class":856},[453,1013,887],{"class":886},[453,1015,890],{"class":459},[453,1017,1018,1021,1023],{"class":455,"line":475},[453,1019,1020],{"class":459},"  compressPublicAssets: ",[453,1022,826],{"class":552},[453,1024,571],{"class":459},[453,1026,1027],{"class":455,"line":596},[453,1028,945],{"class":459},[413,1030,1031],{},"Or pick specific encodings:",[445,1033,1035],{"className":846,"code":1034,"filename":848,"language":849,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  compressPublicAssets: {\n    gzip: true,\n    brotli: true,\n    zstd: false,\n  },\n});\n",[434,1036,1037,1049,1053,1063,1068,1077,1086,1095,1099],{"__ignoreMap":5},[453,1038,1039,1041,1043,1045,1047],{"class":455,"line":456},[453,1040,857],{"class":856},[453,1042,860],{"class":459},[453,1044,863],{"class":856},[453,1046,866],{"class":567},[453,1048,869],{"class":459},[453,1050,1051],{"class":455,"line":463},[453,1052,875],{"emptyLinePlaceholder":874},[453,1054,1055,1057,1059,1061],{"class":455,"line":469},[453,1056,880],{"class":856},[453,1058,883],{"class":856},[453,1060,887],{"class":886},[453,1062,890],{"class":459},[453,1064,1065],{"class":455,"line":475},[453,1066,1067],{"class":459},"  compressPublicAssets: {\n",[453,1069,1070,1073,1075],{"class":455,"line":596},[453,1071,1072],{"class":459},"    gzip: ",[453,1074,826],{"class":552},[453,1076,571],{"class":459},[453,1078,1079,1082,1084],{"class":455,"line":609},[453,1080,1081],{"class":459},"    brotli: ",[453,1083,826],{"class":552},[453,1085,571],{"class":459},[453,1087,1088,1091,1093],{"class":455,"line":620},[453,1089,1090],{"class":459},"    zstd: ",[453,1092,830],{"class":552},[453,1094,571],{"class":459},[453,1096,1097],{"class":455,"line":626},[453,1098,623],{"class":459},[453,1100,1101],{"class":455,"line":634},[453,1102,945],{"class":459},[1104,1105,1106],"note",{},[413,1107,1108,1109,1112],{},"\nOnly compressible MIME types (text, JavaScript, JSON, XML, WASM, fonts, SVG, etc.) with a file size of at least 1 KB are compressed. Source map files (",[434,1110,1111],{},".map",") are excluded.",[426,1114,1116],{"id":1115},"server-assets","Server Assets",[413,1118,440,1119,1122,1123,1126],{},[434,1120,1121],{},"assets\u002F"," directory will be added to the server bundle. After building your application, you can find them in the ",[434,1124,1125],{},".output\u002Fserver\u002Fchunks\u002Fraw\u002F"," directory. Be careful with the size of your assets, as they will be bundled with the server bundle.",[1128,1129,1130],"tip",{},[413,1131,1132,1133,1136],{},"\nUnless using ",[434,1134,1135],{},"useStorage()",", assets won't be included in the server bundle.",[413,1138,1139,1140,1143,1144,831],{},"They can be addressed by the ",[434,1141,1142],{},"assets:server"," mount point using the ",[1145,1146,1147],"a",{"href":79},"storage layer",[413,1149,1150,1151,1154],{},"For example, you could store a json file in ",[434,1152,1153],{},"assets\u002Fdata.json"," and retrieve it in your handler:",[445,1156,1158],{"className":846,"code":1157,"language":849,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler(async () => {\n  const data = await useStorage(\"assets:server\").get(\"data.json\");\n\n  return data;\n});\n",[434,1159,1160,1173,1177,1201,1236,1240,1248],{"__ignoreMap":5},[453,1161,1162,1164,1167,1169,1171],{"class":455,"line":456},[453,1163,857],{"class":856},[453,1165,1166],{"class":459}," { defineHandler } ",[453,1168,863],{"class":856},[453,1170,866],{"class":567},[453,1172,869],{"class":459},[453,1174,1175],{"class":455,"line":463},[453,1176,875],{"emptyLinePlaceholder":874},[453,1178,1179,1181,1183,1186,1189,1192,1195,1198],{"class":455,"line":469},[453,1180,880],{"class":856},[453,1182,883],{"class":856},[453,1184,1185],{"class":886}," defineHandler",[453,1187,1188],{"class":459},"(",[453,1190,1191],{"class":856},"async",[453,1193,1194],{"class":459}," () ",[453,1196,1197],{"class":856},"=>",[453,1199,1200],{"class":459}," {\n",[453,1202,1203,1206,1209,1212,1215,1218,1220,1223,1225,1228,1230,1233],{"class":455,"line":475},[453,1204,1205],{"class":856},"  const",[453,1207,1208],{"class":552}," data",[453,1210,1211],{"class":856}," =",[453,1213,1214],{"class":856}," await",[453,1216,1217],{"class":886}," useStorage",[453,1219,1188],{"class":459},[453,1221,1222],{"class":567},"\"assets:server\"",[453,1224,791],{"class":459},[453,1226,1227],{"class":886},"get",[453,1229,1188],{"class":459},[453,1231,1232],{"class":567},"\"data.json\"",[453,1234,1235],{"class":459},");\n",[453,1237,1238],{"class":455,"line":596},[453,1239,875],{"emptyLinePlaceholder":874},[453,1241,1242,1245],{"class":455,"line":609},[453,1243,1244],{"class":856},"  return",[453,1246,1247],{"class":459}," data;\n",[453,1249,1250],{"class":455,"line":620},[453,1251,945],{"class":459},[480,1253,1255],{"id":1254},"custom-server-assets","Custom Server Assets",[413,1257,1258,1259,437],{},"In order to add assets from a custom directory, you will need to define a path in your nitro config. This allows you to add assets from a directory outside of the ",[434,1260,1121],{},[413,1262,1263,1264,1267],{},"Each entry in ",[434,1265,1266],{},"serverAssets"," supports the following properties:",[779,1269,1270,1279,1285,1294],{},[782,1271,1272,1275,1276,791],{},[434,1273,1274],{},"baseName"," -- Name used as the storage mount point (accessed via ",[434,1277,1278],{},"assets:\u003CbaseName>",[782,1280,1281,787,1283,791],{},[434,1282,786],{},[434,1284,790],{},[782,1286,1287,1290,1291,791],{},[434,1288,1289],{},"pattern"," -- Glob pattern for file inclusion (default: ",[434,1292,1293],{},"\"**\u002F*\"",[782,1295,1296,1298],{},[434,1297,836],{}," -- Array of glob patterns to exclude files.",[445,1300,1302],{"className":846,"code":1301,"filename":848,"language":849,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  serverAssets: [\n    {\n      baseName: \"templates\",\n      dir: \".\u002Ftemplates\",\n    },\n  ],\n});\n",[434,1303,1304,1316,1320,1330,1335,1339,1349,1358,1362,1366],{"__ignoreMap":5},[453,1305,1306,1308,1310,1312,1314],{"class":455,"line":456},[453,1307,857],{"class":856},[453,1309,860],{"class":459},[453,1311,863],{"class":856},[453,1313,866],{"class":567},[453,1315,869],{"class":459},[453,1317,1318],{"class":455,"line":463},[453,1319,875],{"emptyLinePlaceholder":874},[453,1321,1322,1324,1326,1328],{"class":455,"line":469},[453,1323,880],{"class":856},[453,1325,883],{"class":856},[453,1327,887],{"class":886},[453,1329,890],{"class":459},[453,1331,1332],{"class":455,"line":475},[453,1333,1334],{"class":459},"  serverAssets: [\n",[453,1336,1337],{"class":455,"line":596},[453,1338,900],{"class":459},[453,1340,1341,1344,1347],{"class":455,"line":609},[453,1342,1343],{"class":459},"      baseName: ",[453,1345,1346],{"class":567},"\"templates\"",[453,1348,571],{"class":459},[453,1350,1351,1353,1356],{"class":455,"line":620},[453,1352,915],{"class":459},[453,1354,1355],{"class":567},"\".\u002Ftemplates\"",[453,1357,571],{"class":459},[453,1359,1360],{"class":455,"line":626},[453,1361,935],{"class":459},[453,1363,1364],{"class":455,"line":634},[453,1365,940],{"class":459},[453,1367,1368],{"class":455,"line":646},[453,1369,945],{"class":459},[413,1371,1372,1373,1376],{},"Then you can use the ",[434,1374,1375],{},"assets:templates"," base to retrieve your assets.",[445,1378,1383],{"className":1379,"code":1380,"filename":1381,"language":1382,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineHandler } from \"nitro\";\n\nexport default defineHandler(async (event) => {\n  const html = await useStorage(\"assets:templates\").get(\"success.html\");\n\n  return html;\n});\n","handlers\u002Fsuccess.ts","ts",[434,1384,1385,1397,1401,1427,1456,1460,1467],{"__ignoreMap":5},[453,1386,1387,1389,1391,1393,1395],{"class":455,"line":456},[453,1388,857],{"class":856},[453,1390,1166],{"class":459},[453,1392,863],{"class":856},[453,1394,866],{"class":567},[453,1396,869],{"class":459},[453,1398,1399],{"class":455,"line":463},[453,1400,875],{"emptyLinePlaceholder":874},[453,1402,1403,1405,1407,1409,1411,1413,1416,1420,1423,1425],{"class":455,"line":469},[453,1404,880],{"class":856},[453,1406,883],{"class":856},[453,1408,1185],{"class":886},[453,1410,1188],{"class":459},[453,1412,1191],{"class":856},[453,1414,1415],{"class":459}," (",[453,1417,1419],{"class":1418},"sQHwn","event",[453,1421,1422],{"class":459},") ",[453,1424,1197],{"class":856},[453,1426,1200],{"class":459},[453,1428,1429,1431,1434,1436,1438,1440,1442,1445,1447,1449,1451,1454],{"class":455,"line":475},[453,1430,1205],{"class":856},[453,1432,1433],{"class":552}," html",[453,1435,1211],{"class":856},[453,1437,1214],{"class":856},[453,1439,1217],{"class":886},[453,1441,1188],{"class":459},[453,1443,1444],{"class":567},"\"assets:templates\"",[453,1446,791],{"class":459},[453,1448,1227],{"class":886},[453,1450,1188],{"class":459},[453,1452,1453],{"class":567},"\"success.html\"",[453,1455,1235],{"class":459},[453,1457,1458],{"class":455,"line":596},[453,1459,875],{"emptyLinePlaceholder":874},[453,1461,1462,1464],{"class":455,"line":609},[453,1463,1244],{"class":856},[453,1465,1466],{"class":459}," html;\n",[453,1468,1469],{"class":455,"line":620},[453,1470,945],{"class":459},[1128,1472,1473],{},[413,1474,1475,1476,1479],{},"\nDuring development, server assets are read directly from the filesystem using the ",[434,1477,1478],{},"fs"," unstorage driver. In production, they are bundled into the server as lazy imports with pre-computed metadata (MIME type, ETag, modification time).",[426,1481,1483],{"id":1482},"importing-files","Importing Files",[413,1485,1486,1487,1490,1491,1494,1495,1503,1504,1494,1507,1514],{},"Any file can be imported with a ",[434,1488,1489],{},"type"," import attribute. Its contents are inlined into the server bundle as a ",[434,1492,1493],{},"Uint8Array"," with ",[1145,1496,1500],{"href":1497,"rel":1498},"https:\u002F\u002Fgithub.com\u002Ftc39\u002Fproposal-import-bytes",[1499],"nofollow",[434,1501,1502],{},"type: \"bytes\""," or as a UTF-8 ",[434,1505,1506],{},"string",[1145,1508,1511],{"href":1509,"rel":1510},"https:\u002F\u002Fgithub.com\u002Ftc39\u002Fproposal-import-text",[1499],[434,1512,1513],{},"type: \"text\"",":",[445,1516,1519],{"className":1379,"code":1517,"filename":1518,"language":1382,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nimport logo from \".\u002Flogo.png\" with { type: \"bytes\" }; \u002F\u002F Uint8Array\nimport readme from \".\u002FREADME.md\" with { type: \"text\" }; \u002F\u002F string\n\nexport default defineHandler(() => {\n  return new Response(logo, { headers: { \"content-type\": \"image\u002Fpng\" } });\n});\n","routes\u002Flogo.ts",[434,1520,1521,1533,1537,1565,1589,1593,1608,1631],{"__ignoreMap":5},[453,1522,1523,1525,1527,1529,1531],{"class":455,"line":456},[453,1524,857],{"class":856},[453,1526,1166],{"class":459},[453,1528,863],{"class":856},[453,1530,866],{"class":567},[453,1532,869],{"class":459},[453,1534,1535],{"class":455,"line":463},[453,1536,875],{"emptyLinePlaceholder":874},[453,1538,1539,1541,1544,1546,1549,1552,1555,1558,1561],{"class":455,"line":469},[453,1540,857],{"class":856},[453,1542,1543],{"class":459}," logo ",[453,1545,863],{"class":856},[453,1547,1548],{"class":567}," \".\u002Flogo.png\"",[453,1550,1551],{"class":856}," with",[453,1553,1554],{"class":459}," { type: ",[453,1556,1557],{"class":567},"\"bytes\"",[453,1559,1560],{"class":459}," }; ",[453,1562,1564],{"class":1563},"sCsY4","\u002F\u002F Uint8Array\n",[453,1566,1567,1569,1572,1574,1577,1579,1581,1584,1586],{"class":455,"line":475},[453,1568,857],{"class":856},[453,1570,1571],{"class":459}," readme ",[453,1573,863],{"class":856},[453,1575,1576],{"class":567}," \".\u002FREADME.md\"",[453,1578,1551],{"class":856},[453,1580,1554],{"class":459},[453,1582,1583],{"class":567},"\"text\"",[453,1585,1560],{"class":459},[453,1587,1588],{"class":1563},"\u002F\u002F string\n",[453,1590,1591],{"class":455,"line":596},[453,1592,875],{"emptyLinePlaceholder":874},[453,1594,1595,1597,1599,1601,1604,1606],{"class":455,"line":609},[453,1596,880],{"class":856},[453,1598,883],{"class":856},[453,1600,1185],{"class":886},[453,1602,1603],{"class":459},"(() ",[453,1605,1197],{"class":856},[453,1607,1200],{"class":459},[453,1609,1610,1612,1615,1618,1621,1624,1626,1628],{"class":455,"line":620},[453,1611,1244],{"class":856},[453,1613,1614],{"class":856}," new",[453,1616,1617],{"class":886}," Response",[453,1619,1620],{"class":459},"(logo, { headers: { ",[453,1622,1623],{"class":567},"\"content-type\"",[453,1625,564],{"class":459},[453,1627,568],{"class":567},[453,1629,1630],{"class":459}," } });\n",[453,1632,1633],{"class":455,"line":626},[453,1634,945],{"class":459},[413,1636,1637],{},"The file type is ignored: any file can be imported as either bytes or text.",[413,1639,1640],{},"Dynamic imports are supported as well:",[445,1642,1644],{"className":1379,"code":1643,"language":1382,"meta":5,"style":5},"const { default: logo } = await import(\".\u002Flogo.png\", { with: { type: \"bytes\" } });\n",[434,1645,1646],{"__ignoreMap":5},[453,1647,1648,1651,1654,1657,1659,1662,1665,1668,1670,1673,1675,1678,1681,1683],{"class":455,"line":456},[453,1649,1650],{"class":856},"const",[453,1652,1653],{"class":459}," { ",[453,1655,1656],{"class":1418},"default",[453,1658,564],{"class":459},[453,1660,1661],{"class":552},"logo",[453,1663,1664],{"class":459}," } ",[453,1666,1667],{"class":856},"=",[453,1669,1214],{"class":856},[453,1671,1672],{"class":856}," import",[453,1674,1188],{"class":459},[453,1676,1677],{"class":567},"\".\u002Flogo.png\"",[453,1679,1680],{"class":459},", { with: { type: ",[453,1682,1557],{"class":567},[453,1684,1630],{"class":459},[413,1686,1687,1688,1691,1692,1694,1695,1697],{},"Alternatively, the ",[434,1689,1690],{},"raw:"," prefix imports a file as a ",[434,1693,1506],{}," (for text files, based on the file type) or a ",[434,1696,1493],{}," (for binary files):",[445,1699,1701],{"className":1379,"code":1700,"language":1382,"meta":5,"style":5},"import readme from \"raw:.\u002FREADME.md\"; \u002F\u002F string\nimport logo from \"raw:.\u002Flogo.png\"; \u002F\u002F Uint8Array\n",[434,1702,1703,1719],{"__ignoreMap":5},[453,1704,1705,1707,1709,1711,1714,1717],{"class":455,"line":456},[453,1706,857],{"class":856},[453,1708,1571],{"class":459},[453,1710,863],{"class":856},[453,1712,1713],{"class":567}," \"raw:.\u002FREADME.md\"",[453,1715,1716],{"class":459},"; ",[453,1718,1588],{"class":1563},[453,1720,1721,1723,1725,1727,1730,1732],{"class":455,"line":463},[453,1722,857],{"class":856},[453,1724,1543],{"class":459},[453,1726,863],{"class":856},[453,1728,1729],{"class":567}," \"raw:.\u002Flogo.png\"",[453,1731,1716],{"class":459},[453,1733,1564],{"class":1563},[1104,1735,1736],{},[413,1737,1738,1739,1742],{},"\nImported files are inlined into the server bundle (base64 encoded for binary files). Prefer ",[1145,1740,423],{"href":1741},"#server-assets"," for larger files.",[1104,1744,1745],{},[413,1746,1747,1748,490,1751,1754,1755,1758],{},"\nTypeScript does not support the ",[434,1749,1750],{},"bytes",[434,1752,1753],{},"text"," attributes yet. Until then, imports of unknown file types need a ",[434,1756,1757],{},"\u002F\u002F @ts-ignore"," comment.",[1760,1761,1762],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}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 .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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 pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":463,"depth":463,"links":1764},[1765,1771,1774],{"id":428,"depth":463,"text":429,"children":1766},[1767,1768,1769,1770],{"id":482,"depth":469,"text":483},{"id":524,"depth":469,"text":525},{"id":769,"depth":469,"text":770},{"id":958,"depth":469,"text":959},{"id":1115,"depth":463,"text":1116,"children":1772},[1773],{"id":1254,"depth":469,"text":1255},{"id":1482,"depth":463,"text":1483},{"icon":31},{"icon":31},{"title":28,"description":5},"rcvDOmdfRQUrlnnr7DH1etN7leznPFn8_1mrQtNRVi4",[1780,1782],{"title":23,"path":24,"stem":25,"description":1781,"icon":26,"children":-1},"Nitro supports filesystem routing to automatically map files to routes. By combining code-splitting with compiled routes, it removes the need for a runtime router, leaving only minimal compiled logic.",{"title":33,"path":34,"stem":35,"description":1783,"icon":36,"children":-1},"Customize and extend Nitro defaults.",1784141536706]