[{"data":1,"prerenderedAt":2145},["ShallowReactive",2],{"navigation":3,"-docs-openapi":445,"-docs-openapi-surround":2140},[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":48,"body":447,"description":2134,"extension":2135,"meta":2136,"navigation":2137,"path":49,"seo":2138,"stem":50,"__hash__":2139},"content\u002F1.docs\u002F50.openapi.md",{"type":448,"value":449,"toc":2119,"icon":51},"minimark",[450,479,485,490,493,582,585,634,638,654,789,797,802,816,1037,1047,1051,1058,1260,1264,1278,1552,1563,1567,1570,1611,1621,1624,1630,1728,1733,1739,1798,1803,1813,1816,1853,1858,1861,1944,1953,1997,2002,2006,2011,2048,2096,2109,2115],[451,452,453,454,458,459,466,467,472,473,478],"p",{},"Nitro scans all route handlers, extracts metadata defined with ",[455,456,457],"code",{},"defineRouteMeta",", and generates an ",[460,461,465],"a",{"href":462,"rel":463},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0",[464],"nofollow","OpenAPI 3.1.0"," specification. Built-in UIs powered by ",[460,468,471],{"href":469,"rel":470},"https:\u002F\u002Fscalar.com\u002F",[464],"Scalar"," and ",[460,474,477],{"href":475,"rel":476},"https:\u002F\u002Fswagger.io\u002Ftools\u002Fswagger-ui\u002F",[464],"Swagger UI"," let you explore and test your API directly in the browser.",[480,481,482],"important",{},[451,483,484],{},"OpenAPI support is currently experimental.",[486,487,489],"h2",{"id":488},"enable-openapi","Enable OpenAPI",[451,491,492],{},"Enable OpenAPI in your Nitro configuration:",[494,495,496],"code-group",{},[497,498,503],"pre",{"className":499,"code":500,"filename":501,"language":502,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n});\n","nitro.config.ts","ts",[455,504,505,528,535,551,557,570,576],{"__ignoreMap":5},[506,507,510,514,518,521,525],"span",{"class":508,"line":509},"line",1,[506,511,513],{"class":512},"so5gQ","import",[506,515,517],{"class":516},"slsVL"," { defineConfig } ",[506,519,520],{"class":512},"from",[506,522,524],{"class":523},"sfrk1"," \"nitro\"",[506,526,527],{"class":516},";\n",[506,529,531],{"class":508,"line":530},2,[506,532,534],{"emptyLinePlaceholder":533},true,"\n",[506,536,538,541,544,548],{"class":508,"line":537},3,[506,539,540],{"class":512},"export",[506,542,543],{"class":512}," default",[506,545,547],{"class":546},"shcOC"," defineConfig",[506,549,550],{"class":516},"({\n",[506,552,554],{"class":508,"line":553},4,[506,555,556],{"class":516},"  experimental: {\n",[506,558,560,563,567],{"class":508,"line":559},5,[506,561,562],{"class":516},"    openAPI: ",[506,564,566],{"class":565},"suiK_","true",[506,568,569],{"class":516},",\n",[506,571,573],{"class":508,"line":572},6,[506,574,575],{"class":516},"  },\n",[506,577,579],{"class":508,"line":578},7,[506,580,581],{"class":516},"});\n",[451,583,584],{},"Once enabled, the following endpoints become available during development:",[586,587,588,601],"table",{},[589,590,591],"thead",{},[592,593,594,598],"tr",{},[595,596,597],"th",{},"Endpoint",[595,599,600],{},"Description",[602,603,604,615,625],"tbody",{},[592,605,606,612],{},[607,608,609],"td",{},[455,610,611],{},"\u002F_openapi.json",[607,613,614],{},"OpenAPI 3.1.0 JSON specification",[592,616,617,622],{},[607,618,619],{},[455,620,621],{},"\u002F_scalar",[607,623,624],{},"Scalar API reference UI",[592,626,627,632],{},[607,628,629],{},[455,630,631],{},"\u002F_swagger",[607,633,477],{},[486,635,637],{"id":636},"route-metadata","Route Metadata",[451,639,640,641,643,644,647,648,653],{},"Use the ",[455,642,457],{}," macro in route handler files to provide OpenAPI metadata for each route. The ",[455,645,646],{},"openAPI"," property accepts a standard OpenAPI ",[460,649,652],{"href":650,"rel":651},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0#operation-object",[464],"Operation Object",".",[497,655,658],{"className":499,"code":656,"filename":657,"language":502,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"greeting\"],\n    description: \"Returns a greeting message\",\n    responses: {\n      200: { description: \"Successful greeting\" },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { message: \"Hello, world!\" };\n});\n","routes\u002Fapi\u002Fhello.ts",[455,659,660,673,677,683,688,699,709,714,729,735,740,745,750,769,784],{"__ignoreMap":5},[506,661,662,664,667,669,671],{"class":508,"line":509},[506,663,513],{"class":512},[506,665,666],{"class":516}," { defineRouteMeta, defineHandler } ",[506,668,520],{"class":512},[506,670,524],{"class":523},[506,672,527],{"class":516},[506,674,675],{"class":508,"line":530},[506,676,534],{"emptyLinePlaceholder":533},[506,678,679,681],{"class":508,"line":537},[506,680,457],{"class":546},[506,682,550],{"class":516},[506,684,685],{"class":508,"line":553},[506,686,687],{"class":516},"  openAPI: {\n",[506,689,690,693,696],{"class":508,"line":559},[506,691,692],{"class":516},"    tags: [",[506,694,695],{"class":523},"\"greeting\"",[506,697,698],{"class":516},"],\n",[506,700,701,704,707],{"class":508,"line":572},[506,702,703],{"class":516},"    description: ",[506,705,706],{"class":523},"\"Returns a greeting message\"",[506,708,569],{"class":516},[506,710,711],{"class":508,"line":578},[506,712,713],{"class":516},"    responses: {\n",[506,715,717,720,723,726],{"class":508,"line":716},8,[506,718,719],{"class":565},"      200",[506,721,722],{"class":516},": { description: ",[506,724,725],{"class":523},"\"Successful greeting\"",[506,727,728],{"class":516}," },\n",[506,730,732],{"class":508,"line":731},9,[506,733,734],{"class":516},"    },\n",[506,736,738],{"class":508,"line":737},10,[506,739,575],{"class":516},[506,741,743],{"class":508,"line":742},11,[506,744,581],{"class":516},[506,746,748],{"class":508,"line":747},12,[506,749,534],{"emptyLinePlaceholder":533},[506,751,753,755,757,760,763,766],{"class":508,"line":752},13,[506,754,540],{"class":512},[506,756,543],{"class":512},[506,758,759],{"class":546}," defineHandler",[506,761,762],{"class":516},"(() ",[506,764,765],{"class":512},"=>",[506,767,768],{"class":516}," {\n",[506,770,772,775,778,781],{"class":508,"line":771},14,[506,773,774],{"class":512},"  return",[506,776,777],{"class":516}," { message: ",[506,779,780],{"class":523},"\"Hello, world!\"",[506,782,783],{"class":516}," };\n",[506,785,787],{"class":508,"line":786},15,[506,788,581],{"class":516},[790,791,792],"note",{},[451,793,794,796],{},[455,795,457],{}," is a build-time macro. The metadata is statically extracted during the build and does not add any runtime overhead to your handlers.",[798,799,801],"h3",{"id":800},"parameters","Parameters",[451,803,804,805,808,809,812,813,815],{},"Route parameters (",[455,806,807],{},":id",", ",[455,810,811],{},"[id]",") are automatically converted to OpenAPI path parameters. You can define additional query or header parameters in the ",[455,814,800],{}," array:",[497,817,820],{"className":499,"code":818,"filename":819,"language":502,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"Get a user by their ID\",\n    parameters: [\n      {\n        in: \"query\",\n        name: \"include\",\n        description: \"Comma-separated list of related resources to include\",\n        schema: { type: \"string\" },\n      },\n    ],\n    responses: {\n      200: { description: \"User found\" },\n      404: { description: \"User not found\" },\n    },\n  },\n});\n\nexport default defineHandler((event) => {\n  const { id } = event.context.params;\n  return { id, name: \"Alice\" };\n});\n","routes\u002Fapi\u002Fusers\u002F[id].get.ts",[455,821,822,834,838,844,848,857,866,871,876,886,896,906,916,921,926,930,942,955,960,965,970,975,998,1019,1032],{"__ignoreMap":5},[506,823,824,826,828,830,832],{"class":508,"line":509},[506,825,513],{"class":512},[506,827,666],{"class":516},[506,829,520],{"class":512},[506,831,524],{"class":523},[506,833,527],{"class":516},[506,835,836],{"class":508,"line":530},[506,837,534],{"emptyLinePlaceholder":533},[506,839,840,842],{"class":508,"line":537},[506,841,457],{"class":546},[506,843,550],{"class":516},[506,845,846],{"class":508,"line":553},[506,847,687],{"class":516},[506,849,850,852,855],{"class":508,"line":559},[506,851,692],{"class":516},[506,853,854],{"class":523},"\"users\"",[506,856,698],{"class":516},[506,858,859,861,864],{"class":508,"line":572},[506,860,703],{"class":516},[506,862,863],{"class":523},"\"Get a user by their ID\"",[506,865,569],{"class":516},[506,867,868],{"class":508,"line":578},[506,869,870],{"class":516},"    parameters: [\n",[506,872,873],{"class":508,"line":716},[506,874,875],{"class":516},"      {\n",[506,877,878,881,884],{"class":508,"line":731},[506,879,880],{"class":516},"        in: ",[506,882,883],{"class":523},"\"query\"",[506,885,569],{"class":516},[506,887,888,891,894],{"class":508,"line":737},[506,889,890],{"class":516},"        name: ",[506,892,893],{"class":523},"\"include\"",[506,895,569],{"class":516},[506,897,898,901,904],{"class":508,"line":742},[506,899,900],{"class":516},"        description: ",[506,902,903],{"class":523},"\"Comma-separated list of related resources to include\"",[506,905,569],{"class":516},[506,907,908,911,914],{"class":508,"line":747},[506,909,910],{"class":516},"        schema: { type: ",[506,912,913],{"class":523},"\"string\"",[506,915,728],{"class":516},[506,917,918],{"class":508,"line":752},[506,919,920],{"class":516},"      },\n",[506,922,923],{"class":508,"line":771},[506,924,925],{"class":516},"    ],\n",[506,927,928],{"class":508,"line":786},[506,929,713],{"class":516},[506,931,933,935,937,940],{"class":508,"line":932},16,[506,934,719],{"class":565},[506,936,722],{"class":516},[506,938,939],{"class":523},"\"User found\"",[506,941,728],{"class":516},[506,943,945,948,950,953],{"class":508,"line":944},17,[506,946,947],{"class":565},"      404",[506,949,722],{"class":516},[506,951,952],{"class":523},"\"User not found\"",[506,954,728],{"class":516},[506,956,958],{"class":508,"line":957},18,[506,959,734],{"class":516},[506,961,963],{"class":508,"line":962},19,[506,964,575],{"class":516},[506,966,968],{"class":508,"line":967},20,[506,969,581],{"class":516},[506,971,973],{"class":508,"line":972},21,[506,974,534],{"emptyLinePlaceholder":533},[506,976,978,980,982,984,987,991,994,996],{"class":508,"line":977},22,[506,979,540],{"class":512},[506,981,543],{"class":512},[506,983,759],{"class":546},[506,985,986],{"class":516},"((",[506,988,990],{"class":989},"sQHwn","event",[506,992,993],{"class":516},") ",[506,995,765],{"class":512},[506,997,768],{"class":516},[506,999,1001,1004,1007,1010,1013,1016],{"class":508,"line":1000},23,[506,1002,1003],{"class":512},"  const",[506,1005,1006],{"class":516}," { ",[506,1008,1009],{"class":565},"id",[506,1011,1012],{"class":516}," } ",[506,1014,1015],{"class":512},"=",[506,1017,1018],{"class":516}," event.context.params;\n",[506,1020,1022,1024,1027,1030],{"class":508,"line":1021},24,[506,1023,774],{"class":512},[506,1025,1026],{"class":516}," { id, name: ",[506,1028,1029],{"class":523},"\"Alice\"",[506,1031,783],{"class":516},[506,1033,1035],{"class":508,"line":1034},25,[506,1036,581],{"class":516},[451,1038,1039,1040,1042,1043,1046],{},"In this example, the ",[455,1041,1009],{}," path parameter is automatically inferred from the route pattern. Only the additional ",[455,1044,1045],{},"include"," query parameter needs to be declared.",[798,1048,1050],{"id":1049},"response-schemas","Response Schemas",[451,1052,1053,1054,1057],{},"Define response content types and schemas using the standard OpenAPI ",[455,1055,1056],{},"responses"," object:",[497,1059,1062],{"className":499,"code":1060,"filename":1061,"language":502,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    description: \"Returns the current server status\",\n    responses: {\n      200: {\n        description: \"Server status\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                status: { type: \"string\", enum: [\"healthy\", \"degraded\"] },\n                uptime: { type: \"number\" },\n              },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { status: \"healthy\", uptime: process.uptime() };\n});\n","routes\u002Fapi\u002Fstatus.ts",[455,1063,1064,1076,1080,1086,1090,1099,1103,1110,1119,1124,1131,1136,1146,1151,1172,1182,1187,1192,1197,1202,1206,1210,1214,1218,1222,1236,1255],{"__ignoreMap":5},[506,1065,1066,1068,1070,1072,1074],{"class":508,"line":509},[506,1067,513],{"class":512},[506,1069,666],{"class":516},[506,1071,520],{"class":512},[506,1073,524],{"class":523},[506,1075,527],{"class":516},[506,1077,1078],{"class":508,"line":530},[506,1079,534],{"emptyLinePlaceholder":533},[506,1081,1082,1084],{"class":508,"line":537},[506,1083,457],{"class":546},[506,1085,550],{"class":516},[506,1087,1088],{"class":508,"line":553},[506,1089,687],{"class":516},[506,1091,1092,1094,1097],{"class":508,"line":559},[506,1093,703],{"class":516},[506,1095,1096],{"class":523},"\"Returns the current server status\"",[506,1098,569],{"class":516},[506,1100,1101],{"class":508,"line":572},[506,1102,713],{"class":516},[506,1104,1105,1107],{"class":508,"line":578},[506,1106,719],{"class":565},[506,1108,1109],{"class":516},": {\n",[506,1111,1112,1114,1117],{"class":508,"line":716},[506,1113,900],{"class":516},[506,1115,1116],{"class":523},"\"Server status\"",[506,1118,569],{"class":516},[506,1120,1121],{"class":508,"line":731},[506,1122,1123],{"class":516},"        content: {\n",[506,1125,1126,1129],{"class":508,"line":737},[506,1127,1128],{"class":523},"          \"application\u002Fjson\"",[506,1130,1109],{"class":516},[506,1132,1133],{"class":508,"line":742},[506,1134,1135],{"class":516},"            schema: {\n",[506,1137,1138,1141,1144],{"class":508,"line":747},[506,1139,1140],{"class":516},"              type: ",[506,1142,1143],{"class":523},"\"object\"",[506,1145,569],{"class":516},[506,1147,1148],{"class":508,"line":752},[506,1149,1150],{"class":516},"              properties: {\n",[506,1152,1153,1156,1158,1161,1164,1166,1169],{"class":508,"line":771},[506,1154,1155],{"class":516},"                status: { type: ",[506,1157,913],{"class":523},[506,1159,1160],{"class":516},", enum: [",[506,1162,1163],{"class":523},"\"healthy\"",[506,1165,808],{"class":516},[506,1167,1168],{"class":523},"\"degraded\"",[506,1170,1171],{"class":516},"] },\n",[506,1173,1174,1177,1180],{"class":508,"line":786},[506,1175,1176],{"class":516},"                uptime: { type: ",[506,1178,1179],{"class":523},"\"number\"",[506,1181,728],{"class":516},[506,1183,1184],{"class":508,"line":932},[506,1185,1186],{"class":516},"              },\n",[506,1188,1189],{"class":508,"line":944},[506,1190,1191],{"class":516},"            },\n",[506,1193,1194],{"class":508,"line":957},[506,1195,1196],{"class":516},"          },\n",[506,1198,1199],{"class":508,"line":962},[506,1200,1201],{"class":516},"        },\n",[506,1203,1204],{"class":508,"line":967},[506,1205,920],{"class":516},[506,1207,1208],{"class":508,"line":972},[506,1209,734],{"class":516},[506,1211,1212],{"class":508,"line":977},[506,1213,575],{"class":516},[506,1215,1216],{"class":508,"line":1000},[506,1217,581],{"class":516},[506,1219,1220],{"class":508,"line":1021},[506,1221,534],{"emptyLinePlaceholder":533},[506,1223,1224,1226,1228,1230,1232,1234],{"class":508,"line":1034},[506,1225,540],{"class":512},[506,1227,543],{"class":512},[506,1229,759],{"class":546},[506,1231,762],{"class":516},[506,1233,765],{"class":512},[506,1235,768],{"class":516},[506,1237,1239,1241,1244,1246,1249,1252],{"class":508,"line":1238},26,[506,1240,774],{"class":512},[506,1242,1243],{"class":516}," { status: ",[506,1245,1163],{"class":523},[506,1247,1248],{"class":516},", uptime: process.",[506,1250,1251],{"class":546},"uptime",[506,1253,1254],{"class":516},"() };\n",[506,1256,1258],{"class":508,"line":1257},27,[506,1259,581],{"class":516},[798,1261,1263],{"id":1262},"global-components","Global Components",[451,1265,640,1266,1269,1270,1273,1274,1277],{},[455,1267,1268],{},"$global"," property to define reusable schemas that are hoisted to the top-level ",[455,1271,1272],{},"components"," section of the OpenAPI specification. This lets you reference shared schemas with ",[455,1275,1276],{},"$ref"," across multiple routes.",[497,1279,1282],{"className":499,"code":1280,"filename":1281,"language":502,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"List all users\",\n    responses: {\n      200: {\n        description: \"List of users\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"array\",\n              items: { $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" },\n            },\n          },\n        },\n      },\n    },\n    $global: {\n      components: {\n        schemas: {\n          User: {\n            type: \"object\",\n            properties: {\n              id: { type: \"string\" },\n              name: { type: \"string\" },\n              email: { type: \"string\", format: \"email\" },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return [{ id: \"1\", name: \"Alice\", email: \"alice@example.com\" }];\n});\n","routes\u002Fapi\u002Fusers.get.ts",[455,1283,1284,1296,1300,1306,1310,1318,1327,1331,1337,1346,1350,1356,1360,1369,1379,1383,1387,1391,1395,1399,1404,1409,1414,1419,1428,1433,1442,1451,1467,1472,1477,1482,1487,1492,1497,1502,1507,1522,1547],{"__ignoreMap":5},[506,1285,1286,1288,1290,1292,1294],{"class":508,"line":509},[506,1287,513],{"class":512},[506,1289,666],{"class":516},[506,1291,520],{"class":512},[506,1293,524],{"class":523},[506,1295,527],{"class":516},[506,1297,1298],{"class":508,"line":530},[506,1299,534],{"emptyLinePlaceholder":533},[506,1301,1302,1304],{"class":508,"line":537},[506,1303,457],{"class":546},[506,1305,550],{"class":516},[506,1307,1308],{"class":508,"line":553},[506,1309,687],{"class":516},[506,1311,1312,1314,1316],{"class":508,"line":559},[506,1313,692],{"class":516},[506,1315,854],{"class":523},[506,1317,698],{"class":516},[506,1319,1320,1322,1325],{"class":508,"line":572},[506,1321,703],{"class":516},[506,1323,1324],{"class":523},"\"List all users\"",[506,1326,569],{"class":516},[506,1328,1329],{"class":508,"line":578},[506,1330,713],{"class":516},[506,1332,1333,1335],{"class":508,"line":716},[506,1334,719],{"class":565},[506,1336,1109],{"class":516},[506,1338,1339,1341,1344],{"class":508,"line":731},[506,1340,900],{"class":516},[506,1342,1343],{"class":523},"\"List of users\"",[506,1345,569],{"class":516},[506,1347,1348],{"class":508,"line":737},[506,1349,1123],{"class":516},[506,1351,1352,1354],{"class":508,"line":742},[506,1353,1128],{"class":523},[506,1355,1109],{"class":516},[506,1357,1358],{"class":508,"line":747},[506,1359,1135],{"class":516},[506,1361,1362,1364,1367],{"class":508,"line":752},[506,1363,1140],{"class":516},[506,1365,1366],{"class":523},"\"array\"",[506,1368,569],{"class":516},[506,1370,1371,1374,1377],{"class":508,"line":771},[506,1372,1373],{"class":516},"              items: { $ref: ",[506,1375,1376],{"class":523},"\"#\u002Fcomponents\u002Fschemas\u002FUser\"",[506,1378,728],{"class":516},[506,1380,1381],{"class":508,"line":786},[506,1382,1191],{"class":516},[506,1384,1385],{"class":508,"line":932},[506,1386,1196],{"class":516},[506,1388,1389],{"class":508,"line":944},[506,1390,1201],{"class":516},[506,1392,1393],{"class":508,"line":957},[506,1394,920],{"class":516},[506,1396,1397],{"class":508,"line":962},[506,1398,734],{"class":516},[506,1400,1401],{"class":508,"line":967},[506,1402,1403],{"class":516},"    $global: {\n",[506,1405,1406],{"class":508,"line":972},[506,1407,1408],{"class":516},"      components: {\n",[506,1410,1411],{"class":508,"line":977},[506,1412,1413],{"class":516},"        schemas: {\n",[506,1415,1416],{"class":508,"line":1000},[506,1417,1418],{"class":516},"          User: {\n",[506,1420,1421,1424,1426],{"class":508,"line":1021},[506,1422,1423],{"class":516},"            type: ",[506,1425,1143],{"class":523},[506,1427,569],{"class":516},[506,1429,1430],{"class":508,"line":1034},[506,1431,1432],{"class":516},"            properties: {\n",[506,1434,1435,1438,1440],{"class":508,"line":1238},[506,1436,1437],{"class":516},"              id: { type: ",[506,1439,913],{"class":523},[506,1441,728],{"class":516},[506,1443,1444,1447,1449],{"class":508,"line":1257},[506,1445,1446],{"class":516},"              name: { type: ",[506,1448,913],{"class":523},[506,1450,728],{"class":516},[506,1452,1454,1457,1459,1462,1465],{"class":508,"line":1453},28,[506,1455,1456],{"class":516},"              email: { type: ",[506,1458,913],{"class":523},[506,1460,1461],{"class":516},", format: ",[506,1463,1464],{"class":523},"\"email\"",[506,1466,728],{"class":516},[506,1468,1470],{"class":508,"line":1469},29,[506,1471,1191],{"class":516},[506,1473,1475],{"class":508,"line":1474},30,[506,1476,1196],{"class":516},[506,1478,1480],{"class":508,"line":1479},31,[506,1481,1201],{"class":516},[506,1483,1485],{"class":508,"line":1484},32,[506,1486,920],{"class":516},[506,1488,1490],{"class":508,"line":1489},33,[506,1491,734],{"class":516},[506,1493,1495],{"class":508,"line":1494},34,[506,1496,575],{"class":516},[506,1498,1500],{"class":508,"line":1499},35,[506,1501,581],{"class":516},[506,1503,1505],{"class":508,"line":1504},36,[506,1506,534],{"emptyLinePlaceholder":533},[506,1508,1510,1512,1514,1516,1518,1520],{"class":508,"line":1509},37,[506,1511,540],{"class":512},[506,1513,543],{"class":512},[506,1515,759],{"class":546},[506,1517,762],{"class":516},[506,1519,765],{"class":512},[506,1521,768],{"class":516},[506,1523,1525,1527,1530,1533,1536,1538,1541,1544],{"class":508,"line":1524},38,[506,1526,774],{"class":512},[506,1528,1529],{"class":516}," [{ id: ",[506,1531,1532],{"class":523},"\"1\"",[506,1534,1535],{"class":516},", name: ",[506,1537,1029],{"class":523},[506,1539,1540],{"class":516},", email: ",[506,1542,1543],{"class":523},"\"alice@example.com\"",[506,1545,1546],{"class":516}," }];\n",[506,1548,1550],{"class":508,"line":1549},39,[506,1551,581],{"class":516},[451,1553,1554,1555,1558,1559,1562],{},"Once defined, the ",[455,1556,1557],{},"User"," schema can be referenced from any other route with ",[455,1560,1561],{},"{ $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" }"," without re-declaring it.",[798,1564,1566],{"id":1565},"automatic-tagging","Automatic Tagging",[451,1568,1569],{},"Routes are automatically tagged based on their path prefix:",[586,1571,1572,1582],{},[589,1573,1574],{},[592,1575,1576,1579],{},[595,1577,1578],{},"Route prefix",[595,1580,1581],{},"Tag",[602,1583,1584,1593,1603],{},[592,1585,1586,1591],{},[607,1587,1588],{},[455,1589,1590],{},"\u002Fapi\u002F",[607,1592,274],{},[592,1594,1595,1600],{},[607,1596,1597],{},[455,1598,1599],{},"\u002F_",[607,1601,1602],{},"Internal",[592,1604,1605,1608],{},[607,1606,1607],{},"Other",[607,1609,1610],{},"App Routes",[451,1612,1613,1614,1617,1618,1620],{},"You can override this by specifying ",[455,1615,1616],{},"tags"," in the ",[455,1619,646],{}," metadata.",[486,1622,33],{"id":1623},"configuration",[451,1625,1626,1627,1629],{},"Configure OpenAPI behavior with the top-level ",[455,1628,646],{}," option:",[497,1631,1633],{"className":499,"code":1632,"filename":501,"language":502,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n  openAPI: {\n    meta: {\n      title: \"My API\",\n      description: \"My awesome API\",\n      version: \"2.0.0\",\n    },\n  },\n});\n",[455,1634,1635,1647,1651,1661,1665,1673,1677,1681,1686,1696,1706,1716,1720,1724],{"__ignoreMap":5},[506,1636,1637,1639,1641,1643,1645],{"class":508,"line":509},[506,1638,513],{"class":512},[506,1640,517],{"class":516},[506,1642,520],{"class":512},[506,1644,524],{"class":523},[506,1646,527],{"class":516},[506,1648,1649],{"class":508,"line":530},[506,1650,534],{"emptyLinePlaceholder":533},[506,1652,1653,1655,1657,1659],{"class":508,"line":537},[506,1654,540],{"class":512},[506,1656,543],{"class":512},[506,1658,547],{"class":546},[506,1660,550],{"class":516},[506,1662,1663],{"class":508,"line":553},[506,1664,556],{"class":516},[506,1666,1667,1669,1671],{"class":508,"line":559},[506,1668,562],{"class":516},[506,1670,566],{"class":565},[506,1672,569],{"class":516},[506,1674,1675],{"class":508,"line":572},[506,1676,575],{"class":516},[506,1678,1679],{"class":508,"line":578},[506,1680,687],{"class":516},[506,1682,1683],{"class":508,"line":716},[506,1684,1685],{"class":516},"    meta: {\n",[506,1687,1688,1691,1694],{"class":508,"line":731},[506,1689,1690],{"class":516},"      title: ",[506,1692,1693],{"class":523},"\"My API\"",[506,1695,569],{"class":516},[506,1697,1698,1701,1704],{"class":508,"line":737},[506,1699,1700],{"class":516},"      description: ",[506,1702,1703],{"class":523},"\"My awesome API\"",[506,1705,569],{"class":516},[506,1707,1708,1711,1714],{"class":508,"line":742},[506,1709,1710],{"class":516},"      version: ",[506,1712,1713],{"class":523},"\"2.0.0\"",[506,1715,569],{"class":516},[506,1717,1718],{"class":508,"line":747},[506,1719,734],{"class":516},[506,1721,1722],{"class":508,"line":752},[506,1723,575],{"class":516},[506,1725,1726],{"class":508,"line":771},[506,1727,581],{"class":516},[798,1729,1731],{"id":1730},"meta",[455,1732,1730],{},[451,1734,1735,1736,1057],{},"Set the API metadata that appears in the specification's ",[455,1737,1738],{},"info",[586,1740,1741,1753],{},[589,1742,1743],{},[592,1744,1745,1748,1751],{},[595,1746,1747],{},"Property",[595,1749,1750],{},"Default",[595,1752,600],{},[602,1754,1755,1770,1783],{},[592,1756,1757,1762,1767],{},[607,1758,1759],{},[455,1760,1761],{},"title",[607,1763,1764],{},[455,1765,1766],{},"\"Nitro Server Routes\"",[607,1768,1769],{},"API title",[592,1771,1772,1777,1780],{},[607,1773,1774],{},[455,1775,1776],{},"description",[607,1778,1779],{},"—",[607,1781,1782],{},"API description",[592,1784,1785,1790,1795],{},[607,1786,1787],{},[455,1788,1789],{},"version",[607,1791,1792],{},[455,1793,1794],{},"\"1.0.0\"",[607,1796,1797],{},"API version",[798,1799,1801],{"id":1800},"route",[455,1802,1800],{},[1804,1805,1806],"ul",{},[1807,1808,1809,1810],"li",{},"Default: ",[455,1811,1812],{},"\"\u002F_openapi.json\"",[451,1814,1815],{},"Override the path where the OpenAPI JSON specification is served:",[497,1817,1819],{"className":499,"code":1818,"filename":501,"language":502,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    route: \"\u002F_docs\u002Fopenapi.json\",\n  },\n});\n",[455,1820,1821,1831,1835,1845,1849],{"__ignoreMap":5},[506,1822,1823,1825,1827,1829],{"class":508,"line":509},[506,1824,540],{"class":512},[506,1826,543],{"class":512},[506,1828,547],{"class":546},[506,1830,550],{"class":516},[506,1832,1833],{"class":508,"line":530},[506,1834,687],{"class":516},[506,1836,1837,1840,1843],{"class":508,"line":537},[506,1838,1839],{"class":516},"    route: ",[506,1841,1842],{"class":523},"\"\u002F_docs\u002Fopenapi.json\"",[506,1844,569],{"class":516},[506,1846,1847],{"class":508,"line":553},[506,1848,575],{"class":516},[506,1850,1851],{"class":508,"line":559},[506,1852,581],{"class":516},[798,1854,1856],{"id":1855},"ui",[455,1857,1855],{},[451,1859,1860],{},"Configure or disable the built-in API documentation UIs:",[497,1862,1864],{"className":499,"code":1863,"filename":501,"language":502,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      scalar: {\n        route: \"\u002F_docs\u002Fscalar\",\n        theme: \"purple\",\n      },\n      swagger: {\n        route: \"\u002F_docs\u002Fswagger\",\n      },\n    },\n  },\n});\n",[455,1865,1866,1876,1880,1885,1890,1900,1910,1914,1919,1928,1932,1936,1940],{"__ignoreMap":5},[506,1867,1868,1870,1872,1874],{"class":508,"line":509},[506,1869,540],{"class":512},[506,1871,543],{"class":512},[506,1873,547],{"class":546},[506,1875,550],{"class":516},[506,1877,1878],{"class":508,"line":530},[506,1879,687],{"class":516},[506,1881,1882],{"class":508,"line":537},[506,1883,1884],{"class":516},"    ui: {\n",[506,1886,1887],{"class":508,"line":553},[506,1888,1889],{"class":516},"      scalar: {\n",[506,1891,1892,1895,1898],{"class":508,"line":559},[506,1893,1894],{"class":516},"        route: ",[506,1896,1897],{"class":523},"\"\u002F_docs\u002Fscalar\"",[506,1899,569],{"class":516},[506,1901,1902,1905,1908],{"class":508,"line":572},[506,1903,1904],{"class":516},"        theme: ",[506,1906,1907],{"class":523},"\"purple\"",[506,1909,569],{"class":516},[506,1911,1912],{"class":508,"line":578},[506,1913,920],{"class":516},[506,1915,1916],{"class":508,"line":716},[506,1917,1918],{"class":516},"      swagger: {\n",[506,1920,1921,1923,1926],{"class":508,"line":731},[506,1922,1894],{"class":516},[506,1924,1925],{"class":523},"\"\u002F_docs\u002Fswagger\"",[506,1927,569],{"class":516},[506,1929,1930],{"class":508,"line":737},[506,1931,920],{"class":516},[506,1933,1934],{"class":508,"line":742},[506,1935,734],{"class":516},[506,1937,1938],{"class":508,"line":747},[506,1939,575],{"class":516},[506,1941,1942],{"class":508,"line":752},[506,1943,581],{"class":516},[451,1945,1946,1947,1952],{},"Set either UI to ",[455,1948,1949],{"className":499,"language":502,"style":5},[506,1950,1951],{"class":565},"false"," to disable it:",[497,1954,1956],{"className":499,"code":1955,"filename":501,"language":502,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      swagger: false,\n    },\n  },\n});\n",[455,1957,1958,1968,1972,1976,1985,1989,1993],{"__ignoreMap":5},[506,1959,1960,1962,1964,1966],{"class":508,"line":509},[506,1961,540],{"class":512},[506,1963,543],{"class":512},[506,1965,547],{"class":546},[506,1967,550],{"class":516},[506,1969,1970],{"class":508,"line":530},[506,1971,687],{"class":516},[506,1973,1974],{"class":508,"line":537},[506,1975,1884],{"class":516},[506,1977,1978,1981,1983],{"class":508,"line":553},[506,1979,1980],{"class":516},"      swagger: ",[506,1982,1951],{"class":565},[506,1984,569],{"class":516},[506,1986,1987],{"class":508,"line":559},[506,1988,734],{"class":516},[506,1990,1991],{"class":508,"line":572},[506,1992,575],{"class":516},[506,1994,1995],{"class":508,"line":578},[506,1996,581],{"class":516},[1998,1999],"read-more",{"title":2000,"to":2001},"Scalar Configuration","https:\u002F\u002Fgithub.com\u002Fscalar\u002Fscalar",[486,2003,2005],{"id":2004},"production","Production",[451,2007,2008,2009,1629],{},"By default, OpenAPI endpoints are only available during development. To enable them in production, set the ",[455,2010,2004],{},[497,2012,2014],{"className":499,"code":2013,"filename":501,"language":502,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    production: \"runtime\",\n  },\n});\n",[455,2015,2016,2026,2030,2040,2044],{"__ignoreMap":5},[506,2017,2018,2020,2022,2024],{"class":508,"line":509},[506,2019,540],{"class":512},[506,2021,543],{"class":512},[506,2023,547],{"class":546},[506,2025,550],{"class":516},[506,2027,2028],{"class":508,"line":530},[506,2029,687],{"class":516},[506,2031,2032,2035,2038],{"class":508,"line":537},[506,2033,2034],{"class":516},"    production: ",[506,2036,2037],{"class":523},"\"runtime\"",[506,2039,569],{"class":516},[506,2041,2042],{"class":508,"line":553},[506,2043,575],{"class":516},[506,2045,2046],{"class":508,"line":559},[506,2047,581],{"class":516},[586,2049,2050,2060],{},[589,2051,2052],{},[592,2053,2054,2057],{},[595,2055,2056],{},"Value",[595,2058,2059],{},"Behavior",[602,2061,2062,2073,2084],{},[592,2063,2064,2070],{},[607,2065,2066],{},[455,2067,2068],{"className":499,"language":502,"style":5},[506,2069,1951],{"class":565},[607,2071,2072],{},"Disabled in production (default)",[592,2074,2075,2081],{},[607,2076,2077],{},[455,2078,2079],{"className":499,"language":502,"style":5},[506,2080,2037],{"class":523},[607,2082,2083],{},"Specification is generated at runtime on each request",[592,2085,2086,2093],{},[607,2087,2088],{},[455,2089,2090],{"className":499,"language":502,"style":5},[506,2091,2092],{"class":523},"\"prerender\"",[607,2094,2095],{},"Specification is generated at build time and served as a static file",[451,2097,2098,2099,2103,2104,2108],{},"Use ",[455,2100,2101],{"className":499,"language":502,"style":5},[506,2102,2092],{"class":523}," when the specification does not change between deployments for the best performance. Use ",[455,2105,2106],{"className":499,"language":502,"style":5},[506,2107,2037],{"class":523}," if you need dynamic server information or middleware access.",[2110,2111,2112],"warning",{},[451,2113,2114],{},"If you enable OpenAPI in production, make sure to protect the endpoints with appropriate authentication or access control.",[2116,2117,2118],"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 pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":5,"searchDepth":530,"depth":530,"links":2120},[2121,2122,2128,2133],{"id":488,"depth":530,"text":489},{"id":636,"depth":530,"text":637,"children":2123},[2124,2125,2126,2127],{"id":800,"depth":537,"text":801},{"id":1049,"depth":537,"text":1050},{"id":1262,"depth":537,"text":1263},{"id":1565,"depth":537,"text":1566},{"id":1623,"depth":530,"text":33,"children":2129},[2130,2131,2132],{"id":1730,"depth":537,"text":1730},{"id":1800,"depth":537,"text":1800},{"id":1855,"depth":537,"text":1855},{"id":2004,"depth":530,"text":2005},"Nitro can automatically generate an OpenAPI specification from your route handlers and serve interactive API documentation.","md",{"icon":51},{"icon":51},{"title":48,"description":2134},"PTlqg0V56hAYfB9CWiRF02lO4qRTjTStIL2aW3mZHw0",[2141,2143],{"title":43,"path":44,"stem":45,"description":2142,"icon":46,"children":-1},"Understand how Nitro runs and serves incoming requests to your application.",{"title":53,"path":54,"stem":55,"description":2144,"icon":56,"children":-1},"Use runtime plugins to extend Nitro's runtime behavior.",1784019071917]