[{"data":1,"prerenderedAt":2094},["ShallowReactive",2],{"navigation":3,"-docs-openapi":394,"-docs-openapi-surround":2089},[4,88,217,223,379,391],{"title":5,"path":6,"stem":7,"children":8,"icon":87},"","/docs","1.docs/1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","/docs/quick-start","1.docs/2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","/docs/renderer","1.docs/4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/docs/routing","1.docs/5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","/docs/assets","1.docs/50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","/docs/configuration","1.docs/50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","/docs/database","1.docs/50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","/docs/lifecycle","1.docs/50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","/docs/openapi","1.docs/50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","/docs/plugins","1.docs/50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","/docs/tasks","1.docs/50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"Server Entry","/docs/server-entry","1.docs/6.server-entry","ri:server-line",{"title":68,"path":69,"stem":70,"icon":71},"Cache","/docs/cache","1.docs/7.cache","ri:speed-line",{"title":73,"path":74,"stem":75,"icon":76},"KV Storage","/docs/storage","1.docs/8.storage","carbon:datastore",{"title":78,"path":79,"stem":80,"icon":81},"Migration Guide","/docs/migration","1.docs/99.migration","ri:arrow-right-up-line",{"title":83,"path":84,"stem":85,"icon":86},"Nightly Channel","/docs/nightly","1.docs/99.nightly","ri:moon-fill","i-lucide-book-open",{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Deploy","/deploy","2.deploy/0.index",[93,95,116],{"title":89,"path":90,"stem":91,"icon":94},"ri:upload-cloud-2-line",{"title":96,"path":97,"stem":98,"children":99,"page":115},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[100,105,110],{"title":101,"path":102,"stem":103,"icon":104},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":106,"path":107,"stem":108,"icon":109},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":111,"path":112,"stem":113,"icon":114},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":117,"path":118,"stem":119,"children":120,"page":115},"Providers","/deploy/providers","2.deploy/20.providers",[121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213],{"title":122,"path":123,"stem":124},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":126,"path":127,"stem":128},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":130,"path":131,"stem":132},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":134,"path":135,"stem":136},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":138,"path":139,"stem":140},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":142,"path":143,"stem":144},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":146,"path":147,"stem":148},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":150,"path":151,"stem":152},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":154,"path":155,"stem":156},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":158,"path":159,"stem":160},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":162,"path":163,"stem":164},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":166,"path":167,"stem":168},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":170,"path":171,"stem":172},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":174,"path":175,"stem":176},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":178,"path":179,"stem":180},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":182,"path":183,"stem":184},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":186,"path":187,"stem":188},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":190,"path":191,"stem":192},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":194,"path":195,"stem":196},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":198,"path":199,"stem":200},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":202,"path":203,"stem":204},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":206,"path":207,"stem":208},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":210,"path":211,"stem":212},"Zephyr Cloud","/deploy/providers/zephyr","2.deploy/20.providers/zephyr",{"title":214,"path":215,"stem":216},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":218,"path":219,"stem":220,"children":221,"icon":36},"Config","/config","3.config/0.index",[222],{"title":218,"path":219,"stem":220,"icon":36},{"title":224,"path":225,"stem":226,"children":227,"icon":229},"Examples","/examples","4.examples/0.index",[228,230,235,240,245,250,254,259,264,269,274,279,284,288,293,297,301,306,311,316,321,326,331,336,341,346,350,355,360,364,369,374],{"title":224,"path":225,"stem":226,"icon":229},"i-lucide-folder-code",{"title":231,"path":232,"stem":233,"icon":234},"API Routes","/examples/api-routes","4.examples/api-routes","i-lucide-route",{"title":236,"path":237,"stem":238,"icon":239},"Auto Imports","/examples/auto-imports","4.examples/auto-imports","i-lucide-import",{"title":241,"path":242,"stem":243,"icon":244},"Cached Handler","/examples/cached-handler","4.examples/cached-handler","i-lucide-clock",{"title":246,"path":247,"stem":248,"icon":249},"Custom Error Handler","/examples/custom-error-handler","4.examples/custom-error-handler","i-lucide-alert-circle",{"title":38,"path":251,"stem":252,"icon":253},"/examples/database","4.examples/database","i-lucide-database",{"title":255,"path":256,"stem":257,"icon":258},"Elysia","/examples/elysia","4.examples/elysia","i-skill-icons-elysia-dark",{"title":260,"path":261,"stem":262,"icon":263},"Express","/examples/express","4.examples/express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Fastify","/examples/fastify","4.examples/fastify","i-simple-icons-fastify",{"title":270,"path":271,"stem":272,"icon":273},"Hello World","/examples/hello-world","4.examples/hello-world","i-lucide-sparkles",{"title":275,"path":276,"stem":277,"icon":278},"Hono","/examples/hono","4.examples/hono","i-logos-hono",{"title":280,"path":281,"stem":282,"icon":283},"Import Alias","/examples/import-alias","4.examples/import-alias","i-lucide-at-sign",{"title":285,"path":286,"stem":287,"icon":46},"Middleware","/examples/middleware","4.examples/middleware",{"title":289,"path":290,"stem":291,"icon":292},"Mono JSX","/examples/mono-jsx","4.examples/mono-jsx","i-lucide-brackets",{"title":294,"path":295,"stem":296,"icon":292},"Nano JSX","/examples/nano-jsx","4.examples/nano-jsx",{"title":53,"path":298,"stem":299,"icon":300},"/examples/plugins","4.examples/plugins","i-lucide-plug",{"title":302,"path":303,"stem":304,"icon":305},"Custom Renderer","/examples/renderer","4.examples/renderer","i-lucide-code",{"title":307,"path":308,"stem":309,"icon":310},"Runtime Config","/examples/runtime-config","4.examples/runtime-config","i-lucide-settings",{"title":312,"path":313,"stem":314,"icon":315},"Server Fetch","/examples/server-fetch","4.examples/server-fetch","i-lucide-arrow-right-left",{"title":317,"path":318,"stem":319,"icon":320},"Shiki","/examples/shiki","4.examples/shiki","i-lucide-highlighter",{"title":322,"path":323,"stem":324,"icon":325},"Virtual Routes","/examples/virtual-routes","4.examples/virtual-routes","i-lucide-box",{"title":327,"path":328,"stem":329,"icon":330},"Vite Nitro Plugin","/examples/vite-nitro-plugin","4.examples/vite-nitro-plugin","i-logos-vitejs",{"title":332,"path":333,"stem":334,"icon":335},"Vite RSC","/examples/vite-rsc","4.examples/vite-rsc","i-logos-react",{"title":337,"path":338,"stem":339,"icon":340},"Vite SSR HTML","/examples/vite-ssr-html","4.examples/vite-ssr-html","i-logos-html-5",{"title":342,"path":343,"stem":344,"icon":345},"SSR with Preact","/examples/vite-ssr-preact","4.examples/vite-ssr-preact","i-logos-preact",{"title":347,"path":348,"stem":349,"icon":335},"SSR with React","/examples/vite-ssr-react","4.examples/vite-ssr-react",{"title":351,"path":352,"stem":353,"icon":354},"SSR with SolidJS","/examples/vite-ssr-solid","4.examples/vite-ssr-solid","i-logos-solidjs-icon",{"title":356,"path":357,"stem":358,"icon":359},"SSR with TanStack Router","/examples/vite-ssr-tsr-react","4.examples/vite-ssr-tsr-react","i-simple-icons-tanstack",{"title":361,"path":362,"stem":363,"icon":359},"SSR with TanStack Start","/examples/vite-ssr-tss-react","4.examples/vite-ssr-tss-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with Vue Router","/examples/vite-ssr-vue-router","4.examples/vite-ssr-vue-router","i-logos-vue",{"title":370,"path":371,"stem":372,"icon":373},"Vite + tRPC","/examples/vite-trpc","4.examples/vite-trpc","i-simple-icons-trpc",{"title":375,"path":376,"stem":377,"icon":378},"WebSocket","/examples/websocket","4.examples/websocket","i-lucide-radio",{"title":380,"path":381,"stem":382,"children":383},"Blog","/blog","9.blog",[384,387],{"title":380,"path":381,"stem":385,"icon":386},"9.blog/index","i-lucide-file-text",{"title":388,"path":389,"stem":390,"icon":386},"Nitro v3 Beta is here!","/blog/v3-beta","9.blog/1.v3-beta",{"title":5,"path":392,"stem":393},"/","index",{"id":395,"title":48,"body":396,"description":2083,"extension":2084,"meta":2085,"navigation":2086,"path":49,"seo":2087,"stem":50,"__hash__":2088},"content/1.docs/50.openapi.md",{"type":397,"value":398,"toc":2068,"icon":51},"minimark",[399,428,434,439,442,531,534,583,587,603,738,746,751,765,986,996,1000,1007,1209,1213,1227,1501,1512,1516,1519,1560,1570,1573,1579,1677,1682,1688,1747,1752,1762,1765,1802,1807,1810,1893,1902,1946,1951,1955,1960,1997,2045,2058,2064],[400,401,402,403,407,408,415,416,421,422,427],"p",{},"Nitro scans all route handlers, extracts metadata defined with ",[404,405,406],"code",{},"defineRouteMeta",", and generates an ",[409,410,414],"a",{"href":411,"rel":412},"https://spec.openapis.org/oas/v3.1.0",[413],"nofollow","OpenAPI 3.1.0"," specification. Built-in UIs powered by ",[409,417,420],{"href":418,"rel":419},"https://scalar.com/",[413],"Scalar"," and ",[409,423,426],{"href":424,"rel":425},"https://swagger.io/tools/swagger-ui/",[413],"Swagger UI"," let you explore and test your API directly in the browser.",[429,430,431],"important",{},[400,432,433],{},"\nOpenAPI support is currently experimental.",[435,436,438],"h2",{"id":437},"enable-openapi","Enable OpenAPI",[400,440,441],{},"Enable OpenAPI in your Nitro configuration:",[443,444,445],"code-group",{},[446,447,452],"pre",{"className":448,"code":449,"filename":450,"language":451,"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",[404,453,454,477,484,500,506,519,525],{"__ignoreMap":5},[455,456,459,463,467,470,474],"span",{"class":457,"line":458},"line",1,[455,460,462],{"class":461},"so5gQ","import",[455,464,466],{"class":465},"slsVL"," { defineConfig } ",[455,468,469],{"class":461},"from",[455,471,473],{"class":472},"sfrk1"," \"nitro\"",[455,475,476],{"class":465},";\n",[455,478,480],{"class":457,"line":479},2,[455,481,483],{"emptyLinePlaceholder":482},true,"\n",[455,485,487,490,493,497],{"class":457,"line":486},3,[455,488,489],{"class":461},"export",[455,491,492],{"class":461}," default",[455,494,496],{"class":495},"shcOC"," defineConfig",[455,498,499],{"class":465},"({\n",[455,501,503],{"class":457,"line":502},4,[455,504,505],{"class":465},"  experimental: {\n",[455,507,509,512,516],{"class":457,"line":508},5,[455,510,511],{"class":465},"    openAPI: ",[455,513,515],{"class":514},"suiK_","true",[455,517,518],{"class":465},",\n",[455,520,522],{"class":457,"line":521},6,[455,523,524],{"class":465},"  },\n",[455,526,528],{"class":457,"line":527},7,[455,529,530],{"class":465},"});\n",[400,532,533],{},"Once enabled, the following endpoints become available during development:",[535,536,537,550],"table",{},[538,539,540],"thead",{},[541,542,543,547],"tr",{},[544,545,546],"th",{},"Endpoint",[544,548,549],{},"Description",[551,552,553,564,574],"tbody",{},[541,554,555,561],{},[556,557,558],"td",{},[404,559,560],{},"/_openapi.json",[556,562,563],{},"OpenAPI 3.1.0 JSON specification",[541,565,566,571],{},[556,567,568],{},[404,569,570],{},"/_scalar",[556,572,573],{},"Scalar API reference UI",[541,575,576,581],{},[556,577,578],{},[404,579,580],{},"/_swagger",[556,582,426],{},[435,584,586],{"id":585},"route-metadata","Route Metadata",[400,588,589,590,592,593,596,597,602],{},"Use the ",[404,591,406],{}," macro in route handler files to provide OpenAPI metadata for each route. The ",[404,594,595],{},"openAPI"," property accepts a standard OpenAPI ",[409,598,601],{"href":599,"rel":600},"https://spec.openapis.org/oas/v3.1.0#operation-object",[413],"Operation Object",".",[446,604,607],{"className":448,"code":605,"filename":606,"language":451,"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/api/hello.ts",[404,608,609,622,626,632,637,648,658,663,678,684,689,694,699,718,733],{"__ignoreMap":5},[455,610,611,613,616,618,620],{"class":457,"line":458},[455,612,462],{"class":461},[455,614,615],{"class":465}," { defineRouteMeta, defineHandler } ",[455,617,469],{"class":461},[455,619,473],{"class":472},[455,621,476],{"class":465},[455,623,624],{"class":457,"line":479},[455,625,483],{"emptyLinePlaceholder":482},[455,627,628,630],{"class":457,"line":486},[455,629,406],{"class":495},[455,631,499],{"class":465},[455,633,634],{"class":457,"line":502},[455,635,636],{"class":465},"  openAPI: {\n",[455,638,639,642,645],{"class":457,"line":508},[455,640,641],{"class":465},"    tags: [",[455,643,644],{"class":472},"\"greeting\"",[455,646,647],{"class":465},"],\n",[455,649,650,653,656],{"class":457,"line":521},[455,651,652],{"class":465},"    description: ",[455,654,655],{"class":472},"\"Returns a greeting message\"",[455,657,518],{"class":465},[455,659,660],{"class":457,"line":527},[455,661,662],{"class":465},"    responses: {\n",[455,664,666,669,672,675],{"class":457,"line":665},8,[455,667,668],{"class":514},"      200",[455,670,671],{"class":465},": { description: ",[455,673,674],{"class":472},"\"Successful greeting\"",[455,676,677],{"class":465}," },\n",[455,679,681],{"class":457,"line":680},9,[455,682,683],{"class":465},"    },\n",[455,685,687],{"class":457,"line":686},10,[455,688,524],{"class":465},[455,690,692],{"class":457,"line":691},11,[455,693,530],{"class":465},[455,695,697],{"class":457,"line":696},12,[455,698,483],{"emptyLinePlaceholder":482},[455,700,702,704,706,709,712,715],{"class":457,"line":701},13,[455,703,489],{"class":461},[455,705,492],{"class":461},[455,707,708],{"class":495}," defineHandler",[455,710,711],{"class":465},"(() ",[455,713,714],{"class":461},"=>",[455,716,717],{"class":465}," {\n",[455,719,721,724,727,730],{"class":457,"line":720},14,[455,722,723],{"class":461},"  return",[455,725,726],{"class":465}," { message: ",[455,728,729],{"class":472},"\"Hello, world!\"",[455,731,732],{"class":465}," };\n",[455,734,736],{"class":457,"line":735},15,[455,737,530],{"class":465},[739,740,741],"note",{},[400,742,743,745],{},[404,744,406],{}," is a build-time macro. The metadata is statically extracted during the build and does not add any runtime overhead to your handlers.",[747,748,750],"h3",{"id":749},"parameters","Parameters",[400,752,753,754,757,758,761,762,764],{},"Route parameters (",[404,755,756],{},":id",", ",[404,759,760],{},"[id]",") are automatically converted to OpenAPI path parameters. You can define additional query or header parameters in the ",[404,763,749],{}," array:",[446,766,769],{"className":448,"code":767,"filename":768,"language":451,"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/api/users/[id].get.ts",[404,770,771,783,787,793,797,806,815,820,825,835,845,855,865,870,875,879,891,904,909,914,919,924,947,968,981],{"__ignoreMap":5},[455,772,773,775,777,779,781],{"class":457,"line":458},[455,774,462],{"class":461},[455,776,615],{"class":465},[455,778,469],{"class":461},[455,780,473],{"class":472},[455,782,476],{"class":465},[455,784,785],{"class":457,"line":479},[455,786,483],{"emptyLinePlaceholder":482},[455,788,789,791],{"class":457,"line":486},[455,790,406],{"class":495},[455,792,499],{"class":465},[455,794,795],{"class":457,"line":502},[455,796,636],{"class":465},[455,798,799,801,804],{"class":457,"line":508},[455,800,641],{"class":465},[455,802,803],{"class":472},"\"users\"",[455,805,647],{"class":465},[455,807,808,810,813],{"class":457,"line":521},[455,809,652],{"class":465},[455,811,812],{"class":472},"\"Get a user by their ID\"",[455,814,518],{"class":465},[455,816,817],{"class":457,"line":527},[455,818,819],{"class":465},"    parameters: [\n",[455,821,822],{"class":457,"line":665},[455,823,824],{"class":465},"      {\n",[455,826,827,830,833],{"class":457,"line":680},[455,828,829],{"class":465},"        in: ",[455,831,832],{"class":472},"\"query\"",[455,834,518],{"class":465},[455,836,837,840,843],{"class":457,"line":686},[455,838,839],{"class":465},"        name: ",[455,841,842],{"class":472},"\"include\"",[455,844,518],{"class":465},[455,846,847,850,853],{"class":457,"line":691},[455,848,849],{"class":465},"        description: ",[455,851,852],{"class":472},"\"Comma-separated list of related resources to include\"",[455,854,518],{"class":465},[455,856,857,860,863],{"class":457,"line":696},[455,858,859],{"class":465},"        schema: { type: ",[455,861,862],{"class":472},"\"string\"",[455,864,677],{"class":465},[455,866,867],{"class":457,"line":701},[455,868,869],{"class":465},"      },\n",[455,871,872],{"class":457,"line":720},[455,873,874],{"class":465},"    ],\n",[455,876,877],{"class":457,"line":735},[455,878,662],{"class":465},[455,880,882,884,886,889],{"class":457,"line":881},16,[455,883,668],{"class":514},[455,885,671],{"class":465},[455,887,888],{"class":472},"\"User found\"",[455,890,677],{"class":465},[455,892,894,897,899,902],{"class":457,"line":893},17,[455,895,896],{"class":514},"      404",[455,898,671],{"class":465},[455,900,901],{"class":472},"\"User not found\"",[455,903,677],{"class":465},[455,905,907],{"class":457,"line":906},18,[455,908,683],{"class":465},[455,910,912],{"class":457,"line":911},19,[455,913,524],{"class":465},[455,915,917],{"class":457,"line":916},20,[455,918,530],{"class":465},[455,920,922],{"class":457,"line":921},21,[455,923,483],{"emptyLinePlaceholder":482},[455,925,927,929,931,933,936,940,943,945],{"class":457,"line":926},22,[455,928,489],{"class":461},[455,930,492],{"class":461},[455,932,708],{"class":495},[455,934,935],{"class":465},"((",[455,937,939],{"class":938},"sQHwn","event",[455,941,942],{"class":465},") ",[455,944,714],{"class":461},[455,946,717],{"class":465},[455,948,950,953,956,959,962,965],{"class":457,"line":949},23,[455,951,952],{"class":461},"  const",[455,954,955],{"class":465}," { ",[455,957,958],{"class":514},"id",[455,960,961],{"class":465}," } ",[455,963,964],{"class":461},"=",[455,966,967],{"class":465}," event.context.params;\n",[455,969,971,973,976,979],{"class":457,"line":970},24,[455,972,723],{"class":461},[455,974,975],{"class":465}," { id, name: ",[455,977,978],{"class":472},"\"Alice\"",[455,980,732],{"class":465},[455,982,984],{"class":457,"line":983},25,[455,985,530],{"class":465},[400,987,988,989,991,992,995],{},"In this example, the ",[404,990,958],{}," path parameter is automatically inferred from the route pattern. Only the additional ",[404,993,994],{},"include"," query parameter needs to be declared.",[747,997,999],{"id":998},"response-schemas","Response Schemas",[400,1001,1002,1003,1006],{},"Define response content types and schemas using the standard OpenAPI ",[404,1004,1005],{},"responses"," object:",[446,1008,1011],{"className":448,"code":1009,"filename":1010,"language":451,"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/json\": {\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/api/status.ts",[404,1012,1013,1025,1029,1035,1039,1048,1052,1059,1068,1073,1080,1085,1095,1100,1121,1131,1136,1141,1146,1151,1155,1159,1163,1167,1171,1185,1204],{"__ignoreMap":5},[455,1014,1015,1017,1019,1021,1023],{"class":457,"line":458},[455,1016,462],{"class":461},[455,1018,615],{"class":465},[455,1020,469],{"class":461},[455,1022,473],{"class":472},[455,1024,476],{"class":465},[455,1026,1027],{"class":457,"line":479},[455,1028,483],{"emptyLinePlaceholder":482},[455,1030,1031,1033],{"class":457,"line":486},[455,1032,406],{"class":495},[455,1034,499],{"class":465},[455,1036,1037],{"class":457,"line":502},[455,1038,636],{"class":465},[455,1040,1041,1043,1046],{"class":457,"line":508},[455,1042,652],{"class":465},[455,1044,1045],{"class":472},"\"Returns the current server status\"",[455,1047,518],{"class":465},[455,1049,1050],{"class":457,"line":521},[455,1051,662],{"class":465},[455,1053,1054,1056],{"class":457,"line":527},[455,1055,668],{"class":514},[455,1057,1058],{"class":465},": {\n",[455,1060,1061,1063,1066],{"class":457,"line":665},[455,1062,849],{"class":465},[455,1064,1065],{"class":472},"\"Server status\"",[455,1067,518],{"class":465},[455,1069,1070],{"class":457,"line":680},[455,1071,1072],{"class":465},"        content: {\n",[455,1074,1075,1078],{"class":457,"line":686},[455,1076,1077],{"class":472},"          \"application/json\"",[455,1079,1058],{"class":465},[455,1081,1082],{"class":457,"line":691},[455,1083,1084],{"class":465},"            schema: {\n",[455,1086,1087,1090,1093],{"class":457,"line":696},[455,1088,1089],{"class":465},"              type: ",[455,1091,1092],{"class":472},"\"object\"",[455,1094,518],{"class":465},[455,1096,1097],{"class":457,"line":701},[455,1098,1099],{"class":465},"              properties: {\n",[455,1101,1102,1105,1107,1110,1113,1115,1118],{"class":457,"line":720},[455,1103,1104],{"class":465},"                status: { type: ",[455,1106,862],{"class":472},[455,1108,1109],{"class":465},", enum: [",[455,1111,1112],{"class":472},"\"healthy\"",[455,1114,757],{"class":465},[455,1116,1117],{"class":472},"\"degraded\"",[455,1119,1120],{"class":465},"] },\n",[455,1122,1123,1126,1129],{"class":457,"line":735},[455,1124,1125],{"class":465},"                uptime: { type: ",[455,1127,1128],{"class":472},"\"number\"",[455,1130,677],{"class":465},[455,1132,1133],{"class":457,"line":881},[455,1134,1135],{"class":465},"              },\n",[455,1137,1138],{"class":457,"line":893},[455,1139,1140],{"class":465},"            },\n",[455,1142,1143],{"class":457,"line":906},[455,1144,1145],{"class":465},"          },\n",[455,1147,1148],{"class":457,"line":911},[455,1149,1150],{"class":465},"        },\n",[455,1152,1153],{"class":457,"line":916},[455,1154,869],{"class":465},[455,1156,1157],{"class":457,"line":921},[455,1158,683],{"class":465},[455,1160,1161],{"class":457,"line":926},[455,1162,524],{"class":465},[455,1164,1165],{"class":457,"line":949},[455,1166,530],{"class":465},[455,1168,1169],{"class":457,"line":970},[455,1170,483],{"emptyLinePlaceholder":482},[455,1172,1173,1175,1177,1179,1181,1183],{"class":457,"line":983},[455,1174,489],{"class":461},[455,1176,492],{"class":461},[455,1178,708],{"class":495},[455,1180,711],{"class":465},[455,1182,714],{"class":461},[455,1184,717],{"class":465},[455,1186,1188,1190,1193,1195,1198,1201],{"class":457,"line":1187},26,[455,1189,723],{"class":461},[455,1191,1192],{"class":465}," { status: ",[455,1194,1112],{"class":472},[455,1196,1197],{"class":465},", uptime: process.",[455,1199,1200],{"class":495},"uptime",[455,1202,1203],{"class":465},"() };\n",[455,1205,1207],{"class":457,"line":1206},27,[455,1208,530],{"class":465},[747,1210,1212],{"id":1211},"global-components","Global Components",[400,1214,589,1215,1218,1219,1222,1223,1226],{},[404,1216,1217],{},"$global"," property to define reusable schemas that are hoisted to the top-level ",[404,1220,1221],{},"components"," section of the OpenAPI specification. This lets you reference shared schemas with ",[404,1224,1225],{},"$ref"," across multiple routes.",[446,1228,1231],{"className":448,"code":1229,"filename":1230,"language":451,"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/json\": {\n            schema: {\n              type: \"array\",\n              items: { $ref: \"#/components/schemas/User\" },\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/api/users.get.ts",[404,1232,1233,1245,1249,1255,1259,1267,1276,1280,1286,1295,1299,1305,1309,1318,1328,1332,1336,1340,1344,1348,1353,1358,1363,1368,1377,1382,1391,1400,1416,1421,1426,1431,1436,1441,1446,1451,1456,1471,1496],{"__ignoreMap":5},[455,1234,1235,1237,1239,1241,1243],{"class":457,"line":458},[455,1236,462],{"class":461},[455,1238,615],{"class":465},[455,1240,469],{"class":461},[455,1242,473],{"class":472},[455,1244,476],{"class":465},[455,1246,1247],{"class":457,"line":479},[455,1248,483],{"emptyLinePlaceholder":482},[455,1250,1251,1253],{"class":457,"line":486},[455,1252,406],{"class":495},[455,1254,499],{"class":465},[455,1256,1257],{"class":457,"line":502},[455,1258,636],{"class":465},[455,1260,1261,1263,1265],{"class":457,"line":508},[455,1262,641],{"class":465},[455,1264,803],{"class":472},[455,1266,647],{"class":465},[455,1268,1269,1271,1274],{"class":457,"line":521},[455,1270,652],{"class":465},[455,1272,1273],{"class":472},"\"List all users\"",[455,1275,518],{"class":465},[455,1277,1278],{"class":457,"line":527},[455,1279,662],{"class":465},[455,1281,1282,1284],{"class":457,"line":665},[455,1283,668],{"class":514},[455,1285,1058],{"class":465},[455,1287,1288,1290,1293],{"class":457,"line":680},[455,1289,849],{"class":465},[455,1291,1292],{"class":472},"\"List of users\"",[455,1294,518],{"class":465},[455,1296,1297],{"class":457,"line":686},[455,1298,1072],{"class":465},[455,1300,1301,1303],{"class":457,"line":691},[455,1302,1077],{"class":472},[455,1304,1058],{"class":465},[455,1306,1307],{"class":457,"line":696},[455,1308,1084],{"class":465},[455,1310,1311,1313,1316],{"class":457,"line":701},[455,1312,1089],{"class":465},[455,1314,1315],{"class":472},"\"array\"",[455,1317,518],{"class":465},[455,1319,1320,1323,1326],{"class":457,"line":720},[455,1321,1322],{"class":465},"              items: { $ref: ",[455,1324,1325],{"class":472},"\"#/components/schemas/User\"",[455,1327,677],{"class":465},[455,1329,1330],{"class":457,"line":735},[455,1331,1140],{"class":465},[455,1333,1334],{"class":457,"line":881},[455,1335,1145],{"class":465},[455,1337,1338],{"class":457,"line":893},[455,1339,1150],{"class":465},[455,1341,1342],{"class":457,"line":906},[455,1343,869],{"class":465},[455,1345,1346],{"class":457,"line":911},[455,1347,683],{"class":465},[455,1349,1350],{"class":457,"line":916},[455,1351,1352],{"class":465},"    $global: {\n",[455,1354,1355],{"class":457,"line":921},[455,1356,1357],{"class":465},"      components: {\n",[455,1359,1360],{"class":457,"line":926},[455,1361,1362],{"class":465},"        schemas: {\n",[455,1364,1365],{"class":457,"line":949},[455,1366,1367],{"class":465},"          User: {\n",[455,1369,1370,1373,1375],{"class":457,"line":970},[455,1371,1372],{"class":465},"            type: ",[455,1374,1092],{"class":472},[455,1376,518],{"class":465},[455,1378,1379],{"class":457,"line":983},[455,1380,1381],{"class":465},"            properties: {\n",[455,1383,1384,1387,1389],{"class":457,"line":1187},[455,1385,1386],{"class":465},"              id: { type: ",[455,1388,862],{"class":472},[455,1390,677],{"class":465},[455,1392,1393,1396,1398],{"class":457,"line":1206},[455,1394,1395],{"class":465},"              name: { type: ",[455,1397,862],{"class":472},[455,1399,677],{"class":465},[455,1401,1403,1406,1408,1411,1414],{"class":457,"line":1402},28,[455,1404,1405],{"class":465},"              email: { type: ",[455,1407,862],{"class":472},[455,1409,1410],{"class":465},", format: ",[455,1412,1413],{"class":472},"\"email\"",[455,1415,677],{"class":465},[455,1417,1419],{"class":457,"line":1418},29,[455,1420,1140],{"class":465},[455,1422,1424],{"class":457,"line":1423},30,[455,1425,1145],{"class":465},[455,1427,1429],{"class":457,"line":1428},31,[455,1430,1150],{"class":465},[455,1432,1434],{"class":457,"line":1433},32,[455,1435,869],{"class":465},[455,1437,1439],{"class":457,"line":1438},33,[455,1440,683],{"class":465},[455,1442,1444],{"class":457,"line":1443},34,[455,1445,524],{"class":465},[455,1447,1449],{"class":457,"line":1448},35,[455,1450,530],{"class":465},[455,1452,1454],{"class":457,"line":1453},36,[455,1455,483],{"emptyLinePlaceholder":482},[455,1457,1459,1461,1463,1465,1467,1469],{"class":457,"line":1458},37,[455,1460,489],{"class":461},[455,1462,492],{"class":461},[455,1464,708],{"class":495},[455,1466,711],{"class":465},[455,1468,714],{"class":461},[455,1470,717],{"class":465},[455,1472,1474,1476,1479,1482,1485,1487,1490,1493],{"class":457,"line":1473},38,[455,1475,723],{"class":461},[455,1477,1478],{"class":465}," [{ id: ",[455,1480,1481],{"class":472},"\"1\"",[455,1483,1484],{"class":465},", name: ",[455,1486,978],{"class":472},[455,1488,1489],{"class":465},", email: ",[455,1491,1492],{"class":472},"\"alice@example.com\"",[455,1494,1495],{"class":465}," }];\n",[455,1497,1499],{"class":457,"line":1498},39,[455,1500,530],{"class":465},[400,1502,1503,1504,1507,1508,1511],{},"Once defined, the ",[404,1505,1506],{},"User"," schema can be referenced from any other route with ",[404,1509,1510],{},"{ $ref: \"#/components/schemas/User\" }"," without re-declaring it.",[747,1513,1515],{"id":1514},"automatic-tagging","Automatic Tagging",[400,1517,1518],{},"Routes are automatically tagged based on their path prefix:",[535,1520,1521,1531],{},[538,1522,1523],{},[541,1524,1525,1528],{},[544,1526,1527],{},"Route prefix",[544,1529,1530],{},"Tag",[551,1532,1533,1542,1552],{},[541,1534,1535,1540],{},[556,1536,1537],{},[404,1538,1539],{},"/api/",[556,1541,231],{},[541,1543,1544,1549],{},[556,1545,1546],{},[404,1547,1548],{},"/_",[556,1550,1551],{},"Internal",[541,1553,1554,1557],{},[556,1555,1556],{},"Other",[556,1558,1559],{},"App Routes",[400,1561,1562,1563,1566,1567,1569],{},"You can override this by specifying ",[404,1564,1565],{},"tags"," in the ",[404,1568,595],{}," metadata.",[435,1571,33],{"id":1572},"configuration",[400,1574,1575,1576,1578],{},"Configure OpenAPI behavior with the top-level ",[404,1577,595],{}," option:",[446,1580,1582],{"className":448,"code":1581,"filename":450,"language":451,"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",[404,1583,1584,1596,1600,1610,1614,1622,1626,1630,1635,1645,1655,1665,1669,1673],{"__ignoreMap":5},[455,1585,1586,1588,1590,1592,1594],{"class":457,"line":458},[455,1587,462],{"class":461},[455,1589,466],{"class":465},[455,1591,469],{"class":461},[455,1593,473],{"class":472},[455,1595,476],{"class":465},[455,1597,1598],{"class":457,"line":479},[455,1599,483],{"emptyLinePlaceholder":482},[455,1601,1602,1604,1606,1608],{"class":457,"line":486},[455,1603,489],{"class":461},[455,1605,492],{"class":461},[455,1607,496],{"class":495},[455,1609,499],{"class":465},[455,1611,1612],{"class":457,"line":502},[455,1613,505],{"class":465},[455,1615,1616,1618,1620],{"class":457,"line":508},[455,1617,511],{"class":465},[455,1619,515],{"class":514},[455,1621,518],{"class":465},[455,1623,1624],{"class":457,"line":521},[455,1625,524],{"class":465},[455,1627,1628],{"class":457,"line":527},[455,1629,636],{"class":465},[455,1631,1632],{"class":457,"line":665},[455,1633,1634],{"class":465},"    meta: {\n",[455,1636,1637,1640,1643],{"class":457,"line":680},[455,1638,1639],{"class":465},"      title: ",[455,1641,1642],{"class":472},"\"My API\"",[455,1644,518],{"class":465},[455,1646,1647,1650,1653],{"class":457,"line":686},[455,1648,1649],{"class":465},"      description: ",[455,1651,1652],{"class":472},"\"My awesome API\"",[455,1654,518],{"class":465},[455,1656,1657,1660,1663],{"class":457,"line":691},[455,1658,1659],{"class":465},"      version: ",[455,1661,1662],{"class":472},"\"2.0.0\"",[455,1664,518],{"class":465},[455,1666,1667],{"class":457,"line":696},[455,1668,683],{"class":465},[455,1670,1671],{"class":457,"line":701},[455,1672,524],{"class":465},[455,1674,1675],{"class":457,"line":720},[455,1676,530],{"class":465},[747,1678,1680],{"id":1679},"meta",[404,1681,1679],{},[400,1683,1684,1685,1006],{},"Set the API metadata that appears in the specification's ",[404,1686,1687],{},"info",[535,1689,1690,1702],{},[538,1691,1692],{},[541,1693,1694,1697,1700],{},[544,1695,1696],{},"Property",[544,1698,1699],{},"Default",[544,1701,549],{},[551,1703,1704,1719,1732],{},[541,1705,1706,1711,1716],{},[556,1707,1708],{},[404,1709,1710],{},"title",[556,1712,1713],{},[404,1714,1715],{},"\"Nitro Server Routes\"",[556,1717,1718],{},"API title",[541,1720,1721,1726,1729],{},[556,1722,1723],{},[404,1724,1725],{},"description",[556,1727,1728],{},"—",[556,1730,1731],{},"API description",[541,1733,1734,1739,1744],{},[556,1735,1736],{},[404,1737,1738],{},"version",[556,1740,1741],{},[404,1742,1743],{},"\"1.0.0\"",[556,1745,1746],{},"API version",[747,1748,1750],{"id":1749},"route",[404,1751,1749],{},[1753,1754,1755],"ul",{},[1756,1757,1758,1759],"li",{},"Default: ",[404,1760,1761],{},"\"/_openapi.json\"",[400,1763,1764],{},"Override the path where the OpenAPI JSON specification is served:",[446,1766,1768],{"className":448,"code":1767,"filename":450,"language":451,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    route: \"/_docs/openapi.json\",\n  },\n});\n",[404,1769,1770,1780,1784,1794,1798],{"__ignoreMap":5},[455,1771,1772,1774,1776,1778],{"class":457,"line":458},[455,1773,489],{"class":461},[455,1775,492],{"class":461},[455,1777,496],{"class":495},[455,1779,499],{"class":465},[455,1781,1782],{"class":457,"line":479},[455,1783,636],{"class":465},[455,1785,1786,1789,1792],{"class":457,"line":486},[455,1787,1788],{"class":465},"    route: ",[455,1790,1791],{"class":472},"\"/_docs/openapi.json\"",[455,1793,518],{"class":465},[455,1795,1796],{"class":457,"line":502},[455,1797,524],{"class":465},[455,1799,1800],{"class":457,"line":508},[455,1801,530],{"class":465},[747,1803,1805],{"id":1804},"ui",[404,1806,1804],{},[400,1808,1809],{},"Configure or disable the built-in API documentation UIs:",[446,1811,1813],{"className":448,"code":1812,"filename":450,"language":451,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      scalar: {\n        route: \"/_docs/scalar\",\n        theme: \"purple\",\n      },\n      swagger: {\n        route: \"/_docs/swagger\",\n      },\n    },\n  },\n});\n",[404,1814,1815,1825,1829,1834,1839,1849,1859,1863,1868,1877,1881,1885,1889],{"__ignoreMap":5},[455,1816,1817,1819,1821,1823],{"class":457,"line":458},[455,1818,489],{"class":461},[455,1820,492],{"class":461},[455,1822,496],{"class":495},[455,1824,499],{"class":465},[455,1826,1827],{"class":457,"line":479},[455,1828,636],{"class":465},[455,1830,1831],{"class":457,"line":486},[455,1832,1833],{"class":465},"    ui: {\n",[455,1835,1836],{"class":457,"line":502},[455,1837,1838],{"class":465},"      scalar: {\n",[455,1840,1841,1844,1847],{"class":457,"line":508},[455,1842,1843],{"class":465},"        route: ",[455,1845,1846],{"class":472},"\"/_docs/scalar\"",[455,1848,518],{"class":465},[455,1850,1851,1854,1857],{"class":457,"line":521},[455,1852,1853],{"class":465},"        theme: ",[455,1855,1856],{"class":472},"\"purple\"",[455,1858,518],{"class":465},[455,1860,1861],{"class":457,"line":527},[455,1862,869],{"class":465},[455,1864,1865],{"class":457,"line":665},[455,1866,1867],{"class":465},"      swagger: {\n",[455,1869,1870,1872,1875],{"class":457,"line":680},[455,1871,1843],{"class":465},[455,1873,1874],{"class":472},"\"/_docs/swagger\"",[455,1876,518],{"class":465},[455,1878,1879],{"class":457,"line":686},[455,1880,869],{"class":465},[455,1882,1883],{"class":457,"line":691},[455,1884,683],{"class":465},[455,1886,1887],{"class":457,"line":696},[455,1888,524],{"class":465},[455,1890,1891],{"class":457,"line":701},[455,1892,530],{"class":465},[400,1894,1895,1896,1901],{},"Set either UI to ",[404,1897,1898],{"className":448,"language":451,"style":5},[455,1899,1900],{"class":514},"false"," to disable it:",[446,1903,1905],{"className":448,"code":1904,"filename":450,"language":451,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      swagger: false,\n    },\n  },\n});\n",[404,1906,1907,1917,1921,1925,1934,1938,1942],{"__ignoreMap":5},[455,1908,1909,1911,1913,1915],{"class":457,"line":458},[455,1910,489],{"class":461},[455,1912,492],{"class":461},[455,1914,496],{"class":495},[455,1916,499],{"class":465},[455,1918,1919],{"class":457,"line":479},[455,1920,636],{"class":465},[455,1922,1923],{"class":457,"line":486},[455,1924,1833],{"class":465},[455,1926,1927,1930,1932],{"class":457,"line":502},[455,1928,1929],{"class":465},"      swagger: ",[455,1931,1900],{"class":514},[455,1933,518],{"class":465},[455,1935,1936],{"class":457,"line":508},[455,1937,683],{"class":465},[455,1939,1940],{"class":457,"line":521},[455,1941,524],{"class":465},[455,1943,1944],{"class":457,"line":527},[455,1945,530],{"class":465},[1947,1948],"read-more",{"title":1949,"to":1950},"Scalar Configuration","https://github.com/scalar/scalar",[435,1952,1954],{"id":1953},"production","Production",[400,1956,1957,1958,1578],{},"By default, OpenAPI endpoints are only available during development. To enable them in production, set the ",[404,1959,1953],{},[446,1961,1963],{"className":448,"code":1962,"filename":450,"language":451,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    production: \"runtime\",\n  },\n});\n",[404,1964,1965,1975,1979,1989,1993],{"__ignoreMap":5},[455,1966,1967,1969,1971,1973],{"class":457,"line":458},[455,1968,489],{"class":461},[455,1970,492],{"class":461},[455,1972,496],{"class":495},[455,1974,499],{"class":465},[455,1976,1977],{"class":457,"line":479},[455,1978,636],{"class":465},[455,1980,1981,1984,1987],{"class":457,"line":486},[455,1982,1983],{"class":465},"    production: ",[455,1985,1986],{"class":472},"\"runtime\"",[455,1988,518],{"class":465},[455,1990,1991],{"class":457,"line":502},[455,1992,524],{"class":465},[455,1994,1995],{"class":457,"line":508},[455,1996,530],{"class":465},[535,1998,1999,2009],{},[538,2000,2001],{},[541,2002,2003,2006],{},[544,2004,2005],{},"Value",[544,2007,2008],{},"Behavior",[551,2010,2011,2022,2033],{},[541,2012,2013,2019],{},[556,2014,2015],{},[404,2016,2017],{"className":448,"language":451,"style":5},[455,2018,1900],{"class":514},[556,2020,2021],{},"Disabled in production (default)",[541,2023,2024,2030],{},[556,2025,2026],{},[404,2027,2028],{"className":448,"language":451,"style":5},[455,2029,1986],{"class":472},[556,2031,2032],{},"Specification is generated at runtime on each request",[541,2034,2035,2042],{},[556,2036,2037],{},[404,2038,2039],{"className":448,"language":451,"style":5},[455,2040,2041],{"class":472},"\"prerender\"",[556,2043,2044],{},"Specification is generated at build time and served as a static file",[400,2046,2047,2048,2052,2053,2057],{},"Use ",[404,2049,2050],{"className":448,"language":451,"style":5},[455,2051,2041],{"class":472}," when the specification does not change between deployments for the best performance. Use ",[404,2054,2055],{"className":448,"language":451,"style":5},[455,2056,1986],{"class":472}," if you need dynamic server information or middleware access.",[2059,2060,2061],"warning",{},[400,2062,2063],{},"If you enable OpenAPI in production, make sure to protect the endpoints with appropriate authentication or access control.",[2065,2066,2067],"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":479,"depth":479,"links":2069},[2070,2071,2077,2082],{"id":437,"depth":479,"text":438},{"id":585,"depth":479,"text":586,"children":2072},[2073,2074,2075,2076],{"id":749,"depth":486,"text":750},{"id":998,"depth":486,"text":999},{"id":1211,"depth":486,"text":1212},{"id":1514,"depth":486,"text":1515},{"id":1572,"depth":479,"text":33,"children":2078},[2079,2080,2081],{"id":1679,"depth":486,"text":1679},{"id":1749,"depth":486,"text":1749},{"id":1804,"depth":486,"text":1804},{"id":1953,"depth":479,"text":1954},"Nitro can automatically generate an OpenAPI specification from your route handlers and serve interactive API documentation.","md",{"icon":51},{"icon":51},{"title":48,"description":2083},"xL105YPH5gYXFtmPPUx2bpWe0rQkHTv_vy3kG98OjTA",[2090,2092],{"title":43,"path":44,"stem":45,"description":2091,"icon":46,"children":-1},"Understand how Nitro runs and serves incoming requests to your application.",{"title":53,"path":54,"stem":55,"description":2093,"icon":56,"children":-1},"Use plugins to extend Nitro's runtime behavior.",1775839188018]