[{"data":1,"prerenderedAt":1648},["ShallowReactive",2],{"navigation":3,"/blog":402,"$nbyvB7OeNw":419},[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":388,"body":404,"description":5,"extension":414,"meta":415,"navigation":416,"path":389,"seo":417,"stem":393,"__hash__":418},"content/9.blog/index.md",{"type":405,"value":406,"toc":411,"icon":394},"minimark",[407],[408,409,410],"p",{},"Nitro blog posts.",{"title":5,"searchDepth":412,"depth":412,"links":413},2,[],"md",{"icon":394},{"icon":394},{"title":388,"description":5},"HAUjglpg2Z-BF1cW65KtOrFgjOiZnudO2iL7l76T1P0",[420],{"id":421,"title":396,"body":422,"description":1637,"extension":414,"meta":1638,"navigation":1645,"path":397,"seo":1646,"stem":398,"__hash__":1647},"content/9.blog/1.v3-beta.md",{"type":405,"value":423,"toc":1615,"icon":394},[424,429,440,455,494,502,506,531,534,549,555,559,567,655,662,692,708,712,715,737,751,757,770,777,838,845,849,856,954,958,996,999,1084,1087,1164,1167,1182,1186,1193,1210,1214,1223,1283,1286,1290,1293,1360,1362,1365,1373,1430,1432,1436,1442,1455,1458,1462,1465,1468,1470,1474,1481,1489,1498,1502,1506,1510,1517,1521,1524,1581,1587,1590,1593,1611],[425,426,428],"h2",{"id":427},"a-brief-history","A Brief History",[408,430,431,432,439],{},"Nitro started as the server engine for ",[433,434,438],"a",{"href":435,"rel":436},"https://nuxt.com",[437],"nofollow","Nuxt 3",", designed to solve a specific problem: deployment-agnostic servers.\nOver time, Nitro grew beyond Nuxt. It became the foundation for many meta-frameworks and a toolkit for building standalone servers.",[408,441,442,443,448,449,454],{},"With Nitro v3, we took the opportunity to rethink the fundamentals. leaner APIs, Web standards, first-class ",[433,444,447],{"href":445,"rel":446},"https://rolldown.rs/",[437],"Rolldown"," and ",[433,450,453],{"href":451,"rel":452},"https://vite.dev/",[437],"Vite v8"," integration, and a better experience for both humans and agents (more on that later!)",[408,456,457,458,463,464,469,470,475,476,481,482,487,488,493],{},"Since we quietly announced v3 ",[433,459,462],{"href":460,"rel":461},"https://github.com/nitrojs/nitro/releases/tag/v3.0.1-alpha.0",[437],"alpha.0"," (11 Oct 2025) at the first ",[433,465,468],{"href":466,"rel":467},"https://viteconf.amsterdam/",[437],"Vite Conf",", Nitro v3 has been adopted by many users (",[433,471,474],{"href":472,"rel":473},"https://npmtrends.com/nitro-vs-nitro-nightly",[437],"~280k"," weekly downloads!) and refined through amazing contributions and feedback. including ",[433,477,480],{"href":478,"rel":479},"https://tanstack.com/start/latest/docs/framework/react/guide/hosting#nitro",[437],"Tanstack Start",", ",[433,483,486],{"href":484,"rel":485},"https://useworkflow.dev/docs/getting-started",[437],"Vercel Workflows",", and production apps like ",[433,489,492],{"href":490,"rel":491},"https://t3.chat/",[437],"T3Chat",".",[408,495,496,497,501],{},"A huge thanks to the VoidZero (Vite and Rolldown), Nuxt (",[433,498,500],{"href":499},"#nuxt-v5","v5 is coming!",") and TanStack Start teams and every contributor who helped bring Nitro v3 to this milestone. ❤️",[425,503,505],{"id":504},"why-build-servers","Why Build Servers?",[408,507,508,509,513,514,517,518,521,522,525,526,530],{},"We don't ship raw source files to the browser. We use build tools because they solve real problems: ",[510,511,512],"strong",{},"HMR"," for instant feedback, ",[510,515,516],{},"code splitting"," to load only what a route needs, ",[510,519,520],{},"tree shaking"," to eliminate dead code, and ",[510,523,524],{},"minification"," for smaller payloads. Tools like Webpack and then ",[433,527,529],{"href":451,"rel":528},[437],"Vite"," transformed frontend development from painful to productive.",[408,532,533],{},"But frontend apps don't exist in isolation, they need APIs, databases, authentication, real-time data. They need a server.",[408,535,536,537,540,541,544,545,548],{},"With the rise of serverless and edge computing, the server side now faces the same constraints the frontend solved years ago. ",[510,538,539],{},"Cold starts"," mean every millisecond of startup matters. ",[510,542,543],{},"Memory limits"," are strict — bloated dependencies can push you over. ",[510,546,547],{},"Bundle size"," directly impacts deploy speed and boot time. And your code needs to run everywhere: Node.js, Deno, Bun, Cloudflare Workers, Vercel, etc. Yet most server frameworks still ship unoptimized, unbundled code, assuming a long-running process where none of this matters.",[408,550,551,552],{},"Nitro brings the build-tool philosophy to the backend. The same great DX you expect from frontend tooling: HMR for fast iteration and optimized builds powered by Rolldown with tree-shaken production output that performs as close to bare-metal as possible. ",[510,553,554],{},"One codebase, any runtime, any platform.",[425,556,558],{"id":557},"first-class-vite-integration","⚡ First-Class Vite Integration",[408,560,561,562,566],{},"Nitro now has a native ",[433,563,529],{"href":564,"rel":565},"https://vite.dev",[437]," plugin to build full stack apps.",[568,569,574],"pre",{"className":570,"code":571,"filename":572,"language":573,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"vite\";\nimport { nitro } from \"nitro/vite\";\n\nexport default defineConfig({\n  plugins: [nitro()],\n});\n","vite.config.ts","ts",[575,576,577,600,614,621,637,649],"code",{"__ignoreMap":5},[578,579,582,586,590,593,597],"span",{"class":580,"line":581},"line",1,[578,583,585],{"class":584},"so5gQ","import",[578,587,589],{"class":588},"slsVL"," { defineConfig } ",[578,591,592],{"class":584},"from",[578,594,596],{"class":595},"sfrk1"," \"vite\"",[578,598,599],{"class":588},";\n",[578,601,602,604,607,609,612],{"class":580,"line":412},[578,603,585],{"class":584},[578,605,606],{"class":588}," { nitro } ",[578,608,592],{"class":584},[578,610,611],{"class":595}," \"nitro/vite\"",[578,613,599],{"class":588},[578,615,617],{"class":580,"line":616},3,[578,618,620],{"emptyLinePlaceholder":619},true,"\n",[578,622,624,627,630,634],{"class":580,"line":623},4,[578,625,626],{"class":584},"export",[578,628,629],{"class":584}," default",[578,631,633],{"class":632},"shcOC"," defineConfig",[578,635,636],{"class":588},"({\n",[578,638,640,643,646],{"class":580,"line":639},5,[578,641,642],{"class":588},"  plugins: [",[578,644,645],{"class":632},"nitro",[578,647,648],{"class":588},"()],\n",[578,650,652],{"class":580,"line":651},6,[578,653,654],{"class":588},"});\n",[408,656,657,658,661],{},"Adding ",[575,659,660],{},"nitro()"," to your Vite apps gives you:",[663,664,665,672,678],"ul",{},[666,667,668,671],"li",{},[510,669,670],{},"API routes"," via filesystem routing",[666,673,674,677],{},[510,675,676],{},"Server-side rendering"," integrated with your frontend build",[666,679,680,683,684,687,688,691],{},[510,681,682],{},"A production server"," — a single ",[575,685,686],{},"vite build"," produces an optimized ",[575,689,690],{},".output/"," folder with both frontend and backend, ready to deploy",[408,693,694,695,698,699,481,702,448,705,493],{},"This means you can add a full backend to any Vite project — See ",[433,696,697],{"href":234},"examples"," with ",[433,700,701],{"href":357},"React",[433,703,704],{"href":375},"Vue",[433,706,707],{"href":361},"Solid.js",[425,709,711],{"id":710},"performance-by-default-zero-bloat","🚀 Performance by Default, Zero Bloat",[408,713,714],{},"Nitro compiles your routes at build time. There is no runtime router — each route loads on demand. Only the code needed to handle a specific request is loaded and executed.",[408,716,717,718,721,722,725,726,731,732,493],{},"Minimal server bundle built with the ",[575,719,720],{},"standard"," preset is less than ",[575,723,724],{},"10kB",", can be served with ",[433,727,730],{"href":728,"rel":729},"https://srvx.h3.dev/",[437],"srvx"," at close to native speeds, and includes all the good features from ",[433,733,736],{"href":734,"rel":735},"https://h3.dev/",[437],"H3",[408,738,739,740,745,746,493],{},"We have also significantly reduced the number of dependencies, down to ",[433,741,744],{"href":742,"rel":743},"https://npmgraph.js.org/?q=nitro-nightly",[437],"less than 20"," from ",[433,747,750],{"href":748,"rel":749},"https://npmgraph.js.org/?q=nitropack",[437],"321 dependencies",[425,752,754,755],{"id":753},"️-new-identity-nitro","🖌️ New Identity: ",[575,756,645],{},[408,758,759,760,766,767,493],{},"Nitro v3 ships under a new NPM package: ",[433,761,764],{"href":762,"rel":763},"https://npmx.dev/package/nitro",[437],[575,765,645],{},", replacing the legacy ",[575,768,769],{},"nitropack",[408,771,772,773,776],{},"All imports now use clean ",[575,774,775],{},"nitro/*"," subpaths:",[568,778,780],{"className":570,"code":779,"language":573,"meta":5,"style":5},"import { defineNitroConfig } from \"nitro/config\";\nimport { defineHandler } from \"nitro\";\nimport { useStorage } from \"nitro/storage\";\nimport { useDatabase } from \"nitro/database\";\n",[575,781,782,796,810,824],{"__ignoreMap":5},[578,783,784,786,789,791,794],{"class":580,"line":581},[578,785,585],{"class":584},[578,787,788],{"class":588}," { defineNitroConfig } ",[578,790,592],{"class":584},[578,792,793],{"class":595}," \"nitro/config\"",[578,795,599],{"class":588},[578,797,798,800,803,805,808],{"class":580,"line":412},[578,799,585],{"class":584},[578,801,802],{"class":588}," { defineHandler } ",[578,804,592],{"class":584},[578,806,807],{"class":595}," \"nitro\"",[578,809,599],{"class":588},[578,811,812,814,817,819,822],{"class":580,"line":616},[578,813,585],{"class":584},[578,815,816],{"class":588}," { useStorage } ",[578,818,592],{"class":584},[578,820,821],{"class":595}," \"nitro/storage\"",[578,823,599],{"class":588},[578,825,826,828,831,833,836],{"class":580,"line":623},[578,827,585],{"class":584},[578,829,830],{"class":588}," { useDatabase } ",[578,832,592],{"class":584},[578,834,835],{"class":595}," \"nitro/database\"",[578,837,599],{"class":588},[408,839,840,841,844],{},"No more deep ",[575,842,843],{},"nitropack/runtime/*"," paths, plus, you can import nitro subpaths outside of builder useful for unit testing.",[425,846,848],{"id":847},"bring-your-own-framework","🔧 Bring Your Own Framework",[408,850,851,852,855],{},"Nitro v3 is not opinionated about your HTTP layer. You can use the built-in filesystem routing, or take full control with a ",[575,853,854],{},"server.ts"," entry file and bring any framework you prefer:",[568,857,859],{"className":570,"code":858,"filename":854,"language":573,"meta":5,"style":5},"import { Hono } from \"hono\";\n\nconst app = new Hono();\napp.get(\"/\", (c) => c.text(\"Hello from Hono!\"));\n\nexport default app;\n",[575,860,861,875,879,900,941,945],{"__ignoreMap":5},[578,862,863,865,868,870,873],{"class":580,"line":581},[578,864,585],{"class":584},[578,866,867],{"class":588}," { Hono } ",[578,869,592],{"class":584},[578,871,872],{"class":595}," \"hono\"",[578,874,599],{"class":588},[578,876,877],{"class":580,"line":412},[578,878,620],{"emptyLinePlaceholder":619},[578,880,881,884,888,891,894,897],{"class":580,"line":616},[578,882,883],{"class":584},"const",[578,885,887],{"class":886},"suiK_"," app",[578,889,890],{"class":584}," =",[578,892,893],{"class":584}," new",[578,895,896],{"class":632}," Hono",[578,898,899],{"class":588},"();\n",[578,901,902,905,908,911,914,917,921,924,927,930,933,935,938],{"class":580,"line":623},[578,903,904],{"class":588},"app.",[578,906,907],{"class":632},"get",[578,909,910],{"class":588},"(",[578,912,913],{"class":595},"\"/\"",[578,915,916],{"class":588},", (",[578,918,920],{"class":919},"sQHwn","c",[578,922,923],{"class":588},") ",[578,925,926],{"class":584},"=>",[578,928,929],{"class":588}," c.",[578,931,932],{"class":632},"text",[578,934,910],{"class":588},[578,936,937],{"class":595},"\"Hello from Hono!\"",[578,939,940],{"class":588},"));\n",[578,942,943],{"class":580,"line":639},[578,944,620],{"emptyLinePlaceholder":619},[578,946,947,949,951],{"class":580,"line":651},[578,948,626],{"class":584},[578,950,629],{"class":584},[578,952,953],{"class":588}," app;\n",[425,955,957],{"id":956},"h3-v2-with-web-standards","🌐 H3 (v2) with Web Standards",[408,959,960,961,966,967,481,974,481,981,988,989,493],{},"Nitro v3 upgrades to ",[433,962,965],{"href":963,"rel":964},"https://h3.dev",[437],"H3 v2",", which has been fully rewritten around web standard primitives — ",[433,968,971],{"href":969,"rel":970},"https://developer.mozilla.org/en-US/docs/Web/API/Request",[437],[575,972,973],{},"Request",[433,975,978],{"href":976,"rel":977},"https://developer.mozilla.org/en-US/docs/Web/API/Response",[437],[575,979,980],{},"Response",[433,982,985],{"href":983,"rel":984},"https://developer.mozilla.org/en-US/docs/Web/API/Headers",[437],[575,986,987],{},"Headers",", and ",[433,990,993],{"href":991,"rel":992},"https://developer.mozilla.org/en-US/docs/Web/API/URL",[437],[575,994,995],{},"URL",[408,997,998],{},"The result is cleaner, more portable server code:",[568,1000,1003],{"className":570,"code":1001,"filename":1002,"language":573,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  const ua = event.req.headers.get(\"user-agent\");\n  return { message: \"Hello Nitro v3!\", ua };\n});\n","routes/hello.ts",[575,1004,1005,1017,1021,1043,1066,1080],{"__ignoreMap":5},[578,1006,1007,1009,1011,1013,1015],{"class":580,"line":581},[578,1008,585],{"class":584},[578,1010,802],{"class":588},[578,1012,592],{"class":584},[578,1014,807],{"class":595},[578,1016,599],{"class":588},[578,1018,1019],{"class":580,"line":412},[578,1020,620],{"emptyLinePlaceholder":619},[578,1022,1023,1025,1027,1030,1033,1036,1038,1040],{"class":580,"line":616},[578,1024,626],{"class":584},[578,1026,629],{"class":584},[578,1028,1029],{"class":632}," defineHandler",[578,1031,1032],{"class":588},"((",[578,1034,1035],{"class":919},"event",[578,1037,923],{"class":588},[578,1039,926],{"class":584},[578,1041,1042],{"class":588}," {\n",[578,1044,1045,1048,1051,1053,1056,1058,1060,1063],{"class":580,"line":623},[578,1046,1047],{"class":584},"  const",[578,1049,1050],{"class":886}," ua",[578,1052,890],{"class":584},[578,1054,1055],{"class":588}," event.req.headers.",[578,1057,907],{"class":632},[578,1059,910],{"class":588},[578,1061,1062],{"class":595},"\"user-agent\"",[578,1064,1065],{"class":588},");\n",[578,1067,1068,1071,1074,1077],{"class":580,"line":639},[578,1069,1070],{"class":584},"  return",[578,1072,1073],{"class":588}," { message: ",[578,1075,1076],{"class":595},"\"Hello Nitro v3!\"",[578,1078,1079],{"class":588},", ua };\n",[578,1081,1082],{"class":580,"line":651},[578,1083,654],{"class":588},[408,1085,1086],{},"Reading request bodies uses native APIs:",[568,1088,1091],{"className":570,"code":1089,"filename":1090,"language":573,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler(async (event) => {\n  const body = await event.req.json();\n  return { received: body };\n});\n","routes/submit.ts",[575,1092,1093,1105,1109,1133,1153,1160],{"__ignoreMap":5},[578,1094,1095,1097,1099,1101,1103],{"class":580,"line":581},[578,1096,585],{"class":584},[578,1098,802],{"class":588},[578,1100,592],{"class":584},[578,1102,807],{"class":595},[578,1104,599],{"class":588},[578,1106,1107],{"class":580,"line":412},[578,1108,620],{"emptyLinePlaceholder":619},[578,1110,1111,1113,1115,1117,1119,1122,1125,1127,1129,1131],{"class":580,"line":616},[578,1112,626],{"class":584},[578,1114,629],{"class":584},[578,1116,1029],{"class":632},[578,1118,910],{"class":588},[578,1120,1121],{"class":584},"async",[578,1123,1124],{"class":588}," (",[578,1126,1035],{"class":919},[578,1128,923],{"class":588},[578,1130,926],{"class":584},[578,1132,1042],{"class":588},[578,1134,1135,1137,1140,1142,1145,1148,1151],{"class":580,"line":623},[578,1136,1047],{"class":584},[578,1138,1139],{"class":886}," body",[578,1141,890],{"class":584},[578,1143,1144],{"class":584}," await",[578,1146,1147],{"class":588}," event.req.",[578,1149,1150],{"class":632},"json",[578,1152,899],{"class":588},[578,1154,1155,1157],{"class":580,"line":639},[578,1156,1070],{"class":584},[578,1158,1159],{"class":588}," { received: body };\n",[578,1161,1162],{"class":580,"line":651},[578,1163,654],{"class":588},[408,1165,1166],{},"No wrappers, no abstractions for things the platform already provides. If you know the Web API, you know H3 v2.",[408,1168,1169,481,1173,481,1177,1181],{},[433,1170,264],{"href":1171,"rel":1172},"https://elysiajs.com/",[437],[433,1174,1176],{"href":963,"rel":1175},[437],"h3",[433,1178,284],{"href":1179,"rel":1180},"https://hono.dev",[437]," — anything that speaks web standards works with Nitro.",[425,1183,1185],{"id":1184},"️-built-in-primitives","🗄️ Built-in Primitives",[408,1187,1188,1189,1192],{},"Nitro ships with powerful but small and ",[510,1190,1191],{},"fully opt-in"," agnostic server primitives that work across every runtime.",[1194,1195,1196],"note",{},[408,1197,1198,1199,448,1204,1209],{},"When not used, nothing extra will be added to the server bundle. You can still use native platform primitives alongside Nitro's built-in ones.\nWe are also bringing first class emulation for platform-specific primitives for dev See ",[433,1200,1203],{"href":1201,"rel":1202},"https://github.com/unjs/env-runner",[437],"env-runner",[433,1205,1208],{"href":1206,"rel":1207},"https://github.com/nitrojs/nitro/pull/4088",[437],"nitrojs/nitro#4088"," for more details.",[1176,1211,1213],{"id":1212},"storage","Storage",[408,1215,1216,1217,1222],{},"A runtime-agnostic key-value layer with 20+ drivers — FS, Redis, S3, Cloudflare KV, Vercel Blob and ",[433,1218,1221],{"href":1219,"rel":1220},"https://unstorage.unjs.io/drivers",[437],"more",". Attach drivers to namespaces and swap them without changing your application code.",[568,1224,1226],{"className":570,"code":1225,"language":573,"meta":5,"style":5},"import { useStorage } from \"nitro/storage\";\n\nconst storage = useStorage();\nawait storage.setItem(\"user:1\", { name: \"Nitro\" });\n",[575,1227,1228,1240,1244,1258],{"__ignoreMap":5},[578,1229,1230,1232,1234,1236,1238],{"class":580,"line":581},[578,1231,585],{"class":584},[578,1233,816],{"class":588},[578,1235,592],{"class":584},[578,1237,821],{"class":595},[578,1239,599],{"class":588},[578,1241,1242],{"class":580,"line":412},[578,1243,620],{"emptyLinePlaceholder":619},[578,1245,1246,1248,1251,1253,1256],{"class":580,"line":616},[578,1247,883],{"class":584},[578,1249,1250],{"class":886}," storage",[578,1252,890],{"class":584},[578,1254,1255],{"class":632}," useStorage",[578,1257,899],{"class":588},[578,1259,1260,1263,1266,1269,1271,1274,1277,1280],{"class":580,"line":623},[578,1261,1262],{"class":584},"await",[578,1264,1265],{"class":588}," storage.",[578,1267,1268],{"class":632},"setItem",[578,1270,910],{"class":588},[578,1272,1273],{"class":595},"\"user:1\"",[578,1275,1276],{"class":588},", { name: ",[578,1278,1279],{"class":595},"\"Nitro\"",[578,1281,1282],{"class":588}," });\n",[1284,1285],"read-more",{"to":79},[1176,1287,1289],{"id":1288},"caching","Caching",[408,1291,1292],{},"Cache server routes and functions, backed by the storage layer. Supports stale-while-revalidate, TTL, and custom cache keys out of the box.",[568,1294,1296],{"className":570,"code":1295,"language":573,"meta":5,"style":5},"import { defineCachedHandler } from \"nitro/cache\";\n\nexport default defineCachedHandler((event) => {\n  return \"I am cached for an hour\";\n}, { maxAge: 60 * 60 });\n",[575,1297,1298,1312,1316,1335,1344],{"__ignoreMap":5},[578,1299,1300,1302,1305,1307,1310],{"class":580,"line":581},[578,1301,585],{"class":584},[578,1303,1304],{"class":588}," { defineCachedHandler } ",[578,1306,592],{"class":584},[578,1308,1309],{"class":595}," \"nitro/cache\"",[578,1311,599],{"class":588},[578,1313,1314],{"class":580,"line":412},[578,1315,620],{"emptyLinePlaceholder":619},[578,1317,1318,1320,1322,1325,1327,1329,1331,1333],{"class":580,"line":616},[578,1319,626],{"class":584},[578,1321,629],{"class":584},[578,1323,1324],{"class":632}," defineCachedHandler",[578,1326,1032],{"class":588},[578,1328,1035],{"class":919},[578,1330,923],{"class":588},[578,1332,926],{"class":584},[578,1334,1042],{"class":588},[578,1336,1337,1339,1342],{"class":580,"line":623},[578,1338,1070],{"class":584},[578,1340,1341],{"class":595}," \"I am cached for an hour\"",[578,1343,599],{"class":588},[578,1345,1346,1349,1352,1355,1358],{"class":580,"line":639},[578,1347,1348],{"class":588},"}, { maxAge: ",[578,1350,1351],{"class":886},"60",[578,1353,1354],{"class":584}," *",[578,1356,1357],{"class":886}," 60",[578,1359,1282],{"class":588},[1284,1361],{"to":74},[1176,1363,38],{"id":1364},"database",[408,1366,1367,1368,1372],{},"A built-in SQL database that defaults to SQLite for development and can connect to Postgres, MySQL, and ",[433,1369,1221],{"href":1370,"rel":1371},"https://db0.unjs.io/connectors",[437]," using the same API.",[568,1374,1376],{"className":570,"code":1375,"language":573,"meta":5,"style":5},"import { useDatabase } from \"nitro/database\";\n\nconst db = useDatabase();\nconst users = await db.sql`SELECT * FROM users`;\n",[575,1377,1378,1390,1394,1408],{"__ignoreMap":5},[578,1379,1380,1382,1384,1386,1388],{"class":580,"line":581},[578,1381,585],{"class":584},[578,1383,830],{"class":588},[578,1385,592],{"class":584},[578,1387,835],{"class":595},[578,1389,599],{"class":588},[578,1391,1392],{"class":580,"line":412},[578,1393,620],{"emptyLinePlaceholder":619},[578,1395,1396,1398,1401,1403,1406],{"class":580,"line":616},[578,1397,883],{"class":584},[578,1399,1400],{"class":886}," db",[578,1402,890],{"class":584},[578,1404,1405],{"class":632}," useDatabase",[578,1407,899],{"class":588},[578,1409,1410,1412,1415,1417,1419,1422,1425,1428],{"class":580,"line":623},[578,1411,883],{"class":584},[578,1413,1414],{"class":886}," users",[578,1416,890],{"class":584},[578,1418,1144],{"class":584},[578,1420,1421],{"class":588}," db.",[578,1423,1424],{"class":632},"sql",[578,1426,1427],{"class":595},"`SELECT * FROM users`",[578,1429,599],{"class":588},[1284,1431],{"to":39},[425,1433,1435],{"id":1434},"deploy-anywhere","🌍 Deploy Anywhere",[408,1437,1438,1439,1441],{},"Build your server into an optimized ",[575,1440,690],{}," folder compatible with:",[663,1443,1444,1449],{},[666,1445,1446,1448],{},[510,1447,101],{},": Node.js, Bun, Deno",[666,1450,1451,1454],{},[510,1452,1453],{},"Platforms",": Cloudflare Workers, Netlify, Vercel, AWS Lambda, Azure, Firebase, Deno Deploy, and more",[408,1456,1457],{},"No configuration needed — Nitro auto-detects your deployment target. Take advantage of platform features like ISR, SWR, and edge rendering without changing a single line of code.",[425,1459,1461],{"id":1460},"server-side-rendering","🎨 Server-Side Rendering",[408,1463,1464],{},"Render HTML with your favorite templating engine, or use component libraries like React, Vue, or Svelte directly on the server. Go full universal rendering with client-side hydration.",[408,1466,1467],{},"Nitro provides the foundation and a progressive approach — start with API routes, add rendering when you need it, and scale to full SSR at your own pace.",[1284,1469],{"to":19},[425,1471,1473],{"id":1472},"nuxt-v5","🟢 Nuxt v5",[408,1475,1476,1477,493],{},"Nitro v3 will power the next major version of ",[433,1478,1480],{"href":435,"rel":1479},[437],"Nuxt",[408,1482,1483,1488],{},[433,1484,1487],{"href":1485,"rel":1486},"https://nuxt.com/blog/roadmap-v4",[437],"Nuxt v5"," will ship with Nitro v3 and H3 v2 at its core, bringing web-standard request handling, Rolldown-powered builds, and the Vite Environment API to the Nuxt ecosystem.",[408,1490,1491,1492,1497],{},"If you're a Nuxt user, you can already start preparing by familiarizing yourself with  Nitro v3's new APIs, which will carry directly into Nuxt 5, and you can ",[433,1493,1496],{"href":1494,"rel":1495},"https://github.com/nuxt/nuxt/discussions/34504",[437],"follow progress"," on adopting Nitro v3 in Nuxt",[425,1499,1501],{"id":1500},"getting-started","🏁 Getting Started",[1176,1503,1505],{"id":1504},"create-a-new-project","Create a New Project",[1507,1508],"pm-x",{"command":1509},"create-nitro-app",[408,1511,1512,1513,1516],{},"See the ",[433,1514,1515],{"href":14},"quick start guide"," for a full step-by-step walkthrough.",[425,1518,1520],{"id":1519},"migrating-from-v2","🔄 Migrating from v2",[408,1522,1523],{},"Nitro v3 introduces intentional breaking changes to set a cleaner foundation. Here are the key ones:",[663,1525,1526,1534,1541,1550,1558,1565,1571],{},[666,1527,1528,1530,1531,1533],{},[575,1529,769],{}," → ",[575,1532,645],{}," (package rename)",[666,1535,1536,1530,1538,1540],{},[575,1537,843],{},[575,1539,775],{}," (clean subpath imports)",[666,1542,1543,1530,1546,1549],{},[575,1544,1545],{},"eventHandler",[575,1547,1548],{},"defineHandler"," (H3 v2)",[666,1551,1552,1530,1555,1549],{},[575,1553,1554],{},"createError",[575,1556,1557],{},"HTTPError",[666,1559,1560,1561,1564],{},"Web standard ",[575,1562,1563],{},"event.req"," headers and body APIs",[666,1566,1567,1568],{},"Node.js minimum version: ",[510,1569,1570],{},"20",[666,1572,1573,1574,1530,1577,1580],{},"Preset renames and consolidation (e.g., ",[575,1575,1576],{},"cloudflare",[575,1578,1579],{},"cloudflare_module",")",[408,1582,1583,1584,493],{},"For a complete list, see the ",[433,1585,1586],{"href":84},"migration guide",[1588,1589],"hr",{},[408,1591,1592],{},"Thank you to everyone who has contributed to Nitro over the years. We can't wait to see what you build with the new Nitro! ❤️",[663,1594,1595,1603],{},[666,1596,1597,1602],{},[433,1598,1601],{"href":1599,"rel":1600},"https://github.com/nitrojs/nitro",[437],"GitHub"," — Issues and discussions",[666,1604,1605,1610],{},[433,1606,1609],{"href":1607,"rel":1608},"https://discord.nitro.build",[437],"Discord"," — Chat with the community",[1612,1613,1614],"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}",{"title":5,"searchDepth":412,"depth":412,"links":1616},[1617,1618,1619,1620,1621,1623,1624,1625,1630,1631,1632,1633,1636],{"id":427,"depth":412,"text":428},{"id":504,"depth":412,"text":505},{"id":557,"depth":412,"text":558},{"id":710,"depth":412,"text":711},{"id":753,"depth":412,"text":1622},"🖌️ New Identity: nitro",{"id":847,"depth":412,"text":848},{"id":956,"depth":412,"text":957},{"id":1184,"depth":412,"text":1185,"children":1626},[1627,1628,1629],{"id":1212,"depth":616,"text":1213},{"id":1288,"depth":616,"text":1289},{"id":1364,"depth":616,"text":38},{"id":1434,"depth":412,"text":1435},{"id":1460,"depth":412,"text":1461},{"id":1472,"depth":412,"text":1473},{"id":1500,"depth":412,"text":1501,"children":1634},[1635],{"id":1504,"depth":616,"text":1505},{"id":1519,"depth":412,"text":1520},"Nitro v3 is now available as a public beta — a ground-up evolution of the server framework, built around web standards, Rolldown, Vite v8, and the same deploy-anywhere promise.",{"date":1639,"category":1640,"authors":1641,"icon":394},"2026-03-11","release",[1642],{"name":1643,"github":1644},"Pooya Parsa","pi0",{"icon":394},{"title":396,"description":1637},"Hb62Zadr-PaU06SzG7J4BDpm3lmOnHwUwKY8MosspyU",1776367068181]