@tanstack/create 0.49.3 → 0.59.4

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 (225) hide show
  1. package/CHANGELOG.md +597 -0
  2. package/dist/add-ons.js +42 -2
  3. package/dist/add-to-app.js +36 -7
  4. package/dist/custom-add-ons/add-on.js +2 -26
  5. package/dist/custom-add-ons/starter.js +1 -2
  6. package/dist/file-helpers.js +11 -10
  7. package/dist/frameworks/react/add-ons/ai/info.json +1 -1
  8. package/dist/frameworks/react/add-ons/apollo-client/info.json +1 -1
  9. package/dist/frameworks/react/add-ons/better-auth/info.json +0 -2
  10. package/dist/frameworks/react/add-ons/clerk/info.json +0 -1
  11. package/dist/frameworks/react/add-ons/db/info.json +1 -1
  12. package/dist/frameworks/react/add-ons/drizzle/info.json +1 -1
  13. package/dist/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  14. package/dist/frameworks/react/add-ons/mcp/info.json +1 -2
  15. package/dist/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +1 -1
  16. package/dist/frameworks/react/add-ons/neon/info.json +1 -2
  17. package/dist/frameworks/react/add-ons/oRPC/info.json +1 -1
  18. package/dist/frameworks/react/add-ons/paraglide/info.json +1 -1
  19. package/dist/frameworks/react/add-ons/prisma/info.json +1 -1
  20. package/dist/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  21. package/dist/frameworks/react/add-ons/sentry/info.json +1 -2
  22. package/dist/frameworks/react/add-ons/tRPC/info.json +1 -1
  23. package/dist/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  24. package/dist/frameworks/react/add-ons/workos/info.json +0 -1
  25. package/dist/frameworks/react/hosts/cloudflare/info.json +0 -1
  26. package/dist/frameworks/react/hosts/netlify/info.json +0 -1
  27. package/dist/frameworks/react/hosts/nitro/info.json +0 -1
  28. package/dist/frameworks/react/hosts/railway/info.json +0 -1
  29. package/dist/frameworks/react/index.js +1 -6
  30. package/dist/frameworks/react/project/base/README.md.ejs +86 -436
  31. package/dist/frameworks/react/project/base/_dot_gitignore +4 -0
  32. package/dist/frameworks/react/project/base/package.json +8 -5
  33. package/dist/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  34. package/dist/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  35. package/dist/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  36. package/dist/frameworks/react/project/base/src/styles.css.ejs +3 -3
  37. package/dist/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  38. package/dist/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  39. package/dist/frameworks/react/project/packages.json +2 -2
  40. package/dist/frameworks/solid/add-ons/better-auth/info.json +1 -1
  41. package/dist/frameworks/solid/hosts/cloudflare/info.json +0 -1
  42. package/dist/frameworks/solid/hosts/netlify/info.json +0 -1
  43. package/dist/frameworks/solid/hosts/nitro/info.json +0 -1
  44. package/dist/frameworks/solid/hosts/railway/info.json +0 -1
  45. package/dist/frameworks/solid/index.js +1 -6
  46. package/dist/frameworks/solid/project/base/README.md.ejs +43 -117
  47. package/dist/frameworks/solid/project/base/_dot_gitignore +4 -0
  48. package/dist/frameworks/solid/project/base/package.json +8 -3
  49. package/dist/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  50. package/dist/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  51. package/dist/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  52. package/dist/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  53. package/dist/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  54. package/dist/frameworks/solid/project/packages.json +2 -2
  55. package/dist/frameworks.js +0 -1
  56. package/dist/package-json.js +6 -10
  57. package/dist/template-file.js +21 -7
  58. package/dist/types/custom-add-ons/add-on.d.ts +1 -1
  59. package/dist/types/file-helpers.d.ts +0 -1
  60. package/dist/types/types.d.ts +12 -12
  61. package/dist/types.js +1 -2
  62. package/package.json +1 -1
  63. package/src/add-ons.ts +54 -2
  64. package/src/add-to-app.ts +42 -7
  65. package/src/custom-add-ons/add-on.ts +2 -33
  66. package/src/custom-add-ons/starter.ts +1 -2
  67. package/src/file-helpers.ts +11 -10
  68. package/src/frameworks/react/add-ons/ai/info.json +1 -1
  69. package/src/frameworks/react/add-ons/apollo-client/info.json +1 -1
  70. package/src/frameworks/react/add-ons/better-auth/info.json +0 -2
  71. package/src/frameworks/react/add-ons/clerk/info.json +0 -1
  72. package/src/frameworks/react/add-ons/db/info.json +1 -1
  73. package/src/frameworks/react/add-ons/drizzle/info.json +1 -1
  74. package/src/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  75. package/src/frameworks/react/add-ons/mcp/info.json +1 -2
  76. package/src/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +1 -1
  77. package/src/frameworks/react/add-ons/neon/info.json +1 -2
  78. package/src/frameworks/react/add-ons/oRPC/info.json +1 -1
  79. package/src/frameworks/react/add-ons/paraglide/info.json +1 -1
  80. package/src/frameworks/react/add-ons/prisma/info.json +1 -1
  81. package/src/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  82. package/src/frameworks/react/add-ons/sentry/info.json +1 -2
  83. package/src/frameworks/react/add-ons/tRPC/info.json +1 -1
  84. package/src/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  85. package/src/frameworks/react/add-ons/workos/info.json +0 -1
  86. package/src/frameworks/react/hosts/cloudflare/info.json +0 -1
  87. package/src/frameworks/react/hosts/netlify/info.json +0 -1
  88. package/src/frameworks/react/hosts/nitro/info.json +0 -1
  89. package/src/frameworks/react/hosts/railway/info.json +0 -1
  90. package/src/frameworks/react/index.ts +1 -6
  91. package/src/frameworks/react/project/base/README.md.ejs +86 -436
  92. package/src/frameworks/react/project/base/_dot_gitignore +4 -0
  93. package/src/frameworks/react/project/base/package.json +8 -5
  94. package/src/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  95. package/src/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  96. package/src/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  97. package/src/frameworks/react/project/base/src/styles.css.ejs +3 -3
  98. package/src/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  99. package/src/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  100. package/src/frameworks/react/project/packages.json +2 -2
  101. package/src/frameworks/solid/add-ons/better-auth/info.json +1 -1
  102. package/src/frameworks/solid/hosts/cloudflare/info.json +0 -1
  103. package/src/frameworks/solid/hosts/netlify/info.json +0 -1
  104. package/src/frameworks/solid/hosts/nitro/info.json +0 -1
  105. package/src/frameworks/solid/hosts/railway/info.json +0 -1
  106. package/src/frameworks/solid/index.ts +1 -6
  107. package/src/frameworks/solid/project/base/README.md.ejs +43 -117
  108. package/src/frameworks/solid/project/base/_dot_gitignore +4 -0
  109. package/src/frameworks/solid/project/base/package.json +8 -3
  110. package/src/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  111. package/src/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  112. package/src/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  113. package/src/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  114. package/src/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  115. package/src/frameworks/solid/project/packages.json +2 -2
  116. package/src/frameworks.ts +0 -1
  117. package/src/package-json.ts +6 -10
  118. package/src/template-file.ts +27 -8
  119. package/src/types.ts +1 -2
  120. package/tests/add-to-app.test.ts +37 -0
  121. package/tests/file-helper.test.ts +23 -2
  122. package/tests/package-json.test.ts +32 -0
  123. package/tests/template-file.test.ts +28 -0
  124. package/dist/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  125. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  126. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  127. package/dist/frameworks/react/add-ons/module-federation/info.json +0 -11
  128. package/dist/frameworks/react/add-ons/module-federation/package.json +0 -5
  129. package/dist/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  130. package/dist/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  131. package/dist/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.ts +0 -13
  132. package/dist/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  133. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.ts +0 -10
  134. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  135. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  136. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  137. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  138. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  139. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  140. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  141. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  142. package/dist/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  143. package/dist/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  144. package/dist/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  145. package/dist/frameworks/react/add-ons/start/info.json +0 -61
  146. package/dist/frameworks/react/add-ons/start/package.json +0 -12
  147. package/dist/frameworks/react/add-ons/start/small-logo.svg +0 -1
  148. package/dist/frameworks/react/project/base/index.html.ejs +0 -20
  149. package/dist/frameworks/react/project/base/src/App.css.ejs +0 -38
  150. package/dist/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  151. package/dist/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  152. package/dist/frameworks/react/project/base/src/logo.svg +0 -12
  153. package/dist/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  154. package/dist/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  155. package/dist/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  156. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  157. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  158. package/dist/frameworks/solid/add-ons/module-federation/info.json +0 -10
  159. package/dist/frameworks/solid/add-ons/module-federation/package.json +0 -5
  160. package/dist/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  161. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  162. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  163. package/dist/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  164. package/dist/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  165. package/dist/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  166. package/dist/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  167. package/dist/frameworks/solid/add-ons/start/info.json +0 -18
  168. package/dist/frameworks/solid/add-ons/start/package.json +0 -15
  169. package/dist/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  170. package/dist/frameworks/solid/project/base/index.html.ejs +0 -20
  171. package/dist/frameworks/solid/project/base/src/App.css.ejs +0 -38
  172. package/dist/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  173. package/dist/frameworks/solid/project/base/src/logo.svg +0 -120
  174. package/dist/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
  175. package/src/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  176. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  177. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  178. package/src/frameworks/react/add-ons/module-federation/info.json +0 -11
  179. package/src/frameworks/react/add-ons/module-federation/package.json +0 -5
  180. package/src/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  181. package/src/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  182. package/src/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.ts +0 -13
  183. package/src/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  184. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.ts +0 -10
  185. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  186. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  187. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  188. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  189. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  190. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  191. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  192. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  193. package/src/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  194. package/src/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  195. package/src/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  196. package/src/frameworks/react/add-ons/start/info.json +0 -61
  197. package/src/frameworks/react/add-ons/start/package.json +0 -12
  198. package/src/frameworks/react/add-ons/start/small-logo.svg +0 -1
  199. package/src/frameworks/react/project/base/index.html.ejs +0 -20
  200. package/src/frameworks/react/project/base/src/App.css.ejs +0 -38
  201. package/src/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  202. package/src/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  203. package/src/frameworks/react/project/base/src/logo.svg +0 -12
  204. package/src/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  205. package/src/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  206. package/src/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  207. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  208. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  209. package/src/frameworks/solid/add-ons/module-federation/info.json +0 -10
  210. package/src/frameworks/solid/add-ons/module-federation/package.json +0 -5
  211. package/src/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  212. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  213. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  214. package/src/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  215. package/src/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  216. package/src/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  217. package/src/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  218. package/src/frameworks/solid/add-ons/start/info.json +0 -18
  219. package/src/frameworks/solid/add-ons/start/package.json +0 -15
  220. package/src/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  221. package/src/frameworks/solid/project/base/index.html.ejs +0 -20
  222. package/src/frameworks/solid/project/base/src/App.css.ejs +0 -38
  223. package/src/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  224. package/src/frameworks/solid/project/base/src/logo.svg +0 -120
  225. package/src/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
