nitro 3.0.1-alpha.2 → 3.0.260415-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +2 -2
  3. package/dist/THIRD-PARTY-LICENSES.md +1646 -0
  4. package/dist/_build/common.mjs +7261 -3812
  5. package/dist/_build/rolldown.mjs +32 -42
  6. package/dist/_build/rollup.mjs +28 -48
  7. package/dist/_build/vite.build.mjs +10 -10
  8. package/dist/_chunks/nitro.mjs +102 -327
  9. package/dist/_chunks/nitro2.mjs +8 -9
  10. package/dist/_chunks/nitro3.mjs +136 -0
  11. package/dist/_chunks/nitro4.mjs +127 -0
  12. package/dist/_chunks/utils.mjs +40 -29
  13. package/dist/_common.mjs +13 -25
  14. package/dist/_dev.d.mts +0 -3
  15. package/dist/{_chunks/dev.mjs → _dev.mjs} +132 -330
  16. package/dist/_libs/_.mjs +2 -0
  17. package/dist/_libs/_2.mjs +2 -0
  18. package/dist/_libs/_3.mjs +2 -0
  19. package/dist/_libs/_4.mjs +2 -0
  20. package/dist/_libs/_5.mjs +2 -0
  21. package/dist/_libs/_6.mjs +2 -0
  22. package/dist/_libs/_7.mjs +2 -0
  23. package/dist/_libs/c12+rc9.mjs +814 -0
  24. package/dist/_libs/{c12+giget+readdirp+chokidar.d.mts → c12+readdirp+chokidar.d.mts} +49 -40
  25. package/dist/_libs/citty.mjs +142 -41
  26. package/dist/_libs/commondir+is-reference.mjs +60 -56
  27. package/dist/_libs/compatx.d.mts +0 -2
  28. package/dist/_libs/compatx.mjs +1 -4
  29. package/dist/_libs/esbuild.d.mts +0 -1
  30. package/dist/_libs/escape-string-regexp.mjs +1 -4
  31. package/dist/_libs/{pluginutils+plugin-commonjs.d.mts → estree+pluginutils.d.mts} +0 -5
  32. package/dist/_libs/estree-walker.mjs +4 -92
  33. package/dist/_libs/exsolve.d.mts +1 -0
  34. package/dist/_libs/hasown+resolve+deepmerge.mjs +160 -246
  35. package/dist/_libs/httpxy.d.mts +20 -13
  36. package/dist/_libs/httpxy.mjs +519 -95
  37. package/dist/_libs/js-tokens.d.mts +1 -0
  38. package/dist/_libs/klona.mjs +1 -4
  39. package/dist/_libs/magic-string.d.mts +0 -2
  40. package/dist/_libs/mlly.d.mts +0 -2
  41. package/dist/_libs/nypm+tinyexec.mjs +822 -0
  42. package/dist/_libs/perfect-debounce.mjs +68 -0
  43. package/dist/_libs/pkg-types.d.mts +0 -3
  44. package/dist/_libs/plugin-alias.mjs +1 -5
  45. package/dist/_libs/plugin-inject.mjs +1 -7
  46. package/dist/_libs/plugin-json.mjs +1 -5
  47. package/dist/_libs/pluginutils.mjs +3 -35
  48. package/dist/_libs/readdirp+chokidar.mjs +187 -365
  49. package/dist/_libs/remapping.mjs +1 -5
  50. package/dist/_libs/resolve-uri+gen-mapping.mjs +15 -53
  51. package/dist/_libs/rou3.d.mts +1 -4
  52. package/dist/_libs/rou3.mjs +223 -78
  53. package/dist/_libs/std-env.d.mts +8 -2
  54. package/dist/_libs/strip-literal.d.mts +1 -0
  55. package/dist/_libs/tsconfck.mjs +21 -334
  56. package/dist/_libs/ultrahtml.mjs +3 -16
  57. package/dist/_libs/unimport+unplugin.mjs +244 -388
  58. package/dist/_libs/unplugin+unimport.d.mts +5 -15
  59. package/dist/_libs/unwasm.d.mts +0 -3
  60. package/dist/_presets.mjs +576 -488
  61. package/dist/builder.d.mts +5 -25
  62. package/dist/builder.mjs +3 -8
  63. package/dist/cli/_chunks/build.mjs +22 -25
  64. package/dist/cli/_chunks/common.mjs +1 -4
  65. package/dist/cli/_chunks/deploy.mjs +37 -0
  66. package/dist/cli/_chunks/dev.mjs +6 -11
  67. package/dist/cli/_chunks/docs.mjs +28 -0
  68. package/dist/cli/_chunks/list.mjs +4 -8
  69. package/dist/cli/_chunks/prepare.mjs +2 -6
  70. package/dist/cli/_chunks/preview.mjs +48 -0
  71. package/dist/cli/_chunks/run.mjs +7 -11
  72. package/dist/cli/_chunks/task.mjs +1 -5
  73. package/dist/cli/index.mjs +5 -6
  74. package/dist/docs/0.docs/0.index/index.md +56 -0
  75. package/dist/docs/0.docs/1.quick-start.md +110 -0
  76. package/dist/docs/0.docs/10.lifecycle.md +204 -0
  77. package/dist/docs/0.docs/11.openapi.md +291 -0
  78. package/dist/docs/0.docs/12.plugins.md +164 -0
  79. package/dist/docs/0.docs/13.tasks.md +277 -0
  80. package/dist/docs/0.docs/14.websocket.md +386 -0
  81. package/dist/docs/0.docs/15.migration.md +213 -0
  82. package/dist/docs/0.docs/16.nightly.md +31 -0
  83. package/dist/docs/0.docs/2.renderer.md +322 -0
  84. package/dist/docs/0.docs/3.routing.md +711 -0
  85. package/dist/docs/0.docs/4.server-entry.md +239 -0
  86. package/dist/docs/0.docs/5.cache.md +408 -0
  87. package/dist/docs/0.docs/6.storage.md +261 -0
  88. package/dist/docs/0.docs/7.assets.md +166 -0
  89. package/dist/docs/0.docs/8.configuration.md +256 -0
  90. package/dist/docs/0.docs/9.database.md +185 -0
  91. package/dist/docs/1.deploy/0.index/index.md +64 -0
  92. package/dist/docs/1.deploy/1.runtimes/0.node.md +63 -0
  93. package/dist/docs/1.deploy/1.runtimes/1.bun.md +15 -0
  94. package/dist/docs/1.deploy/1.runtimes/2.deno.md +19 -0
  95. package/dist/docs/1.deploy/2.providers/0.alwaysdata.md +50 -0
  96. package/dist/docs/1.deploy/2.providers/1.aws.md +47 -0
  97. package/dist/docs/1.deploy/2.providers/10.flightcontrol.md +67 -0
  98. package/dist/docs/1.deploy/2.providers/11.genezio.md +67 -0
  99. package/dist/docs/1.deploy/2.providers/12.github-pages.md +68 -0
  100. package/dist/docs/1.deploy/2.providers/13.gitlab-pages.md +37 -0
  101. package/dist/docs/1.deploy/2.providers/14.heroku.md +84 -0
  102. package/dist/docs/1.deploy/2.providers/15.iis.md +38 -0
  103. package/dist/docs/1.deploy/2.providers/16.koyeb.md +109 -0
  104. package/dist/docs/1.deploy/2.providers/17.netlify.md +47 -0
  105. package/dist/docs/1.deploy/2.providers/18.platform-sh.md +37 -0
  106. package/dist/docs/1.deploy/2.providers/19.render.md +37 -0
  107. package/dist/docs/1.deploy/2.providers/2.aws-amplify.md +81 -0
  108. package/dist/docs/1.deploy/2.providers/20.stormkit.md +24 -0
  109. package/dist/docs/1.deploy/2.providers/21.vercel.md +270 -0
  110. package/dist/docs/1.deploy/2.providers/22.zeabur.md +19 -0
  111. package/dist/docs/1.deploy/2.providers/23.zephyr.md +99 -0
  112. package/dist/docs/1.deploy/2.providers/24.zerops.md +102 -0
  113. package/dist/docs/1.deploy/2.providers/3.azure.md +72 -0
  114. package/dist/docs/1.deploy/2.providers/4.cleavr.md +33 -0
  115. package/dist/docs/1.deploy/2.providers/5.cloudflare.md +369 -0
  116. package/dist/docs/1.deploy/2.providers/6.deno-deploy.md +66 -0
  117. package/dist/docs/1.deploy/2.providers/7.digitalocean.md +46 -0
  118. package/dist/docs/1.deploy/2.providers/8.edgeone.md +20 -0
  119. package/dist/docs/1.deploy/2.providers/9.firebase.md +32 -0
  120. package/dist/docs/2.config/0.index/index.md +1221 -0
  121. package/dist/docs/3.examples/0.index/index.md +3 -0
  122. package/dist/docs/3.examples/1.api-routes.md +145 -0
  123. package/dist/docs/3.examples/10.hono.md +74 -0
  124. package/dist/docs/3.examples/11.import-alias.md +97 -0
  125. package/dist/docs/3.examples/12.middleware.md +91 -0
  126. package/dist/docs/3.examples/13.mono-jsx.md +68 -0
  127. package/dist/docs/3.examples/14.nano-jsx.md +70 -0
  128. package/dist/docs/3.examples/15.plugins.md +91 -0
  129. package/dist/docs/3.examples/16.renderer.md +113 -0
  130. package/dist/docs/3.examples/17.runtime-config.md +97 -0
  131. package/dist/docs/3.examples/18.server-fetch.md +87 -0
  132. package/dist/docs/3.examples/19.shiki.md +198 -0
  133. package/dist/docs/3.examples/2.auto-imports.md +92 -0
  134. package/dist/docs/3.examples/20.virtual-routes.md +74 -0
  135. package/dist/docs/3.examples/21.vite-nitro-plugin.md +79 -0
  136. package/dist/docs/3.examples/22.vite-rsc.md +1041 -0
  137. package/dist/docs/3.examples/23.vite-ssr-html.md +217 -0
  138. package/dist/docs/3.examples/24.vite-ssr-preact.md +247 -0
  139. package/dist/docs/3.examples/25.vite-ssr-react.md +226 -0
  140. package/dist/docs/3.examples/26.vite-ssr-solid.md +256 -0
  141. package/dist/docs/3.examples/27.vite-ssr-tsr-react.md +442 -0
  142. package/dist/docs/3.examples/28.vite-ssr-tss-react.md +444 -0
  143. package/dist/docs/3.examples/29.vite-ssr-vue-router.md +617 -0
  144. package/dist/docs/3.examples/3.cached-handler.md +81 -0
  145. package/dist/docs/3.examples/30.vite-trpc.md +335 -0
  146. package/dist/docs/3.examples/31.websocket.md +282 -0
  147. package/dist/docs/3.examples/4.custom-error-handler.md +98 -0
  148. package/dist/docs/3.examples/5.database.md +157 -0
  149. package/dist/docs/3.examples/6.elysia.md +70 -0
  150. package/dist/docs/3.examples/7.express.md +78 -0
  151. package/dist/docs/3.examples/8.fastify.md +79 -0
  152. package/dist/docs/3.examples/9.hello-world.md +68 -0
  153. package/dist/docs/README.md +86 -0
  154. package/dist/docs/index.md +121 -0
  155. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +8 -0
  156. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  157. package/dist/node_modules/@speed-highlight/core/dist/index.js +4 -4
  158. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
  159. package/dist/node_modules/@speed-highlight/core/package.json +1 -1
  160. package/dist/node_modules/cookie-es/dist/index.mjs +299 -250
  161. package/dist/node_modules/cookie-es/package.json +26 -23
  162. package/dist/node_modules/croner/dist/croner.js +1 -1
  163. package/dist/node_modules/croner/package.json +11 -1
  164. package/dist/node_modules/defu/dist/defu.mjs +2 -2
  165. package/dist/node_modules/defu/package.json +33 -28
  166. package/dist/node_modules/rendu/dist/_chunks/libs/cookie-es.mjs +151 -0
  167. package/dist/node_modules/rendu/dist/index.mjs +5 -112
  168. package/dist/node_modules/rendu/package.json +25 -24
  169. package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
  170. package/dist/node_modules/youch/build/index.js +204 -351
  171. package/dist/node_modules/youch/build/public/error_info/script.js +1 -1
  172. package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
  173. package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
  174. package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
  175. package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
  176. package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
  177. package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
  178. package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
  179. package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
  180. package/dist/node_modules/youch/package.json +35 -32
  181. package/dist/presets/_nitro/runtime/nitro-dev.mjs +12 -57
  182. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +1 -0
  183. package/dist/presets/_nitro/runtime/service-worker.mjs +1 -2
  184. package/dist/presets/aws-lambda/runtime/_utils.mjs +6 -6
  185. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +3 -1
  186. package/dist/presets/azure/runtime/_utils.mjs +5 -5
  187. package/dist/presets/azure/runtime/azure-swa.mjs +5 -5
  188. package/dist/presets/bun/runtime/bun.mjs +9 -6
  189. package/dist/presets/cloudflare/runtime/_module-handler.mjs +1 -1
  190. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +4 -4
  191. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +3 -3
  192. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +2 -2
  193. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +10 -21
  194. package/dist/presets/deno/runtime/deno-deploy.mjs +4 -4
  195. package/dist/presets/deno/runtime/deno-server.mjs +9 -6
  196. package/dist/presets/edgeone/runtime/edgeone.mjs +10 -0
  197. package/dist/presets/netlify/runtime/netlify-edge.mjs +2 -3
  198. package/dist/presets/netlify/runtime/netlify.mjs +1 -1
  199. package/dist/presets/node/runtime/node-cluster.mjs +5 -4
  200. package/dist/presets/node/runtime/node-middleware.mjs +1 -1
  201. package/dist/presets/node/runtime/node-server.mjs +8 -5
  202. package/dist/presets/stormkit/runtime/stormkit.mjs +1 -2
  203. package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
  204. package/dist/presets/vercel/runtime/queue-handler.mjs +21 -0
  205. package/dist/presets/vercel/runtime/vercel.node.mjs +3 -3
  206. package/dist/presets/vercel/runtime/vercel.web.mjs +3 -5
  207. package/dist/presets/winterjs/runtime/winterjs.mjs +10 -10
  208. package/dist/presets/zephyr/runtime/server.mjs +3 -0
  209. package/dist/runtime/internal/app.mjs +12 -11
  210. package/dist/runtime/internal/cache.d.mts +0 -4
  211. package/dist/runtime/internal/cache.mjs +32 -256
  212. package/dist/runtime/internal/context.d.mts +3 -1
  213. package/dist/runtime/internal/context.mjs +1 -9
  214. package/dist/runtime/internal/error/dev.d.mts +5 -4
  215. package/dist/runtime/internal/error/dev.mjs +47 -49
  216. package/dist/runtime/internal/error/hooks.d.mts +1 -1
  217. package/dist/runtime/internal/error/prod.d.mts +2 -5
  218. package/dist/runtime/internal/error/prod.mjs +19 -33
  219. package/dist/runtime/internal/error/utils.d.mts +4 -4
  220. package/dist/runtime/internal/meta.d.mts +1 -1
  221. package/dist/runtime/internal/plugin.d.mts +2 -2
  222. package/dist/runtime/internal/route-rules.d.mts +11 -4
  223. package/dist/runtime/internal/route-rules.mjs +15 -5
  224. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
  225. package/dist/runtime/internal/routes/dev-tasks.mjs +15 -10
  226. package/dist/runtime/internal/routes/openapi.mjs +2 -2
  227. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  228. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +2 -1
  229. package/dist/runtime/internal/routes/scalar.mjs +3 -3
  230. package/dist/runtime/internal/routes/swagger.mjs +7 -4
  231. package/dist/runtime/internal/runtime-config.d.mts +1 -1
  232. package/dist/runtime/internal/runtime-config.mjs +2 -2
  233. package/dist/runtime/internal/static.mjs +5 -4
  234. package/dist/runtime/internal/task.d.mts +3 -1
  235. package/dist/runtime/internal/task.mjs +7 -7
  236. package/dist/runtime/internal/vite/dev-entry.mjs +6 -3
  237. package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
  238. package/dist/runtime/meta.d.mts +1 -0
  239. package/dist/runtime/meta.mjs +2 -0
  240. package/dist/runtime/nitro.d.mts +2 -0
  241. package/dist/runtime/nitro.mjs +4 -2
  242. package/dist/runtime/virtual/error-handler.mjs +1 -1
  243. package/dist/runtime/virtual/renderer-template.mjs +1 -1
  244. package/dist/runtime/virtual/server-assets.d.mts +2 -1
  245. package/dist/runtime/virtual/tracing.d.mts +5 -0
  246. package/dist/runtime/virtual/tracing.mjs +1 -0
  247. package/dist/runtime/vite.d.mts +1 -1
  248. package/dist/types/index.d.mts +215 -195
  249. package/dist/types/index.mjs +1 -11
  250. package/dist/vite.d.mts +3 -8
  251. package/dist/vite.mjs +285 -253
  252. package/lib/tsconfig.json +3 -5
  253. package/package.json +97 -80
  254. package/dist/_libs/confbox.mjs +0 -2509
  255. package/dist/_libs/nypm+giget+tinyexec.mjs +0 -3603
  256. package/dist/_libs/rc9+c12+dotenv.mjs +0 -972
  257. package/dist/node_modules/hookable/dist/index.mjs +0 -266
  258. package/dist/node_modules/hookable/package.json +0 -52
  259. package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +0 -42
  260. package/dist/node_modules/youch/build/chunk-7QV3D5YX.js +0 -83
  261. package/dist/node_modules/youch/build/chunk-AUGPHE32.js +0 -39
  262. package/dist/node_modules/youch/build/chunk-CM7DWJNZ.js +0 -44
  263. package/dist/node_modules/youch/build/chunk-EJH674NB.js +0 -223
  264. package/dist/node_modules/youch/build/chunk-OIJ3WD7L.js +0 -81
  265. package/dist/node_modules/youch/build/chunk-P36L72PL.js +0 -87
  266. package/dist/node_modules/youch/build/chunk-PE3GG3TN.js +0 -65
  267. package/dist/node_modules/youch/build/chunk-X53OIOJH.js +0 -70
  268. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +0 -2
  269. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +0 -3
  270. package/dist/presets/_nitro/runtime/service-worker.d.mts +0 -2
  271. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +0 -2
  272. package/dist/presets/aws-lambda/runtime/_utils.d.mts +0 -8
  273. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +0 -2
  274. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +0 -3
  275. package/dist/presets/azure/runtime/_utils.d.mts +0 -2
  276. package/dist/presets/azure/runtime/azure-swa.d.mts +0 -5
  277. package/dist/presets/bun/runtime/bun.d.mts +0 -3
  278. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +0 -16
  279. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +0 -11
  280. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +0 -3
  281. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +0 -20
  282. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +0 -3
  283. package/dist/presets/deno/runtime/deno-deploy.d.mts +0 -5
  284. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  285. package/dist/presets/netlify/runtime/netlify-edge.d.mts +0 -3
  286. package/dist/presets/netlify/runtime/netlify.d.mts +0 -4
  287. package/dist/presets/node/runtime/node-cluster.d.mts +0 -3
  288. package/dist/presets/node/runtime/node-middleware.d.mts +0 -3
  289. package/dist/presets/node/runtime/node-server.d.mts +0 -3
  290. package/dist/presets/standard/runtime/server.d.mts +0 -3
  291. package/dist/presets/stormkit/runtime/stormkit.d.mts +0 -21
  292. package/dist/presets/vercel/runtime/isr.d.mts +0 -2
  293. package/dist/presets/vercel/runtime/vercel.node.d.mts +0 -3
  294. package/dist/presets/vercel/runtime/vercel.web.d.mts +0 -8
  295. package/dist/presets/winterjs/runtime/winterjs.d.mts +0 -2
  296. package/dist/presets/zeabur/runtime/zeabur.d.mts +0 -3
  297. package/dist/runtime/internal/vite/node-runner.mjs +0 -359
