@bleedingdev/modern-js-app-tools 3.8.2-ultramodern.9 → 3.8.3-ultramodern.2

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 (242) hide show
  1. package/bin/modern-bundle-docs.js +11 -0
  2. package/bin/modern.js +11 -0
  3. package/dist/cjs/builder/generator/getBuilderEnvironments.js +13 -241
  4. package/dist/cjs/builder/generator/index.js +0 -1
  5. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +37 -9
  6. package/dist/cjs/builder/shared/builderPlugins/index.js +6 -13
  7. package/dist/cjs/builder/shared/bundlerPlugins/index.js +6 -13
  8. package/dist/cjs/builder/shared/lazyCompilation.js +9 -9
  9. package/dist/cjs/bundleDocs.js +1 -1
  10. package/dist/cjs/index.js +59 -60
  11. package/dist/cjs/plugins/analyze/getServerRoutes.js +1 -1
  12. package/dist/cjs/plugins/analyze/isDefaultExportFunction.js +1 -9
  13. package/dist/cjs/plugins/backend-federation/codegen.js +2 -1
  14. package/dist/cjs/plugins/backend-federation/config.js +2 -2
  15. package/dist/cjs/plugins/backend-federation/emit.js +6 -4
  16. package/dist/cjs/plugins/deploy/index.js +4 -4
  17. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/index.js +23 -149
  18. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.cjs +41 -62
  19. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.mjs +41 -63
  20. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.cjs +35 -52
  21. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.mjs +35 -53
  22. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.cjs +41 -61
  23. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.mjs +40 -61
  24. package/dist/cjs/plugins/ultramodernReleaseEnvelope.js +3 -59
  25. package/dist/cjs/presetUltramodern.js +15 -8
  26. package/dist/cjs/run/index.js +9 -9
  27. package/dist/cjs/utils/env.js +1 -1
  28. package/dist/cjs/utils/register.js +6 -3
  29. package/dist/esm/builder/generator/getBuilderEnvironments.mjs +12 -231
  30. package/dist/esm/builder/generator/index.mjs +1 -2
  31. package/dist/esm/builder/shared/builderPlugins/adapterSSR.mjs +34 -9
  32. package/dist/esm/builder/shared/builderPlugins/index.mjs +0 -1
  33. package/dist/esm/builder/shared/bundlerPlugins/index.mjs +0 -1
  34. package/dist/esm/builder/shared/lazyCompilation.mjs +4 -4
  35. package/dist/esm/bundleDocs.mjs +1 -1
  36. package/dist/esm/index.mjs +3 -3
  37. package/dist/esm/plugins/analyze/getServerRoutes.mjs +1 -1
  38. package/dist/esm/plugins/analyze/isDefaultExportFunction.mjs +1 -9
  39. package/dist/esm/plugins/backend-federation/codegen.mjs +2 -1
  40. package/dist/esm/plugins/backend-federation/config.mjs +1 -1
  41. package/dist/esm/plugins/backend-federation/emit.mjs +5 -3
  42. package/dist/esm/plugins/deploy/index.mjs +1 -1
  43. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +1 -133
  44. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.cjs +41 -62
  45. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.mjs +41 -63
  46. package/dist/esm/plugins/deploy/platforms/templates/node-entry.cjs +35 -52
  47. package/dist/esm/plugins/deploy/platforms/templates/node-entry.mjs +35 -53
  48. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.cjs +41 -61
  49. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.mjs +40 -61
  50. package/dist/esm/plugins/ultramodernReleaseEnvelope.mjs +3 -49
  51. package/dist/esm/presetUltramodern.mjs +8 -5
  52. package/dist/esm/run/index.mjs +9 -9
  53. package/dist/esm/utils/env.mjs +1 -1
  54. package/dist/esm/utils/register.mjs +6 -3
  55. package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +12 -234
  56. package/dist/esm-node/builder/generator/index.mjs +1 -2
  57. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.mjs +34 -9
  58. package/dist/esm-node/builder/shared/builderPlugins/index.mjs +0 -1
  59. package/dist/esm-node/builder/shared/bundlerPlugins/index.mjs +0 -1
  60. package/dist/esm-node/builder/shared/lazyCompilation.mjs +4 -4
  61. package/dist/esm-node/bundleDocs.mjs +1 -1
  62. package/dist/esm-node/index.mjs +3 -3
  63. package/dist/esm-node/plugins/analyze/getServerRoutes.mjs +1 -1
  64. package/dist/esm-node/plugins/analyze/isDefaultExportFunction.mjs +1 -9
  65. package/dist/esm-node/plugins/backend-federation/codegen.mjs +2 -1
  66. package/dist/esm-node/plugins/backend-federation/config.mjs +1 -1
  67. package/dist/esm-node/plugins/backend-federation/emit.mjs +5 -3
  68. package/dist/esm-node/plugins/deploy/index.mjs +1 -1
  69. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/index.mjs +1 -133
  70. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.cjs +41 -62
  71. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.mjs +41 -63
  72. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.cjs +35 -52
  73. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.mjs +35 -53
  74. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.cjs +41 -61
  75. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.mjs +40 -61
  76. package/dist/esm-node/plugins/ultramodernReleaseEnvelope.mjs +3 -49
  77. package/dist/esm-node/presetUltramodern.mjs +8 -5
  78. package/dist/esm-node/run/index.mjs +9 -9
  79. package/dist/esm-node/utils/env.mjs +1 -1
  80. package/dist/esm-node/utils/register.mjs +6 -3
  81. package/dist/types/builder/generator/getBuilderEnvironments.d.ts +0 -29
  82. package/dist/types/builder/shared/builderPlugins/adapterSSR.d.ts +11 -0
  83. package/dist/types/builder/shared/builderPlugins/index.d.ts +0 -1
  84. package/dist/types/builder/shared/bundlerPlugins/index.d.ts +0 -1
  85. package/dist/types/builder/shared/lazyCompilation.d.ts +7 -7
  86. package/dist/types/plugins/analyze/getServerRoutes.d.ts +1 -1
  87. package/dist/types/plugins/backend-federation/codegen.d.ts +4 -1
  88. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/index.d.ts +1 -18
  89. package/dist/types/presetUltramodern.d.ts +23 -2
  90. package/dist/types/types/config/deploy.d.ts +2 -2
  91. package/docs/community/showcase.md +3 -5
  92. package/docs/configure/app/bff/effect.md +7 -7
  93. package/docs/guides/advanced-features/bff/frameworks.md +1 -1
  94. package/docs/guides/basic-features/deploy.md +2 -2
  95. package/docs/guides/get-started/quick-start.md +10 -9
  96. package/docs/guides/get-started/tech-stack.md +1 -1
  97. package/docs/guides/get-started/ultramodern.md +123 -38
  98. package/docs/guides/troubleshooting/cli.md +1 -1
  99. package/docs/llms.txt +2 -2
  100. package/docs/tutorials/examples/csr-auth.md +1 -1
  101. package/package.json +16 -28
  102. package/rslib.config.mts +4 -7
  103. package/dist/cjs/builder/shared/builderPlugins/adapterLazyCompilation.js +0 -74
  104. package/dist/cjs/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.js +0 -72
  105. package/dist/cjs/plugins/deploy/platforms/cloudflare/artifacts.js +0 -127
  106. package/dist/cjs/plugins/deploy/platforms/cloudflare/constants.js +0 -141
  107. package/dist/cjs/plugins/deploy/platforms/cloudflare/delivery-unit.js +0 -139
  108. package/dist/cjs/plugins/deploy/platforms/cloudflare/i18n-worker.js +0 -135
  109. package/dist/cjs/plugins/deploy/platforms/cloudflare/index.js +0 -150
  110. package/dist/cjs/plugins/deploy/platforms/cloudflare/security-policies.js +0 -205
  111. package/dist/cjs/plugins/deploy/platforms/cloudflare/types.js +0 -18
  112. package/dist/cjs/plugins/deploy/platforms/cloudflare/utils.js +0 -66
  113. package/dist/cjs/plugins/deploy/platforms/cloudflare/worker-manifest.js +0 -208
  114. package/dist/cjs/plugins/deploy/platforms/cloudflare/wrangler-config.js +0 -204
  115. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-contract.js +0 -108
  116. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-plan.js +0 -93
  117. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/identity.js +0 -83
  118. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/issues.js +0 -54
  119. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/manifest.js +0 -89
  120. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.js +0 -151
  121. package/dist/cjs/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.js +0 -378
  122. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +0 -251
  123. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +0 -191
  124. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +0 -514
  125. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +0 -1012
  126. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +0 -363
  127. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +0 -93
  128. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +0 -11
  129. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +0 -281
  130. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  131. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +0 -98
  132. package/dist/cjs/types/config/cloudflareDeploy.js +0 -18
  133. package/dist/cjs/ultramodern-release-envelope/canonical.js +0 -68
  134. package/dist/cjs/ultramodern-release-envelope/framework-output.js +0 -649
  135. package/dist/cjs/ultramodern-release-envelope/index.js +0 -399
  136. package/dist/cjs/ultramodern-release-envelope/types.js +0 -51
  137. package/dist/cjs/ultramodern-release-identity.js +0 -110
  138. package/dist/esm/builder/shared/builderPlugins/adapterLazyCompilation.mjs +0 -36
  139. package/dist/esm/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +0 -30
  140. package/dist/esm/plugins/deploy/platforms/cloudflare/artifacts.mjs +0 -64
  141. package/dist/esm/plugins/deploy/platforms/cloudflare/constants.mjs +0 -34
  142. package/dist/esm/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +0 -88
  143. package/dist/esm/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +0 -97
  144. package/dist/esm/plugins/deploy/platforms/cloudflare/index.mjs +0 -102
  145. package/dist/esm/plugins/deploy/platforms/cloudflare/security-policies.mjs +0 -167
  146. package/dist/esm/plugins/deploy/platforms/cloudflare/types.mjs +0 -0
  147. package/dist/esm/plugins/deploy/platforms/cloudflare/utils.mjs +0 -12
  148. package/dist/esm/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +0 -148
  149. package/dist/esm/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +0 -150
  150. package/dist/esm/plugins/deploy/platforms/cloudflare-output-contract.mjs +0 -31
  151. package/dist/esm/plugins/deploy/platforms/cloudflare-output-plan.mjs +0 -45
  152. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +0 -45
  153. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +0 -10
  154. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +0 -51
  155. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +0 -99
  156. package/dist/esm/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +0 -313
  157. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +0 -251
  158. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +0 -191
  159. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +0 -514
  160. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +0 -1012
  161. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +0 -363
  162. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +0 -93
  163. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +0 -11
  164. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +0 -281
  165. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  166. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +0 -98
  167. package/dist/esm/types/config/cloudflareDeploy.mjs +0 -0
  168. package/dist/esm/ultramodern-release-envelope/canonical.mjs +0 -21
  169. package/dist/esm/ultramodern-release-envelope/framework-output.mjs +0 -573
  170. package/dist/esm/ultramodern-release-envelope/index.mjs +0 -335
  171. package/dist/esm/ultramodern-release-envelope/types.mjs +0 -7
  172. package/dist/esm/ultramodern-release-identity.mjs +0 -66
  173. package/dist/esm-node/builder/shared/builderPlugins/adapterLazyCompilation.mjs +0 -37
  174. package/dist/esm-node/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.mjs +0 -31
  175. package/dist/esm-node/plugins/deploy/platforms/cloudflare/artifacts.mjs +0 -65
  176. package/dist/esm-node/plugins/deploy/platforms/cloudflare/constants.mjs +0 -35
  177. package/dist/esm-node/plugins/deploy/platforms/cloudflare/delivery-unit.mjs +0 -89
  178. package/dist/esm-node/plugins/deploy/platforms/cloudflare/i18n-worker.mjs +0 -98
  179. package/dist/esm-node/plugins/deploy/platforms/cloudflare/index.mjs +0 -103
  180. package/dist/esm-node/plugins/deploy/platforms/cloudflare/security-policies.mjs +0 -168
  181. package/dist/esm-node/plugins/deploy/platforms/cloudflare/types.mjs +0 -1
  182. package/dist/esm-node/plugins/deploy/platforms/cloudflare/utils.mjs +0 -13
  183. package/dist/esm-node/plugins/deploy/platforms/cloudflare/worker-manifest.mjs +0 -149
  184. package/dist/esm-node/plugins/deploy/platforms/cloudflare/wrangler-config.mjs +0 -151
  185. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-contract.mjs +0 -32
  186. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-plan.mjs +0 -46
  187. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/identity.mjs +0 -46
  188. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/issues.mjs +0 -11
  189. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/manifest.mjs +0 -52
  190. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.mjs +0 -100
  191. package/dist/esm-node/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.mjs +0 -314
  192. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.mjs +0 -251
  193. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.mjs +0 -191
  194. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.mjs +0 -514
  195. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.mjs +0 -1012
  196. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.mjs +0 -363
  197. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.mjs +0 -93
  198. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.mjs +0 -11
  199. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.mjs +0 -281
  200. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +0 -14
  201. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-worker-path.mjs +0 -98
  202. package/dist/esm-node/types/config/cloudflareDeploy.mjs +0 -1
  203. package/dist/esm-node/ultramodern-release-envelope/canonical.mjs +0 -22
  204. package/dist/esm-node/ultramodern-release-envelope/framework-output.mjs +0 -574
  205. package/dist/esm-node/ultramodern-release-envelope/index.mjs +0 -336
  206. package/dist/esm-node/ultramodern-release-envelope/types.mjs +0 -8
  207. package/dist/esm-node/ultramodern-release-identity.mjs +0 -67
  208. package/dist/types/builder/shared/builderPlugins/adapterLazyCompilation.d.ts +0 -3
  209. package/dist/types/builder/shared/bundlerPlugins/CssExtractRuntimePlugin.d.ts +0 -6
  210. package/dist/types/plugins/deploy/platforms/cloudflare/artifacts.d.ts +0 -15
  211. package/dist/types/plugins/deploy/platforms/cloudflare/constants.d.ts +0 -24
  212. package/dist/types/plugins/deploy/platforms/cloudflare/delivery-unit.d.ts +0 -23
  213. package/dist/types/plugins/deploy/platforms/cloudflare/i18n-worker.d.ts +0 -22
  214. package/dist/types/plugins/deploy/platforms/cloudflare/index.d.ts +0 -2
  215. package/dist/types/plugins/deploy/platforms/cloudflare/security-policies.d.ts +0 -51
  216. package/dist/types/plugins/deploy/platforms/cloudflare/types.d.ts +0 -5
  217. package/dist/types/plugins/deploy/platforms/cloudflare/utils.d.ts +0 -6
  218. package/dist/types/plugins/deploy/platforms/cloudflare/worker-manifest.d.ts +0 -122
  219. package/dist/types/plugins/deploy/platforms/cloudflare/wrangler-config.d.ts +0 -46
  220. package/dist/types/plugins/deploy/platforms/cloudflare-output-contract.d.ts +0 -14
  221. package/dist/types/plugins/deploy/platforms/cloudflare-output-plan.d.ts +0 -34
  222. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/identity.d.ts +0 -4
  223. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/issues.d.ts +0 -14
  224. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/manifest.d.ts +0 -2
  225. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/mutation-policy.d.ts +0 -14
  226. package/dist/types/plugins/deploy/platforms/cloudflare-output-verifier/worker-bundles.d.ts +0 -20
  227. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.001-bootstrap-security.d.mts +0 -1
  228. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.002-assets-routes.d.mts +0 -1
  229. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.003-i18n-locales.d.mts +0 -1
  230. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.004-rendering-css.d.mts +0 -1
  231. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.005-worker-dispatch.d.mts +0 -1
  232. package/dist/types/plugins/deploy/platforms/templates/cloudflare-entry.006-fetch-handler.d.mts +0 -4
  233. package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-fs-promises.d.mts +0 -5
  234. package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-loadable-server.d.mts +0 -48
  235. package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +0 -13
  236. package/dist/types/plugins/deploy/platforms/templates/cloudflare-worker-path.d.mts +0 -21
  237. package/dist/types/types/config/cloudflareDeploy.d.ts +0 -161
  238. package/dist/types/ultramodern-release-envelope/canonical.d.ts +0 -5
  239. package/dist/types/ultramodern-release-envelope/framework-output.d.ts +0 -32
  240. package/dist/types/ultramodern-release-envelope/index.d.ts +0 -6
  241. package/dist/types/ultramodern-release-envelope/types.d.ts +0 -62
  242. package/dist/types/ultramodern-release-identity.d.ts +0 -16
