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