@@ -1,8 +1,7 @@
1
1
  <% if (addOns.length === 0 && integrations.length === 0 && routes.length === 0) { ignoreFile() } %>import { Link } from '@tanstack/react-router'
2
2
  <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
3
3
  import <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
4
- <% } %><% if (!tailwind) { %>
5
- import './Header.css'<% } %><% if (tailwind) {
4
+ <% } %><%
6
5
  const icons = new Set([
7
6
  "Menu",
8
7
  "X",
@@ -26,10 +25,9 @@ import { useState } from 'react';
26
25
  import {
27
26
  <%= Array.from(icons).sort().join(", ") %>
28
27
  } from "lucide-react";
29
- <% } %>
30
28
 
31
29
  export default function Header() {
32
- <% if (tailwind) {
30
+ <%
33
31
  const menusWithChildren = addOns.filter(a => a.routes?.some(r => r.children));
34
32
  const userHeaders = integrations.filter(i => i.type === 'header-user');
35
33
  %>
@@ -155,32 +153,4 @@ const userHeaders = integrations.filter(i => i.type === 'header-user');
155
153
  </aside>
156
154
  </>
157
155
  );
158
- <% } else { %>
159
- return (
160
- <% if (tailwind) { %>
161
- <header className="p-2 flex gap-2 bg-white text-black justify-between">
162
- <nav className="flex flex-row">
163
- <div className="px-2 font-bold">
164
- <% } else { %>
165
- <header className="header">
166
- <nav className="nav">
167
- <div className="nav-item">
168
- <% } %>
169
- <Link to="/">Home</Link>
170
- </div>
171
- <% for(const addOn of addOns) {
172
- for(const route of (addOn?.routes||[])?.filter(r => r.url && r.name)) { %>
173
- <div className="px-2 font-bold"><Link to="<%= route.url %>"><%= route.name %></Link></div>
174
- <% } } %>
175
- </nav>
176
- <% if (integrations.filter(i => i.type === 'header-user').length > 0) { %>
177
- <div>
178
- <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
179
- <<%= integration.jsName %> />
180
- <% } %>
181
- </div>
182
- <% } %>
183
- </header>
184
- )
185
- <% } %>
186
156
  }