@@ -50,7 +50,7 @@ would give your app a second Effect identity. Before setting
50
50
  `/effect-server`, `/effect-edge` or `/effect-client`, install the exact cohort:
51
51
 
52
52
  ```bash
53
- pnpm add effect@4.0.0-beta.107 @effect/opentelemetry@4.0.0-beta.107
53
+ pnpm add effect@4.0.0-rc.112 @effect/opentelemetry@4.0.0-rc.112
54
54
  ```
55
55
 
56
56
  The pin is exact because UltraModern ships Effect as one lockstep cohort. Apps
@@ -215,17 +215,17 @@ generated apps use:
215
215
 
216
216
  ```yaml
217
217
  trustPolicyExclude:
218
- - 'effect@4.0.0-beta.107'
219
- - '@effect/opentelemetry@4.0.0-beta.107'
218
+ - 'effect@4.0.0-rc.112'
219
+ - '@effect/opentelemetry@4.0.0-rc.112'
220
220
 
221
221
  overrides:
222
- '@effect/opentelemetry': 4.0.0-beta.107
223
- '@effect/vitest': 4.0.0-beta.107
224
- effect: 4.0.0-beta.107
222
+ '@effect/opentelemetry': 4.0.0-rc.112
223
+ '@effect/vitest': 4.0.0-rc.112
224
+ effect: 4.0.0-rc.112
225
225
  ```
