[{"data":1,"prerenderedAt":1362},["ShallowReactive",2],{"navigation":3,"examples-nav":407,"-examples-renderer":511,"-examples-renderer-surround":1359},[4,93,226,232,392,404],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","\u002Fexamples","4.examples\u002F0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,360,364,369,374,378,383,388],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Takumi","\u002Fexamples\u002Ftakumi","4.examples\u002Ftakumi","i-lucide-image",{"title":336,"path":337,"stem":338,"icon":339},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":341,"path":342,"stem":343,"icon":344},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":346,"path":347,"stem":348,"icon":349},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":351,"path":352,"stem":353,"icon":354},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":356,"path":357,"stem":358,"icon":359},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":361,"path":362,"stem":363,"icon":349},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":365,"path":366,"stem":367,"icon":368},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":370,"path":371,"stem":372,"icon":373},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":375,"path":376,"stem":377,"icon":373},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":379,"path":380,"stem":381,"icon":382},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":384,"path":385,"stem":386,"icon":387},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":389,"stem":390,"icon":391},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":393,"path":394,"stem":395,"children":396},"Blog","\u002Fblog","9.blog",[397,400],{"title":393,"path":394,"stem":398,"icon":399},"9.blog\u002Findex","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":399},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":405,"stem":406},"\u002F","index",[408,413,417,420,423,426,430,433,436,439,442,445,448,452,455,458,461,464,467,471,474,477,481,484,487,490,493,496,499,502,505,508],{"title":240,"description":409,"meta":410,"path":241},"File-based API routing with HTTP method support and dynamic parameters.",{"automd":411,"category":412,"icon":243},true,"features",{"title":245,"description":414,"meta":415,"path":246},"Automatic imports for utilities and composables.",{"automd":411,"category":416,"icon":248},"config",{"title":250,"description":418,"meta":419,"path":251},"Cache route responses with configurable bypass logic.",{"automd":411,"category":412,"icon":253},{"title":255,"description":421,"meta":422,"path":256},"Customize error responses with a global error handler.",{"automd":411,"category":412,"icon":258},{"title":38,"description":424,"meta":425,"path":260},"Built-in database support with SQL template literals.",{"automd":411,"category":412,"icon":262},{"title":264,"description":427,"meta":428,"path":265},"Integrate Elysia with Nitro using the server entry.",{"automd":411,"category":429,"icon":267},"backend frameworks",{"title":269,"description":431,"meta":432,"path":270},"Integrate Express with Nitro using the server entry.",{"automd":411,"category":429,"icon":272},{"title":274,"description":434,"meta":435,"path":275},"Integrate Fastify with Nitro using the server entry.",{"automd":411,"category":429,"icon":277},{"title":279,"description":437,"meta":438,"path":280},"Minimal Nitro server using the web standard fetch handler.",{"automd":411,"category":412,"icon":282},{"title":284,"description":440,"meta":441,"path":285},"Integrate Hono with Nitro using the server entry.",{"automd":411,"category":429,"icon":287},{"title":289,"description":443,"meta":444,"path":290},"Custom import aliases for cleaner module paths.",{"automd":411,"category":416,"icon":292},{"title":294,"description":446,"meta":447,"path":295},"Request middleware for authentication, logging, and request modification.",{"automd":411,"category":412,"icon":46},{"title":298,"description":449,"meta":450,"path":299},"Server-side JSX rendering in Nitro with mono-jsx.",{"automd":411,"category":451,"icon":301},"server side rendering",{"title":303,"description":453,"meta":454,"path":304},"Server-side JSX rendering in Nitro with nano-jsx.",{"automd":411,"category":451,"icon":301},{"title":53,"description":456,"meta":457,"path":307},"Extend Nitro with custom plugins for hooks and lifecycle events.",{"automd":411,"category":412,"icon":309},{"title":311,"description":459,"meta":460,"path":312},"Build a custom HTML renderer in Nitro with server-side data fetching.",{"automd":411,"category":451,"icon":314},{"title":316,"description":462,"meta":463,"path":317},"Environment-aware configuration with runtime access.",{"automd":411,"category":416,"icon":319},{"title":321,"description":465,"meta":466,"path":322},"Internal server-to-server requests without network overhead.",{"automd":411,"category":412,"icon":324},{"title":326,"description":468,"meta":469,"path":327},"Server-side syntax highlighting in Nitro with Shiki.",{"automd":411,"category":470,"icon":329},"integrations",{"title":331,"description":472,"meta":473,"path":332},"Generate dynamic Open Graph images from a Nitro route using Takumi.",{"automd":411,"category":470,"icon":334},{"title":336,"description":475,"meta":476,"path":337},"Define routes programmatically using Nitro's virtual module system.",{"automd":411,"category":412,"icon":339},{"title":341,"description":478,"meta":479,"path":342},"Use Nitro as a Vite plugin for programmatic configuration.",{"automd":411,"category":480,"icon":344},"vite",{"title":346,"description":482,"meta":483,"path":347},"React Server Components with Vite and Nitro.",{"automd":411,"category":480,"icon":349},{"title":351,"description":485,"meta":486,"path":352},"Server-side rendering with vanilla HTML, Vite, and Nitro.",{"automd":411,"category":451,"icon":354},{"title":356,"description":488,"meta":489,"path":357},"Server-side rendering with Preact in Nitro using Vite.",{"automd":411,"category":451,"icon":359},{"title":361,"description":491,"meta":492,"path":362},"Server-side rendering with React in Nitro using Vite.",{"automd":411,"category":451,"icon":349},{"title":365,"description":494,"meta":495,"path":366},"Server-side rendering with SolidJS in Nitro using Vite.",{"automd":411,"category":451,"icon":368},{"title":370,"description":497,"meta":498,"path":371},"Client-side routing with TanStack Router in Nitro using Vite.",{"automd":411,"category":451,"icon":373},{"title":375,"description":500,"meta":501,"path":376},"Full-stack React with TanStack Start in Nitro using Vite.",{"automd":411,"category":451,"icon":373},{"title":379,"description":503,"meta":504,"path":380},"Server-side rendering with Vue Router in Nitro using Vite.",{"automd":411,"category":451,"icon":382},{"title":384,"description":506,"meta":507,"path":385},"End-to-end typesafe APIs with tRPC in Nitro using Vite.",{"automd":411,"category":480,"icon":387},{"title":63,"description":509,"meta":510,"path":389},"Real-time bidirectional communication with WebSocket support.",{"automd":411,"category":412,"icon":391},{"id":512,"title":311,"body":513,"description":459,"extension":1354,"meta":1355,"navigation":1356,"path":312,"seo":1357,"stem":313,"__hash__":1358},"content\u002F4.examples\u002Frenderer.md",{"type":514,"value":515,"toc":1349,"icon":314},"minimark",[516,1069,1077,1081,1263,1272,1281,1285,1321,1332,1336,1345],[517,518,521,606,699,948,972,1026],"code-tree",{":expand-all":519,"default-value":520},"true","renderer.ts",[522,523,528],"pre",{"className":524,"code":525,"filename":526,"language":527,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  serverDir: \".\u002F\",\n  renderer: { handler: \".\u002Frenderer\" },\n});\n","nitro.config.ts","ts",[529,530,531,554,560,576,588,600],"code",{"__ignoreMap":5},[532,533,536,540,544,547,551],"span",{"class":534,"line":535},"line",1,[532,537,539],{"class":538},"so5gQ","import",[532,541,543],{"class":542},"slsVL"," { defineConfig } ",[532,545,546],{"class":538},"from",[532,548,550],{"class":549},"sfrk1"," \"nitro\"",[532,552,553],{"class":542},";\n",[532,555,557],{"class":534,"line":556},2,[532,558,559],{"emptyLinePlaceholder":411},"\n",[532,561,563,566,569,573],{"class":534,"line":562},3,[532,564,565],{"class":538},"export",[532,567,568],{"class":538}," default",[532,570,572],{"class":571},"shcOC"," defineConfig",[532,574,575],{"class":542},"({\n",[532,577,579,582,585],{"class":534,"line":578},4,[532,580,581],{"class":542},"  serverDir: ",[532,583,584],{"class":549},"\".\u002F\"",[532,586,587],{"class":542},",\n",[532,589,591,594,597],{"class":534,"line":590},5,[532,592,593],{"class":542},"  renderer: { handler: ",[532,595,596],{"class":549},"\".\u002Frenderer\"",[532,598,599],{"class":542}," },\n",[532,601,603],{"class":534,"line":602},6,[532,604,605],{"class":542},"});\n",[522,607,612],{"className":608,"code":609,"filename":610,"language":611,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","{\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"nitro dev\",\n    \"build\": \"nitro build\"\n  },\n  \"devDependencies\": {\n    \"nitro\": \"latest\"\n  }\n}\n","package.json","json",[529,613,614,619,633,641,653,663,668,676,687,693],{"__ignoreMap":5},[532,615,616],{"class":534,"line":535},[532,617,618],{"class":542},"{\n",[532,620,621,625,628,631],{"class":534,"line":556},[532,622,624],{"class":623},"suiK_","  \"type\"",[532,626,627],{"class":542},": ",[532,629,630],{"class":549},"\"module\"",[532,632,587],{"class":542},[532,634,635,638],{"class":534,"line":562},[532,636,637],{"class":623},"  \"scripts\"",[532,639,640],{"class":542},": {\n",[532,642,643,646,648,651],{"class":534,"line":578},[532,644,645],{"class":623},"    \"dev\"",[532,647,627],{"class":542},[532,649,650],{"class":549},"\"nitro dev\"",[532,652,587],{"class":542},[532,654,655,658,660],{"class":534,"line":590},[532,656,657],{"class":623},"    \"build\"",[532,659,627],{"class":542},[532,661,662],{"class":549},"\"nitro build\"\n",[532,664,665],{"class":534,"line":602},[532,666,667],{"class":542},"  },\n",[532,669,671,674],{"class":534,"line":670},7,[532,672,673],{"class":623},"  \"devDependencies\"",[532,675,640],{"class":542},[532,677,679,682,684],{"class":534,"line":678},8,[532,680,681],{"class":623},"    \"nitro\"",[532,683,627],{"class":542},[532,685,686],{"class":549},"\"latest\"\n",[532,688,690],{"class":534,"line":689},9,[532,691,692],{"class":542},"  }\n",[532,694,696],{"class":534,"line":695},10,[532,697,698],{"class":542},"}\n",[522,700,702],{"className":524,"code":701,"filename":520,"language":527,"meta":5,"style":5},"import { fetch } from \"nitro\";\n\nexport default async function renderer({ url }: { req: Request; url: URL }) {\n  const apiRes = await fetch(\"\u002Fapi\u002Fhello\").then((res) => res.text());\n  return new Response(\n    \u002F* html *\u002F `\u003C!DOCTYPE html>\n    \u003Chtml>\n    \u003Chead>\n      \u003Ctitle>Custom Renderer\u003C\u002Ftitle>\n    \u003C\u002Fhead>\n    \u003Cbody>\n      \u003Ch1>Hello from custom renderer!\u003C\u002Fh1>\n      \u003Cp>Current path: ${url.pathname}\u003C\u002Fp>\n      \u003Cp>API says: ${apiRes}\u003C\u002Fp>\n    \u003C\u002Fbody>\n    \u003C\u002Fhtml>`,\n    { headers: { \"content-type\": \"text\u002Fhtml; charset=utf-8\" } }\n  );\n}\n",[529,703,704,717,721,773,823,837,846,851,856,861,866,872,878,895,906,912,920,937,943],{"__ignoreMap":5},[532,705,706,708,711,713,715],{"class":534,"line":535},[532,707,539],{"class":538},[532,709,710],{"class":542}," { fetch } ",[532,712,546],{"class":538},[532,714,550],{"class":549},[532,716,553],{"class":542},[532,718,719],{"class":534,"line":556},[532,720,559],{"emptyLinePlaceholder":411},[532,722,723,725,727,730,733,736,739,743,746,749,752,755,757,760,763,765,767,770],{"class":534,"line":562},[532,724,565],{"class":538},[532,726,568],{"class":538},[532,728,729],{"class":538}," async",[532,731,732],{"class":538}," function",[532,734,735],{"class":571}," renderer",[532,737,738],{"class":542},"({ ",[532,740,742],{"class":741},"sQHwn","url",[532,744,745],{"class":542}," }",[532,747,748],{"class":538},":",[532,750,751],{"class":542}," { ",[532,753,754],{"class":741},"req",[532,756,748],{"class":538},[532,758,759],{"class":571}," Request",[532,761,762],{"class":542},"; ",[532,764,742],{"class":741},[532,766,748],{"class":538},[532,768,769],{"class":571}," URL",[532,771,772],{"class":542}," }) {\n",[532,774,775,778,781,784,787,790,793,796,799,802,805,808,811,814,817,820],{"class":534,"line":578},[532,776,777],{"class":538},"  const",[532,779,780],{"class":623}," apiRes",[532,782,783],{"class":538}," =",[532,785,786],{"class":538}," await",[532,788,789],{"class":571}," fetch",[532,791,792],{"class":542},"(",[532,794,795],{"class":549},"\"\u002Fapi\u002Fhello\"",[532,797,798],{"class":542},").",[532,800,801],{"class":571},"then",[532,803,804],{"class":542},"((",[532,806,807],{"class":741},"res",[532,809,810],{"class":542},") ",[532,812,813],{"class":538},"=>",[532,815,816],{"class":542}," res.",[532,818,819],{"class":571},"text",[532,821,822],{"class":542},"());\n",[532,824,825,828,831,834],{"class":534,"line":590},[532,826,827],{"class":538},"  return",[532,829,830],{"class":538}," new",[532,832,833],{"class":571}," Response",[532,835,836],{"class":542},"(\n",[532,838,839,843],{"class":534,"line":602},[532,840,842],{"class":841},"sCsY4","    \u002F* html *\u002F",[532,844,845],{"class":549}," `\u003C!DOCTYPE html>\n",[532,847,848],{"class":534,"line":670},[532,849,850],{"class":549},"    \u003Chtml>\n",[532,852,853],{"class":534,"line":678},[532,854,855],{"class":549},"    \u003Chead>\n",[532,857,858],{"class":534,"line":689},[532,859,860],{"class":549},"      \u003Ctitle>Custom Renderer\u003C\u002Ftitle>\n",[532,862,863],{"class":534,"line":695},[532,864,865],{"class":549},"    \u003C\u002Fhead>\n",[532,867,869],{"class":534,"line":868},11,[532,870,871],{"class":549},"    \u003Cbody>\n",[532,873,875],{"class":534,"line":874},12,[532,876,877],{"class":549},"      \u003Ch1>Hello from custom renderer!\u003C\u002Fh1>\n",[532,879,881,884,886,889,892],{"class":534,"line":880},13,[532,882,883],{"class":549},"      \u003Cp>Current path: ${",[532,885,742],{"class":542},[532,887,888],{"class":549},".",[532,890,891],{"class":542},"pathname",[532,893,894],{"class":549},"}\u003C\u002Fp>\n",[532,896,898,901,904],{"class":534,"line":897},14,[532,899,900],{"class":549},"      \u003Cp>API says: ${",[532,902,903],{"class":542},"apiRes",[532,905,894],{"class":549},[532,907,909],{"class":534,"line":908},15,[532,910,911],{"class":549},"    \u003C\u002Fbody>\n",[532,913,915,918],{"class":534,"line":914},16,[532,916,917],{"class":549},"    \u003C\u002Fhtml>`",[532,919,587],{"class":542},[532,921,923,926,929,931,934],{"class":534,"line":922},17,[532,924,925],{"class":542},"    { headers: { ",[532,927,928],{"class":549},"\"content-type\"",[532,930,627],{"class":542},[532,932,933],{"class":549},"\"text\u002Fhtml; charset=utf-8\"",[532,935,936],{"class":542}," } }\n",[532,938,940],{"class":534,"line":939},18,[532,941,942],{"class":542},"  );\n",[532,944,946],{"class":534,"line":945},19,[532,947,698],{"class":542},[522,949,952],{"className":608,"code":950,"filename":951,"language":611,"meta":5,"style":5},"{\n  \"extends\": \"nitro\u002Ftsconfig\"\n}\n","tsconfig.json",[529,953,954,958,968],{"__ignoreMap":5},[532,955,956],{"class":534,"line":535},[532,957,618],{"class":542},[532,959,960,963,965],{"class":534,"line":556},[532,961,962],{"class":623},"  \"extends\"",[532,964,627],{"class":542},[532,966,967],{"class":549},"\"nitro\u002Ftsconfig\"\n",[532,969,970],{"class":534,"line":562},[532,971,698],{"class":542},[522,973,976],{"className":524,"code":974,"filename":975,"language":527,"meta":5,"style":5},"import { defineConfig } from \"vite\";\nimport { nitro } from \"nitro\u002Fvite\";\n\nexport default defineConfig({ plugins: [nitro()] });\n","vite.config.ts",[529,977,978,991,1005,1009],{"__ignoreMap":5},[532,979,980,982,984,986,989],{"class":534,"line":535},[532,981,539],{"class":538},[532,983,543],{"class":542},[532,985,546],{"class":538},[532,987,988],{"class":549}," \"vite\"",[532,990,553],{"class":542},[532,992,993,995,998,1000,1003],{"class":534,"line":556},[532,994,539],{"class":538},[532,996,997],{"class":542}," { nitro } ",[532,999,546],{"class":538},[532,1001,1002],{"class":549}," \"nitro\u002Fvite\"",[532,1004,553],{"class":542},[532,1006,1007],{"class":534,"line":562},[532,1008,559],{"emptyLinePlaceholder":411},[532,1010,1011,1013,1015,1017,1020,1023],{"class":534,"line":578},[532,1012,565],{"class":538},[532,1014,568],{"class":538},[532,1016,572],{"class":571},[532,1018,1019],{"class":542},"({ plugins: [",[532,1021,1022],{"class":571},"nitro",[532,1024,1025],{"class":542},"()] });\n",[522,1027,1030],{"className":524,"code":1028,"filename":1029,"language":527,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler(() => \"Nitro is amazing!\");\n","api\u002Fhello.ts",[529,1031,1032,1045,1049],{"__ignoreMap":5},[532,1033,1034,1036,1039,1041,1043],{"class":534,"line":535},[532,1035,539],{"class":538},[532,1037,1038],{"class":542}," { defineHandler } ",[532,1040,546],{"class":538},[532,1042,550],{"class":549},[532,1044,553],{"class":542},[532,1046,1047],{"class":534,"line":556},[532,1048,559],{"emptyLinePlaceholder":411},[532,1050,1051,1053,1055,1058,1061,1063,1066],{"class":534,"line":562},[532,1052,565],{"class":538},[532,1054,568],{"class":538},[532,1056,1057],{"class":571}," defineHandler",[532,1059,1060],{"class":542},"(() ",[532,1062,813],{"class":538},[532,1064,1065],{"class":549}," \"Nitro is amazing!\"",[532,1067,1068],{"class":542},");\n",[1070,1071,1072,1073,1076],"p",{},"Create a custom renderer that generates HTML responses with data from API routes. Use Nitro's internal ",[529,1074,1075],{},"fetch"," to call routes without network overhead.",[1078,1079,18],"h2",{"id":1080},"renderer",[522,1082,1083],{"className":524,"code":701,"filename":520,"language":527,"meta":5,"style":5},[529,1084,1085,1097,1101,1139,1173,1183,1189,1193,1197,1201,1205,1209,1213,1225,1233,1237,1243,1255,1259],{"__ignoreMap":5},[532,1086,1087,1089,1091,1093,1095],{"class":534,"line":535},[532,1088,539],{"class":538},[532,1090,710],{"class":542},[532,1092,546],{"class":538},[532,1094,550],{"class":549},[532,1096,553],{"class":542},[532,1098,1099],{"class":534,"line":556},[532,1100,559],{"emptyLinePlaceholder":411},[532,1102,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137],{"class":534,"line":562},[532,1104,565],{"class":538},[532,1106,568],{"class":538},[532,1108,729],{"class":538},[532,1110,732],{"class":538},[532,1112,735],{"class":571},[532,1114,738],{"class":542},[532,1116,742],{"class":741},[532,1118,745],{"class":542},[532,1120,748],{"class":538},[532,1122,751],{"class":542},[532,1124,754],{"class":741},[532,1126,748],{"class":538},[532,1128,759],{"class":571},[532,1130,762],{"class":542},[532,1132,742],{"class":741},[532,1134,748],{"class":538},[532,1136,769],{"class":571},[532,1138,772],{"class":542},[532,1140,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171],{"class":534,"line":578},[532,1142,777],{"class":538},[532,1144,780],{"class":623},[532,1146,783],{"class":538},[532,1148,786],{"class":538},[532,1150,789],{"class":571},[532,1152,792],{"class":542},[532,1154,795],{"class":549},[532,1156,798],{"class":542},[532,1158,801],{"class":571},[532,1160,804],{"class":542},[532,1162,807],{"class":741},[532,1164,810],{"class":542},[532,1166,813],{"class":538},[532,1168,816],{"class":542},[532,1170,819],{"class":571},[532,1172,822],{"class":542},[532,1174,1175,1177,1179,1181],{"class":534,"line":590},[532,1176,827],{"class":538},[532,1178,830],{"class":538},[532,1180,833],{"class":571},[532,1182,836],{"class":542},[532,1184,1185,1187],{"class":534,"line":602},[532,1186,842],{"class":841},[532,1188,845],{"class":549},[532,1190,1191],{"class":534,"line":670},[532,1192,850],{"class":549},[532,1194,1195],{"class":534,"line":678},[532,1196,855],{"class":549},[532,1198,1199],{"class":534,"line":689},[532,1200,860],{"class":549},[532,1202,1203],{"class":534,"line":695},[532,1204,865],{"class":549},[532,1206,1207],{"class":534,"line":868},[532,1208,871],{"class":549},[532,1210,1211],{"class":534,"line":874},[532,1212,877],{"class":549},[532,1214,1215,1217,1219,1221,1223],{"class":534,"line":880},[532,1216,883],{"class":549},[532,1218,742],{"class":542},[532,1220,888],{"class":549},[532,1222,891],{"class":542},[532,1224,894],{"class":549},[532,1226,1227,1229,1231],{"class":534,"line":897},[532,1228,900],{"class":549},[532,1230,903],{"class":542},[532,1232,894],{"class":549},[532,1234,1235],{"class":534,"line":908},[532,1236,911],{"class":549},[532,1238,1239,1241],{"class":534,"line":914},[532,1240,917],{"class":549},[532,1242,587],{"class":542},[532,1244,1245,1247,1249,1251,1253],{"class":534,"line":922},[532,1246,925],{"class":542},[532,1248,928],{"class":549},[532,1250,627],{"class":542},[532,1252,933],{"class":549},[532,1254,936],{"class":542},[532,1256,1257],{"class":534,"line":939},[532,1258,942],{"class":542},[532,1260,1261],{"class":534,"line":945},[532,1262,698],{"class":542},[1070,1264,1265,1266,1268,1269,888],{},"Nitro auto-detects ",[529,1267,520],{}," in your project root and uses it for all non-API routes. The renderer function receives the request URL and returns a ",[529,1270,1271],{},"Response",[1070,1273,1274,1275,1277,1278,1280],{},"Use ",[529,1276,1075],{}," from ",[529,1279,1022],{}," to call API routes without network overhead—these requests stay in-process.",[1078,1282,1284],{"id":1283},"api-route","API Route",[522,1286,1287],{"className":524,"code":1028,"filename":1029,"language":527,"meta":5,"style":5},[529,1288,1289,1301,1305],{"__ignoreMap":5},[532,1290,1291,1293,1295,1297,1299],{"class":534,"line":535},[532,1292,539],{"class":538},[532,1294,1038],{"class":542},[532,1296,546],{"class":538},[532,1298,550],{"class":549},[532,1300,553],{"class":542},[532,1302,1303],{"class":534,"line":556},[532,1304,559],{"emptyLinePlaceholder":411},[532,1306,1307,1309,1311,1313,1315,1317,1319],{"class":534,"line":562},[532,1308,565],{"class":538},[532,1310,568],{"class":538},[532,1312,1057],{"class":571},[532,1314,1060],{"class":542},[532,1316,813],{"class":538},[532,1318,1065],{"class":549},[532,1320,1068],{"class":542},[1070,1322,1323,1324,1327,1328,1331],{},"Define API routes in the ",[529,1325,1326],{},"api\u002F"," directory. When the renderer calls ",[529,1329,1330],{},"fetch(\"\u002Fapi\u002Fhello\")",", this handler runs and returns its response.",[1078,1333,1335],{"id":1334},"learn-more","Learn More",[1337,1338,1339],"ul",{},[1340,1341,1342],"li",{},[1343,1344,18],"a",{"href":19},[1346,1347,1348],"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 .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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":556,"depth":556,"links":1350},[1351,1352,1353],{"id":1080,"depth":556,"text":18},{"id":1283,"depth":556,"text":1284},{"id":1334,"depth":556,"text":1335},"md",{"automd":411,"category":451,"icon":314},{"icon":314},{"title":311,"description":459},"pB5NSlU9xhxfDCvcvInI1R4uIwTt7OyQkoOCAgF9pD0",[1360,1361],{"title":53,"path":307,"stem":308,"description":456,"icon":309,"children":-1},{"title":316,"path":317,"stem":318,"description":462,"icon":319,"children":-1},1784141542322]