@@ -0,0 +1,3 @@
1
+ # Examples
2
+
3
+ > Explore Nitro examples to learn how to build full-stack applications
@@ -0,0 +1,145 @@
1
+ # API Routes
2
+
3
+ > File-based API routing with HTTP method support and dynamic parameters.
4
+
5
+ <code-tree>
6
+
7
+ ```html [index.html]
8
+ <!doctype html>
9
+ <html lang="en">
10
+ <head>
11
+ <meta charset="utf-8" />
12
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
13
+ <title>API Routes</title>
14
+ </head>
15
+ <body>
16
+ <h2>API Routes:</h2>
17
+ <ul>
18
+ <li><a href="/api/hello">/api/hello</a></li>
19
+ <li><a href="/api/hello/world">/api/hello/world</a></li>
20
+ <li><a href="/api/test">/api/test</a></li>
21
+ </ul>
22
+ </body>
23
+ </html>
24
+ ```
25
+
26
+ ```ts [nitro.config.ts]
27
+ import { defineConfig } from "nitro";
28
+
29
+ export default defineConfig({
30
+ serverDir: "./",
31
+ });
32
+ ```
33
+
34
+ ```json [package.json]
35
+ {
36
+ "type": "module",
37
+ "scripts": {
38
+ "dev": "nitro dev",
39
+ "build": "nitro build"
40
+ },
41
+ "devDependencies": {
42
+ "nitro": "latest"
43
+ }
44
+ }
45
+ ```
46
+
47
+ ```json [tsconfig.json]
48
+ {
49
+ "extends": "nitro/tsconfig"
50
+ }
51
+ ```
52
+
53
+ ```ts [vite.config.ts]
54
+ import { defineConfig } from "vite";
55
+ import { nitro } from "nitro/vite";
56
+
57
+ export default defineConfig({ plugins: [nitro()] });
58
+ ```
59
+
60
+ ```ts [api/hello.ts]
61
+ import { defineHandler } from "nitro";
62
+
63
+ export default defineHandler(() => "Nitro is amazing!");
64
+ ```
65
+
66
+ ```ts [api/test.get.ts]
67
+ import { defineHandler } from "nitro";
68
+
69
+ export default defineHandler(() => "Test get handler");
70
+ ```
71
+
72
+ ```ts [api/test.post.ts]
73
+ import { defineHandler } from "nitro";
74
+
75
+ export default defineHandler(async (event) => {
76
+ const body = await event.req.json();
77
+ return {
78
+ message: "Test post handler",
79
+ body,
80
+ };
81
+ });
82
+ ```
83
+
84
+ ```ts [api/hello/[name].ts]
85
+ import { defineHandler } from "nitro";
86
+
87
+ export default defineHandler((event) => `Hello (param: ${event.context.params!.name})!`);
88
+ ```
89
+ </code-tree>
90
+
91
+ Nitro supports file-based routing in the `api/` or `routes/` directory. Each file becomes an API endpoint based on its path.
92
+
93
+ ## Basic Route
94
+
95
+ Create a file in the `api/` directory to define a route. The file path becomes the URL path:
96
+
97
+ ```ts [api/hello.ts]
98
+ import { defineHandler } from "nitro";
99
+
100
+ export default defineHandler(() => "Nitro is amazing!");
101
+ ```
102
+
103
+ This creates a `GET /api/hello` endpoint.
104
+
105
+ ## Dynamic Routes
106
+
107
+ Use square brackets `[param]` for dynamic URL segments. Access params via `event.context.params`:
108
+
109
+ ```ts [api/hello/[name].ts]
110
+ import { defineHandler } from "nitro";
111
+
112
+ export default defineHandler((event) => `Hello (param: ${event.context.params!.name})!`);
113
+ ```
114
+
115
+ This creates a `GET /api/hello/:name` endpoint (e.g., `/api/hello/world`).
116
+
117
+ ## HTTP Methods
118
+
119
+ Suffix your file with the HTTP method (`.get.ts`, `.post.ts`, `.put.ts`, `.delete.ts`, etc.):
120
+
121
+ ### GET Handler
122
+
123
+ ```ts [api/test.get.ts]
124
+ import { defineHandler } from "nitro";
125
+
126
+ export default defineHandler(() => "Test get handler");
127
+ ```
128
+
129
+ ### POST Handler
130
+
131
+ ```ts [api/test.post.ts]
132
+ import { defineHandler } from "nitro";
133
+
134
+ export default defineHandler(async (event) => {
135
+ const body = await event.req.json();
136
+ return {
137
+ message: "Test post handler",
138
+ body,
139
+ };
140
+ });
141
+ ```
142
+
143
+ ## Learn More
144
+
145
+ - [Routing](/docs/routing)
@@ -0,0 +1,74 @@
1
+ # Hono
2
+
3
+ > Integrate Hono with Nitro using the server entry.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({});
11
+ ```
12
+
13
+ ```json [package.json]
14
+ {
15
+ "type": "module",
16
+ "scripts": {
17
+ "build": "nitro build",
18
+ "dev": "nitro dev"
19
+ },
20
+ "devDependencies": {
21
+ "hono": "^4.12.9",
22
+ "nitro": "latest"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ```ts [server.ts]
28
+ import { Hono } from "hono";
29
+
30
+ const app = new Hono();
31
+
32
+ app.get("/", (c) => {
33
+ return c.text("Hello, Hono with Nitro!");
34
+ });
35
+
36
+ export default app;
37
+ ```
38
+
39
+ ```json [tsconfig.json]
40
+ {
41
+ "extends": "nitro/tsconfig"
42
+ }
43
+ ```
44
+
45
+ ```ts [vite.config.ts]
46
+ import { defineConfig } from "vite";
47
+ import { nitro } from "nitro/vite";
48
+
49
+ export default defineConfig({ plugins: [nitro()] });
50
+ ```
51
+ </code-tree>
52
+
53
+ ## Server Entry
54
+
55
+ ```ts [server.ts]
56
+ import { Hono } from "hono";
57
+
58
+ const app = new Hono();
59
+
60
+ app.get("/", (c) => {
61
+ return c.text("Hello, Hono with Nitro!");
62
+ });
63
+
64
+ export default app;
65
+ ```
66
+
67
+ Nitro auto-detects `server.ts` in your project root and uses it as the server entry. The Hono app handles all incoming requests, giving you full control over routing and middleware.
68
+
69
+ Hono is cross-runtime compatible, so this server entry works across all Nitro deployment targets including Node.js, Deno, Bun, and Cloudflare Workers.
70
+
71
+ ## Learn More
72
+
73
+ - [Server Entry](/docs/server-entry)
74
+ - [Hono Documentation](https://hono.dev/)
@@ -0,0 +1,97 @@
1
+ # Import Alias
2
+
3
+ > Custom import aliases for cleaner module paths.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({
11
+ serverDir: true,
12
+ });
13
+ ```
14
+
15
+ ```json [package.json]
16
+ {
17
+ "type": "module",
18
+ "imports": {
19
+ "#server/*": "./server/*"
20
+ },
21
+ "scripts": {
22
+ "build": "nitro build",
23
+ "dev": "nitro dev",
24
+ "preview": "node .output/server/index.mjs"
25
+ },
26
+ "devDependencies": {
27
+ "nitro": "latest"
28
+ }
29
+ }
30
+ ```
31
+
32
+ ```json [tsconfig.json]
33
+ {
34
+ "extends": "nitro/tsconfig",
35
+ "compilerOptions": {
36
+ "paths": {
37
+ "~server/*": ["./server/*"]
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ ```ts [vite.config.ts]
44
+ import { defineConfig } from "vite";
45
+ import { nitro } from "nitro/vite";
46
+
47
+ export default defineConfig({ plugins: [nitro()], resolve: { tsconfigPaths: true } });
48
+ ```
49
+
50
+ ```ts [server/routes/index.ts]
51
+ import { sum } from "~server/utils/math.ts";
52
+
53
+ import { rand } from "#server/utils/math.ts";
54
+
55
+ export default () => {
56
+ const [a, b] = [rand(1, 10), rand(1, 10)];
57
+ const result = sum(a, b);
58
+ return `The sum of ${a} + ${b} = ${result}`;
59
+ };
60
+ ```
61
+
62
+ ```ts [server/utils/math.ts]
63
+ export function rand(min: number, max: number): number {
64
+ return Math.floor(Math.random() * (max - min + 1)) + min;
65
+ }
66
+
67
+ export function sum(a: number, b: number): number {
68
+ return a + b;
69
+ }
70
+ ```
71
+ </code-tree>
72
+
73
+ Import aliases like `~` and `#` let you reference modules with shorter paths instead of relative imports.
74
+
75
+ ## Importing Using Aliases
76
+
77
+ ```ts [server/routes/index.ts]
78
+ import { sum } from "~server/utils/math.ts";
79
+
80
+ import { rand } from "#server/utils/math.ts";
81
+
82
+ export default () => {
83
+ const [a, b] = [rand(1, 10), rand(1, 10)];
84
+ const result = sum(a, b);
85
+ return `The sum of ${a} + ${b} = ${result}`;
86
+ };
87
+ ```
88
+
89
+ The route imports the `sum` function using `~server/` and `rand` using `#server/`. Both resolve to the same `server/utils/math.ts` file. The handler generates two random numbers and returns their sum.
90
+
91
+ ## Configuration
92
+
93
+ Aliases can be configured in `package.json` imports field or `nitro.config.ts`.
94
+
95
+ ## Learn More
96
+
97
+ - [Configuration](/docs/configuration)
@@ -0,0 +1,91 @@
1
+ # Middleware
2
+
3
+ > Request middleware for authentication, logging, and request modification.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({
11
+ serverDir: true,
12
+ });
13
+ ```
14
+
15
+ ```json [package.json]
16
+ {
17
+ "type": "module",
18
+ "scripts": {
19
+ "dev": "nitro dev",
20
+ "build": "nitro build"
21
+ },
22
+ "devDependencies": {
23
+ "nitro": "latest"
24
+ }
25
+ }
26
+ ```
27
+
28
+ ```ts [server.ts]
29
+ import { defineHandler } from "nitro";
30
+
31
+ export default defineHandler((event) => ({
32
+ auth: event.context.auth,
33
+ }));
34
+ ```
35
+
36
+ ```json [tsconfig.json]
37
+ {
38
+ "extends": "nitro/tsconfig"
39
+ }
40
+ ```
41
+
42
+ ```ts [vite.config.ts]
43
+ import { defineConfig } from "vite";
44
+ import { nitro } from "nitro/vite";
45
+
46
+ export default defineConfig({ plugins: [nitro()] });
47
+ ```
48
+
49
+ ```ts [server/middleware/auth.ts]
50
+ import { defineMiddleware } from "nitro";
51
+
52
+ export default defineMiddleware((event) => {
53
+ event.context.auth = { name: "User " + Math.round(Math.random() * 100) };
54
+ });
55
+ ```
56
+ </code-tree>
57
+
58
+ Middleware functions run before route handlers on every request. They can modify the request, add context, or return early responses.
59
+
60
+ ## Defining Middleware
61
+
62
+ Create files in `server/middleware/`. They run in alphabetical order:
63
+
64
+ ```ts [server/middleware/auth.ts]
65
+ import { defineMiddleware } from "nitro";
66
+
67
+ export default defineMiddleware((event) => {
68
+ event.context.auth = { name: "User " + Math.round(Math.random() * 100) };
69
+ });
70
+ ```
71
+
72
+ Middleware can:
73
+
74
+ - Add data to `event.context` for use in handlers
75
+ - Return a response early to short-circuit the request
76
+ - Modify request headers or other properties
77
+
78
+ ## Accessing Context in Handlers
79
+ Data added to `event.context` in middleware is available in all subsequent handlers:
80
+
81
+ ```ts [server.ts]
82
+ import { defineHandler } from "nitro";
83
+
84
+ export default defineHandler((event) => ({
85
+ auth: event.context.auth,
86
+ }));
87
+ ```
88
+
89
+ ## Learn More
90
+
91
+ - [Routing](/docs/routing)
@@ -0,0 +1,68 @@
1
+ # Mono JSX
2
+
3
+ > Server-side JSX rendering in Nitro with mono-jsx.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({});
11
+ ```
12
+
13
+ ```json [package.json]
14
+ {
15
+ "type": "module",
16
+ "scripts": {
17
+ "dev": "nitro dev",
18
+ "build": "nitro build"
19
+ },
20
+ "devDependencies": {
21
+ "mono-jsx": "latest",
22
+ "nitro": "latest"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ```tsx [server.tsx]
28
+ export default () => (
29
+ <html>
30
+ <h1>Nitro + mono-jsx works!</h1>
31
+ </html>
32
+ );
33
+ ```
34
+
35
+ ```json [tsconfig.json]
36
+ {
37
+ "extends": "nitro/tsconfig",
38
+ "compilerOptions": {
39
+ "jsx": "react-jsx",
40
+ "jsxImportSource": "mono-jsx"
41
+ }
42
+ }
43
+ ```
44
+
45
+ ```ts [vite.config.ts]
46
+ import { defineConfig } from "vite";
47
+ import { nitro } from "nitro/vite";
48
+
49
+ export default defineConfig({ plugins: [nitro()] });
50
+ ```
51
+ </code-tree>
52
+
53
+ ## Server Entry
54
+
55
+ ```tsx [server.tsx]
56
+ export default () => (
57
+ <html>
58
+ <h1>Nitro + mono-jsx works!</h1>
59
+ </html>
60
+ );
61
+ ```
62
+
63
+ Nitro auto-detects `server.tsx` and uses mono-jsx to transform JSX into HTML. Export a function that returns JSX, and Nitro sends the rendered HTML as the response.
64
+
65
+ ## Learn More
66
+
67
+ - [Renderer](/docs/renderer)
68
+ - [mono-jsx](https://github.com/aspect-dev/mono-jsx)
@@ -0,0 +1,70 @@
1
+ # Nano JSX
2
+
3
+ > Server-side JSX rendering in Nitro with nano-jsx.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({});
11
+ ```
12
+
13
+ ```json [package.json]
14
+ {
15
+ "type": "module",
16
+ "scripts": {
17
+ "dev": "nitro dev",
18
+ "build": "nitro build"
19
+ },
20
+ "devDependencies": {
21
+ "nano-jsx": "^0.2.1",
22
+ "nitro": "latest"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ```tsx [server.tsx]
28
+ import { defineHandler, html } from "nitro";
29
+ import { renderSSR } from "nano-jsx";
30
+
31
+ export default defineHandler(() => {
32
+ return html(renderSSR(() => <h1>Nitro + nano-jsx works!</h1>));
33
+ });
34
+ ```
35
+
36
+ ```json [tsconfig.json]
37
+ {
38
+ "extends": "nitro/tsconfig",
39
+ "compilerOptions": {
40
+ "jsx": "react-jsx",
41
+ "jsxImportSource": "nano-jsx/esm"
42
+ }
43
+ }
44
+ ```
45
+
46
+ ```ts [vite.config.ts]
47
+ import { defineConfig } from "vite";
48
+ import { nitro } from "nitro/vite";
49
+
50
+ export default defineConfig({ plugins: [nitro()] });
51
+ ```
52
+ </code-tree>
53
+
54
+ ## Server Entry
55
+
56
+ ```tsx [server.tsx]
57
+ import { defineHandler, html } from "nitro";
58
+ import { renderSSR } from "nano-jsx";
59
+
60
+ export default defineHandler(() => {
61
+ return html(renderSSR(() => <h1>Nitro + nano-jsx works!</h1>));
62
+ });
63
+ ```
64
+
65
+ Nitro auto-detects `server.tsx` and uses it as the server entry. Use `renderSSR` from nano-jsx to convert JSX into an HTML string. The `html` helper from H3 sets the correct content type header.
66
+
67
+ ## Learn More
68
+
69
+ - [Renderer](/docs/renderer)
70
+ - [nano-jsx](https://nanojsx.io/)
@@ -0,0 +1,91 @@
1
+ # Plugins
2
+
3
+ > Extend Nitro with custom plugins for hooks and lifecycle events.
4
+
5
+ <code-tree>
6
+
7
+ ```ts [nitro.config.ts]
8
+ import { defineConfig } from "nitro";
9
+
10
+ export default defineConfig({
11
+ serverDir: true,
12
+ });
13
+ ```
14
+
15
+ ```json [package.json]
16
+ {
17
+ "type": "module",
18
+ "scripts": {
19
+ "dev": "nitro dev",
20
+ "build": "nitro build"
21
+ },
22
+ "devDependencies": {
23
+ "nitro": "latest"
24
+ }
25
+ }
26
+ ```
27
+
28
+ ```ts [server.ts]
29
+ import { defineHandler } from "nitro";
30
+
31
+ export default defineHandler(() => "<h1>Hello Nitro!</h1>");
32
+ ```
33
+
34
+ ```json [tsconfig.json]
35
+ {
36
+ "extends": "nitro/tsconfig"
37
+ }
38
+ ```
39
+
40
+ ```ts [vite.config.ts]
41
+ import { defineConfig } from "vite";
42
+ import { nitro } from "nitro/vite";
43
+
44
+ export default defineConfig({ plugins: [nitro()] });
45
+ ```
46
+
47
+ ```ts [server/plugins/test.ts]
48
+ import { definePlugin } from "nitro";
49
+ import { useNitroHooks } from "nitro/app";
50
+
51
+ export default definePlugin((nitroApp) => {
52
+ const hooks = useNitroHooks();
53
+ hooks.hook("response", (event) => {
54
+ event.headers.set("content-type", "html; charset=utf-8");
55
+ });
56
+ });
57
+ ```
58
+ </code-tree>
59
+
60
+ Plugins let you hook into Nitro's runtime lifecycle. This example shows a plugin that modifies the `Content-Type` header on every response. Create files in `server/plugins/` and they're automatically loaded at startup.
61
+
62
+ ## Defining a Plugin
63
+
64
+ ```ts [server/plugins/test.ts]
65
+ import { definePlugin } from "nitro";
66
+ import { useNitroHooks } from "nitro/app";
67
+
68
+ export default definePlugin((nitroApp) => {
69
+ const hooks = useNitroHooks();
70
+ hooks.hook("response", (event) => {
71
+ event.headers.set("content-type", "html; charset=utf-8");
72
+ });
73
+ });
74
+ ```
75
+
76
+ The plugin uses `useNitroHooks()` to access the hooks system, then registers a `response` hook that runs after every request. Here it sets the content type to HTML, but you could log requests, add security headers, or modify responses in any way.
77
+
78
+ ## Main Handler
79
+
80
+ ```ts [server.ts]
81
+ import { defineHandler } from "nitro";
82
+
83
+ export default defineHandler(() => "<h1>Hello Nitro!</h1>");
84
+ ```
85
+
86
+ The handler returns HTML without setting a content type. The plugin automatically adds the correct `Content-Type: html; charset=utf-8` header to the response.
87
+
88
+ ## Learn More
89
+
90
+ - [Plugins](/docs/plugins)
91
+ - [Lifecycle](/docs/lifecycle)