226
226
 
227
227
  Do not add a different direct `effect` version in an app package. A mismatched
228
- Effect beta can fail while building layers or HTTP middleware because runtime
228
+ Effect prerelease can fail while building layers or HTTP middleware because runtime
229
229
  services come from different package instances. The strict 24-hour release-age
230
230
  gate applies to installed packages; the current cohort has no Effect age
231
231
  exemption, and override-only `@effect/vitest` is not an installed approval
@@ -117,7 +117,7 @@ const response = await api.client.hello.ping({});
117
117
 
118
118
  The `api.client.*` surface is materialized by the BFF loader for `@api/index` imports. Do not import `api/index` directly and expect `client` to run in server code, scripts, or tests; direct entry imports expose the server runtime definition, and `client` is only a typed placeholder there.
119
119
 
120
- For UltraModern, Effect `HttpApi` plus Effect BFF is the single blessed authored HTTP path. Use `HttpApi` endpoints with `query`, `params`, `payload`, `success`, and declared errors such as `HttpApiSchema.status(...)`; implement them with `HttpApiBuilder.group(...).handle(...)` and `HttpApiBuilder.layer(...).pipe(Layer.provide(...))`, then default-export the entry as `defineEffectBff({ api, layer })`. See `packages/cli/plugin-bff/tests/effect-httpapi-schema-validation.test.ts` for the real shapes.
120
+ For UltraModern, Effect `HttpApi` plus Effect BFF is the single blessed authored HTTP path. Use `HttpApi` endpoints with `query`, `params`, `payload`, `success`, and declared errors such as `HttpApiSchema.status(...)`; implement them with `HttpApiBuilder.group(...).handle(...)` and `HttpApiBuilder.layer(...).pipe(Layer.provide(...))`, then default-export the entry as `defineEffectBff({ api, layer })`. See `packages/server/bff-effect/tests/effect-edge-runtime.test.ts` for the live runtime shape.
121
121
 
