@rangojs/router 0.0.0-experimental.f2d1a2f1 → 0.0.0-experimental.f4a8e8de

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 (1301) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +318 -821
  3. package/dist/bin/rango.js +925 -271
  4. package/dist/testing/vitest.js +82 -0
  5. package/dist/types/__internal.d.ts +127 -0
  6. package/dist/types/bin/rango.d.ts +1 -0
  7. package/dist/types/browser/action-coordinator.d.ts +57 -0
  8. package/dist/types/browser/action-fence.d.ts +33 -0
  9. package/dist/types/browser/app-shell.d.ts +34 -0
  10. package/dist/types/browser/app-version.d.ts +6 -0
  11. package/dist/types/browser/connection-warmup.d.ts +31 -0
  12. package/dist/types/browser/cookie-name.d.ts +66 -0
  13. package/dist/types/browser/dev-discovery.d.ts +11 -0
  14. package/dist/types/browser/event-controller.d.ts +231 -0
  15. package/dist/types/browser/history-state.d.ts +26 -0
  16. package/dist/types/browser/index.d.ts +1 -0
  17. package/dist/types/browser/intercept-utils.d.ts +30 -0
  18. package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
  19. package/dist/types/browser/link-interceptor.d.ts +53 -0
  20. package/dist/types/browser/logging.d.ts +33 -0
  21. package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
  22. package/dist/types/browser/navigation-bridge.d.ts +39 -0
  23. package/dist/types/browser/navigation-client.d.ts +17 -0
  24. package/dist/types/browser/navigation-store-handle.d.ts +25 -0
  25. package/dist/types/browser/navigation-store.d.ts +85 -0
  26. package/dist/types/browser/navigation-transaction.d.ts +75 -0
  27. package/dist/types/browser/network-error-handler.d.ts +35 -0
  28. package/dist/types/browser/notify-listeners.d.ts +2 -0
  29. package/dist/types/browser/partial-update.d.ts +61 -0
  30. package/dist/types/browser/prefetch/cache.d.ts +224 -0
  31. package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
  32. package/dist/types/browser/prefetch/fetch.d.ts +52 -0
  33. package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
  34. package/dist/types/browser/prefetch/loader.d.ts +12 -0
  35. package/dist/types/browser/prefetch/observer.d.ts +24 -0
  36. package/dist/types/browser/prefetch/policy.d.ts +13 -0
  37. package/dist/types/browser/prefetch/queue.d.ts +48 -0
  38. package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
  39. package/dist/types/browser/prefetch/runtime.d.ts +2 -0
  40. package/dist/types/browser/rango-state.d.ts +56 -0
  41. package/dist/types/browser/react/Link.d.ts +132 -0
  42. package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
  43. package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
  44. package/dist/types/browser/react/context.d.ts +57 -0
  45. package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
  46. package/dist/types/browser/react/index.d.ts +1 -0
  47. package/dist/types/browser/react/location-state-shared.d.ts +162 -0
  48. package/dist/types/browser/react/location-state.d.ts +29 -0
  49. package/dist/types/browser/react/mount-context.d.ts +23 -0
  50. package/dist/types/browser/react/nonce-context.d.ts +14 -0
  51. package/dist/types/browser/react/shallow-equal.d.ts +5 -0
  52. package/dist/types/browser/react/use-action.d.ts +61 -0
  53. package/dist/types/browser/react/use-handle.d.ts +21 -0
  54. package/dist/types/browser/react/use-href.d.ts +32 -0
  55. package/dist/types/browser/react/use-link-status.d.ts +36 -0
  56. package/dist/types/browser/react/use-mount.d.ts +24 -0
  57. package/dist/types/browser/react/use-navigation.d.ts +15 -0
  58. package/dist/types/browser/react/use-params.d.ts +21 -0
  59. package/dist/types/browser/react/use-pathname.d.ts +13 -0
  60. package/dist/types/browser/react/use-reverse.d.ts +40 -0
  61. package/dist/types/browser/react/use-router.d.ts +23 -0
  62. package/dist/types/browser/react/use-search-params.d.ts +19 -0
  63. package/dist/types/browser/react/use-segments.d.ts +29 -0
  64. package/dist/types/browser/response-adapter.d.ts +58 -0
  65. package/dist/types/browser/rsc-router.d.ts +146 -0
  66. package/dist/types/browser/scroll-restoration.d.ts +103 -0
  67. package/dist/types/browser/segment-reconciler.d.ts +74 -0
  68. package/dist/types/browser/segment-structure-assert.d.ts +16 -0
  69. package/dist/types/browser/server-action-bridge.d.ts +29 -0
  70. package/dist/types/browser/types.d.ts +546 -0
  71. package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
  72. package/dist/types/build/collect-fallback-refs.d.ts +5 -0
  73. package/dist/types/build/generate-manifest.d.ts +106 -0
  74. package/dist/types/build/generate-route-types.d.ts +8 -0
  75. package/dist/types/build/index.d.ts +21 -0
  76. package/dist/types/build/merge-full-manifests.d.ts +3 -0
  77. package/dist/types/build/prefix-tree-utils.d.ts +56 -0
  78. package/dist/types/build/route-trie.d.ts +20 -0
  79. package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
  80. package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
  81. package/dist/types/build/route-types/codegen.d.ts +16 -0
  82. package/dist/types/build/route-types/include-resolution.d.ts +74 -0
  83. package/dist/types/build/route-types/param-extraction.d.ts +13 -0
  84. package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
  85. package/dist/types/build/route-types/router-processing.d.ts +81 -0
  86. package/dist/types/build/route-types/scan-filter.d.ts +17 -0
  87. package/dist/types/build/route-types/source-scan.d.ts +13 -0
  88. package/dist/types/build/runtime-discovery.d.ts +24 -0
  89. package/dist/types/cache/background-task.d.ts +21 -0
  90. package/dist/types/cache/cache-error.d.ts +71 -0
  91. package/dist/types/cache/cache-exec-scope.d.ts +31 -0
  92. package/dist/types/cache/cache-key-utils.d.ts +43 -0
  93. package/dist/types/cache/cache-policy.d.ts +59 -0
  94. package/dist/types/cache/cache-runtime.d.ts +51 -0
  95. package/dist/types/cache/cache-scope.d.ts +215 -0
  96. package/dist/types/cache/cache-tag.d.ts +79 -0
  97. package/dist/types/cache/cf/cf-base64.d.ts +4 -0
  98. package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
  99. package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
  100. package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
  101. package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
  102. package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  103. package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
  104. package/dist/types/cache/cf/index.d.ts +4 -0
  105. package/dist/types/cache/document-cache.d.ts +71 -0
  106. package/dist/types/cache/handle-capture.d.ts +23 -0
  107. package/dist/types/cache/handle-snapshot.d.ts +39 -0
  108. package/dist/types/cache/index.d.ts +9 -0
  109. package/dist/types/cache/memory-segment-store.d.ts +163 -0
  110. package/dist/types/cache/profile-registry.d.ts +40 -0
  111. package/dist/types/cache/read-through-swr.d.ts +61 -0
  112. package/dist/types/cache/search-params-filter.d.ts +64 -0
  113. package/dist/types/cache/segment-codec.d.ts +78 -0
  114. package/dist/types/cache/shell-snapshot.d.ts +186 -0
  115. package/dist/types/cache/tag-invalidation.d.ts +74 -0
  116. package/dist/types/cache/taint.d.ts +77 -0
  117. package/dist/types/cache/types.d.ts +503 -0
  118. package/dist/types/cache/vercel/index.d.ts +1 -0
  119. package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
  120. package/dist/types/client-urls/client-root.d.ts +38 -0
  121. package/dist/types/client-urls/client-urls.d.ts +5 -0
  122. package/dist/types/client-urls/navigation.d.ts +38 -0
  123. package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
  124. package/dist/types/client-urls/server-projection.d.ts +57 -0
  125. package/dist/types/client-urls/types.d.ts +132 -0
  126. package/dist/types/client.d.ts +191 -0
  127. package/dist/types/client.rsc.d.ts +41 -0
  128. package/dist/types/cloudflare/index.d.ts +7 -0
  129. package/dist/types/cloudflare/tracing.d.ts +57 -0
  130. package/dist/types/component-utils.d.ts +46 -0
  131. package/dist/types/components/DefaultDocument.d.ts +13 -0
  132. package/dist/types/context-var.d.ts +84 -0
  133. package/dist/types/debug.d.ts +57 -0
  134. package/dist/types/decode-loader-results.d.ts +42 -0
  135. package/dist/types/default-error-boundary.d.ts +10 -0
  136. package/dist/types/defer.d.ts +89 -0
  137. package/dist/types/deps/browser.d.ts +1 -0
  138. package/dist/types/deps/html-stream-client.d.ts +1 -0
  139. package/dist/types/deps/html-stream-server.d.ts +1 -0
  140. package/dist/types/deps/rsc.d.ts +1 -0
  141. package/dist/types/deps/ssr.d.ts +1 -0
  142. package/dist/types/dev-discovery-protocol.d.ts +5 -0
  143. package/dist/types/encode-kv.d.ts +35 -0
  144. package/dist/types/errors.d.ts +227 -0
  145. package/dist/types/escape-script.d.ts +44 -0
  146. package/dist/types/handle.d.ts +93 -0
  147. package/dist/types/handles/MetaTags.d.ts +17 -0
  148. package/dist/types/handles/Scripts.d.ts +38 -0
  149. package/dist/types/handles/breadcrumbs.d.ts +43 -0
  150. package/dist/types/handles/deferred-resolution.d.ts +53 -0
  151. package/dist/types/handles/is-thenable.d.ts +10 -0
  152. package/dist/types/handles/meta.d.ts +43 -0
  153. package/dist/types/handles/script.d.ts +139 -0
  154. package/dist/types/host/cookie-handler.d.ts +8 -0
  155. package/dist/types/host/errors.d.ts +40 -0
  156. package/dist/types/host/index.d.ts +33 -0
  157. package/dist/types/host/pattern-matcher.d.ts +30 -0
  158. package/dist/types/host/router.d.ts +12 -0
  159. package/dist/types/host/testing.d.ts +41 -0
  160. package/dist/types/host/types.d.ts +148 -0
  161. package/dist/types/host/utils.d.ts +20 -0
  162. package/dist/types/href-client.d.ts +214 -0
  163. package/dist/types/index.d.ts +113 -0
  164. package/dist/types/index.rsc.d.ts +52 -0
  165. package/dist/types/internal-debug.d.ts +1 -0
  166. package/dist/types/loader-redirect.d.ts +18 -0
  167. package/dist/types/loader-store.d.ts +193 -0
  168. package/dist/types/loader.d.ts +18 -0
  169. package/dist/types/loader.rsc.d.ts +18 -0
  170. package/dist/types/missing-id-error.d.ts +1 -0
  171. package/dist/types/outlet-context.d.ts +24 -0
  172. package/dist/types/outlet-provider.d.ts +14 -0
  173. package/dist/types/prerender/build-shell-capture.d.ts +104 -0
  174. package/dist/types/prerender/param-hash.d.ts +6 -0
  175. package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
  176. package/dist/types/prerender/store.d.ts +63 -0
  177. package/dist/types/prerender.d.ts +292 -0
  178. package/dist/types/redirect-origin.d.ts +67 -0
  179. package/dist/types/regex-escape.d.ts +6 -0
  180. package/dist/types/render-error-thrower.d.ts +13 -0
  181. package/dist/types/response-utils.d.ts +35 -0
  182. package/dist/types/reverse.d.ts +206 -0
  183. package/dist/types/root-error-boundary.d.ts +32 -0
  184. package/dist/types/route-content-wrapper.d.ts +81 -0
  185. package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
  186. package/dist/types/route-definition/helper-factories.d.ts +22 -0
  187. package/dist/types/route-definition/helpers-types.d.ts +393 -0
  188. package/dist/types/route-definition/index.d.ts +7 -0
  189. package/dist/types/route-definition/redirect.d.ts +48 -0
  190. package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
  191. package/dist/types/route-definition/use-item-types.d.ts +1 -0
  192. package/dist/types/route-definition.d.ts +1 -0
  193. package/dist/types/route-map-builder.d.ts +102 -0
  194. package/dist/types/route-name.d.ts +27 -0
  195. package/dist/types/route-types.d.ts +172 -0
  196. package/dist/types/router/basename.d.ts +10 -0
  197. package/dist/types/router/content-negotiation.d.ts +91 -0
  198. package/dist/types/router/debug-manifest.d.ts +7 -0
  199. package/dist/types/router/error-handling.d.ts +110 -0
  200. package/dist/types/router/find-match.d.ts +19 -0
  201. package/dist/types/router/handler-context.d.ts +41 -0
  202. package/dist/types/router/instrument.d.ts +191 -0
  203. package/dist/types/router/intercept-resolution.d.ts +91 -0
  204. package/dist/types/router/lazy-includes.d.ts +26 -0
  205. package/dist/types/router/loader-resolution.d.ts +85 -0
  206. package/dist/types/router/logging.d.ts +41 -0
  207. package/dist/types/router/manifest.d.ts +8 -0
  208. package/dist/types/router/match-api.d.ts +19 -0
  209. package/dist/types/router/match-context.d.ts +184 -0
  210. package/dist/types/router/match-handlers.d.ts +48 -0
  211. package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
  212. package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
  213. package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
  214. package/dist/types/router/match-middleware/index.d.ts +80 -0
  215. package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
  216. package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
  217. package/dist/types/router/match-pipelines.d.ts +103 -0
  218. package/dist/types/router/match-result.d.ts +114 -0
  219. package/dist/types/router/metrics.d.ts +6 -0
  220. package/dist/types/router/middleware-types.d.ts +74 -0
  221. package/dist/types/router/middleware.d.ts +116 -0
  222. package/dist/types/router/navigation-snapshot.d.ts +51 -0
  223. package/dist/types/router/params-util.d.ts +8 -0
  224. package/dist/types/router/parse-pattern.d.ts +38 -0
  225. package/dist/types/router/pattern-matching.d.ts +169 -0
  226. package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
  227. package/dist/types/router/prefetch-default.d.ts +28 -0
  228. package/dist/types/router/prefetch-limits.d.ts +20 -0
  229. package/dist/types/router/prerender-match.d.ts +53 -0
  230. package/dist/types/router/preview-match.d.ts +22 -0
  231. package/dist/types/router/request-classification.d.ts +104 -0
  232. package/dist/types/router/revalidation.d.ts +64 -0
  233. package/dist/types/router/route-snapshot.d.ts +112 -0
  234. package/dist/types/router/route-trie-builder.d.ts +77 -0
  235. package/dist/types/router/router-context.d.ts +137 -0
  236. package/dist/types/router/router-interfaces.d.ts +461 -0
  237. package/dist/types/router/router-options.d.ts +792 -0
  238. package/dist/types/router/router-registry.d.ts +15 -0
  239. package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
  240. package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
  241. package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
  242. package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
  243. package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
  244. package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
  245. package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
  246. package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
  247. package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  248. package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
  249. package/dist/types/router/segment-resolution.d.ts +3 -0
  250. package/dist/types/router/segment-wrappers.d.ts +53 -0
  251. package/dist/types/router/state-cookie-name.d.ts +1 -0
  252. package/dist/types/router/substitute-pattern-params.d.ts +23 -0
  253. package/dist/types/router/telemetry-otel.d.ts +113 -0
  254. package/dist/types/router/telemetry.d.ts +216 -0
  255. package/dist/types/router/timeout.d.ts +107 -0
  256. package/dist/types/router/tracing.d.ts +139 -0
  257. package/dist/types/router/transition-when.d.ts +13 -0
  258. package/dist/types/router/trie-matching.d.ts +32 -0
  259. package/dist/types/router/types.d.ts +98 -0
  260. package/dist/types/router/url-params.d.ts +26 -0
  261. package/dist/types/router.d.ts +7 -0
  262. package/dist/types/rsc/capture-queue.d.ts +49 -0
  263. package/dist/types/rsc/full-payload.d.ts +22 -0
  264. package/dist/types/rsc/handler-context.d.ts +32 -0
  265. package/dist/types/rsc/handler.d.ts +9 -0
  266. package/dist/types/rsc/helpers.d.ts +127 -0
  267. package/dist/types/rsc/index.d.ts +17 -0
  268. package/dist/types/rsc/json-route-result.d.ts +20 -0
  269. package/dist/types/rsc/loader-fetch.d.ts +14 -0
  270. package/dist/types/rsc/manifest-init.d.ts +18 -0
  271. package/dist/types/rsc/nonce.d.ts +28 -0
  272. package/dist/types/rsc/origin-guard.d.ts +50 -0
  273. package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
  274. package/dist/types/rsc/redirect-guard.d.ts +37 -0
  275. package/dist/types/rsc/render-pipeline.d.ts +148 -0
  276. package/dist/types/rsc/response-cache-serve.d.ts +46 -0
  277. package/dist/types/rsc/response-error.d.ts +19 -0
  278. package/dist/types/rsc/response-route-handler.d.ts +29 -0
  279. package/dist/types/rsc/routine-plan.d.ts +124 -0
  280. package/dist/types/rsc/rsc-rendering.d.ts +18 -0
  281. package/dist/types/rsc/runtime-warnings.d.ts +22 -0
  282. package/dist/types/rsc/server-action.d.ts +68 -0
  283. package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
  284. package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
  285. package/dist/types/rsc/shell-capture.d.ts +406 -0
  286. package/dist/types/rsc/shell-serve.d.ts +189 -0
  287. package/dist/types/rsc/ssr-setup.d.ts +73 -0
  288. package/dist/types/rsc/stream-idle.d.ts +60 -0
  289. package/dist/types/rsc/transition-gate.d.ts +23 -0
  290. package/dist/types/rsc/types.d.ts +328 -0
  291. package/dist/types/runtime-env.d.ts +1 -0
  292. package/dist/types/search-params.d.ts +125 -0
  293. package/dist/types/segment-content-promise.d.ts +13 -0
  294. package/dist/types/segment-fragments.d.ts +79 -0
  295. package/dist/types/segment-loader-promise.d.ts +22 -0
  296. package/dist/types/segment-system.d.ts +86 -0
  297. package/dist/types/serialize.d.ts +164 -0
  298. package/dist/types/server/context.d.ts +510 -0
  299. package/dist/types/server/cookie-parse.d.ts +10 -0
  300. package/dist/types/server/cookie-store.d.ts +107 -0
  301. package/dist/types/server/fetchable-loader-store.d.ts +20 -0
  302. package/dist/types/server/handle-store.d.ts +131 -0
  303. package/dist/types/server/loader-registry.d.ts +32 -0
  304. package/dist/types/server/request-context.d.ts +707 -0
  305. package/dist/types/server/root-layout.d.ts +3 -0
  306. package/dist/types/server.d.ts +16 -0
  307. package/dist/types/ssr/index.d.ts +233 -0
  308. package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
  309. package/dist/types/ssr/preinit-client-references.d.ts +71 -0
  310. package/dist/types/ssr/ssr-root.d.ts +69 -0
  311. package/dist/types/static-handler.d.ts +71 -0
  312. package/dist/types/testing/cache-status.d.ts +63 -0
  313. package/dist/types/testing/collect-handle.d.ts +20 -0
  314. package/dist/types/testing/dispatch.d.ts +127 -0
  315. package/dist/types/testing/dom.entry.d.ts +15 -0
  316. package/dist/types/testing/e2e/fixture.d.ts +37 -0
  317. package/dist/types/testing/e2e/index.d.ts +31 -0
  318. package/dist/types/testing/e2e/matchers.d.ts +17 -0
  319. package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
  320. package/dist/types/testing/e2e/parity.d.ts +111 -0
  321. package/dist/types/testing/e2e/server.d.ts +35 -0
  322. package/dist/types/testing/flight-matchers.d.ts +55 -0
  323. package/dist/types/testing/flight-normalize.d.ts +1 -0
  324. package/dist/types/testing/flight-tree.d.ts +192 -0
  325. package/dist/types/testing/flight.d.ts +115 -0
  326. package/dist/types/testing/flight.entry.d.ts +27 -0
  327. package/dist/types/testing/generated-routes.d.ts +66 -0
  328. package/dist/types/testing/index.d.ts +54 -0
  329. package/dist/types/testing/internal/context.d.ts +225 -0
  330. package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
  331. package/dist/types/testing/internal/seed-vars.d.ts +30 -0
  332. package/dist/types/testing/render-handler.d.ts +160 -0
  333. package/dist/types/testing/render-route.d.ts +265 -0
  334. package/dist/types/testing/run-loader.d.ts +195 -0
  335. package/dist/types/testing/run-middleware.d.ts +132 -0
  336. package/dist/types/testing/run-transition-when.d.ts +78 -0
  337. package/dist/types/testing/shell-status.d.ts +81 -0
  338. package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  339. package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  340. package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  341. package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
  342. package/dist/types/testing/vitest.d.ts +205 -0
  343. package/dist/types/theme/ThemeProvider.d.ts +13 -0
  344. package/dist/types/theme/ThemeScript.d.ts +45 -0
  345. package/dist/types/theme/constants.d.ts +39 -0
  346. package/dist/types/theme/index.d.ts +29 -0
  347. package/dist/types/theme/theme-context.d.ts +21 -0
  348. package/dist/types/theme/theme-script.d.ts +26 -0
  349. package/dist/types/theme/types.d.ts +162 -0
  350. package/dist/types/theme/use-theme.d.ts +8 -0
  351. package/dist/types/types/boundaries.d.ts +110 -0
  352. package/dist/types/types/cache-types.d.ts +191 -0
  353. package/dist/types/types/error-types.d.ts +114 -0
  354. package/dist/types/types/global-namespace.d.ts +90 -0
  355. package/dist/types/types/handler-context.d.ts +658 -0
  356. package/dist/types/types/index.d.ts +11 -0
  357. package/dist/types/types/loader-types.d.ts +208 -0
  358. package/dist/types/types/request-scope.d.ts +93 -0
  359. package/dist/types/types/route-config.d.ts +105 -0
  360. package/dist/types/types/route-entry.d.ts +98 -0
  361. package/dist/types/types/segments.d.ts +246 -0
  362. package/dist/types/types.d.ts +1 -0
  363. package/dist/types/urls/include-helper.d.ts +17 -0
  364. package/dist/types/urls/include-provider.d.ts +27 -0
  365. package/dist/types/urls/index.d.ts +6 -0
  366. package/dist/types/urls/path-helper-types.d.ts +198 -0
  367. package/dist/types/urls/path-helper.d.ts +12 -0
  368. package/dist/types/urls/pattern-types.d.ts +166 -0
  369. package/dist/types/urls/response-types.d.ts +67 -0
  370. package/dist/types/urls/type-extraction.d.ts +157 -0
  371. package/dist/types/urls/urls-function.d.ts +24 -0
  372. package/dist/types/urls.d.ts +1 -0
  373. package/dist/types/use-loader.d.ts +150 -0
  374. package/dist/types/vercel/index.d.ts +10 -0
  375. package/dist/types/vercel/tracing.d.ts +71 -0
  376. package/dist/types/vite/debug.d.ts +80 -0
  377. package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
  378. package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
  379. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
  380. package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
  381. package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
  382. package/dist/types/vite/discovery/gate-state.d.ts +79 -0
  383. package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
  384. package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
  385. package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
  386. package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
  387. package/dist/types/vite/discovery/state.d.ts +170 -0
  388. package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
  389. package/dist/types/vite/encryption-key.d.ts +2 -0
  390. package/dist/types/vite/index.d.ts +11 -0
  391. package/dist/types/vite/inject-client-debug.d.ts +56 -0
  392. package/dist/types/vite/plugin-types.d.ts +298 -0
  393. package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
  394. package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
  395. package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
  396. package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  397. package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
  398. package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
  399. package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  400. package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  401. package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  402. package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  403. package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
  404. package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
  405. package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
  406. package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
  407. package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
  408. package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
  409. package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
  410. package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
  411. package/dist/types/vite/plugins/version-injector.d.ts +21 -0
  412. package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
  413. package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
  414. package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  415. package/dist/types/vite/rango.d.ts +29 -0
  416. package/dist/types/vite/router-discovery.d.ts +23 -0
  417. package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
  418. package/dist/types/vite/utils/banner.d.ts +2 -0
  419. package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
  420. package/dist/types/vite/utils/client-chunks.d.ts +55 -0
  421. package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
  422. package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
  423. package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
  424. package/dist/types/vite/utils/package-resolution.d.ts +6 -0
  425. package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
  426. package/dist/types/vite/utils/shared-utils.d.ts +67 -0
  427. package/dist/types.backup/__internal.d.ts +127 -0
  428. package/dist/types.backup/bin/rango.d.ts +1 -0
  429. package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
  430. package/dist/types.backup/browser/action-fence.d.ts +33 -0
  431. package/dist/types.backup/browser/app-shell.d.ts +34 -0
  432. package/dist/types.backup/browser/app-version.d.ts +6 -0
  433. package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
  434. package/dist/types.backup/browser/cookie-name.d.ts +66 -0
  435. package/dist/types.backup/browser/event-controller.d.ts +221 -0
  436. package/dist/types.backup/browser/history-state.d.ts +26 -0
  437. package/dist/types.backup/browser/index.d.ts +1 -0
  438. package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
  439. package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
  440. package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
  441. package/dist/types.backup/browser/logging.d.ts +33 -0
  442. package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
  443. package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
  444. package/dist/types.backup/browser/navigation-client.d.ts +17 -0
  445. package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
  446. package/dist/types.backup/browser/navigation-store.d.ts +95 -0
  447. package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
  448. package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
  449. package/dist/types.backup/browser/partial-update.d.ts +61 -0
  450. package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
  451. package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
  452. package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
  453. package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
  454. package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
  455. package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
  456. package/dist/types.backup/browser/rango-state.d.ts +52 -0
  457. package/dist/types.backup/browser/react/Link.d.ts +140 -0
  458. package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
  459. package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
  460. package/dist/types.backup/browser/react/context.d.ts +54 -0
  461. package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
  462. package/dist/types.backup/browser/react/index.d.ts +1 -0
  463. package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
  464. package/dist/types.backup/browser/react/location-state.d.ts +29 -0
  465. package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
  466. package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
  467. package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
  468. package/dist/types.backup/browser/react/use-action.d.ts +61 -0
  469. package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
  470. package/dist/types.backup/browser/react/use-href.d.ts +32 -0
  471. package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
  472. package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
  473. package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
  474. package/dist/types.backup/browser/react/use-params.d.ts +21 -0
  475. package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
  476. package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
  477. package/dist/types.backup/browser/react/use-router.d.ts +23 -0
  478. package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
  479. package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
  480. package/dist/types.backup/browser/response-adapter.d.ts +58 -0
  481. package/dist/types.backup/browser/rsc-router.d.ts +141 -0
  482. package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
  483. package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
  484. package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
  485. package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
  486. package/dist/types.backup/browser/types.d.ts +530 -0
  487. package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
  488. package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
  489. package/dist/types.backup/build/generate-manifest.d.ts +100 -0
  490. package/dist/types.backup/build/generate-route-types.d.ts +8 -0
  491. package/dist/types.backup/build/index.d.ts +21 -0
  492. package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
  493. package/dist/types.backup/build/route-trie.d.ts +89 -0
  494. package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
  495. package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
  496. package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
  497. package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
  498. package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
  499. package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
  500. package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
  501. package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
  502. package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
  503. package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
  504. package/dist/types.backup/cache/background-task.d.ts +21 -0
  505. package/dist/types.backup/cache/cache-error.d.ts +71 -0
  506. package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
  507. package/dist/types.backup/cache/cache-policy.d.ts +59 -0
  508. package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
  509. package/dist/types.backup/cache/cache-scope.d.ts +134 -0
  510. package/dist/types.backup/cache/cache-tag.d.ts +79 -0
  511. package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
  512. package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
  513. package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
  514. package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
  515. package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
  516. package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  517. package/dist/types.backup/cache/cf/index.d.ts +3 -0
  518. package/dist/types.backup/cache/document-cache.d.ts +69 -0
  519. package/dist/types.backup/cache/handle-capture.d.ts +23 -0
  520. package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
  521. package/dist/types.backup/cache/index.d.ts +7 -0
  522. package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
  523. package/dist/types.backup/cache/profile-registry.d.ts +40 -0
  524. package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
  525. package/dist/types.backup/cache/segment-codec.d.ts +78 -0
  526. package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
  527. package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
  528. package/dist/types.backup/cache/taint.d.ts +71 -0
  529. package/dist/types.backup/cache/types.d.ts +407 -0
  530. package/dist/types.backup/cache/vercel/index.d.ts +1 -0
  531. package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
  532. package/dist/types.backup/client.d.ts +184 -0
  533. package/dist/types.backup/client.rsc.d.ts +39 -0
  534. package/dist/types.backup/cloudflare/index.d.ts +7 -0
  535. package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
  536. package/dist/types.backup/component-utils.d.ts +46 -0
  537. package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
  538. package/dist/types.backup/context-var.d.ts +84 -0
  539. package/dist/types.backup/debug.d.ts +57 -0
  540. package/dist/types.backup/decode-loader-results.d.ts +5 -0
  541. package/dist/types.backup/default-error-boundary.d.ts +10 -0
  542. package/dist/types.backup/defer.d.ts +89 -0
  543. package/dist/types.backup/deps/browser.d.ts +1 -0
  544. package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
  545. package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
  546. package/dist/types.backup/deps/rsc.d.ts +1 -0
  547. package/dist/types.backup/deps/ssr.d.ts +1 -0
  548. package/dist/types.backup/encode-kv.d.ts +35 -0
  549. package/dist/types.backup/errors.d.ts +226 -0
  550. package/dist/types.backup/escape-script.d.ts +44 -0
  551. package/dist/types.backup/handle.d.ts +93 -0
  552. package/dist/types.backup/handles/MetaTags.d.ts +17 -0
  553. package/dist/types.backup/handles/Scripts.d.ts +38 -0
  554. package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
  555. package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
  556. package/dist/types.backup/handles/is-thenable.d.ts +12 -0
  557. package/dist/types.backup/handles/meta.d.ts +43 -0
  558. package/dist/types.backup/handles/script.d.ts +139 -0
  559. package/dist/types.backup/host/cookie-handler.d.ts +8 -0
  560. package/dist/types.backup/host/errors.d.ts +40 -0
  561. package/dist/types.backup/host/index.d.ts +33 -0
  562. package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
  563. package/dist/types.backup/host/router.d.ts +12 -0
  564. package/dist/types.backup/host/testing.d.ts +41 -0
  565. package/dist/types.backup/host/types.d.ts +148 -0
  566. package/dist/types.backup/host/utils.d.ts +20 -0
  567. package/dist/types.backup/href-client.d.ts +214 -0
  568. package/dist/types.backup/index.d.ts +112 -0
  569. package/dist/types.backup/index.rsc.d.ts +51 -0
  570. package/dist/types.backup/internal-debug.d.ts +1 -0
  571. package/dist/types.backup/loader-store.d.ts +193 -0
  572. package/dist/types.backup/loader.d.ts +18 -0
  573. package/dist/types.backup/loader.rsc.d.ts +18 -0
  574. package/dist/types.backup/missing-id-error.d.ts +1 -0
  575. package/dist/types.backup/outlet-context.d.ts +12 -0
  576. package/dist/types.backup/outlet-provider.d.ts +12 -0
  577. package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
  578. package/dist/types.backup/prerender/param-hash.d.ts +6 -0
  579. package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
  580. package/dist/types.backup/prerender/store.d.ts +62 -0
  581. package/dist/types.backup/prerender.d.ts +292 -0
  582. package/dist/types.backup/redirect-origin.d.ts +55 -0
  583. package/dist/types.backup/regex-escape.d.ts +6 -0
  584. package/dist/types.backup/render-error-thrower.d.ts +13 -0
  585. package/dist/types.backup/response-utils.d.ts +35 -0
  586. package/dist/types.backup/reverse.d.ts +206 -0
  587. package/dist/types.backup/root-error-boundary.d.ts +32 -0
  588. package/dist/types.backup/route-content-wrapper.d.ts +40 -0
  589. package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
  590. package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
  591. package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
  592. package/dist/types.backup/route-definition/index.d.ts +7 -0
  593. package/dist/types.backup/route-definition/redirect.d.ts +48 -0
  594. package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
  595. package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
  596. package/dist/types.backup/route-definition.d.ts +1 -0
  597. package/dist/types.backup/route-map-builder.d.ts +127 -0
  598. package/dist/types.backup/route-name.d.ts +27 -0
  599. package/dist/types.backup/route-types.d.ts +172 -0
  600. package/dist/types.backup/router/basename.d.ts +10 -0
  601. package/dist/types.backup/router/content-negotiation.d.ts +91 -0
  602. package/dist/types.backup/router/debug-manifest.d.ts +7 -0
  603. package/dist/types.backup/router/error-handling.d.ts +76 -0
  604. package/dist/types.backup/router/find-match.d.ts +19 -0
  605. package/dist/types.backup/router/handler-context.d.ts +41 -0
  606. package/dist/types.backup/router/instrument.d.ts +161 -0
  607. package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
  608. package/dist/types.backup/router/lazy-includes.d.ts +26 -0
  609. package/dist/types.backup/router/loader-resolution.d.ts +63 -0
  610. package/dist/types.backup/router/logging.d.ts +41 -0
  611. package/dist/types.backup/router/manifest.d.ts +8 -0
  612. package/dist/types.backup/router/match-api.d.ts +19 -0
  613. package/dist/types.backup/router/match-context.d.ts +184 -0
  614. package/dist/types.backup/router/match-handlers.d.ts +49 -0
  615. package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
  616. package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
  617. package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
  618. package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
  619. package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
  620. package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
  621. package/dist/types.backup/router/match-pipelines.d.ts +103 -0
  622. package/dist/types.backup/router/match-result.d.ts +114 -0
  623. package/dist/types.backup/router/metrics.d.ts +6 -0
  624. package/dist/types.backup/router/middleware-types.d.ts +74 -0
  625. package/dist/types.backup/router/middleware.d.ts +116 -0
  626. package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
  627. package/dist/types.backup/router/params-util.d.ts +8 -0
  628. package/dist/types.backup/router/parse-pattern.d.ts +38 -0
  629. package/dist/types.backup/router/pattern-matching.d.ts +169 -0
  630. package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
  631. package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
  632. package/dist/types.backup/router/prerender-match.d.ts +50 -0
  633. package/dist/types.backup/router/preview-match.d.ts +22 -0
  634. package/dist/types.backup/router/request-classification.d.ts +104 -0
  635. package/dist/types.backup/router/revalidation.d.ts +57 -0
  636. package/dist/types.backup/router/route-snapshot.d.ts +112 -0
  637. package/dist/types.backup/router/router-context.d.ts +137 -0
  638. package/dist/types.backup/router/router-interfaces.d.ts +432 -0
  639. package/dist/types.backup/router/router-options.d.ts +738 -0
  640. package/dist/types.backup/router/router-registry.d.ts +15 -0
  641. package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
  642. package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
  643. package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
  644. package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
  645. package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
  646. package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
  647. package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
  648. package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
  649. package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  650. package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
  651. package/dist/types.backup/router/segment-resolution.d.ts +3 -0
  652. package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
  653. package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
  654. package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
  655. package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
  656. package/dist/types.backup/router/telemetry.d.ts +215 -0
  657. package/dist/types.backup/router/timeout.d.ts +68 -0
  658. package/dist/types.backup/router/tracing.d.ts +125 -0
  659. package/dist/types.backup/router/trie-matching.d.ts +32 -0
  660. package/dist/types.backup/router/types.d.ts +98 -0
  661. package/dist/types.backup/router/url-params.d.ts +26 -0
  662. package/dist/types.backup/router.d.ts +7 -0
  663. package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
  664. package/dist/types.backup/rsc/full-payload.d.ts +22 -0
  665. package/dist/types.backup/rsc/handler-context.d.ts +31 -0
  666. package/dist/types.backup/rsc/handler.d.ts +9 -0
  667. package/dist/types.backup/rsc/helpers.d.ts +213 -0
  668. package/dist/types.backup/rsc/index.d.ts +17 -0
  669. package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
  670. package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
  671. package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
  672. package/dist/types.backup/rsc/nonce.d.ts +28 -0
  673. package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
  674. package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
  675. package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
  676. package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
  677. package/dist/types.backup/rsc/response-error.d.ts +19 -0
  678. package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
  679. package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
  680. package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
  681. package/dist/types.backup/rsc/server-action.d.ts +68 -0
  682. package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
  683. package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
  684. package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
  685. package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
  686. package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
  687. package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
  688. package/dist/types.backup/rsc/types.d.ts +290 -0
  689. package/dist/types.backup/runtime-env.d.ts +1 -0
  690. package/dist/types.backup/search-params.d.ts +125 -0
  691. package/dist/types.backup/segment-content-promise.d.ts +13 -0
  692. package/dist/types.backup/segment-fragments.d.ts +56 -0
  693. package/dist/types.backup/segment-loader-promise.d.ts +22 -0
  694. package/dist/types.backup/segment-system.d.ts +84 -0
  695. package/dist/types.backup/serialize.d.ts +164 -0
  696. package/dist/types.backup/server/context.d.ts +494 -0
  697. package/dist/types.backup/server/cookie-parse.d.ts +10 -0
  698. package/dist/types.backup/server/cookie-store.d.ts +107 -0
  699. package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
  700. package/dist/types.backup/server/handle-store.d.ts +100 -0
  701. package/dist/types.backup/server/loader-registry.d.ts +32 -0
  702. package/dist/types.backup/server/request-context.d.ts +596 -0
  703. package/dist/types.backup/server/root-layout.d.ts +3 -0
  704. package/dist/types.backup/server.d.ts +15 -0
  705. package/dist/types.backup/ssr/index.d.ts +233 -0
  706. package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
  707. package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
  708. package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
  709. package/dist/types.backup/static-handler.d.ts +57 -0
  710. package/dist/types.backup/testing/cache-status.d.ts +63 -0
  711. package/dist/types.backup/testing/collect-handle.d.ts +20 -0
  712. package/dist/types.backup/testing/dispatch.d.ts +123 -0
  713. package/dist/types.backup/testing/dom.entry.d.ts +15 -0
  714. package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
  715. package/dist/types.backup/testing/e2e/index.d.ts +30 -0
  716. package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
  717. package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
  718. package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
  719. package/dist/types.backup/testing/e2e/server.d.ts +35 -0
  720. package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
  721. package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
  722. package/dist/types.backup/testing/flight-tree.d.ts +192 -0
  723. package/dist/types.backup/testing/flight.d.ts +115 -0
  724. package/dist/types.backup/testing/flight.entry.d.ts +27 -0
  725. package/dist/types.backup/testing/generated-routes.d.ts +66 -0
  726. package/dist/types.backup/testing/index.d.ts +52 -0
  727. package/dist/types.backup/testing/internal/context.d.ts +225 -0
  728. package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
  729. package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
  730. package/dist/types.backup/testing/render-handler.d.ts +160 -0
  731. package/dist/types.backup/testing/render-route.d.ts +246 -0
  732. package/dist/types.backup/testing/run-loader.d.ts +186 -0
  733. package/dist/types.backup/testing/run-middleware.d.ts +132 -0
  734. package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
  735. package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  736. package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  737. package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  738. package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
  739. package/dist/types.backup/testing/vitest.d.ts +205 -0
  740. package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
  741. package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
  742. package/dist/types.backup/theme/constants.d.ts +39 -0
  743. package/dist/types.backup/theme/index.d.ts +29 -0
  744. package/dist/types.backup/theme/theme-context.d.ts +21 -0
  745. package/dist/types.backup/theme/theme-script.d.ts +26 -0
  746. package/dist/types.backup/theme/types.d.ts +162 -0
  747. package/dist/types.backup/theme/use-theme.d.ts +8 -0
  748. package/dist/types.backup/types/boundaries.d.ts +93 -0
  749. package/dist/types.backup/types/cache-types.d.ts +191 -0
  750. package/dist/types.backup/types/error-types.d.ts +114 -0
  751. package/dist/types.backup/types/global-namespace.d.ts +90 -0
  752. package/dist/types.backup/types/handler-context.d.ts +658 -0
  753. package/dist/types.backup/types/index.d.ts +11 -0
  754. package/dist/types.backup/types/loader-types.d.ts +182 -0
  755. package/dist/types.backup/types/request-scope.d.ts +93 -0
  756. package/dist/types.backup/types/route-config.d.ts +105 -0
  757. package/dist/types.backup/types/route-entry.d.ts +95 -0
  758. package/dist/types.backup/types/segments.d.ts +234 -0
  759. package/dist/types.backup/types.d.ts +1 -0
  760. package/dist/types.backup/urls/include-helper.d.ts +17 -0
  761. package/dist/types.backup/urls/include-provider.d.ts +27 -0
  762. package/dist/types.backup/urls/index.d.ts +6 -0
  763. package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
  764. package/dist/types.backup/urls/path-helper.d.ts +12 -0
  765. package/dist/types.backup/urls/pattern-types.d.ts +166 -0
  766. package/dist/types.backup/urls/response-types.d.ts +67 -0
  767. package/dist/types.backup/urls/type-extraction.d.ts +157 -0
  768. package/dist/types.backup/urls/urls-function.d.ts +24 -0
  769. package/dist/types.backup/urls.d.ts +1 -0
  770. package/dist/types.backup/use-loader.d.ts +150 -0
  771. package/dist/types.backup/vercel/index.d.ts +10 -0
  772. package/dist/types.backup/vercel/tracing.d.ts +70 -0
  773. package/dist/types.backup/vite/debug.d.ts +80 -0
  774. package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
  775. package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
  776. package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
  777. package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
  778. package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
  779. package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
  780. package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
  781. package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
  782. package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
  783. package/dist/types.backup/vite/discovery/state.d.ts +162 -0
  784. package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
  785. package/dist/types.backup/vite/index.d.ts +11 -0
  786. package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
  787. package/dist/types.backup/vite/plugin-types.d.ts +298 -0
  788. package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
  789. package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
  790. package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
  791. package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  792. package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
  793. package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
  794. package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  795. package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  796. package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  797. package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  798. package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
  799. package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
  800. package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
  801. package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
  802. package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
  803. package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
  804. package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
  805. package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
  806. package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
  807. package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  808. package/dist/types.backup/vite/rango.d.ts +29 -0
  809. package/dist/types.backup/vite/router-discovery.d.ts +23 -0
  810. package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
  811. package/dist/types.backup/vite/utils/banner.d.ts +2 -0
  812. package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
  813. package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
  814. package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
  815. package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
  816. package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
  817. package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
  818. package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
  819. package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
  820. package/dist/vite/index.js +9695 -3592
  821. package/package.json +119 -39
  822. package/skills/api-client/SKILL.md +211 -0
  823. package/skills/breadcrumbs/SKILL.md +82 -5
  824. package/skills/bundle-analysis/SKILL.md +159 -0
  825. package/skills/cache-guide/SKILL.md +232 -34
  826. package/skills/caching/SKILL.md +375 -19
  827. package/skills/catalog.json +283 -0
  828. package/skills/cloudflare/SKILL.md +151 -0
  829. package/skills/cloudflare/agents/openai.yaml +4 -0
  830. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  831. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  832. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  833. package/skills/comparison/SKILL.md +50 -0
  834. package/skills/comparison/agents/openai.yaml +4 -0
  835. package/skills/comparison/references/framework-comparison.md +844 -0
  836. package/skills/composability/SKILL.md +124 -4
  837. package/skills/css/SKILL.md +76 -0
  838. package/skills/debug-manifest/SKILL.md +5 -11
  839. package/skills/defer-hydration/SKILL.md +235 -0
  840. package/skills/deployment-caching/SKILL.md +176 -0
  841. package/skills/document-cache/SKILL.md +116 -58
  842. package/skills/fonts/SKILL.md +1 -1
  843. package/skills/handler-use/SKILL.md +12 -10
  844. package/skills/hooks/SKILL.md +73 -699
  845. package/skills/hooks/data.md +273 -0
  846. package/skills/hooks/handle-and-actions.md +103 -0
  847. package/skills/hooks/navigation.md +110 -0
  848. package/skills/hooks/outlets.md +62 -0
  849. package/skills/hooks/state.md +228 -0
  850. package/skills/hooks/urls.md +135 -0
  851. package/skills/host-router/SKILL.md +129 -27
  852. package/skills/i18n/SKILL.md +276 -0
  853. package/skills/intercept/SKILL.md +75 -19
  854. package/skills/layout/SKILL.md +40 -19
  855. package/skills/links/SKILL.md +211 -17
  856. package/skills/loader/SKILL.md +230 -25
  857. package/skills/middleware/SKILL.md +58 -13
  858. package/skills/migrate-nextjs/SKILL.md +267 -33
  859. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  860. package/skills/migrate-react-router/SKILL.md +59 -671
  861. package/skills/migrate-react-router/component-migration.md +196 -0
  862. package/skills/migrate-react-router/data-and-actions.md +225 -0
  863. package/skills/migrate-react-router/route-mapping.md +271 -0
  864. package/skills/mime-routes/SKILL.md +55 -18
  865. package/skills/observability/SKILL.md +231 -0
  866. package/skills/parallel/SKILL.md +50 -10
  867. package/skills/ppr/SKILL.md +904 -0
  868. package/skills/prerender/SKILL.md +130 -68
  869. package/skills/rango/SKILL.md +321 -26
  870. package/skills/react-compiler/SKILL.md +168 -0
  871. package/skills/response-routes/SKILL.md +172 -52
  872. package/skills/route/SKILL.md +123 -9
  873. package/skills/router-setup/SKILL.md +53 -9
  874. package/skills/scripts/SKILL.md +179 -0
  875. package/skills/server-actions/SKILL.md +776 -0
  876. package/skills/shell-manifest/SKILL.md +185 -0
  877. package/skills/streams-and-websockets/SKILL.md +1 -1
  878. package/skills/tailwind/SKILL.md +28 -4
  879. package/skills/testing/SKILL.md +131 -0
  880. package/skills/testing/bindings.md +103 -0
  881. package/skills/testing/cache-prerender.md +172 -0
  882. package/skills/testing/client-components.md +131 -0
  883. package/skills/testing/e2e-parity.md +125 -0
  884. package/skills/testing/flight.md +91 -0
  885. package/skills/testing/handles.md +131 -0
  886. package/skills/testing/loader.md +128 -0
  887. package/skills/testing/middleware.md +99 -0
  888. package/skills/testing/render-handler.md +122 -0
  889. package/skills/testing/response-routes.md +95 -0
  890. package/skills/testing/reverse-and-types.md +85 -0
  891. package/skills/testing/server-actions.md +107 -0
  892. package/skills/testing/server-tree.md +128 -0
  893. package/skills/testing/setup.md +123 -0
  894. package/skills/theme/SKILL.md +1 -1
  895. package/skills/typesafety/SKILL.md +45 -628
  896. package/skills/typesafety/env-and-bindings.md +254 -0
  897. package/skills/typesafety/generated-files-and-cli.md +342 -0
  898. package/skills/typesafety/params-and-search.md +153 -0
  899. package/skills/typesafety/route-types.md +213 -0
  900. package/skills/use-cache/SKILL.md +121 -15
  901. package/skills/vercel/SKILL.md +149 -0
  902. package/skills/view-transitions/SKILL.md +341 -0
  903. package/src/__augment-tests__/augment.ts +81 -0
  904. package/src/__augment-tests__/augmented.check.ts +116 -0
  905. package/src/__internal.ts +0 -65
  906. package/src/browser/action-coordinator.ts +53 -36
  907. package/src/browser/action-fence.ts +47 -0
  908. package/src/browser/app-shell.ts +14 -27
  909. package/src/browser/connection-warmup.ts +134 -0
  910. package/src/browser/cookie-name.ts +140 -0
  911. package/src/browser/dev-discovery.ts +66 -0
  912. package/src/browser/event-controller.ts +400 -168
  913. package/src/browser/history-state.ts +21 -0
  914. package/src/browser/index.ts +3 -3
  915. package/src/browser/invalidate-client-cache.ts +52 -0
  916. package/src/browser/link-interceptor.ts +469 -20
  917. package/src/browser/logging.ts +28 -0
  918. package/src/browser/merge-segment-loaders.ts +6 -4
  919. package/src/browser/navigation-bridge.ts +164 -69
  920. package/src/browser/navigation-client.ts +199 -96
  921. package/src/browser/navigation-store-handle.ts +38 -0
  922. package/src/browser/navigation-store.ts +165 -345
  923. package/src/browser/navigation-transaction.ts +9 -59
  924. package/src/browser/network-error-handler.ts +34 -7
  925. package/src/browser/notify-listeners.ts +22 -0
  926. package/src/browser/partial-update.ts +219 -163
  927. package/src/browser/prefetch/cache.ts +240 -97
  928. package/src/browser/prefetch/default-strategy.ts +74 -0
  929. package/src/browser/prefetch/fetch.ts +317 -51
  930. package/src/browser/prefetch/invalidation.ts +30 -0
  931. package/src/browser/prefetch/loader.ts +111 -0
  932. package/src/browser/prefetch/observer.ts +50 -22
  933. package/src/browser/prefetch/queue.ts +25 -7
  934. package/src/browser/prefetch/runtime.ts +6 -0
  935. package/src/browser/rango-state.ts +177 -114
  936. package/src/browser/react/Link.tsx +115 -75
  937. package/src/browser/react/NavigationProvider.tsx +194 -143
  938. package/src/browser/react/ScrollRestoration.tsx +10 -6
  939. package/src/browser/react/context.ts +4 -0
  940. package/src/browser/react/filter-segment-order.ts +66 -7
  941. package/src/browser/react/index.ts +0 -48
  942. package/src/browser/react/location-state-shared.ts +178 -8
  943. package/src/browser/react/location-state.ts +39 -14
  944. package/src/browser/react/use-action.ts +6 -15
  945. package/src/browser/react/use-handle.ts +17 -14
  946. package/src/browser/react/use-href.tsx +8 -1
  947. package/src/browser/react/use-link-status.ts +33 -8
  948. package/src/browser/react/use-navigation.ts +10 -5
  949. package/src/browser/react/use-params.ts +11 -11
  950. package/src/browser/react/use-reverse.ts +106 -0
  951. package/src/browser/react/use-router.ts +21 -6
  952. package/src/browser/react/use-search-params.ts +0 -5
  953. package/src/browser/react/use-segments.ts +11 -21
  954. package/src/browser/response-adapter.ts +99 -8
  955. package/src/browser/rsc-router.tsx +230 -42
  956. package/src/browser/scroll-restoration.ts +37 -22
  957. package/src/browser/segment-reconciler.ts +31 -21
  958. package/src/browser/segment-structure-assert.ts +2 -2
  959. package/src/browser/server-action-bridge.ts +262 -65
  960. package/src/browser/types.ts +132 -47
  961. package/src/browser/validate-redirect-origin.ts +43 -16
  962. package/src/build/collect-fallback-refs.ts +107 -0
  963. package/src/build/generate-manifest.ts +213 -184
  964. package/src/build/generate-route-types.ts +3 -1
  965. package/src/build/index.ts +11 -3
  966. package/src/build/merge-full-manifests.ts +161 -0
  967. package/src/build/prefix-tree-utils.ts +123 -0
  968. package/src/build/route-trie.ts +43 -280
  969. package/src/build/route-types/ast-route-extraction.ts +15 -8
  970. package/src/build/route-types/codegen.ts +16 -5
  971. package/src/build/route-types/include-resolution.ts +513 -64
  972. package/src/build/route-types/param-extraction.ts +6 -3
  973. package/src/build/route-types/per-module-writer.ts +33 -12
  974. package/src/build/route-types/router-processing.ts +312 -204
  975. package/src/build/route-types/scan-filter.ts +1 -1
  976. package/src/build/route-types/source-scan.ts +216 -0
  977. package/src/build/runtime-discovery.ts +32 -29
  978. package/src/cache/cache-error.ts +104 -0
  979. package/src/cache/cache-exec-scope.ts +47 -0
  980. package/src/cache/cache-key-utils.ts +73 -15
  981. package/src/cache/cache-policy.ts +108 -34
  982. package/src/cache/cache-runtime.ts +566 -121
  983. package/src/cache/cache-scope.ts +383 -105
  984. package/src/cache/cache-tag.ts +149 -0
  985. package/src/cache/cf/cf-base64.ts +33 -0
  986. package/src/cache/cf/cf-cache-constants.ts +134 -0
  987. package/src/cache/cf/cf-cache-store.ts +3028 -391
  988. package/src/cache/cf/cf-cache-types.ts +417 -0
  989. package/src/cache/cf/cf-kv-utils.ts +84 -0
  990. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  991. package/src/cache/cf/cf-zone-purge.ts +101 -0
  992. package/src/cache/cf/index.ts +11 -16
  993. package/src/cache/document-cache.ts +184 -53
  994. package/src/cache/handle-snapshot.ts +92 -1
  995. package/src/cache/index.ts +32 -20
  996. package/src/cache/memory-segment-store.ts +286 -37
  997. package/src/cache/profile-registry.ts +46 -31
  998. package/src/cache/read-through-swr.ts +66 -16
  999. package/src/cache/search-params-filter.ts +118 -0
  1000. package/src/cache/segment-codec.ts +80 -25
  1001. package/src/cache/shell-snapshot.ts +516 -0
  1002. package/src/cache/tag-invalidation.ts +230 -0
  1003. package/src/cache/taint.ts +28 -9
  1004. package/src/cache/types.ts +323 -100
  1005. package/src/cache/vercel/index.ts +11 -0
  1006. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1007. package/src/client-urls/client-root.tsx +161 -0
  1008. package/src/client-urls/client-urls.ts +665 -0
  1009. package/src/client-urls/navigation.ts +237 -0
  1010. package/src/client-urls/revalidation-protocol.ts +56 -0
  1011. package/src/client-urls/server-projection.ts +563 -0
  1012. package/src/client-urls/types.ts +178 -0
  1013. package/src/client.rsc.tsx +48 -21
  1014. package/src/client.tsx +77 -67
  1015. package/src/cloudflare/index.ts +11 -0
  1016. package/src/cloudflare/tracing.ts +112 -0
  1017. package/src/component-utils.ts +19 -0
  1018. package/src/components/DefaultDocument.tsx +8 -2
  1019. package/src/context-var.ts +18 -6
  1020. package/src/decode-loader-results.ts +160 -0
  1021. package/src/defer.ts +185 -0
  1022. package/src/deps/ssr.ts +4 -2
  1023. package/src/dev-discovery-protocol.ts +11 -0
  1024. package/src/encode-kv.ts +49 -0
  1025. package/src/errors.ts +44 -4
  1026. package/src/escape-script.ts +52 -0
  1027. package/src/handle.ts +67 -37
  1028. package/src/handles/MetaTags.tsx +24 -53
  1029. package/src/handles/Scripts.tsx +183 -0
  1030. package/src/handles/breadcrumbs.ts +35 -8
  1031. package/src/handles/deferred-resolution.ts +134 -0
  1032. package/src/handles/is-thenable.ts +16 -0
  1033. package/src/handles/meta.ts +14 -40
  1034. package/src/handles/script.ts +244 -0
  1035. package/src/host/cookie-handler.ts +9 -60
  1036. package/src/host/errors.ts +13 -22
  1037. package/src/host/index.ts +9 -2
  1038. package/src/host/pattern-matcher.ts +23 -52
  1039. package/src/host/router.ts +107 -99
  1040. package/src/host/testing.ts +40 -27
  1041. package/src/host/types.ts +37 -4
  1042. package/src/host/utils.ts +1 -1
  1043. package/src/href-client.ts +137 -22
  1044. package/src/index.rsc.ts +105 -12
  1045. package/src/index.ts +102 -14
  1046. package/src/internal-debug.ts +11 -10
  1047. package/src/loader-redirect.tsx +47 -0
  1048. package/src/loader-store.ts +500 -0
  1049. package/src/loader.rsc.ts +20 -13
  1050. package/src/loader.ts +12 -11
  1051. package/src/missing-id-error.ts +68 -0
  1052. package/src/outlet-context.ts +12 -0
  1053. package/src/outlet-provider.tsx +16 -6
  1054. package/src/prerender/build-shell-capture.ts +453 -0
  1055. package/src/prerender/param-hash.ts +16 -16
  1056. package/src/prerender/shell-manifest-key.ts +20 -0
  1057. package/src/prerender/store.ts +47 -38
  1058. package/src/prerender.ts +81 -13
  1059. package/src/redirect-origin.ts +143 -0
  1060. package/src/regex-escape.ts +8 -0
  1061. package/src/render-error-thrower.tsx +20 -0
  1062. package/src/response-utils.ts +34 -0
  1063. package/src/reverse.ts +65 -40
  1064. package/src/root-error-boundary.tsx +1 -19
  1065. package/src/route-content-wrapper.tsx +112 -78
  1066. package/src/route-definition/dsl-helpers.ts +300 -313
  1067. package/src/route-definition/helper-factories.ts +28 -140
  1068. package/src/route-definition/helpers-types.ts +92 -62
  1069. package/src/route-definition/index.ts +1 -2
  1070. package/src/route-definition/redirect.ts +44 -11
  1071. package/src/route-definition/resolve-handler-use.ts +6 -1
  1072. package/src/route-definition/use-item-types.ts +29 -0
  1073. package/src/route-map-builder.ts +102 -74
  1074. package/src/route-types.ts +19 -46
  1075. package/src/router/basename.ts +14 -0
  1076. package/src/router/content-negotiation.ts +120 -30
  1077. package/src/router/error-handling.ts +110 -29
  1078. package/src/router/find-match.ts +129 -30
  1079. package/src/router/handler-context.ts +41 -57
  1080. package/src/router/instrument.ts +401 -0
  1081. package/src/router/intercept-resolution.ts +98 -21
  1082. package/src/router/lazy-includes.ts +82 -58
  1083. package/src/router/loader-resolution.ts +401 -85
  1084. package/src/router/logging.ts +0 -6
  1085. package/src/router/manifest.ts +74 -40
  1086. package/src/router/match-api.ts +91 -55
  1087. package/src/router/match-context.ts +0 -22
  1088. package/src/router/match-handlers.ts +268 -171
  1089. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1090. package/src/router/match-middleware/cache-lookup.ts +316 -302
  1091. package/src/router/match-middleware/cache-store.ts +134 -52
  1092. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1093. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1094. package/src/router/match-pipelines.ts +1 -42
  1095. package/src/router/match-result.ts +76 -79
  1096. package/src/router/metrics.ts +17 -36
  1097. package/src/router/middleware-types.ts +20 -110
  1098. package/src/router/middleware.ts +275 -173
  1099. package/src/router/navigation-snapshot.ts +51 -60
  1100. package/src/router/params-util.ts +23 -0
  1101. package/src/router/parse-pattern.ts +115 -0
  1102. package/src/router/pattern-matching.ts +134 -154
  1103. package/src/router/prefetch-cache-ttl.ts +51 -0
  1104. package/src/router/prefetch-default.ts +59 -0
  1105. package/src/router/prefetch-limits.ts +37 -0
  1106. package/src/router/prerender-match.ts +159 -69
  1107. package/src/router/preview-match.ts +6 -2
  1108. package/src/router/request-classification.ts +50 -69
  1109. package/src/router/revalidation.ts +146 -83
  1110. package/src/router/route-snapshot.ts +14 -3
  1111. package/src/router/route-trie-builder.ts +334 -0
  1112. package/src/router/router-context.ts +6 -29
  1113. package/src/router/router-interfaces.ts +168 -38
  1114. package/src/router/router-options.ts +235 -11
  1115. package/src/router/router-registry.ts +2 -5
  1116. package/src/router/segment-resolution/fresh.ts +163 -88
  1117. package/src/router/segment-resolution/helpers.ts +96 -18
  1118. package/src/router/segment-resolution/loader-cache.ts +187 -39
  1119. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1120. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1121. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1122. package/src/router/segment-resolution/revalidation.ts +316 -321
  1123. package/src/router/segment-resolution/static-store.ts +55 -15
  1124. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1125. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1126. package/src/router/segment-resolution.ts +5 -1
  1127. package/src/router/segment-wrappers.ts +6 -5
  1128. package/src/router/state-cookie-name.ts +33 -0
  1129. package/src/router/substitute-pattern-params.ts +75 -0
  1130. package/src/router/telemetry-otel.ts +171 -200
  1131. package/src/router/telemetry.ts +106 -20
  1132. package/src/router/timeout.ts +53 -22
  1133. package/src/router/tracing.ts +235 -0
  1134. package/src/router/transition-when.ts +76 -0
  1135. package/src/router/trie-matching.ts +170 -64
  1136. package/src/router/types.ts +9 -63
  1137. package/src/router/url-params.ts +13 -5
  1138. package/src/router.ts +248 -77
  1139. package/src/rsc/capture-queue.ts +218 -0
  1140. package/src/rsc/full-payload.ts +77 -0
  1141. package/src/rsc/handler-context.ts +4 -2
  1142. package/src/rsc/handler.ts +562 -284
  1143. package/src/rsc/helpers.ts +179 -9
  1144. package/src/rsc/index.ts +2 -5
  1145. package/src/rsc/json-route-result.ts +38 -0
  1146. package/src/rsc/loader-fetch.ts +116 -40
  1147. package/src/rsc/manifest-init.ts +55 -56
  1148. package/src/rsc/nonce.ts +10 -1
  1149. package/src/rsc/origin-guard.ts +39 -25
  1150. package/src/rsc/progressive-enhancement.ts +377 -84
  1151. package/src/rsc/redirect-guard.ts +102 -0
  1152. package/src/rsc/render-pipeline.ts +611 -0
  1153. package/src/rsc/response-cache-serve.ts +259 -0
  1154. package/src/rsc/response-error.ts +79 -12
  1155. package/src/rsc/response-route-handler.ts +73 -212
  1156. package/src/rsc/routine-plan.ts +359 -0
  1157. package/src/rsc/rsc-rendering.ts +1624 -171
  1158. package/src/rsc/runtime-warnings.ts +23 -10
  1159. package/src/rsc/server-action.ts +420 -139
  1160. package/src/rsc/shell-build-manifest.ts +336 -0
  1161. package/src/rsc/shell-capture-constants.ts +45 -0
  1162. package/src/rsc/shell-capture.ts +2063 -0
  1163. package/src/rsc/shell-serve.ts +337 -0
  1164. package/src/rsc/ssr-setup.ts +111 -16
  1165. package/src/rsc/stream-idle.ts +137 -0
  1166. package/src/rsc/transition-gate.ts +86 -0
  1167. package/src/rsc/types.ts +91 -5
  1168. package/src/runtime-env.ts +18 -0
  1169. package/src/search-params.ts +35 -30
  1170. package/src/segment-fragments.ts +165 -0
  1171. package/src/segment-loader-promise.ts +49 -4
  1172. package/src/segment-system.tsx +441 -153
  1173. package/src/serialize.ts +243 -0
  1174. package/src/server/context.ts +416 -55
  1175. package/src/server/cookie-parse.ts +32 -0
  1176. package/src/server/cookie-store.ts +162 -15
  1177. package/src/server/handle-store.ts +190 -70
  1178. package/src/server/loader-registry.ts +33 -42
  1179. package/src/server/request-context.ts +805 -177
  1180. package/src/server.ts +7 -2
  1181. package/src/ssr/index.tsx +631 -183
  1182. package/src/ssr/inject-rsc-eager.ts +167 -0
  1183. package/src/ssr/preinit-client-references.ts +106 -0
  1184. package/src/ssr/ssr-root.tsx +262 -0
  1185. package/src/static-handler.ts +28 -15
  1186. package/src/testing/cache-status.ts +162 -0
  1187. package/src/testing/collect-handle.ts +46 -0
  1188. package/src/testing/dispatch.ts +951 -0
  1189. package/src/testing/dom.entry.ts +22 -0
  1190. package/src/testing/e2e/fixture.ts +188 -0
  1191. package/src/testing/e2e/index.ts +147 -0
  1192. package/src/testing/e2e/matchers.ts +35 -0
  1193. package/src/testing/e2e/page-helpers.ts +319 -0
  1194. package/src/testing/e2e/parity.ts +400 -0
  1195. package/src/testing/e2e/server.ts +195 -0
  1196. package/src/testing/flight-matchers.ts +97 -0
  1197. package/src/testing/flight-normalize.ts +11 -0
  1198. package/src/testing/flight-runtime.d.ts +57 -0
  1199. package/src/testing/flight-tree.ts +682 -0
  1200. package/src/testing/flight.entry.ts +52 -0
  1201. package/src/testing/flight.ts +257 -0
  1202. package/src/testing/generated-routes.ts +199 -0
  1203. package/src/testing/index.ts +121 -0
  1204. package/src/testing/internal/context.ts +380 -0
  1205. package/src/testing/internal/flight-client-globals.ts +30 -0
  1206. package/src/testing/internal/seed-vars.ts +54 -0
  1207. package/src/testing/render-handler.ts +371 -0
  1208. package/src/testing/render-route.tsx +667 -0
  1209. package/src/testing/run-loader.ts +423 -0
  1210. package/src/testing/run-middleware.ts +219 -0
  1211. package/src/testing/run-transition-when.ts +197 -0
  1212. package/src/testing/shell-status.ts +206 -0
  1213. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1214. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1215. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1216. package/src/testing/vitest-stubs/version.ts +5 -0
  1217. package/src/testing/vitest.ts +305 -0
  1218. package/src/theme/ThemeProvider.tsx +56 -84
  1219. package/src/theme/ThemeScript.tsx +7 -9
  1220. package/src/theme/constants.ts +52 -13
  1221. package/src/theme/index.ts +0 -7
  1222. package/src/theme/theme-context.ts +1 -5
  1223. package/src/theme/theme-script.ts +22 -21
  1224. package/src/theme/use-theme.ts +0 -3
  1225. package/src/types/boundaries.ts +15 -35
  1226. package/src/types/cache-types.ts +13 -4
  1227. package/src/types/error-types.ts +30 -90
  1228. package/src/types/global-namespace.ts +54 -41
  1229. package/src/types/handler-context.ts +121 -30
  1230. package/src/types/index.ts +3 -10
  1231. package/src/types/loader-types.ts +38 -7
  1232. package/src/types/request-scope.ts +8 -22
  1233. package/src/types/route-config.ts +20 -52
  1234. package/src/types/route-entry.ts +3 -6
  1235. package/src/types/segments.ts +147 -14
  1236. package/src/urls/include-helper.ts +38 -64
  1237. package/src/urls/include-provider.ts +71 -0
  1238. package/src/urls/index.ts +2 -11
  1239. package/src/urls/path-helper-types.ts +76 -24
  1240. package/src/urls/path-helper.ts +30 -110
  1241. package/src/urls/pattern-types.ts +101 -19
  1242. package/src/urls/response-types.ts +20 -19
  1243. package/src/urls/type-extraction.ts +98 -154
  1244. package/src/urls/urls-function.ts +1 -19
  1245. package/src/use-loader.tsx +355 -109
  1246. package/src/vercel/index.ts +11 -0
  1247. package/src/vercel/tracing.ts +89 -0
  1248. package/src/vite/debug.ts +102 -3
  1249. package/src/vite/discovery/bundle-postprocess.ts +18 -14
  1250. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1251. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1252. package/src/vite/discovery/discover-routers.ts +178 -151
  1253. package/src/vite/discovery/discovery-errors.ts +255 -0
  1254. package/src/vite/discovery/gate-state.ts +171 -0
  1255. package/src/vite/discovery/prerender-collection.ts +125 -70
  1256. package/src/vite/discovery/route-types-writer.ts +40 -84
  1257. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1258. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1259. package/src/vite/discovery/state.ts +104 -6
  1260. package/src/vite/discovery/virtual-module-codegen.ts +226 -87
  1261. package/src/vite/encryption-key.ts +29 -0
  1262. package/src/vite/index.ts +12 -0
  1263. package/src/vite/inject-client-debug.ts +88 -0
  1264. package/src/vite/plugin-types.ts +243 -10
  1265. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1266. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1267. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1268. package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
  1269. package/src/vite/plugins/expose-action-id.ts +50 -97
  1270. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1271. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1272. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1273. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1274. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1275. package/src/vite/plugins/expose-internal-ids.ts +551 -486
  1276. package/src/vite/plugins/performance-tracks.ts +25 -22
  1277. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1278. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1279. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1280. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1281. package/src/vite/plugins/vercel-output.ts +384 -0
  1282. package/src/vite/plugins/version-injector.ts +39 -29
  1283. package/src/vite/plugins/version-plugin.ts +45 -40
  1284. package/src/vite/plugins/virtual-entries.ts +193 -30
  1285. package/src/vite/rango.ts +240 -128
  1286. package/src/vite/router-discovery.ts +1518 -174
  1287. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1288. package/src/vite/utils/bundle-analysis.ts +10 -15
  1289. package/src/vite/utils/client-chunks.ts +184 -0
  1290. package/src/vite/utils/directive-prologue.ts +40 -0
  1291. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1292. package/src/vite/utils/manifest-utils.ts +1 -59
  1293. package/src/vite/utils/package-resolution.ts +2 -73
  1294. package/src/vite/utils/prerender-utils.ts +96 -49
  1295. package/src/vite/utils/shared-utils.ts +156 -43
  1296. package/src/browser/action-response-classifier.ts +0 -99
  1297. package/src/browser/react/use-client-cache.ts +0 -58
  1298. package/src/browser/shallow.ts +0 -40
  1299. package/src/handles/index.ts +0 -7
  1300. package/src/network-error-thrower.tsx +0 -23
  1301. package/src/router/middleware-cookies.ts +0 -55