@@ -1,6 +1,6 @@
1
1
  <% let hasContext = addOnEnabled["apollo-client"] || addOnEnabled["tanstack-query"]; %>
2
- <% if (!fileRouter) { ignoreFile() } %>import { <% if (addOnEnabled.start) { %>
3
- HeadContent<% } else { %>Outlet<% } %><% if (addOnEnabled.start) { %>, Scripts<% } %>, <% if (hasContext) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %><% if (addOnEnabled.paraglide) { %>, redirect<% } %> } from '@tanstack/react-router'
2
+ import {
3
+ HeadContent, Scripts, <% if (hasContext) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
4
4
  import { TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools';
5
5
  import { TanStackDevtools } from '@tanstack/react-devtools'
6
6
  <% if (addOns.length) { %>
@@ -8,11 +8,9 @@ import Header from '../components/Header'
8
8
  <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider' || i.type === 'devtools')) { %>
9
9
  import <%= integration.jsName %> from '<%= relativePath(integration.path, true) %>'
10
10
  <% } %><% if (addOnEnabled.paraglide) { %>
11
- import { getLocale, shouldRedirect } from '@/paraglide/runtime'
11
+ import { getLocale } from '@/paraglide/runtime'
12
12
  <% } %>
13
- <% if (addOnEnabled.start) { %>
14
13
  import appCss from '../styles.css?url'
15
- <% } %>
16
14
  <% if (addOnEnabled["apollo-client"]) { %>
17
15
  import type { ApolloClientIntegration } from "@apollo/client-integration-tanstack-start";
18
16
  <% } %>
@@ -41,20 +39,9 @@ export const Route = <% if (hasContext) { %>createRootRouteWithContext<MyRouterC
41
39
  if (typeof document !== 'undefined') {
42
40
  document.documentElement.setAttribute('lang', getLocale())
43
41
  }
44
-
45
- <% if (!addOnEnabled.start) { %>// Client-side fallback redirect for SPA/file-router builds. Start apps should
46
- // prefer server-side paraglideMiddleware (see start template server.ts).
47
- if (typeof window !== 'undefined') {
48
- const decision = await shouldRedirect({ url: window.location.href })
49
-
50
- if (decision.redirectUrl) {
51
- throw redirect({ href: decision.redirectUrl.href })
52
- }
53
- }<% } %>
54
42
  },
55
43
  <% } %>
56
- <% if (addOnEnabled.start) { %>
57
- head: () => ({
44
+ head: () => ({
58
45
  meta: [
59
46
  {
60
47
  charSet: 'utf-8',
@@ -74,35 +61,9 @@ export const Route = <% if (hasContext) { %>createRootRouteWithContext<MyRouterC
74
61
  },
75
62
  ],
76
63
  }),
77
- <% } %>
78
- <% if (addOnEnabled.start) { %>
79
64
  shellComponent: RootDocument
80
- <% } else { %>
81
- component: () => (
82
- <>
83
- <% for(const integration of integrations.filter(i => i.type === 'provider')) { %><<%= integration.jsName %>>
84
- <% } %><% if (addOns.length) { %><Header />
85
- <% } %><Outlet />
86
- <TanStackDevtools
87
- config={{
88
- position: 'bottom-right',
89
- }}
90
- plugins={[
91
- {
92
- name: 'Tanstack Router',
93
- render: <TanStackRouterDevtoolsPanel />,
94
- },
95
- <% for(const integration of integrations.filter(i => i.type === 'devtools')) { %><%= integration.jsName %>,<% } %>
96
- ]}
97
- />
98
- <% for(const integration of integrations.filter(i => i.type === 'layout')) { %><<%= integration.jsName %> />
99
- <% } %><% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %></<%= integration.jsName %>>
100
- <% } %>
101
- </>)
102
- <% } %>
103
65
  })
104
66
 
105
- <% if (addOnEnabled.start) { %>
106
67
  function RootDocument({ children }: { children: React.ReactNode }) {
107
68
  return (
108
69
  <% if (addOnEnabled.paraglide) { %><html lang={getLocale()}><% } else { %><html lang="en"><% } %>
@@ -132,4 +93,3 @@ function RootDocument({ children }: { children: React.ReactNode }) {
132
93
  </html>
133
94
  )
134
95
  }
135
- <% } %>
@@ -1,67 +1,105 @@
1
- <% if (codeRouter || addOnEnabled.start) { ignoreFile() } %>
2
1
  import { createFileRoute } from "@tanstack/react-router";
3
- import logo from "../logo.svg";<% if (!tailwind) { %>
4
- import "../App.css";
5
- <% } %>
2
+ import {
3
+ Zap, Server, Route as RouteIcon, Shield, Waves, Sparkles,
4
+ } from "lucide-react";
6
5
 
7
- export const Route = createFileRoute("/")({
8
- component: App,
9
- });
6
+ export const Route = createFileRoute("/")({ component: App });
10
7
 
11
8
  function App() {
12
- return (<% if (tailwind) { %>
13
- <div className="text-center">
14
- <header className="min-h-screen flex flex-col items-center justify-center bg-[#282c34] text-white text-[calc(10px+2vmin)]">
15
- <img
16
- src={logo}
17
- className="h-[40vmin] pointer-events-none animate-[spin_20s_linear_infinite]"
18
- alt="logo"
19
- />
20
- <p>
21
- Edit <code>src/routes/index.tsx</code> and save to reload.
22
- </p>
23
- <a
24
- className="text-[#61dafb] hover:underline"
25
- href="https://reactjs.org"
26
- target="_blank"
27
- rel="noopener noreferrer"
28
- >
29
- Learn React
30
- </a>
31
- <a
32
- className="text-[#61dafb] hover:underline"
33
- href="https://tanstack.com"
34
- target="_blank"
35
- rel="noopener noreferrer"
36
- >
37
- Learn TanStack
38
- </a>
39
- </header>
40
- </div>
41
- <% } else { %>
42
- <div className="App">
43
- <header className="App-header">
44
- <img src={logo} className="App-logo" alt="logo" />
45
- <p>
46
- Edit <code>src/routes/index.tsx</code> and save to reload.
47
- </p>
48
- <a
49
- className="App-link"
50
- href="https://reactjs.org"
51
- target="_blank"
52
- rel="noopener noreferrer"
53
- >
54
- Learn React
55
- </a>
56
- <a
57
- className="App-link"
58
- href="https://tanstack.com"
59
- target="_blank"
60
- rel="noopener noreferrer"
61
- >
62
- Learn TanStack
63
- </a>
64
- </header>
9
+ const features = [
10
+ {
11
+ icon: <Zap className="w-12 h-12 text-cyan-400" />,
12
+ title: "Powerful Server Functions",
13
+ description: "Write server-side code that seamlessly integrates with your client components. Type-safe, secure, and simple.",
14
+ },
15
+ {
16
+ icon: <Server className="w-12 h-12 text-cyan-400" />,
17
+ title: "Flexible Server Side Rendering",
18
+ description: "Full-document SSR, streaming, and progressive enhancement out of the box. Control exactly what renders where.",
19
+ },
20
+ {
21
+ icon: <RouteIcon className="w-12 h-12 text-cyan-400" />,
22
+ title: "API Routes",
23
+ description: "Build type-safe API endpoints alongside your application. No separate backend needed.",
24
+ },
25
+ {
26
+ icon: <Shield className="w-12 h-12 text-cyan-400" />,
27
+ title: "Strongly Typed Everything",
28
+ description: "End-to-end type safety from server to client. Catch errors before they reach production.",
29
+ },
30
+ {
31
+ icon: <Waves className="w-12 h-12 text-cyan-400" />,
32
+ title: "Full Streaming Support",
33
+ description: "Stream data from server to client progressively. Perfect for AI applications and real-time updates.",
34
+ },
35
+ {
36
+ icon: <Sparkles className="w-12 h-12 text-cyan-400" />,
37
+ title: "Next Generation Ready",
38
+ description: "Built from the ground up for modern web applications. Deploy anywhere JavaScript runs.",
39
+ },
40
+ ];
41
+
42
+ return (
43
+ <div className="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900">
44
+ <section className="relative py-20 px-6 text-center overflow-hidden">
45
+ <div className="absolute inset-0 bg-gradient-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10"></div>
46
+ <div className="relative max-w-5xl mx-auto">
47
+ <div className="flex items-center justify-center gap-6 mb-6">
48
+ <img
49
+ src="/tanstack-circle-logo.png"
50
+ alt="TanStack Logo"
51
+ className="w-24 h-24 md:w-32 md:h-32"
52
+ />
53
+ <h1 className="text-6xl md:text-7xl font-black text-white [letter-spacing:-0.08em]">
54
+ <span className="text-gray-300">TANSTACK</span>{" "}
55
+ <span className="bg-gradient-to-r from-cyan-400 to-blue-400 bg-clip-text text-transparent">
56
+ START
57
+ </span>
58
+ </h1>
59
+ </div>
60
+ <p className="text-2xl md:text-3xl text-gray-300 mb-4 font-light">
61
+ The framework for next generation AI applications
62
+ </p>
63
+ <p className="text-lg text-gray-400 max-w-3xl mx-auto mb-8">
64
+ Full-stack framework powered by TanStack Router for React and Solid.
65
+ Build modern applications with server functions, streaming, and type
66
+ safety.
67
+ </p>
68
+ <div className="flex flex-col items-center gap-4">
69
+ <a
70
+ href="https://tanstack.com/start"
71
+ target="_blank"
72
+ rel="noopener noreferrer"
73
+ className="px-8 py-3 bg-cyan-500 hover:bg-cyan-600 text-white font-semibold rounded-lg transition-colors shadow-lg shadow-cyan-500/50"
74
+ >
75
+ Documentation
76
+ </a>
77
+ <p className="text-gray-400 text-sm mt-2">
78
+ Begin your TanStack Start journey by editing{" "}
79
+ <code className="px-2 py-1 bg-slate-700 rounded text-cyan-400">
80
+ /src/routes/index.tsx
81
+ </code>
82
+ </p>
83
+ </div>
84
+ </div>
85
+ </section>
86
+
87
+ <section className="py-16 px-6 max-w-7xl mx-auto">
88
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
89
+ {features.map((feature, index) => (
90
+ <div
91
+ key={index}
92
+ className="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-6 hover:border-cyan-500/50 transition-all duration-300 hover:shadow-lg hover:shadow-cyan-500/10"
93
+ >
94
+ <div className="mb-4">{feature.icon}</div>
95
+ <h3 className="text-xl font-semibold text-white mb-3">
96
+ {feature.title}
97
+ </h3>
98
+ <p className="text-gray-400 leading-relaxed">{feature.description}</p>
99
+ </div>
100
+ ))}
101
+ </div>
102
+ </section>
65
103
  </div>
66
- <% } %> );
104
+ );
67
105
  }
@@ -1,7 +1,7 @@
1
- <% if (tailwind) { %>@import "tailwindcss";
2
- <% } %>
1
+ @import "tailwindcss";
2
+
3
3
  body {
4
- <% if (tailwind) { %>@apply m-0;<% } else { %>margin: 0;<% } %>
4
+ @apply m-0;
5
5
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
6
6
  "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
7
7
  sans-serif;
@@ -1,4 +1,4 @@
1
- <% if (!typescript) { ignoreFile() } %>{
1
+ {
2
2
  <% if (addOnEnabled.eslint) { %>"include": ["**/*.ts", "**/*.tsx", "eslint.config.js", "prettier.config.js", "vite.config.js"],
3
3
  <% } else { %>"include": ["**/*.ts", "**/*.tsx"],<% } %>
4
4
  "compilerOptions": {
@@ -1,33 +1,39 @@
1
- <% if (addOnEnabled.start) { ignoreFile() } %>import { defineConfig } from "vite";
2
- import { devtools } from '@tanstack/devtools-vite'<% if (addOnEnabled.paraglide) { %>
3
- import { paraglideVitePlugin } from "@inlang/paraglide-js"<% } %>
4
- import viteReact from "@vitejs/plugin-react";
5
- <% if (tailwind) { %>
6
- import tailwindcss from "@tailwindcss/vite";
7
- <% } %><%if (fileRouter) { %>
8
- import { tanstackRouter } from "@tanstack/router-plugin/vite";<% } %><% if (addOnEnabled['module-federation']) { %>
9
- import { federation } from "@module-federation/vite";<% } %>
10
- import { fileURLToPath, URL } from 'node:url';<% if (addOnEnabled['module-federation']) { %>
11
- import federationConfig from "./module-federation.config.js";<% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportContent(integration) %>
1
+ import { defineConfig } from 'vite'
2
+ import { devtools } from '@tanstack/devtools-vite'
3
+ <% if (addOnEnabled.paraglide) { -%>
4
+ import { paraglideVitePlugin } from "@inlang/paraglide-js"
5
+ <% } -%>
6
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite';
7
+ import viteReact from '@vitejs/plugin-react'
8
+ import viteTsConfigPaths from 'vite-tsconfig-paths'
9
+ import { fileURLToPath, URL } from 'url'
10
+ import tailwindcss from "@tailwindcss/vite"
11
+ <% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportContent(integration) %>
12
12
  <% } %>
13
13
 
14
- // https://vitejs.dev/config/
15
- export default defineConfig({
16
- plugins: [devtools(), <% if (addOnEnabled.paraglide) { %>paraglideVitePlugin({
17
- project: './project.inlang',
18
- outdir: './src/paraglide',
19
- strategy: ['url'],
20
- }), <% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportCode(integration) %>,<% } %> <% if(fileRouter) { %>tanstackRouter({
21
- target: "react",
22
- autoCodeSplitting: true,
23
- }), <% } %>viteReact(<% if (addOnEnabled.compiler) { %>{
24
- babel: {
25
- plugins: ["babel-plugin-react-compiler"],
26
- },
27
- }<% } %>)<% if (tailwind) { %>, tailwindcss()<% } %><% if (addOnEnabled['module-federation']) { %>, federation(federationConfig)<% } %>],
14
+ const config = defineConfig({
28
15
  resolve: {
29
16
  alias: {
30
17
  '@': fileURLToPath(new URL('./src', import.meta.url)),
31
18
  },
32
- }
33
- });
19
+ },
20
+ plugins: [devtools(), <% if (addOnEnabled.paraglide) { %>paraglideVitePlugin({
21
+ project: './project.inlang',
22
+ outdir: './src/paraglide',
23
+ strategy: ['url'],
24
+ }), <% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportCode(integration) %>,<% } %>
25
+ // this is the plugin that enables path aliases
26
+ viteTsConfigPaths({
27
+ projects: ['./tsconfig.json'],
28
+ }),
29
+ tailwindcss(),
30
+ tanstackStart(),
31
+ viteReact(<% if (addOnEnabled.compiler) { %>{
32
+ babel: {
33
+ plugins: ["babel-plugin-react-compiler"],
34
+ },
35
+ }<% } %>),
36
+ ],
37
+ })
38
+
39
+ export default config
@@ -9,8 +9,8 @@
9
9
  },
10
10
  "tailwindcss": {
11
11
  "dependencies": {
12
- "@tailwindcss/vite": "^4.0.6",
13
- "tailwindcss": "^4.0.6",
12
+ "@tailwindcss/vite": "^4.1.18",
13
+ "tailwindcss": "^4.1.18",
14
14
  "lucide-react": "^0.545.0"
15
15
  }
16
16
  },
@@ -8,7 +8,7 @@
8
8
  "color": "#000000",
9
9
  "link": "https://www.better-auth.com/",
10
10
  "modes": ["file-router"],
11
- "dependsOn": ["start"],
11
+
12
12
  "routes": [
13
13
  {
14
14
  "url": "/demo/better-auth",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#F38020",
11
11
  "priority": 200,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#00C7B7",
11
11
  "priority": 180,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -8,7 +8,6 @@
8
8
  "category": "deploy",
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#ECDC5A",
11
- "tailwind": false,
12
11
  "integrations": [
13
12
  {
14
13
  "type": "vite-plugin",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#9B4DCA",
11
11
  "priority": 160,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -34,14 +34,9 @@ export function createFrameworkDefinition(): FrameworkDefinition {
34
34
  basePackageJSON,
35
35
  optionalPackages,
36
36
  supportedModes: {
37
- 'code-router': {
38
- displayName: 'Code Router',
39
- description: 'TanStack Router using code to define the routes',
40
- forceTypescript: true,
41
- },
42
37
  'file-router': {
43
38
  displayName: 'File Router',
44
- description: 'TanStack Router using files to define the routes',
39
+ description: 'TanStack Start with file-based routing',
45
40
  forceTypescript: true,
46
41
  },
47
42
  },