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