@@ -0,0 +1,844 @@
1
+ # Rango compared to Next.js, TanStack Start, and Waku
2
+
3
+ If you are choosing a React framework and trying to place Rango on the map, start
4
+ here. This doc compares Rango against the three frameworks people most often weigh
5
+ it against, and it compares them on **capabilities and design** — the things that
6
+ stay true regardless of how old each project is. Where another framework leads
7
+ (ecosystem, integrations, hiring pool), this doc says so plainly; a comparison
8
+ that only lists wins is not useful to anyone making a real decision.
9
+
10
+ A note on naming: identifiers below (`urls()`, `revalidate()`, `createLoader`,
11
+ `prefetch`, `debugPerformance`, the `rango.*` spans, …) are the actual public API,
12
+ so you can grep for them. Numbers (bundle sizes, gating timeouts) are the measured
13
+ or coded values, not estimates.
14
+
15
+ ## Contents
16
+
17
+ - [TL;DR](#tldr) and [at a glance](#at-a-glance)
18
+ - [Where Rango's design leads](#where-rangos-design-leads)
19
+ - [Runtime mechanics in depth](#runtime-mechanics-in-depth)
20
+ - [The loader as a new primitive](#the-loader-is-a-genuinely-new-primitive)
21
+ - [Tainted request context](#tainted-request-context-cache-safety-is-integrated)
22
+ - [Performance diagnostics](#performance-diagnostics-debugperformance)
23
+ - [Framework-specific perspective](#coming-from-a-specific-framework)
24
+ - [Where the others still lead](#where-the-others-still-lead)
25
+ - [Bottom line](#bottom-line)
26
+
27
+ ## TL;DR
28
+
29
+ Rango is **RSC-first on Vite** (like Waku) but **batteries-included** (like
30
+ Next.js), with **type-safe, code-defined routing** (competing with TanStack
31
+ Start), a **composable graph of named render slots**, and a **single unified
32
+ caching/prerender model**. It is the only one of the four that combines
33
+ programmable RSC partial rendering, request-aware prefetch correctness, tainted
34
+ request-context guards, portable deployment-skew recovery, a server-phase
35
+ performance waterfall, and a public RSC/server testing harness. Its **loader** is
36
+ a genuinely new primitive rather than a renamed Remix/TanStack loader (see
37
+ [The loader is a genuinely new primitive](#the-loader-is-a-genuinely-new-primitive)).
38
+
39
+ The practical advantage is range: a Rango application can begin as one route and
40
+ one component, then gain type-safe links, live data, caching, partial rendering,
41
+ and multi-region composition without replacing its routing or data model.
42
+
43
+ ## At a glance
44
+
45
+ | Dimension | **Rango** | Next.js (App Router) | TanStack Start | Waku |
46
+ | ----------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
47
+ | Routing model | Code DSL (`urls()`/`include()`), named + `reverse()` | File-system convention | File or code, type-first | File-system (+ `createPages`) |
48
+ | Foundation | Vite + plugin-rsc | Turbopack (default in 16; Webpack opt-in) | [Vite or Rsbuild](https://tanstack.com/start/latest/docs/framework/react/overview) | Vite + plugin-rsc |
49
+ | RSC model | RSC-first | RSC-first | SSR/client-first; RSC opt-in (experimental) | RSC-first |
50
+ | Type-safe routes/params | Generated names, params, search, `reverse()`, response MIME | Stable typed links; route-local param types | Best-in-class | Typed path params |
51
+ | Client render selection | Per-segment/loader `revalidate()` policy; typed action and result matching | Automatic segment reuse; refresh/invalidation APIs | Match/loader reload policy | Route refetch/reload |
52
+ | Slots and intercepts | Code-defined named slots with their own loaders/policy; conditional alternate soft-navigation compositions | File-system `@slot` + intercept conventions | Route masking, no parallel RSC slot graph | No equivalent route-slot graph |
53
+ | Caching | One segment store = runtime + build-time + `"use cache"`, tags, SWR | Cache Components plus distinct server/client cache lifecycles | Router loader cache + Query integration + HTTP/CDN policy | Minimal |
54
+ | Request/cache safety | Tainted request contexts, non-cacheable typed vars, guarded effects | Runtime APIs isolated from `"use cache"`; optional React client-boundary taint | Application policy | Application policy |
55
+ | Prerender | Build-time cache; worker serves every request; per-param `Passthrough()` | SSG/ISR + Cache Components/PPR | Static prerender + HTTP/CDN ISR patterns | Static prerender |
56
+ | No-JS parity | First-class, tested (semantic matrix) | Forms/Server Actions supported; no parity harness | Server functions support forms; no parity harness | Server Actions/forms; no parity harness |
57
+ | Middleware | Global + segment-scoped subtree | Single root Proxy (matcher filters paths); no subtree scope | Request/server-function middleware | [Hono middleware + handler interceptors](https://waku.gg/#interceptors) |
58
+ | Observability | Built-in CF + Vercel OTel phase spans, `Server-Timing`, perf waterfall | Built-in OTel spans; no equivalent router-phase waterfall | Client/data devtools | No equivalent built-in phase model |
59
+ | Deploy targets | Node, Cloudflare, Vercel — all with presets | Node/Vercel first; other platforms through adapters | Broad Vite/Rsbuild runtime support | Node plus adapters |
60
+ | Deployment skew | Automatic build-version handshake for navigation, prefetch, and actions; safe reload on mismatch | `deploymentId` mismatch reload; Vercel can pin clients to an immutable deploy | Application/platform policy | Build-id mismatch reload (v1.0-beta) |
61
+ | Multi-tenant | `createHostRouter()` built-in | Roll your own | Roll your own | Roll your own |
62
+ | Testing primitives | Ships `@rangojs/router/testing` (handlers/loaders/mw/Flight/e2e) | No comparable handler/Flight primitives | Documented patterns; no shipped utils | No comparable handler/Flight primitives |
63
+ | Client runtime | ~50 KB Rango + ~115 KB React/RSC, per-route chunks | Configuration-dependent | Configuration-dependent | Deliberately light |
64
+ | Ecosystem | Smaller | Largest | Growing | Small |
65
+
66
+ The rest of this doc unpacks the rows where the design difference is substantive.
67
+
68
+ ## Where Rango's design leads
69
+
70
+ ### Start simple; grow without changing models
71
+
72
+ Rango's advanced features are not setup requirements. The smallest useful app is
73
+ still a route tree and a component:
74
+
75
+ ```tsx
76
+ const router = createRouter().routes(({ path }) => [
77
+ path("/", HomePage, { name: "home" }),
78
+ ]);
79
+ ```
80
+
81
+ As the application grows, each requirement adds one local primitive to that same
82
+ tree:
83
+
84
+ | When you need to… | Add… |
85
+ | ------------------------------------------ | --------------------------------- |
86
+ | make navigation refactor-safe | a route `name` and `reverse()` |
87
+ | split the application into modules | `urls()` and `include()` |
88
+ | keep request data live beneath cached UI | `loader()` |
89
+ | cache or prerender a shared shell | `cache()` or `Prerender()` |
90
+ | choose what updates after an action | `revalidate()` |
91
+ | render independent regions | `parallel()` and named slots |
92
+ | open a route as a modal on soft navigation | `intercept()` |
93
+ | inspect where request time went | `debugPerformance` or `telemetry` |
94
+
95
+ Nothing in the first route requires learning the last row. More importantly, the
96
+ last row does not force a migration to a second router, client data library, or
97
+ static-versus-dynamic application mode. The source-visible route tree remains the
98
+ organizing model from the first page to the complex application.
99
+
100
+ ### AI makes a coherent growth path more valuable
101
+
102
+ AI-assisted development lowers the cost of adding a feature; it does not lower the
103
+ cost of understanding how routing, data, caching, rendering, and invalidation
104
+ interact afterward. A tool that is pleasant for the first generated page but needs
105
+ several unrelated systems as the application grows gives both the developer and the
106
+ agent a fragmented model to reason about.
107
+
108
+ Rango is useful to one developer out of the box, then scales by adding declarations
109
+ to the same route graph. An agent can inspect `urls()` to find route ownership and
110
+ shared policy, follow generated names instead of guessing paths, and use the shipped
111
+ testing primitives and performance timeline as machine-verifiable feedback. Adding
112
+ authentication, live data, a cached shell, a modal route, or targeted post-action
113
+ updates extends the existing model rather than introducing another router, data
114
+ library, cache vocabulary, or observability layer.
115
+
116
+ That does not make application complexity disappear. It keeps the complexity
117
+ explicit, colocated, and testable—the properties that matter when code can be
118
+ produced faster than a person can manually reconstruct its architecture.
119
+
120
+ ### Routes are expressed, and behavior composes around them
121
+
122
+ Rango makes the route graph readable from source. You do not have to reconstruct
123
+ it from directory topology or infer behavior from a collection of specially named
124
+ route, layout, loading, error, and middleware files. Reading a `urls()` tree from
125
+ top to bottom shows which URLs exist, which handlers own them, how modules mount,
126
+ and where shared concerns apply.
127
+
128
+ This does not mean keeping the application in one file. Route handlers, layouts,
129
+ and reusable policy can live in separate modules; `include()` makes those module
130
+ boundaries explicit. The distinction is that the composition returns to one
131
+ declared tree. Middleware, loaders, caching, loading/error policy, revalidation,
132
+ parallel slots, and intercepts appear beside the structure they affect instead of
133
+ being implied by file placement.
134
+
135
+ Rango separates **structure** from **configuration**. `path()` and `include()`
136
+ define which URLs exist, so they stay visible in the `urls()` tree. Middleware,
137
+ loaders, caching, loading/error policy, revalidation, parallels, and intercepts
138
+ configure a node, so they can be imported or composed through small factories:
139
+
140
+ ```tsx
141
+ const withAccountPolicy = () => [
142
+ middleware(requireUser),
143
+ revalidate((ctx) => ctx.isAction(AccountActions) || undefined),
144
+ ];
145
+
146
+ const accountPatterns = urls(({ path }) => [
147
+ path("/orders/:id", OrderPage, { name: "order" }, () => [
148
+ withAccountPolicy(),
149
+ loader(OrderLoader),
150
+ ]),
151
+ ]);
152
+
153
+ urls(({ include }) => [
154
+ include("/account", accountPatterns, { name: "account" }),
155
+ ]);
156
+ ```
157
+
158
+ The composition site still answers which URLs exist and who owns them. The
159
+ included module keeps local names while the mount creates stable scoped identities
160
+ such as `account.order`. Consumers navigate by those identities:
161
+
162
+ ```ts
163
+ ctx.reverse("account.order", { id: order.id });
164
+ ```
165
+
166
+ Moving the route to a different path does not require updating every caller.
167
+ Generated route maps carry required/optional params, search schemas, route names,
168
+ loader returns, and response-route MIME payloads through server and client APIs.
169
+ The same tree can expose typed `path.json()`, `.text()`, `.html()`, `.xml()`,
170
+ `.image()`, `.stream()`, and `.any()` endpoints, including content negotiation,
171
+ SSE, and WebSocket upgrades, without introducing a second API-routing model.
172
+
173
+ Next.js now has stable typed links, but the URL and composition hierarchy remain
174
+ filesystem identities. TanStack Router is the strongest peer on inferred route and
175
+ search-param types; Rango's distinction is Django-style named reversal and module
176
+ mounting in an RSC server route tree. Waku types path parameters but exposes a much
177
+ smaller route-identity surface. See the [Rango overview](../../rango/SKILL.md).
178
+
179
+ ### One caching model, and prerender is part of it
180
+
181
+ This is the largest architectural difference from Next.js. Rango unifies three
182
+ things under one `SegmentCacheStore` abstraction: the runtime segment cache
183
+ (`cache({ ttl, swr, tags })`), the `"use cache"` directive, and **pre-rendering**.
184
+ They share one mental model, one tag-invalidation API (`cacheTag` / `revalidateTag`
185
+ / `updateTag`), and one SWR behavior.
186
+
187
+ The guiding principle is that **pre-rendering is just build-time caching**. There
188
+ are no static `.html`/`.rsc` files served from a CDN bucket — the worker handles
189
+ every request and either replays a stored Flight payload (a cache or prerender
190
+ hit) or renders live. The browser cannot tell which happened.
191
+
192
+ Next.js's
193
+ [Cache Components](https://nextjs.org/docs/app/getting-started/caching)
194
+ model (stable opt-in `cacheComponents: true` in Next 16) is powerful, but server
195
+ data/output lifetimes and the client router cache still follow distinct rules
196
+ (one `cacheLife` profile can now span both). TanStack Router has its own loader
197
+ cache and integrates
198
+ deeply with Query when an application wants a richer data cache; HTTP/CDN policy
199
+ remains another layer. Waku keeps caching minimal. Rango's bet is that one model
200
+ for "cached, `use cache`, and prerendered" is easier to hold in your head than
201
+ several cooperating caches.
202
+
203
+ ### `Passthrough()`: prerender the common case, live-render the rest
204
+
205
+ A prerender handler can decide, **per param set**, whether to bake an artifact or
206
+ defer: `return ctx.passthrough()` falls through to the live handler at runtime. So
207
+ you statically generate your top 1,000 products and serve the long tail
208
+ dynamically, from one definition. Next.js approximates this with
209
+ `generateStaticParams` + `dynamicParams`, but that is two separate knobs rather
210
+ than one decision point inside your handler. See
211
+ [prerender-api-design.md](../../../docs/prerender-api-design.md).
212
+
213
+ ### Progressive enhancement is a tested contract
214
+
215
+ Forms and server actions work with JavaScript disabled: a form POST runs the
216
+ action on the server, re-renders the affected segments, and returns HTML. The
217
+ JS and no-JS paths are held to a parity contract that is **encoded as a test** —
218
+ the semantic matrix (`e2e/semantic-matrix.test.ts`) pins middleware scope,
219
+ handler-first ordering, context visibility, and PE/JS parity. The other frameworks
220
+ have progressively enhanced form or server-function paths in different forms; the
221
+ distinction is that Rango ships parity helpers and keeps the contract under an
222
+ explicit semantic matrix rather than leaving parity to each application.
223
+
224
+ ### CSP nonce plumbing is integrated
225
+
226
+ Strict Content Security Policy often fails at framework-owned inline scripts: the
227
+ application can generate a nonce, but every SSR, hydration, and streaming path has
228
+ to carry it consistently. Rango makes that propagation part of the request model.
229
+ Set `nonce: () => true` to generate a fresh cryptographic nonce per request, or
230
+ return an application-provided value from `nonce(request, env)`.
231
+
232
+ The resolved nonce is applied to the inline scripts that carry the RSC payload into
233
+ the HTML stream and is available during SSR through `useNonce()`. Document-rendered
234
+ scripts pushed through the typed `Script` handle receive it automatically. For
235
+ custom policy middleware, the same value is available as a typed context token:
236
+
237
+ ```tsx
238
+ import { nonce, type Middleware } from "@rangojs/router";
239
+
240
+ const csp: Middleware = async (ctx, next) => {
241
+ await next();
242
+ const value = ctx.get(nonce);
243
+ if (value && ctx.headers.get("content-type")?.includes("text/html")) {
244
+ ctx.header(
245
+ "Content-Security-Policy",
246
+ `default-src 'self'; script-src 'self' 'nonce-${value}' 'strict-dynamic'`,
247
+ );
248
+ }
249
+ };
250
+ ```
251
+
252
+ Rango deliberately does not serialize the nonce into the hydrated browser, where
253
+ exposing it would weaken the policy. Consequently, an async script first discovered
254
+ on a soft navigation is client-injected without a nonce; use the recommended
255
+ `'strict-dynamic'` policy or allow its host. The application still owns the CSP
256
+ directives and reporting policy. What Rango supplies is the easy-to-miss framework
257
+ plumbing, including a CSP example and e2e coverage for hydration, navigation, and
258
+ Server Actions.
259
+
260
+ ### Framework mutation channels have default CSRF protection
261
+
262
+ `originCheck` is enabled by default. Before executing a Server Action, fetchable
263
+ loader request, or progressively enhanced form submission, Rango compares the
264
+ browser's `Origin` header—or `Referer` as a fallback—with the request protocol and
265
+ `Host`. A mismatch, `Origin: null`, or an origin-bearing request with no trustworthy
266
+ `Host` fails closed with `403`. The rejection also reaches `onError` and telemetry
267
+ as an origin-check event.
268
+
269
+ The default deliberately ignores `X-Forwarded-Host` and `X-Forwarded-Proto`; those
270
+ headers are unsafe unless a trusted proxy strips user-provided values. Applications
271
+ behind a non-standard proxy can provide an `originCheck(ctx)` callback with access
272
+ to the request, environment, router id, request phase, and `defaultCheck()`. The
273
+ callback can allow, reject, or return a custom `Response`; `originCheck: false` is
274
+ the explicit opt-out.
275
+
276
+ This is framework-level CSRF protection, not a universal synchronizer-token system.
277
+ Requests with neither `Origin` nor `Referer` remain available to non-browser clients,
278
+ and ordinary response routes or custom API handlers are outside this automatic gate.
279
+ Protect those endpoints with authentication, route middleware, and a token or custom
280
+ origin policy when their threat model requires it. The useful default is that
281
+ Rango's own mutation transports do not begin unguarded, and the JS and no-JS form
282
+ paths pass through the same check.
283
+
284
+ ### A deterministic execution model
285
+
286
+ The router gives you guarantees most file-based routers leave implicit:
287
+
288
+ - **Handler-first ordering** — a route's handler runs before its child layouts,
289
+ orphan layouts, and parallel slots in the same render pass, so a handler can set
290
+ context that children read.
291
+ - **Two clear middleware scopes** — request-level (`router.use()`) versus
292
+ **segment-scoped subtree** middleware, which is more granular than Next's single
293
+ root [`proxy.ts`](https://nextjs.org/docs/app/api-reference/file-conventions/proxy):
294
+ its `matcher` filters which paths the one Proxy runs on, but there is no
295
+ per-segment subtree middleware.
296
+ - **Structural context visibility** — `ctx.set()`/`ctx.get()` flow down the tree
297
+ only; parallel siblings do not bleed into each other.
298
+ - **Dev/prod matching parity** — one trie is used in both dev and production, so
299
+ matching cannot drift between them. See
300
+ [matching-and-lazy-discovery.md](../../../docs/internal/matching-and-lazy-discovery.md)
301
+ and [execution-model.md](../../../docs/internal/execution-model.md).
302
+
303
+ ### Observability you do not wire yourself
304
+
305
+ `createCloudflareTracing()` and `createVercelTracing()` emit nested phase spans out
306
+ of the box — `rango.request`, `rango.middleware`, `rango.action`, `rango.loader`,
307
+ `rango.handler`, `rango.render`, `rango.ssr` — that nest under the platform's own
308
+ KV/D1/fetch spans. The same instrumentation site also powers `debugPerformance`
309
+ (see [the diagnostics section](#performance-diagnostics-debugperformance) below).
310
+ Next.js also ships automatic OTel instrumentation; Rango's distinction is that the
311
+ same router-owned phase registry drives its traces, local waterfall, and
312
+ `Server-Timing` output. TanStack's strength is client/data devtools; Waku does not
313
+ ship an equivalent request-phase model. See
314
+ [telemetry.md](../../../docs/telemetry.md).
315
+
316
+ ### Deploy to Node, Cloudflare, and Vercel — and host many apps behind one entry
317
+
318
+ Three presets, each with its own cache store: `CFCacheStore` (Cloudflare KV, L1+L2),
319
+ `VercelCacheStore` (Vercel Runtime Cache, Node runtime), and
320
+ `MemorySegmentCacheStore`. Next.js self-hosts on Node/Docker with all features
321
+ first-class, and now ships an official Deployment Adapters API (`adapterPath`,
322
+ with verified adapters — Vercel and Bun today, Cloudflare and Netlify building on
323
+ it) for other platforms; the difference is that Rango owns its Cloudflare and
324
+ Vercel presets directly and was designed for the edge-worker model from the start.
325
+
326
+ On top of that, `createHostRouter()` routes by domain/subdomain to independent
327
+ sub-apps (each its own `createRouter()` with its own route map and cache store),
328
+ lazy-loaded by dynamic import. The optional `defineHosts()` helper freezes a named
329
+ map of reusable host patterns and preserves its exact TypeScript keys; it does not
330
+ perform routing itself. None of the other three offer multi-tenancy as a
331
+ first-class primitive.
332
+
333
+ ### Deployment skew is detected before stale code executes
334
+
335
+ The Vite plugin generates a build version and injects it into the RSC handler and
336
+ initial payload. The browser returns that version on every partial navigation,
337
+ prefetch, and Server Action. If an old tab reaches a newer server, request
338
+ classification detects the mismatch before resolving the route or executing the
339
+ action and responds with `X-RSC-Reload`. The browser then performs a clean document
340
+ navigation instead of trying to decode new Flight with an old client or invoking a
341
+ stale action identifier. Even a route removed by the new build reloads rather than
342
+ falling through to a misleading 404.
343
+
344
+ The protection covers fresh, completed-prefetch, and in-flight-prefetch responses.
345
+ For action requests, the reload returns to the same-origin referrer rather than the
346
+ internal action URL. The cache side follows the same correctness rule:
347
+ `CFCacheStore` automatically versions its physical Cache API and KV keys, so a new
348
+ build cannot replay Flight containing an old component shape or dead client-chunk
349
+ reference. `VercelCacheStore` exposes the same version segmentation, but — unlike
350
+ `CFCacheStore` — does not default `version` to the build version: skew safety is
351
+ opt-in via the `version` option or the recommended deployment-specific Runtime
352
+ Cache namespace. The browser's Rango state also includes
353
+ the build version, rotating HTTP and in-memory prefetch cache identity on boot.
354
+
355
+ Next.js deserves explicit credit here: its
356
+ [`deploymentId`](https://nextjs.org/docs/app/api-reference/config/next-config-js/deploymentId)
357
+ also detects navigation skew and forces a hard navigation, while
358
+ [Vercel Skew Protection](https://vercel.com/docs/skew-protection) can route an old
359
+ client back to its original immutable deployment. Waku (v1.0-beta) also ships a
360
+ framework-owned build-id handshake now — a build id in every RSC payload, a reload
361
+ on mismatch, overridable via `onBuildIdMismatch`. Rango's distinction is the
362
+ breadth of one automatic handshake across its Node, Cloudflare, and Vercel presets,
363
+ integrated with RSC navigation, prefetch, actions, and its cache-key versioning.
364
+ Rango's recovery is reload-based; it does not claim Vercel's stronger
365
+ old-deployment request pinning.
366
+
367
+ ### A shipped testing harness for server code
368
+
369
+ The `@rangojs/router/testing/*` entry points give you `runLoader`,
370
+ `runMiddleware`, `dispatch` (base `./testing`), `renderHandler` and real Flight
371
+ rendering (`renderServerTree`, `findClientBoundaries`, `findElements`) from
372
+ `./testing/flight`, `renderRoute` from `./testing/dom`, and a Playwright e2e
373
+ harness with dev/prod parity helpers (`parityDescribe`, `expectParity`) from
374
+ `./testing/e2e`. You can unit-test a loader, a middleware, or an RSC handler in
375
+ isolation. Next.js and Waku ship no official primitives for testing server
376
+ components/handlers; TanStack documents testing patterns (build your own harness
377
+ from `createRouter`/`createMemoryHistory`) but ships no testing package, and
378
+ nothing at the RSC-handler level. See [testing.md](../../../docs/testing.md).
379
+
380
+ ### Bundle discipline
381
+
382
+ The Rango client runtime baseline is ~50 KB gzip; the React + RSC client baseline
383
+ is ~115 KB gzip (react-dom 96K + react 5K + rsd-webpack-client 12K + scheduler 3K).
384
+ Per-route client chunks are the default (`clientChunks`), and a build guard fails
385
+ the build if React's development bundle leaks into production. Treat those as
386
+ Rango baselines, not a normalized cross-framework benchmark: application shape,
387
+ React version, compiler output, and deployment transforms make headline bundle
388
+ comparisons unreliable. Waku deliberately targets a smaller surface. See
389
+ [client-chunking.md](../../../docs/client-chunking.md).
390
+
391
+ ## Runtime mechanics in depth
392
+
393
+ The sections above are architecture. The sections below are the runtime mechanics
394
+ where Rango exposes unusually fine control.
395
+
396
+ ### Partial rendering (segment diffing)
397
+
398
+ Every `layout()`, route, `loading()` skeleton, and `parallel()` slot is its own
399
+ _segment_ with a server-assigned stable `id`. On navigation the server returns
400
+ `metadata.isPartial`, `metadata.matched[]` (all destination segments), and
401
+ `metadata.diff[]` (only the segments that changed). The client:
402
+
403
+ - **`diff` empty** — commits cached segments with no re-render. DOM, component
404
+ instances, scroll, and local state are preserved exactly.
405
+ - **`diff` non-empty** — swaps only the changed segments, keyed by the stable `id`
406
+ so React reconciles instead of remounting. Unchanged ancestors and the other
407
+ parallel slots come from cache untouched.
408
+ - **fallback** — a non-partial response triggers a full document re-render.
409
+
410
+ Next.js's App Router also does segment-aware partial rendering; the difference is
411
+ that Rango's diff is explicit and inspectable, is coupled to the `revalidate()`
412
+ control surface below, and the same path serves the no-JS render. TanStack does
413
+ fine-grained nested re-rendering but client-side, not as RSC Flight diffs; Waku's
414
+ RSC refetch is coarser.
415
+
416
+ ### Named slots: composition is part of the render model
417
+
418
+ Nested routes give you one outlet. Real applications usually have more than one
419
+ independently changing region: main content, navigation, cart, notifications,
420
+ metadata, and modal surfaces. Rango makes those regions named server-rendered
421
+ slots rather than layout props assembled by hand:
422
+
423
+ ```tsx
424
+ function ShopLayout() {
425
+ return (
426
+ <>
427
+ <ParallelOutlet name="@banner" />
428
+ <ParallelOutlet name="@sidebar" />
429
+ <Outlet />
430
+ <ParallelOutlet name="@modal" />
431
+ </>
432
+ );
433
+ }
434
+
435
+ layout(<ShopLayout />, () => [
436
+ parallel({
437
+ "@banner": CampaignBanner,
438
+ "@sidebar": ProductFilters,
439
+ }),
440
+ path("/products", ProductList, { name: "products" }),
441
+ ]);
442
+ ```
443
+
444
+ The layout owns placement; the route composition owns what fills each slot. A
445
+ slot handler can carry reusable defaults through `handler.use`: loaders,
446
+ `loading()`, revalidation, and error/not-found boundaries.
447
+ The mount can broadcast configuration to all slots or refine one slot with a
448
+ slot-local descriptor. Merge order is explicit: handler defaults, shared mount
449
+ configuration, then slot-local configuration.
450
+
451
+ With `loading()`, a parallel slot is an independent streaming unit: its loader
452
+ can resolve behind its own skeleton without blocking the default outlet, parent
453
+ layout, or sibling slots. Without `loading()`, its loader deliberately blocks the
454
+ parent when that data is required before paint. Handler-first ordering also means
455
+ the slot can read context produced by its owning route or layout in the same full
456
+ render pass.
457
+
458
+ Slots are composition points, not just concurrency syntax. The last definition of
459
+ a given slot name wins while unrelated earlier slots remain, so an application can
460
+ provide defaults and a narrower feature composition can replace only `@sidebar`.
461
+ A UI-less slot can push typed handles such as metadata, scripts, or breadcrumbs,
462
+ keeping render output extensible without coupling it to the main handler.
463
+
464
+ Next.js has capable parallel routes, but `@folder`, `default.tsx`, intercept
465
+ markers, and layout props encode them in filesystem topology. Rango exposes the
466
+ same class of UI as code-level values with handler defaults, per-mount policy,
467
+ streaming control, and deterministic override semantics. TanStack route masking
468
+ can model modal URLs but does not create a parallel RSC slot graph; Waku slices are
469
+ [reusable components with their own static or dynamic render mode](https://waku.gg/#slices),
470
+ not route-owned slots with independent revalidation. See the
471
+ [parallel route guide](../../parallel/SKILL.md).
472
+
473
+ ### Intercepts: alternate compositions for the same canonical route
474
+
475
+ An intercept says that a named target route should render a different composition
476
+ into a slot during eligible soft navigation:
477
+
478
+ ```tsx
479
+ layout(<ShopLayout />, () => [
480
+ intercept(
481
+ "@modal",
482
+ "product.detail",
483
+ ProductQuickView,
484
+ { when: ({ from }) => from.pathname === "/products" },
485
+ () => [
486
+ loader(ProductLoader),
487
+ loading(<QuickViewSkeleton />),
488
+ middleware(trackQuickView),
489
+ ],
490
+ ),
491
+ path("/products/:slug", ProductPage, { name: "product.detail" }),
492
+ ]);
493
+ ```
494
+
495
+ A click from the list renders `ProductQuickView` into `@modal` and preserves the
496
+ list behind it. A direct visit or reload renders the canonical full page. Back
497
+ closes the modal and restores the preserved background. The intercept can own its
498
+ middleware, layout, loaders, loading/error policy, loader-level caching, and
499
+ `revalidate()` rules; the `when` config selector (the 4th argument to
500
+ `intercept()`) can choose by navigation source.
501
+
502
+ This is integrated with the rest of the runtime rather than implemented as URL
503
+ masking plus local component state. Intercepts get source-scoped prefetch entries
504
+ so a modal Flight payload cannot leak into direct navigation. A prerendered target
505
+ can store a separate intercept variant while its loaders still run live at
506
+ request time. An action can revalidate the open intercept without remounting its
507
+ subtree or forcing the preserved background to render. See the
508
+ [intercept guide](../../intercept/SKILL.md).
509
+
510
+ ### `revalidate()`: declarative control over what re-renders
511
+
512
+ There are two distinct things named "revalidate", and the split is deliberate:
513
+
514
+ 1. **`revalidate(fn)` DSL predicate** — attached per segment (route, layout,
515
+ parallel, loader). It receives a rich arg object including `currentParams`,
516
+ `nextParams`, `currentUrl`, `nextUrl`, `defaultShouldRevalidate`, `segmentType`,
517
+ `actionId`, **`isAction(...refs)`** (typed, rename-safe action matching — you
518
+ pass the imported action, not a string), `actionResult`, `formData`, `method`,
519
+ and `stale`. Return `true`/`false` to re-render or keep the client's current
520
+ segment, or `{ defaultShouldRevalidate }` to change the suggestion seen by
521
+ downstream revalidators in the same decision chain. This is surgical
522
+ post-action control: "this widget re-renders only when `addToCart` ran; the
523
+ rest of the tree stays put."
524
+ See [is-action-api-design.md](../../../docs/design/is-action-api-design.md).
525
+ 2. **`revalidate: false` on `<Link>` / `navigate()`** — shallow navigation. When
526
+ the pathname is unchanged (a search or hash change), it updates the URL and all
527
+ location hooks but skips the server fetch and re-render entirely. For filters,
528
+ tabs, and pagination. See
529
+ [shallow-navigation.md](../../../docs/design/shallow-navigation.md).
530
+
531
+ Both are separate from `revalidateTag()`/`updateTag()`, which hard-purge tagged
532
+ cache entries. `updateTag()` is awaitable for read-your-own-writes;
533
+ `revalidateTag()` schedules the same invalidation in the background. Neither API
534
+ selects a client segment to render. Next.js offers `router.refresh()` (and
535
+ `refresh()` from `next/cache`) plus path/tag cache invalidation, but no per-segment
536
+ render predicate and no typed action discrimination — and its invalidations clear
537
+ the whole client cache rather than selecting a segment. TanStack's `shouldReload`/`router.invalidate()` is the nearest
538
+ analog but operates on loader/query reload, not RSC-segment render.
539
+
540
+ ### Prefetching: stability and control
541
+
542
+ `<Link prefetch="hover|viewport|render|adaptive|none">` (default: the router's
543
+ `defaultPrefetch`, `"none"` in development and `"viewport"` in production), plus
544
+ `prefetchKey` (`":source"` scopes a prefetch to the originating page for routes
545
+ whose response branches on `currentUrl`). Intercepted plain `<a href>` elements
546
+ inside the router basename follow the same default; common static-resource
547
+ extensions are excluded unless `data-prefetch="true"` identifies an application
548
+ route, and `data-prefetch="false"` or `"none"` opts out unsafe GET links. A
549
+ container with `data-prefetch-scope="false"` or `"none"` is a hard subtree boundary for both
550
+ Links and plain anchors, so one annotation suppresses speculative work for a
551
+ whole navigation section. The distinguishing part is the stability
552
+ gating: a queued prefetch (`viewport`/`render`) will not fire until **both** the
553
+ main thread is idle (`requestIdleCallback`, 200ms fallback) **and**
554
+ `waitForViewportImages()` resolves — in-viewport images that are not `.complete`
555
+ have loaded — or a 2s hard cap elapses. This keeps speculative fetches out of the
556
+ connection pool while critical above-the-fold images are still pending, without
557
+ letting a slow image stall prefetch indefinitely.
558
+
559
+ Other guarantees: a completed prefetch payload is eagerly decoded — importing its
560
+ client references before the click — and **reused verbatim on the real navigation**.
561
+ Navigation can adopt a still-in-flight destination prefetch instead of issuing a
562
+ duplicate request; it cancels queued work and aborts unrelated executing work.
563
+ Fetches run at `priority: "low"`, all prefetch paths have a 30s stall ceiling, and
564
+ the bounded cache uses a configurable TTL. `Save-Data`,
565
+ `prefers-reduced-data`, or `prefetchCacheTTL: false` disable speculation.
566
+
567
+ Correctness is part of the prefetch contract. Keys include Rango state, destination
568
+ URL, and the mounted segment set used to compute the diff. Server actions rotate
569
+ state and abort stale speculative work; a generation check prevents a late result
570
+ from repopulating an invalidated cache. Intercepts are automatically source-scoped,
571
+ and malformed, cross-origin, foreign-router, redirect, and reload responses are
572
+ dropped rather than warmed. `useLinkStatus()` exposes `{ pending }` for the owning
573
+ link.
574
+
575
+ **Rango State ties prefetch and client-cache invalidation together.** It is a
576
+ session-cookie value shaped as `{buildVersion}:{invalidationTimestamp}`. Navigation
577
+ and prefetch requests send it as `X-Rango-State`, and RSC responses vary on that
578
+ header, so the browser HTTP cache and Rango's decoded prefetch map share one cache
579
+ identity. A deployment changes the version; a mutation rotates the timestamp. Old
580
+ responses become unreachable under the retired identity instead of requiring every
581
+ cache layer to delete the same entries successfully.
582
+
583
+ Userland controls that rotation through `invalidateClientCache()`, imported from
584
+ `@rangojs/router` on either side of the RSC boundary. In the browser it immediately
585
+ marks history entries stale, flushes prefetches, rotates Rango State, and broadcasts
586
+ when cross-tab sync is enabled. Back/forward can still paint its cached entry and
587
+ then revalidate, giving stale-while-revalidate behavior instead of a destructive
588
+ clear. On the server, the same function rotates the responding client's state
589
+ cookie. Across those two seats, it covers mutations initiated outside the action
590
+ bridge: REST calls, client-observed WebSocket events, authentication changes, or
591
+ middleware/loader decisions.
592
+
593
+ Server Actions invalidate automatically after a response reaches the browser. If
594
+ an action knows it changed nothing that any route renders, `keepClientCache()` is
595
+ the explicit per-response escape hatch: it suppresses that automatic state
596
+ rotation, prefetch flush, broadcast, and revalidation fetch. Together,
597
+ `invalidateClientCache()` and `keepClientCache()` give application code control in
598
+ both directions — force a miss for mutations the router cannot observe, or preserve
599
+ the current state for a known no-op.
600
+
601
+ TanStack Router is the real peer here (`preload="intent|viewport|render"`,
602
+ `preloadDelay`, `preloadStaleTime`); Rango's edge is the resource-aware
603
+ idle + image-ready gating and RSC-payload reuse. Next has an internal prefetch
604
+ scheduler, but its public `<Link prefetch>` surface does not expose Rango's choice
605
+ of trigger and resource gates. Waku has manual route prefetching plus experimental
606
+ `unstable_prefetchOnEnter` / `unstable_prefetchOnView` Link triggers, but without
607
+ this resource-aware policy layer.
608
+
609
+ ### Loaders, and tagged loading
610
+
611
+ `createLoader(fn)` / `loader()` define **live-by-default** data units: they are
612
+ excluded from an enclosing segment cache and resolve on every request unless the
613
+ loader itself explicitly opts into `cache()`. They may safely read `cookies()`,
614
+ `headers()`, request context, and `env` because loader execution is outside the
615
+ cached shell. Loaders run in parallel, stream independently under `loading()`
616
+ boundaries, compose server-side via `ctx.use(OtherLoader)`, and can
617
+ `await ctx.rendered()` to read handle data after the render settles. Reads happen
618
+ through `useLoader` in a client component (including its SSR pass) or
619
+ `useFetchLoader` for standalone client fetches. "Fetchable" loaders are callable
620
+ endpoints with their own middleware and GET/POST/PUT/PATCH/DELETE bodies.
621
+
622
+ One sharp edge is worth stating because the distinction matters: a cached handler
623
+ can call `await ctx.use(Loader)`, but if it renders that result inline, it bakes the
624
+ request value into the cached parent. That server escape hatch is deliberately not
625
+ a safe dynamic-hole renderer. The safe UI path is the registered loader segment
626
+ consumed through `useLoader()`.
627
+
628
+ **Tagged loading** is two orthogonal tags on a read:
629
+
630
+ - **`key`** — a per-instance bucket (`useLoader(Profile, { key: userId })`) so
631
+ different keys store and refresh independently.
632
+ - **`refreshGroup`** — one or more cross-loader tags.
633
+ `const refresh = useRefreshLoaders(); refresh("account")` re-runs every
634
+ currently-mounted read tagged with that group (union + dedupe across groups), as a
635
+ plain GET with no params, body, or mutations, and never render-throws. This
636
+ refreshes a set of _different_ loaders together — profile + orders after an
637
+ account switch — which `key` (single loader) cannot.
638
+
639
+ This is distinct from cache tags (`revalidateTag`). TanStack Start is the genuine
640
+ peer on loaders (route loaders + Query-key invalidation as the `refreshGroup`
641
+ analog); Rango's loaders are RSC-native, live-by-default, stream under RSC
642
+ `loading()`, and the tag system is built into the router with no separate data
643
+ library. Next.js and Waku have no loader primitive — they fetch inside async server
644
+ components.
645
+
646
+ ## The loader is a genuinely new primitive
647
+
648
+ "Loader" is a word Remix and TanStack already use, so it is worth being precise
649
+ about why Rango's is a new concept rather than a renamed one.
650
+
651
+ Every prior loader is one of two things:
652
+
653
+ - **Loader-before-render** (Remix, React Router, TanStack) — a route-coupled
654
+ function that runs as a data phase _ahead of_ the render, populates a loader
655
+ cache, and gates the route until its data is ready. The loader **is** the data
656
+ path, and the cache is the loader's cache.
657
+ - **Fetch-in-component** (Next.js App Router, Waku, plain RSC) — there is no loader;
658
+ the async server component awaits its own data inline. Fetching _is_ rendering.
659
+
660
+ Rango's loader is a third model, and the difference is a polarity flip. In the
661
+ loader-before-render model the loader _feeds_ the cache. In Rango the loader
662
+ **punches a hole through** it. The segment tree — layouts, handlers, the whole RSC
663
+ shell — is cacheable and prerenderable by default (prerender is literally
664
+ build-time caching here). The loader is the one thing that stays live by default
665
+ and is excluded from the enclosing segment cache, even inside a `cache()` scope or
666
+ a fully prerendered route. Caching loader data is a separate, explicit opt-in on
667
+ that loader.
668
+
669
+ The mechanism is concrete: a prerendered route serves its baked Flight shell from
670
+ the store, then `resolveLoadersOnly()` resolves the loaders through their own
671
+ freshness policy at request time and merges their segments into that replayed
672
+ shell. With the default policy you get a cached/prerendered shell plus live data,
673
+ automatically, with no per-route static-vs-dynamic decision. The loader is the
674
+ carve-out where liveness re-enters an otherwise-static tree.
675
+
676
+ That reframes what a loader _is_: not "the route's data dependency" but **the
677
+ designated live data slot in a cache-first RSC tree.** Several properties follow
678
+ that no loader-before-render has:
679
+
680
+ - it is the **cache-safety escape hatch** — the only place request-coupled reads
681
+ are allowed inside a cache scope, because it is the part guaranteed to re-run;
682
+ - it is **standalone and composable**, not route-coupled — one `createLoader()`
683
+ read by many segments, composed via `ctx.use`, or exposed as a fetchable endpoint;
684
+ - it **streams as a hole, not a gate** — concurrent, Suspense-resolved under
685
+ `loading()`, so the shell never blocks on it;
686
+ - it is **client-addressable and refreshable** independent of navigation (`key`,
687
+ `refreshGroup`, `useRefreshLoaders`), behaving like a built-in, server-defined
688
+ data cell with zero loader logic in the client bundle;
689
+ - it can **read render output** via `await ctx.rendered()` — a loader that depends
690
+ on what the render produced, which a strictly before-render model cannot express.
691
+
692
+ The fair objections, and why they do not collapse the distinction:
693
+
694
+ - **TanStack has loaders.** It does, and they are the closest peer — but they are
695
+ loader-before-render: route-match-coupled and participants in the router data
696
+ cache. Rango's loader is the thing that stays live _against_ the enclosing
697
+ render cache, RSC-native, and independently addressable.
698
+ - **Next has Partial Prerendering.** PPR is the nearest idea in spirit (static
699
+ shell, dynamic holes) and deserves credit. But PPR's holes are inline
700
+ async-component work gated by `Suspense`, not independently addressable data
701
+ primitives: you cannot register one once, read it from three components,
702
+ refresh its mounted readers as a group, or test it through a loader harness.
703
+ Rango makes the hole a first-class, named, composable, refetchable, cache-safe
704
+ primitive and makes that liveness the default.
705
+
706
+ The point of the primitive: the hard problem in a cache-first architecture is
707
+ "where does freshness live, and how do I keep it from corrupting the cache?" Rango's
708
+ answer is one primitive — cache and prerender aggressively, and let loaders be the
709
+ live, named, testable, client-refreshable slots that punch through. That is the
710
+ sense in which it is new.
711
+
712
+ ## Tainted request context: cache safety is integrated
713
+
714
+ A cache-first RSC tree is only useful if request-specific data cannot silently
715
+ become shared output. Rango brands its handler, request, and response-route context
716
+ objects at construction time. The brand is consumed by the cache runtime;
717
+ applications do not have to remember to mark every context manually.
718
+
719
+ For a `"use cache"` function, a tainted context object is not serialized wholesale
720
+ into the cache key. Rango instead extracts the safe identity dimensions that make
721
+ the call reusable without collisions: host, route name, pathname, params, response
722
+ type, and normalized user-facing search params. A shared cached function called
723
+ from two hosts, route scopes, param sets, or query variants therefore does not
724
+ collapse into one entry just because both calls received a `ctx` object.
725
+
726
+ The same boundary guards operations whose meaning cannot survive a hit. Direct
727
+ `cookies()`/`headers()` reads and request/response mutations such as `ctx.set()`,
728
+ `ctx.header()`, status, theme, and location-state writes throw inside
729
+ `"use cache"`. If a cached function pushes typed handles through
730
+ `ctx.use(Breadcrumbs)` or `ctx.use(Meta)`, Rango captures those pushes on a miss and
731
+ replays them into the current request's `HandleStore` on a hit; the return value and
732
+ its render-side output stay coherent.
733
+
734
+ Route-level `cache()` has a related but deliberately different guard. Typed context
735
+ variables can declare that their values are request-specific:
736
+
737
+ ```ts
738
+ const CurrentUser = createVar<User>({ cache: false });
739
+
740
+ cache({ ttl: 300 }, () => [
741
+ path("/account", (ctx) => {
742
+ const user = ctx.get(CurrentUser); // throws instead of caching one user
743
+ return <Account user={user} />;
744
+ }),
745
+ ]);
746
+ ```
747
+
748
+ A write can also escalate an otherwise cacheable variable with
749
+ `ctx.set(Var, value, { cache: false })`; least-cacheable wins. The guard fires when
750
+ that variable is read directly inside the cached segment. It intentionally does
751
+ not track derived values after they have been copied into an ordinary value, so the
752
+ safe rule remains simple: read request-specific context at the live point of use,
753
+ normally a loader, rather than deriving it outside and carrying it into a cached
754
+ shell.
755
+
756
+ This is where the taint and loader designs meet. Loaders are the sanctioned dynamic
757
+ holes: they run outside the enclosing segment cache and may read the current
758
+ request, while the shared shell remains protected. Next.js also isolates runtime
759
+ APIs from ordinary `"use cache"`, and React's optional taint APIs protect values at
760
+ the server-to-client serialization boundary. Those are useful but different
761
+ contracts; they do not provide Rango's route-aware tainted-argument keying,
762
+ non-cacheable typed context variables, handle capture/replay, and loader escape
763
+ path as one system. TanStack Start and Waku leave this boundary primarily to
764
+ application architecture. See the [cache guide](../../cache-guide/SKILL.md) and
765
+ [`"use cache"` design](../../../docs/use-cache-api-design.md).
766
+
767
+ ## Performance diagnostics (`debugPerformance`)
768
+
769
+ `createRouter({ debugPerformance: true })` — one boolean — turns on a per-request
770
+ server-side waterfall. Middleware can instead call `ctx.debugPerformance()` before
771
+ `await next()` to diagnose one route, query flag, or internal user without enabling
772
+ the full timeline globally. The output is a
773
+ `[RSC Perf] METHOD /path (12.34ms)` console table with `start`, `dur`, an indented
774
+ phase label, and a 40-cell ASCII timeline showing each phase's position, plus the
775
+ same data as a `Server-Timing` response header (so it appears in the browser
776
+ DevTools Network → Timing panel). Phases metered include `handler:total`,
777
+ per-middleware pre/post own-time, `action:<id>`, `loader:<id>`, `handler:<id>` per
778
+ segment, `render:total:<routeName>`, and `ssr:render-html`. Bootstrap handler phases
779
+ remain in `Server-Timing` even without the full debug timeline, so ordinary
780
+ responses retain a low-level latency baseline.
781
+
782
+ The distinctive part is that measured router work and distributed tracing share
783
+ one phase registry. A single internal wrap site (`observePhase()` in
784
+ `src/router/instrument.ts` — an implementation detail, not a public export)
785
+ co-emits the perf metric and trace span where both surfaces apply; request totals
786
+ and middleware pre/post own-time retain their intentional surface-specific
787
+ representations. The local and
788
+ production views therefore use the same execution vocabulary instead of two sets
789
+ of hand-maintained instrumentation. It is best-effort and construction-bound
790
+ (never buffers the response; streaming phases settle at stream construction, not
791
+ drain). When a phase has neither metric nor tracing enabled, its wrapper is a
792
+ direct call with no phase-store allocation.
793
+
794
+ Next.js has no equivalent flip-a-boolean per-request phase waterfall: its automatic
795
+ OTel spans still need an exporter and trace viewer. TanStack's strength is
796
+ client/data devtools, a different axis from server request-phase diagnostics. Waku
797
+ does not ship an equivalent phase model. See
798
+ [telemetry.md](../../../docs/telemetry.md).
799
+
800
+ ## Coming from a specific framework
801
+
802
+ **From Next.js.** You keep RSC, Server Actions, parallel/intercepting routes, and
803
+ prerendering, but trade file-convention plus the historically confusing cache
804
+ layers for a code-defined, refactor-safe router and one caching model. You gain
805
+ Cloudflare as a first-class target and phase spans for free. You give up the
806
+ largest ecosystem and talent pool in the React world — the real cost.
807
+
808
+ **From TanStack Start.** You get comparable type-safe routing (`reverse()`, typed
809
+ params/search, even typed response MIME via `.json()`/`.text()`/`.image()`), plus a
810
+ true RSC-first model (zero-bundle server components, Flight) that TanStack's
811
+ client-first core added later and opt-in. You give up TanStack's best-in-class
812
+ search-param ergonomics and its devtools/Query integration.
813
+
814
+ **From Waku.** Same RSC-first-on-Vite spirit and light footprint, but Rango is the
815
+ batteries-included version: unified caching + prerender, segment-scoped middleware,
816
+ observability, host router, typed named routes, and a testing harness, where Waku
817
+ stays deliberately minimal. If you have outgrown Waku for a complex production app,
818
+ Rango is the natural step up.
819
+
820
+ ## Where the others still lead
821
+
822
+ - **Ecosystem and hiring (Next.js).** Next dwarfs all three in plugins, tutorials,
823
+ Stack Overflow answers, and developers who already know it. That is a genuine,
824
+ non-technical advantage that often decides framework choice on its own.
825
+ - **Search-param ergonomics and client/data devtools (TanStack Start).** TanStack's
826
+ validated, fully-typed search-param state and its Router/Query devtools are the
827
+ gold standard; Rango is strong but TanStack set the bar there.
828
+ - **Minimal surface area (Waku).** Rango does not require its advanced features,
829
+ but Waku has fewer framework primitives to learn when an application intends to
830
+ remain small.
831
+ - **The DSL has a learning curve.** Code-defined routing is more powerful and
832
+ refactor-safe, but file-based routing is more discoverable for newcomers ("the URL
833
+ is the folder"). That is a real onboarding tradeoff.
834
+
835
+ ## Bottom line
836
+
837
+ Rango starts comfortably at route-and-component scale. Its advantage becomes more
838
+ visible as requirements accumulate: type-safe routing, live data beneath cached
839
+ UI, partial updates, named compositions, working no-JS forms, tracing, and testable
840
+ server code all extend the same model rather than replacing it. That makes its
841
+ ceiling particularly useful for complex, production, multi-runtime applications —
842
+ especially edge/Cloudflare or multi-tenant systems — without making that complexity
843
+ the entry price. Ecosystem breadth remains the main advantage you trade away when
844
+ leaving Next.js.