122
122
  Hono and `api/lambda/**` are internal compatibility only and feature-frozen.
123
123
 
@@ -260,11 +260,11 @@ Assuming the directory structure of the Monorepo repository is as follows:
260
260
  First, you need to configure the **Root Directory** as `packages/app` on the Vercel platform:
261
261
 
262
262
  ![](https://sf16-sg.tiktokcdn.com/obj/eden-sg/lmeh7nuptpfnuhd/vercel-root-directory.png)
263
- Specify Node.js runtime as `20.x`:
263
+ Specify Node.js runtime as `26.7.0` or newer:
264
264
 
265
265
  ```json title="package.json"
266
266
  "engines": {
267
- "node": "20.x"
267
+ "node": ">=26.7.0"
268
268
  }
269
269
  ```
270
270
 
@@ -38,7 +38,7 @@ Additionally, after installing nvm or fnm, when there is a `.nvmrc` file contain
38
38
  It is recommended to use [pnpm](https://pnpm.io/installation) to manage dependencies:
39
39
 
40
40
  ```bash
41
- mise use pnpm@11.21.0
41
+ mise use pnpm@11.24.0
42
42
  ```
43
43
 
44
44
  :::note
@@ -55,26 +55,27 @@ workspaces. It does not require global installation and can be run on-demand
55
55
  using `pnpm dlx`.
56
56
 
57
57
  The supported pnpm command is the scoped package specifier:
58
- `pnpm dlx @bleedingdev/modern-js-create <target>`. Do not shorten it to
59
- `pnpm dlx modern-js-create`; there is no unscoped package by that name.
58
+ `pnpm dlx @bleedingdev/modern-js-ultramodern-create <target>`. Do not shorten it
59
+ to `pnpm dlx modern-js-ultramodern-create`; there is no unscoped package by
60
+ that name.
60
61
 
61
62
  You can initialize the empty directory you are already in:
62
63
 
63
64
  ```bash
64
65
  mkdir myapp && cd myapp
65
- pnpm dlx @bleedingdev/modern-js-create .
66
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create .
66
67
  ```
67
68
 
68
69
  You can also create a project directly in a new directory:
69
70
 
70
71
  ```bash
71
- pnpm dlx @bleedingdev/modern-js-create my-super-app
72
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create my-super-app
72
73
  ```
73
74
 
74
75
  To initialize with workspace protocol dependencies (for local monorepo testing of unreleased Modern.js packages):
75
76
 
76
77
  ```bash
77
- pnpm dlx @bleedingdev/modern-js-create my-super-app --workspace
78
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create my-super-app --workspace
78
79
  ```
79
80
 
80
81
  The BleedingDev create package will directly create the application without providing an interactive Q & A interface:
@@ -125,13 +126,13 @@ The default workspace starts shell-only and installs the published BleedingDev
125
126
  package aliases:
126
127
 
127
128
  ```bash
128
- pnpm dlx @bleedingdev/modern-js-create my-super-app
129
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create my-super-app
129
130
  ```
130
131
 
131
132
  From a generated SuperApp workspace, add a business MicroVertical in place:
132
133
 
133
134
  ```bash
134
- pnpm dlx @bleedingdev/modern-js-create transportation --vertical
135
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create transportation --vertical
135
136
  ```
136
137
 
137
138
  The `--vertical` command mutates the current workspace: it adds the vertical
@@ -164,7 +165,7 @@ Open `http://localhost:8080/` in your browser to see the page content.
164
165
 
165
166
  ## Configuration
166
167
 
167
- In an UltraModern.js project created using `@bleedingdev/modern-js-create`, a `modern.config.ts` file is generated by default.
168
+ In an UltraModern.js project created using `@bleedingdev/modern-js-ultramodern-create`, a `modern.config.ts` file is generated by default.
168
169
 
169
170
  You can modify the configuration through this file to override the default behavior of Modern.js. For example, to enable SSR, add the following configuration:
170
171
 
@@ -20,7 +20,7 @@ Modern.js provides two first-party routing frameworks:
20
20
  When creating an UltraModern project, TanStack Router is included by default:
21
21
 
22
22
  ```bash
23
- pnpm dlx @bleedingdev/modern-js-create myapp
23
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create myapp
24
24
  ```
25
25
 
26
26
  Modern.js supports conventional routing, self-controlled routing, or other routing schemes. Please refer to ["Routing"](/guides/basic-features/routes/routes.md) to make your choice.
@@ -64,9 +64,9 @@ For an older generated workspace, migrate by treating the published cohort as
64
64
  the source of truth:
65
65
 
66
66
  ```bash
67
- pnpm dlx @bleedingdev/modern-js-create@latest --help
68
- pnpm dlx @bleedingdev/modern-js-create@latest catalog --vertical --dry-run
69
- pnpm dlx @bleedingdev/modern-js-create@latest catalog --vertical
67
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create@latest --help
68
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create@latest catalog --vertical --dry-run
69
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create@latest catalog --vertical
70
70
  mise install
71
71
  mise exec -- pnpm install
72
72
  mise exec -- pnpm check
@@ -86,8 +86,8 @@ package cohort together. Resolve the current cohort version first, then run
86
86
  the matching migration:
87
87
 
88
88
  ```bash
89
- COHORT="$(npm view @bleedingdev/modern-js-create version)"
90
- pnpm dlx "@bleedingdev/modern-js-create@$COHORT" ultramodern \
89
+ COHORT="$(npm view @bleedingdev/modern-js-ultramodern-create version)"
90
+ pnpm dlx "@bleedingdev/modern-js-ultramodern-create@$COHORT" ultramodern \
91
91
  migrate-strict-effect --version "$COHORT"
92
92
  pnpm install
93
93
  pnpm check
@@ -125,8 +125,8 @@ Before hand-editing package aliases or generated metadata, run the framework
125
125
  migration command from the target workspace:
126
126
 
127
127
  ```bash
128
- COHORT="$(npm view @bleedingdev/modern-js-create version)"
129
- pnpm dlx "@bleedingdev/modern-js-create@$COHORT" ultramodern \
128
+ COHORT="$(npm view @bleedingdev/modern-js-ultramodern-create version)"
129
+ pnpm dlx "@bleedingdev/modern-js-ultramodern-create@$COHORT" ultramodern \
130
130
  migrate-strict-effect --version "$COHORT"
131
131
  pnpm api:check
132
132
  pnpm contract:check
@@ -141,8 +141,8 @@ migration work: move code to `shared/api.ts`, `api/index.ts`, and
141
141
  and `src/effect`.
142
142
 
143
143
  Generated strict Effect workspaces pin the compatible Effect cohort with pnpm
144
- overrides: `effect@4.0.0-beta.107`, `@effect/opentelemetry@4.0.0-beta.107`,
145
- and `@effect/vitest@4.0.0-beta.107`. Do not add app-local direct Effect
144
+ overrides: `effect@4.0.0-rc.112`, `@effect/opentelemetry@4.0.0-rc.112`,
145
+ and `@effect/vitest@4.0.0-rc.112`. Do not add app-local direct Effect
146
146
  versions that disagree with those overrides. The strict 24-hour release-age
147
147
  gate applies to installed packages; this cohort carries no Effect age
148
148
  exemption, and override-only `@effect/vitest` is not an installed approval
@@ -154,12 +154,21 @@ metadata transition; they are not release-age approvals.
154
154
 
155
155
  | Surface | Pin |
156
156
  | ------------------------------ | --------------------------------------------------------------------------------------------------- |
157
- | Effect runtime and test cohort | `effect`, `@effect/opentelemetry`, and `@effect/vitest`: `4.0.0-beta.107` |
158
- | Effect compiler | `@effect/tsgo@0.36.2` |
159
- | TanStack Router | `@tanstack/react-router@1.170.25`, `@tanstack/router-core@1.171.21`, `@tanstack/history@1.162.1` |
160
- | Module Federation | `bridge-react`, `manifest`, `modern-js-v3`, and `rspack`: `2.8.2`; `@module-federation/node@2.7.49` |
161
- | React Router | `react-router@7.18.2` |
162
- | Node and package tooling | Node `26.7.0`, `@types/node@^26.2.0`, pnpm `11.21.0` |
157
+ | Effect runtime and test cohort | `effect`, `@effect/opentelemetry`, and `@effect/vitest`: `4.0.0-rc.112` |
158
+ | Effect compiler | `@effect/tsgo@0.37.0` |
159
+ | Oxc and Ultracite | `oxlint@1.80.0`, `oxfmt@0.65.0`, `ultracite@7.10.6` |
160
+ | TanStack Router | `@tanstack/react-router@1.170.32`, `@tanstack/router-core@1.171.27`, `@tanstack/history@1.162.1` |
161
+ | Module Federation | `bridge-react`, `manifest`, `modern-js-v3`, and `rspack`: `2.9.0`; `@module-federation/node@2.7.50` |
162
+ | Tailwind CSS | `tailwindcss@4.3.3` |
163
+ | Node and package tooling | Node `26.7.0`, `@types/node@^26.2.0`, pnpm `11.24.0` |
164
+
165
+ Generated workspaces default to Module Federation bridge-react's router-free
166
+ base entry (`bridge.enableBridgeRouter: false`), with TanStack Router as the
167
+ application router. Declaring `react-router` (or `react-router-dom`) as a
168
+ direct dependency of an app marks it a React Router consumer: the
169
+ generator/migration then emit `enableBridgeRouter: true` for that app's
170
+ federation config, the workspace validator accepts it, and the UltraModern
171
+ preset aliases `react-router`'s entrypoints for the app's own routing.
163
172
 
164
173
  Gradual migration means old, unmigrated Modern.js apps can keep their existing
165
174
  runtime until they are converted. Once a surface is generated or migrated as
@@ -243,6 +252,94 @@ directories, and caches are isolated per app, build target, and Rspack
243
252
  environment so local `build`, `cloudflare:build`, and multi-environment
244
253
  compilers do not share mutable build state.
245
254
 
255
+ ## Configure the public preset
256
+
257
+ Use `presetUltramodern(appConfig, presetOptions)` inside the normal Modern.js
258
+ `defineConfig` call:
259
+
260
+ ```ts title="modern.config.ts"
261
+ import { defineConfig, presetUltramodern } from '@modern-js/app-tools';
262
+
263
+ export default defineConfig(
264
+ presetUltramodern(
265
+ {
266
+ output: {
267
+ precompress: false,
268
+ },
269
+ server: {
270
+ telemetry: {
271
+ failLoudStartup: true,
272
+ },
273
+ },
274
+ },
275
+ {
276
+ appId: 'catalog',
277
+ enableModuleFederationSSR: false,
278
+ enableTelemetryExporters: false,
279
+ },
280
+ ),
281
+ );
282
+ ```
283
+
284
+ The first argument is ordinary `AppUserConfig`. It contains app-owned config
285
+ and wins where it supplies an override. The second argument controls the
286
+ preset itself. Use its typed options, such as `enableBffRequestId: false`,
287
+ `enableTelemetry: false`, `enableTelemetryExporters: false`, and
288
+ `enableModuleFederationSSR: false`, to turn preset features off.
289
+
290
+ Composition follows the Modern.js config merge rules:
291
+
292
+ - Nested records merge, so changing one nested field keeps its preset
293
+ siblings.
294
+ - Scalars and `false` supplied by the app override preset values. Omitting a
295
+ field, or leaving it `undefined`, keeps the preset value.
296
+ - Arrays and config hooks compose in preset-first order. Non-function array
297
+ entries are deduplicated by deep equality, while function entries are all
298
+ retained. An empty array or empty record does not clear values already
299
+ supplied by the preset.
300
+
301
+ There is no generic reset sentinel. Use a typed preset option for preset-owned
302
+ behavior and a normal app config override for app-owned behavior.
303
+
304
+ `createPresetUltramodernConfig(options)` is an advanced API for inspecting or
305
+ materializing a fresh preset config. Do not spread its result into another
306
+ config object. Object spread is shallow, so replacing `server`, `output`, or
307
+ another nested record can silently discard preset siblings. Use
308
+ `presetUltramodern(...)` for authoring `modern.config.ts`.
309
+
310
+ ### Bare preset and generated workspace policy
311
+
312
+ The preset and the workspace generator own different parts of the config:
313
+
314
+ | Source | Identity | Remaining config |
315
+ | --------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
316
+ | Bare `createPresetUltramodernConfig()` result | Uses `appId: 'app'` and has no `deliveryUnit` | Uses the preset defaults. Telemetry stays enabled, but no exporter is configured until its endpoint is set. |
317
+ | Generated app | Supplies the app-specific `appId` and stamped `deliveryUnit` | Inherits the other strict defaults from `presetUltramodern(...)`. |
318
+ | Application | Supplies the first `appConfig` argument | Overrides app-owned fields through the normal Modern.js merge. |
319
+
320
+ Keep the generated `appId` and `deliveryUnit` options intact. To change
321
+ preset-owned behavior, use typed options such as
322
+ `enableTelemetryExporters: false`,
323
+ `enableTelemetry: false`, `enableBffRequestId: false`, or
324
+ `enableModuleFederationSSR: false`. To change an app-owned field, put the
325
+ override in the first argument, as in the example above.
326
+
327
+ Telemetry exporter endpoints are unset by default:
328
+
329
+ - `MODERN_TELEMETRY_OTLP_ENDPOINT` enables only the OTLP exporter.
330
+ - `MODERN_TELEMETRY_VICTORIA_ENDPOINT` enables only the VictoriaMetrics
331
+ exporter.
332
+ - Setting both enables both. Leaving both unset keeps the telemetry pipeline
333
+ enabled without configuring an exporter.
334
+
335
+ The typed `otlpEndpoint` and `victoriaMetricsEndpoint` preset options provide
336
+ the same per-exporter behavior without environment variables.
337
+
338
+ ```bash
339
+ MODERN_TELEMETRY_OTLP_ENDPOINT=https://otel.example.com/v1/logs \
340
+ mise exec -- pnpm dev
341
+ ```
342
+
246
343
  ## Human Workflow
247
344
 
248
345
  The public BleedingDev create package has one supported generated product. The
@@ -252,7 +349,7 @@ BFF, Module Federation topology, generated quality gates, and Cloudflare deploy
252
349
  basics:
253
350
 
254
351
  ```bash
255
- pnpm dlx @bleedingdev/modern-js-create myapp
352
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create myapp
256
353
  cd myapp
257
354
  mise install
258
355
  mise exec -- pnpm install
@@ -264,10 +361,10 @@ generate a demo domain by default. Add real business MicroVerticals when they
264
361
  become real ownership boundaries:
265
362
 
266
363
  ```bash
267
- pnpm dlx @bleedingdev/modern-js-create transportation --vertical
268
- pnpm dlx @bleedingdev/modern-js-create food-delivery --vertical
269
- pnpm dlx @bleedingdev/modern-js-create payments --vertical
270
- pnpm dlx @bleedingdev/modern-js-create maps --vertical
364
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create transportation --vertical
365
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create food-delivery --vertical
366
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create payments --vertical
367
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create maps --vertical
271
368
  mise exec -- pnpm check
272
369
  ```
273
370
 
@@ -283,10 +380,10 @@ Automation can use explicit MicroVertical syntax instead of relying on the
283
380
  positional form:
284
381
 
285
382
  ```bash
286
- pnpm dlx @bleedingdev/modern-js-create --vertical=transportation
287
- pnpm dlx @bleedingdev/modern-js-create --vertical-name transportation
288
- pnpm dlx @bleedingdev/modern-js-create transportation --vertical --dry-run
289
- pnpm dlx @bleedingdev/modern-js-create transportation --vertical \
383
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create --vertical=transportation
384
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create --vertical-name transportation
385
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create transportation --vertical --dry-run
386
+ pnpm dlx @bleedingdev/modern-js-ultramodern-create transportation --vertical \
290
387
  --codesmith-overlay ./generators/vertical-overlay
291
388
  ```
292
389
 
@@ -305,7 +402,7 @@ import {
305
402
  addUltramodernVertical,
306
403
  generateUltramodernWorkspace,
307
404
  planUltramodernVertical,
308
- } from '@modern-js/create/ultramodern-workspace';
405
+ } from '@modern-js/ultramodern-create/ultramodern-workspace';
309
406
 
310
407
  const workspace = generateUltramodernWorkspace({
311
408
  targetDir: '/tmp/my-workspace',
@@ -337,7 +434,7 @@ returns the same shape plus `dryRun`, `selectedPort`, `moduleFederationRemote`,
337
434
  CodeSmith consumers can use the adapter subpath:
338
435
 
339
436
  ```ts
340
- import ultramodernCodeSmith from '@modern-js/create/ultramodern-workspace/codesmith';
437
+ import ultramodernCodeSmith from '@modern-js/ultramodern-create/ultramodern-workspace/codesmith';
341
438
 
342
439
  await ultramodernCodeSmith({
343
440
  config: {
@@ -421,18 +518,6 @@ BleedingDev packages are published through GitHub Actions trusted publishing.
421
518
  The public workflow is tokenless; do not publish packages manually from a
422
519
  developer machine.
423
520
 
424
- ## Baseline Switches (Opt-out)
425
-
426
- The generated `presetUltramodern(...)` starter enables strict platform contracts. Use these env switches to opt out per app or per environment:
427
-
428
- - `MODERN_BASELINE_ENABLE_MF_SSR` (default: `true`): Enables app-level MF SSR baseline contract (`server.ssr.mode: 'stream'` + `moduleFederationAppSSR`). Disable when the app does not use app-level MF SSR, or when you need plain SSR/CSR behavior first.
429
- - `MODERN_BASELINE_ENABLE_BFF_REQUEST_ID` (default: `true`): Enables default BFF producer identity contract (`bff.requestId`). Disable when the app does not need cross-project producer isolation.
430
- - `MODERN_BASELINE_ENABLE_TELEMETRY_EXPORTERS` (default: `true`): Enables telemetry exporters in baseline config. Disable when the environment has no telemetry backend yet.
431
- - `MODERN_BASELINE_APP_ID` (default: `basename(process.cwd())`): Overrides baseline `bff.requestId` identity. Set this when you need a fixed platform-wide producer ID convention.
432
- - `MODERN_TELEMETRY_OTLP_ENDPOINT` (default: `http://127.0.0.1:4318/v1/logs`): OTLP exporter endpoint. Override when you route telemetry through a different collector endpoint.
433
- - `MODERN_TELEMETRY_VICTORIA_ENDPOINT` (default: `http://127.0.0.1:8428/api/v1/import/prometheus`): VictoriaMetrics exporter endpoint. Override when you use a different VM ingress endpoint.
434
- - `MODERN_TELEMETRY_FAIL_LOUD_STARTUP` (default: `true`): Fails startup if configured exporters fail startup health checks. Disable in local/dev environments where temporary telemetry outage should not block boot.
435
-
436
521
  ## Related Docs
437
522
 
438
523
  - [BFF Runtime Frameworks](/guides/advanced-features/bff/frameworks.md)
@@ -31,5 +31,5 @@ pnpm run command --options
31
31
  ```
32
32
 
33
33
  :::tip
34
- Modern.js requires Node.js >= 20.19.5, and pnpm v6 does not support Node.js 20, so please use pnpm v7 or higher.
34
+ UltraModern.js requires Node.js >= 26.7.0 and pnpm >= 11. Use the repository's pinned mise toolchain so the CLI and native TypeScript runtime stay aligned.
35
35
  :::
package/docs/llms.txt CHANGED
@@ -274,12 +274,12 @@
274
274
 
275
275
  ## Examples
276
276
 
277
- - [Route Authorization](/tutorials/examples/csr-auth.md): Modern.js defaults to the convention-based routing based on React Router. For more details, please refer to Routing. In a web application, if there are multiple routes, we may need to authorize access to some of them before accessing them. For example, in the following scenario: Access to the / route does not require authorization and can be accessed directly.Access to the /protected route requires authorization. If there is no authorization, it will automatically redirect to the /login route. After successful login, it returns to /protected. <Sandpack template="web-app" files={{ '/src/routes/page.tsx': srcRoutesPageText, '/src/routes/layout.tsx': srcRoutesLayoutText, '/src/routes/Auth.tsx': srcRoutesAuthText, '/src/routes/fakeAuth.ts': srcRoutesFakeAuthText, '/src/routes/protected/page.tsx': srcRoutesProtectedPageText, '/src/routes/login/page.tsx': srcRoutesLoginPageText, }}>
277
+ - [Route Authorization](/tutorials/examples/csr-auth.md): UltraModern.js uses convention-based routing backed by TanStack Router. For more details, please refer to Routing. In a web application, if there are multiple routes, we may need to authorize access to some of them before accessing them. For example, in the following scenario: Access to the / route does not require authorization and can be accessed directly.Access to the /protected route requires authorization. If there is no authorization, it will automatically redirect to the /login route. After successful login, it returns to /protected. <Sandpack template="web-app" files={{ ...ultramodernSandpackFiles, '/src/routes/page.tsx': srcRoutesPageText, '/src/routes/layout.tsx': srcRoutesLayoutText, '/src/routes/Auth.tsx': srcRoutesAuthText, '/src/routes/fakeAuth.ts': srcRoutesFakeAuthText, '/src/routes/protected/page.tsx': srcRoutesProtectedPageText, '/src/routes/login/page.tsx': srcRoutesLoginPageText, }}>
278
278
  - [Introduction](/tutorials/foundations/introduction.md): Welcome to Modern.js Example Library! Here you'll find practical code examples to help you get started with Modern.js quickly. If you're new to Modern.js, we recommend reading the Modern.js Introduction first.
279
279
 
280
280
  ## Community
281
281
 
282
- - [Showcase](/community/showcase.md): Welcome to the Modern.js showcase page! Here, we present a collection of websites that have been built using Modern.js. If you have built a website using Modern.js, we would love for you to share it with the community. Simply reply to the GitHub discussion thread with a link to your website. We will collect content on a regular basis and display it on the current page.
282
+ - [Ecosystem](/community/showcase.md): UltraModern.js builds on a focused ecosystem of frameworks and tools. These projects provide the Effect, TanStack Router, build, documentation, and Module Federation foundations used by the fork.
283
283
  - [Meet the Team](/community/team.md): The development of Modern.js is driven by ByteDance's Modern.js team and community contributors.
284
284
  - [Releases](/community/releases.md)
285
285
  - [Contributing Guide](/community/contributing-guide.md): Thanks for that you are interested in contributing to Modern.js. Before starting your contribution, please take a moment to read the following guidelines.
@@ -1,6 +1,6 @@
1
1
  # Route Authorization
2
2
 
3
- Modern.js defaults to the convention-based routing based on React Router. For more details, please refer to [Routing](/guides/basic-features/routes/routes.md#routing).
3
+ UltraModern.js uses convention-based routing backed by TanStack Router. For more details, please refer to [Routing](/guides/basic-features/routes/routes.md#routing).
4
4
 
5
5
  In a web application, if there are multiple routes, we may need to authorize access to some of them before accessing them. For example, in the following scenario:
6
6
 
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.8.2-ultramodern.9",
20
+ "version": "3.8.3-ultramodern.2",
21
21
  "types": "./dist/types/index.d.ts",
22
22
  "main": "./dist/cjs/index.js",
23
23
  "exports": {
@@ -75,7 +75,7 @@
75
75
  }
76
76
  },
77
77
  "engines": {
78
- "node": ">=20"
78
+ "node": ">=26.7.0"
79
79
  },
80
80
  "typesVersions": {
81
81
  "*": {
@@ -134,17 +134,19 @@
134
134
  "@babel/traverse": "^8.0.0",
135
135
  "@babel/types": "^8.0.0",
136
136
  "@loadable/component": "5.16.7",
137
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.8.2-ultramodern.9",
138
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.2-ultramodern.9",
139
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.2-ultramodern.9",
140
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.8.2-ultramodern.9",
141
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.8.2-ultramodern.9",
142
- "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.8.2-ultramodern.9",
143
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.2-ultramodern.9",
144
- "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.8.2-ultramodern.9",
145
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.2-ultramodern.9",
146
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.2-ultramodern.9",
147
- "@rsbuild/core": "2.2.0-rc.0",
137
+ "@modern-js/app-tools-extensions": "npm:@bleedingdev/modern-js-app-tools-extensions@3.8.3-ultramodern.2",
138
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.8.3-ultramodern.2",
139
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.3-ultramodern.2",
140
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.3-ultramodern.2",
141
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.8.3-ultramodern.2",
142
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.8.3-ultramodern.2",
143
+ "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.8.3-ultramodern.2",
144
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.3-ultramodern.2",
145
+ "@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.8.3-ultramodern.2",
146
+ "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.8.3-ultramodern.2",
147
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.3-ultramodern.2",
148
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.2",
149
+ "@rsbuild/core": "2.2.0",
148
150
  "@swc/core": "1.15.43",
149
151
  "@swc/helpers": "^0.5.23",
150
152
  "compression-webpack-plugin": "^12.0.0",
@@ -163,29 +165,15 @@
163
165
  "@types/babel__traverse": "7.28.0",
164
166
  "@types/node": "^26.2.0",
165
167
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
166
- "ts-node": "^10.9.2",
167
- "tsconfig-paths": "^4.2.0",
168
168
  "typescript": "^7.0.2"
169
169
  },
170
- "peerDependencies": {
171
- "ts-node": "^10.9.2",
172
- "tsconfig-paths": "^4.2.0"
173
- },
174
- "peerDependenciesMeta": {
175
- "ts-node": {
176
- "optional": true
177
- },
178
- "tsconfig-paths": {
179
- "optional": true
180
- }
181
- },
182
170
  "sideEffects": false,
183
171
  "publishConfig": {
184
172
  "access": "public"
185
173
  },
186
174
  "scripts": {
187
175
  "dev": "rslib build --watch",
188
- "build": "rslib build && pnpm -w tsgo:dts \"$PWD\" && pnpm run verify:public-surface && node ./bin/modern-bundle-docs.js",
176
+ "build": "rslib build && pnpm run verify:public-surface && node ./bin/modern-bundle-docs.js",
189
177
  "verify:public-surface": "node ./tests/config/verify-public-surface.mjs",
190
178
  "test": "rstest"
191
179
  }
package/rslib.config.mts CHANGED
@@ -14,7 +14,6 @@ export default defineConfig({
14
14
  source: {
15
15
  ...libConfig.source,
16
16
  entry: {
17
- // Deploy templates are copy-only; `src/esm` still needs compiled CJS.
18
17
  index: APP_TOOLS_CODE_ENTRY_GLOBS,
19
18
  },
20
19
  },
@@ -28,6 +27,10 @@ export default defineConfig({
28
27
  // `.js`, so there the copy is the only thing providing the `.mjs`
29
28
  // loaders that `register()` resolves by name; keep it for that alone.
30
29
  copy: [
30
+ {
31
+ from: './src/plugins/deploy/platforms/templates',
32
+ to: './plugins/deploy/platforms/templates',
33
+ },
31
34
  ...(libConfig.format === 'esm'
32
35
  ? []
33
36
  : [
@@ -36,12 +39,6 @@ export default defineConfig({
36
39
  to: './esm',
37
40
  },
38
41
  ]),
39
- {
40
- from: './src/plugins/deploy/platforms/templates',
41
- to: './plugins/deploy/platforms/templates',
42
- // These JavaScript-named assets must bypass Rspack's minimizer.
43
- info: { minimized: true },
44
- },
45
42
  ],
46
43
  },
47
44
  };
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.d = (exports1, getters, values)=>{
5
- var define = (defs, kind)=>{
6
- for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
- enumerable: true,
8
- [kind]: defs[key]
9
- });
10
- };
11
- define(getters, "get");
12
- define(values, "value");
13
- };
14
- })();
15
- (()=>{
16
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
- })();
18
- (()=>{
19
- __webpack_require__.r = (exports1)=>{
20
- if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
- value: 'Module'
22
- });
23
- Object.defineProperty(exports1, '__esModule', {
24
- value: true
25
- });
26
- };
27
- })();
28
- var __webpack_exports__ = {};
29
- __webpack_require__.r(__webpack_exports__);
30
- __webpack_require__.d(__webpack_exports__, {
31
- builderPluginAdapterLazyCompilation: ()=>builderPluginAdapterLazyCompilation
32
- });
33
- const utils_namespaceObject = require("@modern-js/utils");
34
- const external_lazyCompilation_js_namespaceObject = require("../lazyCompilation.js");
35
- const builderPluginAdapterLazyCompilation = (options)=>({
36
- name: 'builder-plugin-adapter-modern-lazy-compilation',
37
- setup (api) {
38
- api.modifyRsbuildConfig((config)=>{
39
- const lazyCompilation = getRouteEagerLazyCompilation(options, config);
40
- if (void 0 === lazyCompilation) return config;
41
- return {
42
- ...config,
43
- dev: {
44
- ...config.dev,
45
- lazyCompilation
46
- }
47
- };
48
- });
49
- }
50
- });
51
- function getRouteEagerLazyCompilation(options, config) {
52
- const current = config.dev?.lazyCompilation;
53
- if (!current || (0, utils_namespaceObject.isUseRsc)(options.normalizedConfig)) return;
54
- const plan = (0, external_lazyCompilation_js_namespaceObject.planRouteEagerLazyCompilation)(current, (0, external_lazyCompilation_js_namespaceObject.aggregateEagerRouteComponentFiles)(options.eagerRouteComponentFilesByEntry));
55
- if (!plan.apply) {
56
- if (plan.unresolvedByEntry) warnUnresolvedRouteComponents(options.appContext.appDirectory, plan.unresolvedByEntry);
57
- return;
58
- }
59
- return plan.lazyCompilation;
60
- }
61
- const warnedLazyApps = new Set();
62
- function warnUnresolvedRouteComponents(appDirectory, unresolvedByEntry) {
63
- if (warnedLazyApps.has(appDirectory)) return;
64
- warnedLazyApps.add(appDirectory);
65
- const detail = Array.from(unresolvedByEntry).map(([entry, components])=>`${entry}: ${components.join(', ')}`).join('; ');
66
- utils_namespaceObject.logger.warn(`[lazyCompilation] Skipped route-eager optimization because some route components could not be resolved to a file (${detail}). Lazy compilation may delay route rendering for these routes.`);
67
- }
68
- exports.builderPluginAdapterLazyCompilation = __webpack_exports__.builderPluginAdapterLazyCompilation;
69
- for(var __rspack_i in __webpack_exports__)if (-1 === [
70
- "builderPluginAdapterLazyCompilation"
71
- ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
72
- Object.defineProperty(exports, '__esModule', {
73
- value: true
74
- });