// Generated by scripts/generate-manifest.mjs. Do not edit by hand. import type { WorkerFrameworkManifestModule } from '../../../manifest-types.js' type TemplateRecord = Record type TemplateAddOn = TemplateRecord & { integrations?: Array routes?: Array } type TemplateRenderContext = { [key: string]: any packageManager: any projectName: any typescript: any tailwind: any blank: any js: any jsx: any fileRouter: any codeRouter: any routerOnly: any includeExamples: any addOnEnabled: Record addOnOption: Record addOns: Array integrations: Array routes: Array getPackageManagerAddScript: (...args: Array) => string getPackageManagerRunScript: (...args: Array) => string getPackageManagerExecuteScript: (...args: Array) => string relativePath: (...args: Array) => string integrationImportContent: (...args: Array) => string integrationImportCode: (...args: Array) => string | undefined renderTemplate: (content: string) => string ignoreFile: () => never } type TemplateRenderer = (context: TemplateRenderContext) => string | undefined function __escapeXML(value: unknown) { if (value === undefined || value === null) { return '' } return String(value).replace(/[&<>'"]/g, (character) => { switch (character) { case '&': return '&' case '<': return '<' case '>': return '>' case '"': return '"' case "'": return ''' default: return character } }) } export function getManifestTemplateKey(template: string) { let hash = 0x811c9dc5 for (let i = 0; i < template.length; i++) { hash ^= template.charCodeAt(i) hash = Math.imul(hash, 0x01000193) >>> 0 } return `${hash.toString(16).padStart(8, '0')}:${template.length}` } function __render_27ac5638_1165(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } __append("import { defineConfig } from \"vite\";\n") const showDevtools = !blank || integrations.some((integration) => integration.type === 'devtools') if (showDevtools) { __append("import { devtools } from '@tanstack/devtools-vite'\n") } if (tailwind) { __append("import tailwindcss from \"@tailwindcss/vite\"\n") } if (routerOnly) { __append("\nimport { tanstackRouter } from '@tanstack/router-plugin/vite'\n") } else { __append("\nimport { tanstackStart } from \"@tanstack/solid-start/plugin/vite\";\n") } __append("\nimport solidPlugin from 'vite-plugin-solid';\n") for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { __append(integrationImportContent(integration)) __append("\n") } __append("\n\nexport default defineConfig({\n resolve: { tsconfigPaths: true },\n plugins: [") if (showDevtools) { __append("devtools(), ") } for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { __append(integrationImportCode(integration)) __append(",") } __append("\n ") if (tailwind) { __append("tailwindcss(),") } __append("\n ") if (routerOnly) { __append("tanstackRouter({ target: 'solid', autoCodeSplitting: true }),") } else { __append("tanstackStart(),") } __append("\n solidPlugin(") if (!routerOnly) { __append("{ ssr: true }") } __append("),\n ],\n})\n") return __output } function __render_344f99a8_572(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (!routerOnly) { ignoreFile() } __append("\nimport { render } from 'solid-js/web'\nimport { RouterProvider, createRouter } from '@tanstack/solid-router'\nimport { routeTree } from './routeTree.gen'\n\nconst router = createRouter({\n routeTree,\n defaultPreload: 'intent',\n defaultPreloadStaleTime: 0,\n scrollRestoration: true,\n})\n\ndeclare module '@tanstack/solid-router' {\n interface Register {\n router: typeof router\n }\n}\n\nconst rootElement = document.getElementById('app')!\n\nif (!rootElement.innerHTML) {\n render(() => , rootElement)\n}\n") return __output } function __render_3b6dabd2_855(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } __append("{\n ") if (addOnEnabled.eslint) { __append("\"include\": [\"**/*.ts\", \"**/*.tsx\", \"eslint.config.js\", \"prettier.config.js\", \"vite.config.js\"],\n ") } else { __append("\"include\": [\"**/*.ts\", \"**/*.tsx\"],") } __append("\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"jsx\": \"preserve\",\n \"jsxImportSource\": \"solid-js\",\n \"module\": \"ESNext\",\n \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n \"types\": [\"vite/client\"],\n\n /* Bundler mode */\n \"moduleResolution\": \"bundler\",\n \"allowImportingTsExtensions\": true,\n \"verbatimModuleSyntax\": true,\n \"noEmit\": true,\n\n /* Linting */\n \"skipLibCheck\": true,\n \"strict\": true,\n \"noUnusedLocals\": true,\n \"noUnusedParameters\": true,\n \"noFallthroughCasesInSwitch\": true,\n \"noUncheckedSideEffectImports\": true") if (addOnEnabled['solid-ui']) { __append(",\n \"paths\": {\n \"~/*\": [\"./src/*\"]\n }\n ") } __append("\n }\n}\n") return __output } function __render_7094245c_344(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (!routerOnly) { ignoreFile() } __append("\n\n\n \n \n \n ") __append(__escapeXML(projectName)) __append("\n \n \n
\n \n \n\n") return __output } function __render_7cd0e566_8867(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (blank) { __append("\n") if (tailwind) { __append("@import 'tailwindcss';\n\n") } __append("\n* {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n font-family: system-ui, sans-serif;\n}\n\nmain {\n width: min(42rem, calc(100% - 2rem));\n margin: 4rem auto;\n}\n") } else if (!includeExamples) { __append("\n@import 'tailwindcss';\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody,\n#app {\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n}\n") } else { __append("\n@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap');\n@import 'tailwindcss';\n\n:root {\n --sea-ink: #173a40;\n --sea-ink-soft: #416166;\n --lagoon: #4fb8b2;\n --lagoon-deep: #328f97;\n --palm: #2f6a4a;\n --sand: #e7f0e8;\n --foam: #f3faf5;\n --surface: rgba(255, 255, 255, 0.74);\n --surface-strong: rgba(255, 255, 255, 0.9);\n --line: rgba(23, 58, 64, 0.14);\n --inset-glint: rgba(255, 255, 255, 0.82);\n --kicker: rgba(47, 106, 74, 0.9);\n --bg-base: #e7f3ec;\n --header-bg: rgba(251, 255, 248, 0.84);\n --chip-bg: rgba(255, 255, 255, 0.8);\n --chip-line: rgba(47, 106, 74, 0.18);\n --link-bg-hover: rgba(255, 255, 255, 0.9);\n --hero-a: rgba(79, 184, 178, 0.36);\n --hero-b: rgba(47, 106, 74, 0.2);\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody,\n#app {\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n color: var(--sea-ink);\n font-family: 'Manrope', ui-sans-serif, system-ui, sans-serif;\n background-color: var(--bg-base);\n background:\n radial-gradient(1100px 620px at -8% -10%, var(--hero-a), transparent 58%),\n radial-gradient(1050px 620px at 112% -12%, var(--hero-b), transparent 62%),\n radial-gradient(720px 380px at 50% 115%, rgba(79, 184, 178, 0.1), transparent 68%),\n linear-gradient(\n 180deg,\n color-mix(in oklab, var(--sand) 68%, white) 0%,\n var(--foam) 44%,\n var(--bg-base) 100%\n );\n overflow-x: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\na {\n color: var(--lagoon-deep);\n text-decoration-color: rgba(50, 143, 151, 0.4);\n text-decoration-thickness: 1px;\n text-underline-offset: 2px;\n}\n\na:hover {\n color: #246f76;\n}\n\ncode {\n font-size: 0.9em;\n border: 1px solid var(--line);\n background: color-mix(in oklab, var(--surface-strong) 82%, white 18%);\n border-radius: 7px;\n padding: 2px 7px;\n}\n\n.page-wrap {\n width: min(1080px, calc(100% - 2rem));\n margin-inline: auto;\n}\n\n.display-title {\n font-family: 'Fraunces', Georgia, serif;\n}\n\n.island-shell {\n border: 1px solid var(--line);\n background: linear-gradient(165deg, var(--surface-strong), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 22px 44px rgba(30, 90, 72, 0.1),\n 0 6px 18px rgba(23, 58, 64, 0.08);\n backdrop-filter: blur(4px);\n}\n\n.feature-card {\n background: linear-gradient(\n 165deg,\n color-mix(in oklab, var(--surface-strong) 93%, white 7%),\n var(--surface)\n );\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 18px 34px rgba(30, 90, 72, 0.1),\n 0 4px 14px rgba(23, 58, 64, 0.06);\n}\n\n.demo-page {\n width: min(1080px, calc(100% - 2rem));\n margin-inline: auto;\n padding-block: clamp(2.25rem, 6vw, 4.5rem);\n color: var(--sea-ink);\n}\n\n.demo-page-wide {\n width: min(1280px, calc(100% - 2rem));\n}\n\n.demo-center {\n min-height: calc(100vh - 13rem);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.demo-panel,\n.demo-card {\n border: 1px solid var(--line);\n background: linear-gradient(165deg, var(--surface-strong), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 18px 34px rgba(30, 90, 72, 0.1),\n 0 4px 14px rgba(23, 58, 64, 0.06);\n backdrop-filter: blur(4px);\n}\n\n.demo-panel {\n border-radius: 1.25rem;\n padding: clamp(1.25rem, 4vw, 2rem);\n}\n\n.demo-card {\n border-radius: 1rem;\n padding: 1rem;\n}\n\n.demo-title {\n margin: 0;\n color: var(--sea-ink);\n font-size: clamp(1.75rem, 4vw, 2.75rem);\n line-height: 1.05;\n font-weight: 800;\n letter-spacing: 0;\n}\n\n.demo-section-title {\n margin: 0;\n color: var(--sea-ink);\n font-size: 1rem;\n font-weight: 700;\n}\n\n.demo-muted {\n color: var(--sea-ink-soft);\n}\n\n.demo-input,\n.demo-select,\n.demo-textarea {\n width: 100%;\n border: 1px solid var(--line);\n border-radius: 0.75rem;\n background: color-mix(in oklab, var(--surface-strong) 88%, white 12%);\n color: var(--sea-ink);\n outline: none;\n transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;\n}\n\n.demo-input,\n.demo-select {\n padding: 0.7rem 0.9rem;\n}\n\n.demo-input-fit {\n width: auto;\n}\n\n.demo-textarea {\n min-height: 7rem;\n padding: 0.8rem 0.9rem;\n resize: vertical;\n}\n\n.demo-input:focus,\n.demo-select:focus,\n.demo-textarea:focus {\n border-color: color-mix(in oklab, var(--lagoon-deep) 58%, var(--line));\n box-shadow: 0 0 0 3px color-mix(in oklab, var(--lagoon) 24%, transparent);\n}\n\n.demo-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1px solid color-mix(in oklab, var(--lagoon-deep) 34%, var(--line));\n border-radius: 0.85rem;\n background: color-mix(in oklab, var(--lagoon) 22%, var(--surface-strong));\n color: var(--sea-ink);\n padding: 0.72rem 1rem;\n font-size: 0.9rem;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n}\n\n.demo-button:hover {\n transform: translateY(-1px);\n background: color-mix(in oklab, var(--lagoon) 30%, var(--surface-strong));\n}\n\n.demo-button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n transform: none;\n}\n\n.demo-button-secondary {\n border-color: var(--line);\n background: color-mix(in oklab, var(--surface-strong) 74%, transparent);\n color: var(--sea-ink-soft);\n}\n\n.demo-button-danger {\n border-color: rgba(196, 71, 71, 0.28);\n background: rgba(196, 71, 71, 0.1);\n color: #9f3030;\n}\n\n.demo-list-item {\n border: 1px solid var(--line);\n border-radius: 0.9rem;\n background: color-mix(in oklab, var(--chip-bg) 82%, transparent);\n padding: 0.9rem 1rem;\n}\n\n.demo-pill {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n border: 1px solid var(--chip-line);\n border-radius: 999px;\n background: var(--chip-bg);\n color: var(--sea-ink-soft);\n padding: 0.35rem 0.65rem;\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.demo-alert {\n border: 1px solid rgba(193, 126, 42, 0.3);\n border-radius: 1rem;\n background: rgba(193, 126, 42, 0.1);\n color: var(--sea-ink);\n padding: 1rem;\n}\n\n.demo-alert-danger {\n border-color: rgba(196, 71, 71, 0.3);\n background: rgba(196, 71, 71, 0.1);\n}\n\n.demo-code-block {\n border: 1px solid var(--line);\n border-radius: 1rem;\n background: color-mix(in oklab, var(--chip-bg) 88%, transparent);\n color: var(--sea-ink);\n padding: 1rem;\n}\n\n.demo-table-shell {\n overflow-x: auto;\n border: 1px solid var(--line);\n border-radius: 1rem;\n background: color-mix(in oklab, var(--surface-strong) 78%, transparent);\n}\n\n.demo-table {\n width: 100%;\n border-collapse: collapse;\n color: var(--sea-ink);\n}\n\n.demo-table th,\n.demo-table td {\n border-bottom: 1px solid var(--line);\n padding: 0.75rem 1rem;\n text-align: left;\n}\n\n.demo-table th {\n background: color-mix(in oklab, var(--chip-bg) 88%, transparent);\n color: var(--sea-ink);\n font-weight: 700;\n}\n\n.demo-table tr:hover td {\n background: color-mix(in oklab, var(--lagoon) 8%, transparent);\n}\n\n.site-header {\n position: sticky;\n top: 0;\n z-index: 50;\n border-bottom: 1px solid var(--line);\n background: var(--header-bg);\n backdrop-filter: blur(10px);\n}\n\n.nav-shell {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.5rem 0.75rem;\n padding: 0.75rem 0;\n}\n\n.brand-pill {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n border-radius: 999px;\n border: 1px solid var(--chip-line);\n background: var(--chip-bg);\n padding: 0.5rem 0.875rem;\n color: var(--sea-ink);\n text-decoration: none;\n box-shadow: 0 8px 24px rgba(30, 90, 72, 0.08);\n}\n\n.brand-dot {\n height: 0.5rem;\n width: 0.5rem;\n border-radius: 999px;\n background: linear-gradient(90deg, #56c6be, #7ed3bf);\n}\n\n.island-kicker {\n letter-spacing: 0.16em;\n text-transform: uppercase;\n font-weight: 700;\n font-size: 0.69rem;\n color: var(--kicker);\n}\n\n.nav-link {\n position: relative;\n display: inline-flex;\n align-items: center;\n color: var(--sea-ink-soft);\n text-decoration: none;\n}\n\n.nav-link::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -6px;\n width: 100%;\n height: 2px;\n transform: scaleX(0);\n transform-origin: left;\n background: linear-gradient(90deg, var(--lagoon), #7ed3bf);\n transition: transform 170ms ease;\n}\n\n.nav-link:hover,\n.nav-link.is-active {\n color: var(--sea-ink);\n}\n\n.nav-link:hover::after,\n.nav-link.is-active::after {\n transform: scaleX(1);\n}\n\n.rise-in {\n animation: rise-in 700ms cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n@keyframes rise-in {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n") } __append("\n") return __output } function __render_7ebb7969_3035(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } const showDevtools = !blank || integrations.some((integration) => integration.type === 'devtools') if (routerOnly) { __append("\nimport { Outlet, createRootRoute } from '@tanstack/solid-router'\n") if (showDevtools) { __append("\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n") } __append("\n\nimport '../styles.css'\n\nexport const Route = createRootRoute({\n component: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n <>\n \n ") if (showDevtools) { __append("") } __append("\n \n )\n}\n") } else if (!includeExamples || blank) { __append("\nimport { HeadContent, Outlet, Scripts, createRootRouteWithContext } from '@tanstack/solid-router'\n") if (showDevtools) { __append("\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n") } __append("\n\n") if (addOnEnabled['solid-ui']) { __append("\nimport \"@fontsource/inter/400.css\"\n") } __append("\n\nimport { HydrationScript } from 'solid-js/web'\nimport { Suspense } from 'solid-js'\n\n") for(const addOn of addOns) { for(const init of addOn.main?.initialize || []) { __append("\n ") __append(init) __append("\n") } } __append("\n\nimport styleCss from \"../styles.css?url\";\n\nexport const Route = createRootRouteWithContext()({\n head: () => ({\n links: [{ rel: \"stylesheet\", href: styleCss }],\n }),\n shellComponent: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n \n \n \n \n \n \n \n \n ") if (showDevtools) { __append("") } __append("\n ") for(const integration of integrations.filter(i => i.type === 'layout')) { __append("\n <") __append(__escapeXML(integration.jsName)) __append(" />\n ") } __append("\n \n \n \n \n );\n}\n") } else { __append("\nimport { HeadContent, Outlet, Scripts, createRootRouteWithContext } from '@tanstack/solid-router'\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n\n") if (addOnEnabled['solid-ui']) { __append("\nimport \"@fontsource/inter/400.css\"\n") } __append("\n\nimport { HydrationScript } from 'solid-js/web'\nimport { Suspense } from 'solid-js'\n\nimport Header from '../components/Header'\n") for(const addOn of addOns) { for(const init of addOn.main?.initialize || []) { __append("\n ") __append(init) __append("\n") } } __append("\n\nimport styleCss from \"../styles.css?url\";\n\nexport const Route = createRootRouteWithContext()({\n head: () => ({\n links: [{ rel: \"stylesheet\", href: styleCss }],\n }),\n shellComponent: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n \n \n \n \n \n \n \n
\n \n \n ") for(const integration of integrations.filter(i => i.type === 'layout')) { __append("\n <") __append(__escapeXML(integration.jsName)) __append(" />\n ") } __append("\n \n \n \n \n );\n}\n") } __append("\n") return __output } function __render_82de873d_4164(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (blank) { __append("\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: Home })\n\nfunction Home() {\n return (\n
\n

Welcome to TanStack Start

\n

\n Edit src/routes/index.tsx to get started.\n

\n
\n )\n}\n") } else if (!includeExamples) { __append("\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: Home })\n\nfunction Home() {\n return (\n
\n

Welcome to TanStack Start

\n

\n Edit src/routes/index.tsx to get started.\n

\n
\n )\n}\n") } else { __append("\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: App })\n\nfunction App() {\n return (\n
\n
\n
\n
\n

TanStack Start Base Template

\n

\n Start simple, ship quickly.\n

\n

\n This base starter intentionally keeps things light: two routes, clean structure,\n and the essentials you need to build from scratch.\n

\n
\n \n About This Starter\n \n \n Router Guide\n \n
\n
\n\n
\n {[\n ['Type-Safe Routing', 'Routes and links stay in sync across every page.'],\n ['Server Functions', 'Call server code from your UI without creating API boilerplate.'],\n ['Streaming by Default', 'Ship progressively rendered responses for faster experiences.'],\n ['Tailwind Native', 'Design quickly with utility-first styling and reusable tokens.'],\n ].map(([title, desc], index) => (\n \n

{title}

\n

{desc}

\n \n ))}\n
\n\n
\n

Quick Start

\n
    \n
  • Edit src/routes/index.tsx to customize the home page.
  • \n
  • \n Update src/components/Header.tsx for navigation and product links.\n
  • \n
  • \n Add routes in src/routes and tweak visual tokens in src/styles.css.\n
  • \n
\n
\n
\n )\n}\n") } __append("\n") return __output } function __render_8a237555_262(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (packageManager !== 'pnpm') { ignoreFile(); return; } __append("allowBuilds:\n esbuild: true\n lightningcss: true\n") if (addOnEnabled.cloudflare || addOnEnabled.netlify) { __append("sharp: true\n") } if (addOnEnabled.cloudflare) { __append("workerd: true\n") } return __output } function __render_a44a9c73_635(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } __append("import { createRouter as createTanStackRouter } from '@tanstack/solid-router'\nimport { routeTree } from './routeTree.gen'\n") if (addOnEnabled['tanstack-query']) { __append("\nimport { getContext } from './integrations/tanstack-query/provider'\n") } __append("\n\nexport function getRouter() {\n const router = createTanStackRouter({\n routeTree,\n") if (addOnEnabled['tanstack-query']) { __append("\n context: getContext(),\n") } __append("\n scrollRestoration: true,\n defaultPreload: 'intent',\n defaultPreloadStaleTime: 0,\n })\n\n return router\n}\n\ndeclare module '@tanstack/solid-router' {\n interface Register {\n router: ReturnType\n }\n}\n") return __output } function __render_aa240753_2616(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (!includeExamples) { ignoreFile(); return; } __append("\nimport { Link } from '@tanstack/solid-router'\n") for(const integration of integrations.filter(i => i.type === 'header-user')) { __append("\nimport ") __append(__escapeXML(integration.jsName)) __append(" from '") __append(__escapeXML(relativePath(integration.path))) __append("'\n") } __append("\n\n") const demoRoutes = []; for (const addOn of addOns) { for (const route of (addOn?.routes || []).filter((r) => r.url && r.name)) { demoRoutes.push({ url: route.url, name: route.name }); for (const child of route.children || []) { if (child?.url && child?.name) { demoRoutes.push({ url: child.url, name: child.name }); } } } } const userHeaders = integrations.filter((i) => i.type === 'header-user'); __append("\n\nexport default function Header() {\n return (\n
\n \n
\n )\n}\n") return __output } function __render_db92ca28_5148(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (blank) { __append("# ") __append(__escapeXML(projectName)) __append("\n\nA minimal TanStack Start app with one route and ") __append(__escapeXML(tailwind ? 'Tailwind CSS' : 'plain CSS')) __append(".\n\n```bash\n") __append(__escapeXML(packageManager)) __append(" install\n") __append(__escapeXML(getPackageManagerRunScript('dev'))) __append("\n```\n\nEdit `src/routes/index.tsx` to get started. Add route files under\n`src/routes`; TanStack Router updates `src/routeTree.gen.ts` for you.\n\nBuild the production app with:\n\n```bash\n") __append(__escapeXML(getPackageManagerRunScript('build'))) __append("\n```\n") for(const addon of addOns.filter(addon => addon.readme)) { __append("\n") __append(addon.readmeIsEjs ? renderTemplate(addon.readme) : addon.readme) __append("\n") } __append("\n") } else { __append("Welcome to your new TanStack Start app!\n\n# Getting Started\n\nTo run this application:\n\n```bash\n") __append(__escapeXML(packageManager)) __append(" install\n") __append(__escapeXML(getPackageManagerRunScript('dev'))) __append("\n```\n\n# Building For Production\n\nTo build this application for production:\n\n```bash\n") __append(__escapeXML(getPackageManagerRunScript('build'))) __append("\n```\n\n## Styling\n\nThis project uses [Tailwind CSS](https://tailwindcss.com/) for styling.\n\n### Removing Tailwind CSS\n\nIf you prefer not to use Tailwind CSS:\n\n1. Remove the demo pages in `src/routes/demo/`\n2. Replace the Tailwind import in `src/styles.css` with your own styles\n3. Remove `tailwindcss()` from the plugins array in `vite.config.ts`\n4. Remove `@tailwindcss/vite` and `tailwindcss` from `package.json`\n\n") for(const addon of addOns.filter(addon => addon.readme)) { __append("\n") __append(addon.readmeIsEjs ? renderTemplate(addon.readme) : addon.readme) __append("\n") } __append("\n\n## Routing\n\nThis project uses [TanStack Router](https://tanstack.com/router) with file-based routing. Routes are managed as files in `src/routes`.\n\n### Adding A Route\n\nTo add a new route to your application just add a new file in the `./src/routes` directory.\n\nTanStack will automatically generate the content of the route file for you.\n\nNow that you have two routes you can use a `Link` component to navigate between them.\n\n### Adding Links\n\nTo use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/solid-router`.\n\n```tsx\nimport { Link } from \"@tanstack/solid-router\";\n```\n\nThen anywhere in your JSX you can use it like so:\n\n```tsx\nAbout\n```\n\nThis will create a link that will navigate to the `/about` route.\n\nMore information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/solid/api/router/linkComponent).\n\n### Using A Layout\n\nIn the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes.\n\nMore information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/solid/guide/routing-concepts#layouts).\n\n## Server Functions\n\nTanStack Start provides server functions that allow you to write server-side code that seamlessly integrates with your client components.\n\n```tsx\nimport { createServerFn } from '@tanstack/solid-start'\n\nconst getServerTime = createServerFn({\n method: 'GET',\n}).handler(async () => {\n return new Date().toISOString()\n})\n```\n\n## Data Fetching\n\nThere are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered.\n\nFor example:\n\n```tsx\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/people')({\n loader: async () => {\n const response = await fetch('https://swapi.dev/api/people')\n return response.json()\n },\n component: PeopleComponent,\n})\n\nfunction PeopleComponent() {\n const data = Route.useLoaderData()\n return (\n
    \n \n {(person) =>
  • {person.name}
  • }\n
    \n
\n )\n}\n```\n\nLoaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#loader-parameters).\n\n") if (includeExamples) { __append("\n# Demo files\n\nFiles prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed.\n") } __append("\n\n") if (addOnEnabled.biome || addOnEnabled.eslint) { __append("\n## Linting & Formatting\n") if (addOnEnabled.biome) { __append("\nThis project uses [Biome](https://biomejs.dev/) for linting and formatting. The following scripts are available:\n") } __append("\n") if (addOnEnabled.eslint) { __append("\nThis project uses [eslint](https://eslint.org/) and [prettier](https://prettier.io/) for linting and formatting. Eslint is configured using [tanstack/eslint-config](https://tanstack.com/config/latest/docs/eslint). The following scripts are available:\n") } __append("\n```bash\n") __append(__escapeXML(getPackageManagerRunScript('lint'))) __append("\n") __append(__escapeXML(getPackageManagerRunScript('format'))) __append("\n") __append(__escapeXML(getPackageManagerRunScript('check'))) __append("\n```\n") } __append("\n\n# Learn More\n\nYou can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com).\n\nFor TanStack Start specific documentation, visit [TanStack Start](https://tanstack.com/start).\n") } return __output } function __render_de796a29_811(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } __append("{\n \"files.watcherExclude\": {\n \"**/routeTree.gen.ts\": true\n },\n \"search.exclude\": {\n \"**/routeTree.gen.ts\": true\n },\n \"files.readonlyInclude\": {\n \"**/routeTree.gen.ts\": true\n }") if (addOnEnabled.biome) { __append(",\n \"[javascript]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[javascriptreact]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[typescript]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[typescriptreact]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[json]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[jsonc]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[css]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"editor.codeActionsOnSave\": {\n \"source.organizeImports.biome\": \"explicit\"\n }") } __append("\n}\n") return __output } function __render_fe45dbe0_836(context: TemplateRenderContext) { const { packageManager, projectName, typescript, tailwind, blank, js, jsx, fileRouter, codeRouter, routerOnly, includeExamples, addOnEnabled, addOnOption, addOns, integrations, routes, getPackageManagerAddScript, getPackageManagerRunScript, getPackageManagerExecuteScript, relativePath, integrationImportContent, integrationImportCode, renderTemplate, ignoreFile, } = context let __output = '' const __append = (value: unknown) => { if (value !== undefined && value !== null) { __output += String(value) } } if (!includeExamples) { ignoreFile(); return; } __append("\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/about')({\n component: About,\n})\n\nfunction About() {\n return (\n
\n
\n

About

\n

\n A small starter with room to grow.\n

\n

\n TanStack Start gives you type-safe routing, server functions, and modern SSR defaults.\n Use this as a clean foundation, then layer in your own routes, styling, and add-ons.\n

\n
\n
\n )\n}\n") return __output } const templateRenderers: Record = { "27ac5638:1165": __render_27ac5638_1165, "344f99a8:572": __render_344f99a8_572, "3b6dabd2:855": __render_3b6dabd2_855, "7094245c:344": __render_7094245c_344, "7cd0e566:8867": __render_7cd0e566_8867, "7ebb7969:3035": __render_7ebb7969_3035, "82de873d:4164": __render_82de873d_4164, "8a237555:262": __render_8a237555_262, "a44a9c73:635": __render_a44a9c73_635, "aa240753:2616": __render_aa240753_2616, "db92ca28:5148": __render_db92ca28_5148, "de796a29:811": __render_de796a29_811, "fe45dbe0:836": __render_fe45dbe0_836, } export function hasManifestTemplate(template: string) { return getManifestTemplateKey(template) in templateRenderers } export function renderManifestTemplate( template: string, context: TemplateRenderContext, ) { const key = getManifestTemplateKey(template) const renderer = templateRenderers[key] if (!renderer) { throw new Error(`Template ${key} was not precompiled into the manifest`) } return renderer(context) ?? '' } export const framework = { "id": "solid", "base": { "README.md.ejs": "<% if (blank) { -%>\n# <%= projectName %>\n\nA minimal TanStack Start app with one route and <%= tailwind ? 'Tailwind CSS' : 'plain CSS' %>.\n\n```bash\n<%= packageManager %> install\n<%= getPackageManagerRunScript('dev') %>\n```\n\nEdit `src/routes/index.tsx` to get started. Add route files under\n`src/routes`; TanStack Router updates `src/routeTree.gen.ts` for you.\n\nBuild the production app with:\n\n```bash\n<%= getPackageManagerRunScript('build') %>\n```\n<% for(const addon of addOns.filter(addon => addon.readme)) { %>\n<%- addon.readmeIsEjs ? renderTemplate(addon.readme) : addon.readme %>\n<% } %>\n<% } else { -%>\nWelcome to your new TanStack Start app!\n\n# Getting Started\n\nTo run this application:\n\n```bash\n<%= packageManager %> install\n<%= getPackageManagerRunScript('dev') %>\n```\n\n# Building For Production\n\nTo build this application for production:\n\n```bash\n<%= getPackageManagerRunScript('build') %>\n```\n\n## Styling\n\nThis project uses [Tailwind CSS](https://tailwindcss.com/) for styling.\n\n### Removing Tailwind CSS\n\nIf you prefer not to use Tailwind CSS:\n\n1. Remove the demo pages in `src/routes/demo/`\n2. Replace the Tailwind import in `src/styles.css` with your own styles\n3. Remove `tailwindcss()` from the plugins array in `vite.config.ts`\n4. Remove `@tailwindcss/vite` and `tailwindcss` from `package.json`\n\n<% for(const addon of addOns.filter(addon => addon.readme)) { %>\n<%- addon.readmeIsEjs ? renderTemplate(addon.readme) : addon.readme %>\n<% } %>\n\n## Routing\n\nThis project uses [TanStack Router](https://tanstack.com/router) with file-based routing. Routes are managed as files in `src/routes`.\n\n### Adding A Route\n\nTo add a new route to your application just add a new file in the `./src/routes` directory.\n\nTanStack will automatically generate the content of the route file for you.\n\nNow that you have two routes you can use a `Link` component to navigate between them.\n\n### Adding Links\n\nTo use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/solid-router`.\n\n```tsx\nimport { Link } from \"@tanstack/solid-router\";\n```\n\nThen anywhere in your JSX you can use it like so:\n\n```tsx\nAbout\n```\n\nThis will create a link that will navigate to the `/about` route.\n\nMore information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/solid/api/router/linkComponent).\n\n### Using A Layout\n\nIn the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes.\n\nMore information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/solid/guide/routing-concepts#layouts).\n\n## Server Functions\n\nTanStack Start provides server functions that allow you to write server-side code that seamlessly integrates with your client components.\n\n```tsx\nimport { createServerFn } from '@tanstack/solid-start'\n\nconst getServerTime = createServerFn({\n method: 'GET',\n}).handler(async () => {\n return new Date().toISOString()\n})\n```\n\n## Data Fetching\n\nThere are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered.\n\nFor example:\n\n```tsx\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/people')({\n loader: async () => {\n const response = await fetch('https://swapi.dev/api/people')\n return response.json()\n },\n component: PeopleComponent,\n})\n\nfunction PeopleComponent() {\n const data = Route.useLoaderData()\n return (\n
    \n \n {(person) =>
  • {person.name}
  • }\n
    \n
\n )\n}\n```\n\nLoaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#loader-parameters).\n\n<% if (includeExamples) { %>\n# Demo files\n\nFiles prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed.\n<% } %>\n\n<% if (addOnEnabled.biome || addOnEnabled.eslint) { %>\n## Linting & Formatting\n<% if (addOnEnabled.biome) { %>\nThis project uses [Biome](https://biomejs.dev/) for linting and formatting. The following scripts are available:\n<% } %>\n<% if (addOnEnabled.eslint) { %>\nThis project uses [eslint](https://eslint.org/) and [prettier](https://prettier.io/) for linting and formatting. Eslint is configured using [tanstack/eslint-config](https://tanstack.com/config/latest/docs/eslint). The following scripts are available:\n<% } %>\n```bash\n<%= getPackageManagerRunScript('lint') %>\n<%= getPackageManagerRunScript('format') %>\n<%= getPackageManagerRunScript('check') %>\n```\n<% } %>\n\n# Learn More\n\nYou can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com).\n\nFor TanStack Start specific documentation, visit [TanStack Start](https://tanstack.com/start).\n<% } -%>\n", "_dot_gitignore": "node_modules\n.DS_Store\ndist\ndist-ssr\n*.local\n.env\n.nitro\n.tanstack\n.wrangler\n.output\n.vinxi\n__unconfig*\n", "_dot_vscode/settings.json.ejs": "{\n \"files.watcherExclude\": {\n \"**/routeTree.gen.ts\": true\n },\n \"search.exclude\": {\n \"**/routeTree.gen.ts\": true\n },\n \"files.readonlyInclude\": {\n \"**/routeTree.gen.ts\": true\n }<% if (addOnEnabled.biome) { %>,\n \"[javascript]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[javascriptreact]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[typescript]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[typescriptreact]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[json]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[jsonc]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"[css]\": {\n \"editor.defaultFormatter\": \"biomejs.biome\"\n },\n \"editor.codeActionsOnSave\": {\n \"source.organizeImports.biome\": \"explicit\"\n }<% } %>\n}\n", "index.html.ejs": "<% if (!routerOnly) { ignoreFile() } %>\n\n\n \n \n \n <%= projectName %>\n \n \n
\n \n \n\n", "package.json": "{\n \"name\": \"app-ts\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite dev --port 3000\",\n \"generate-routes\": \"tsr generate\",\n \"build\": \"vite build\",\n \"start\": \"node .output/server/index.mjs\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"@tanstack/solid-router\": \"latest\",\n \"@tanstack/solid-start\": \"latest\",\n \"solid-js\": \"^1.9.12\"\n },\n \"devDependencies\": {\n \"vite-plugin-solid\": \"^2.11.12\",\n \"vite\": \"^8.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\",\n \"lightningcss\"\n ]\n }\n}\n", "pnpm-workspace.yaml.ejs": "<% if (packageManager !== 'pnpm') { ignoreFile(); return; } -%>\nallowBuilds:\n esbuild: true\n lightningcss: true\n<% if (addOnEnabled.cloudflare || addOnEnabled.netlify) { -%>\n sharp: true\n<% } -%>\n<% if (addOnEnabled.cloudflare) { -%>\n workerd: true\n<% } -%>\n", "src/components/Header.tsx.ejs": "<% if (!includeExamples) { ignoreFile(); return; } %>\nimport { Link } from '@tanstack/solid-router'\n<% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>\nimport <%= integration.jsName %> from '<%= relativePath(integration.path) %>'\n<% } %>\n\n<%\nconst demoRoutes = [];\nfor (const addOn of addOns) {\n for (const route of (addOn?.routes || []).filter((r) => r.url && r.name)) {\n demoRoutes.push({ url: route.url, name: route.name });\n for (const child of route.children || []) {\n if (child?.url && child?.name) {\n demoRoutes.push({ url: child.url, name: child.name });\n }\n }\n }\n}\nconst userHeaders = integrations.filter((i) => i.type === 'header-user');\n%>\n\nexport default function Header() {\n return (\n
\n \n
\n )\n}\n", "src/main.tsx.ejs": "<% if (!routerOnly) { ignoreFile() } %>\nimport { render } from 'solid-js/web'\nimport { RouterProvider, createRouter } from '@tanstack/solid-router'\nimport { routeTree } from './routeTree.gen'\n\nconst router = createRouter({\n routeTree,\n defaultPreload: 'intent',\n defaultPreloadStaleTime: 0,\n scrollRestoration: true,\n})\n\ndeclare module '@tanstack/solid-router' {\n interface Register {\n router: typeof router\n }\n}\n\nconst rootElement = document.getElementById('app')!\n\nif (!rootElement.innerHTML) {\n render(() => , rootElement)\n}\n", "src/router.tsx.ejs": "import { createRouter as createTanStackRouter } from '@tanstack/solid-router'\nimport { routeTree } from './routeTree.gen'\n<% if (addOnEnabled['tanstack-query']) { %>\nimport { getContext } from './integrations/tanstack-query/provider'\n<% } %>\n\nexport function getRouter() {\n const router = createTanStackRouter({\n routeTree,\n<% if (addOnEnabled['tanstack-query']) { %>\n context: getContext(),\n<% } %>\n scrollRestoration: true,\n defaultPreload: 'intent',\n defaultPreloadStaleTime: 0,\n })\n\n return router\n}\n\ndeclare module '@tanstack/solid-router' {\n interface Register {\n router: ReturnType\n }\n}\n", "src/routes/__root.tsx.ejs": "<% const showDevtools = !blank || integrations.some((integration) => integration.type === 'devtools') -%>\n<% if (routerOnly) { %>\nimport { Outlet, createRootRoute } from '@tanstack/solid-router'\n<% if (showDevtools) { %>\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n<% } %>\n\nimport '../styles.css'\n\nexport const Route = createRootRoute({\n component: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n <>\n \n <% if (showDevtools) { %><% } %>\n \n )\n}\n<% } else if (!includeExamples || blank) { %>\nimport { HeadContent, Outlet, Scripts, createRootRouteWithContext } from '@tanstack/solid-router'\n<% if (showDevtools) { %>\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n<% } %>\n\n<% if (addOnEnabled['solid-ui']) { %>\nimport \"@fontsource/inter/400.css\"\n<% } %>\n\nimport { HydrationScript } from 'solid-js/web'\nimport { Suspense } from 'solid-js'\n\n<% for(const addOn of addOns) {\n for(const init of addOn.main?.initialize || []) { %>\n <%- init %>\n<% } } %>\n\nimport styleCss from \"../styles.css?url\";\n\nexport const Route = createRootRouteWithContext()({\n head: () => ({\n links: [{ rel: \"stylesheet\", href: styleCss }],\n }),\n shellComponent: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n \n \n \n \n \n \n \n \n <% if (showDevtools) { %><% } %>\n <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>\n <<%= integration.jsName %> />\n <% } %>\n \n \n \n \n );\n}\n<% } else { %>\nimport { HeadContent, Outlet, Scripts, createRootRouteWithContext } from '@tanstack/solid-router'\nimport { TanStackRouterDevtools } from '@tanstack/solid-router-devtools'\n\n<% if (addOnEnabled['solid-ui']) { %>\nimport \"@fontsource/inter/400.css\"\n<% } %>\n\nimport { HydrationScript } from 'solid-js/web'\nimport { Suspense } from 'solid-js'\n\nimport Header from '../components/Header'\n<% for(const addOn of addOns) {\n for(const init of addOn.main?.initialize || []) { %>\n <%- init %>\n<% } } %>\n\nimport styleCss from \"../styles.css?url\";\n\nexport const Route = createRootRouteWithContext()({\n head: () => ({\n links: [{ rel: \"stylesheet\", href: styleCss }],\n }),\n shellComponent: RootComponent,\n})\n\nfunction RootComponent() {\n return (\n \n \n \n \n \n \n \n
\n \n \n <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>\n <<%= integration.jsName %> />\n <% } %>\n \n \n \n \n );\n}\n<% } %>\n", "src/routes/about.tsx.ejs": "<% if (!includeExamples) { ignoreFile(); return; } %>\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/about')({\n component: About,\n})\n\nfunction About() {\n return (\n
\n
\n

About

\n

\n A small starter with room to grow.\n

\n

\n TanStack Start gives you type-safe routing, server functions, and modern SSR defaults.\n Use this as a clean foundation, then layer in your own routes, styling, and add-ons.\n

\n
\n
\n )\n}\n", "src/routes/index.tsx.ejs": "<% if (blank) { %>\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: Home })\n\nfunction Home() {\n return (\n
\n

Welcome to TanStack Start

\n

\n Edit src/routes/index.tsx to get started.\n

\n
\n )\n}\n<% } else if (!includeExamples) { %>\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: Home })\n\nfunction Home() {\n return (\n
\n

Welcome to TanStack Start

\n

\n Edit src/routes/index.tsx to get started.\n

\n
\n )\n}\n<% } else { %>\nimport { createFileRoute } from '@tanstack/solid-router'\n\nexport const Route = createFileRoute('/')({ component: App })\n\nfunction App() {\n return (\n
\n
\n
\n
\n

TanStack Start Base Template

\n

\n Start simple, ship quickly.\n

\n

\n This base starter intentionally keeps things light: two routes, clean structure,\n and the essentials you need to build from scratch.\n

\n
\n \n About This Starter\n \n \n Router Guide\n \n
\n
\n\n
\n {[\n ['Type-Safe Routing', 'Routes and links stay in sync across every page.'],\n ['Server Functions', 'Call server code from your UI without creating API boilerplate.'],\n ['Streaming by Default', 'Ship progressively rendered responses for faster experiences.'],\n ['Tailwind Native', 'Design quickly with utility-first styling and reusable tokens.'],\n ].map(([title, desc], index) => (\n \n

{title}

\n

{desc}

\n \n ))}\n
\n\n
\n

Quick Start

\n
    \n
  • Edit src/routes/index.tsx to customize the home page.
  • \n
  • \n Update src/components/Header.tsx for navigation and product links.\n
  • \n
  • \n Add routes in src/routes and tweak visual tokens in src/styles.css.\n
  • \n
\n
\n
\n )\n}\n<% } %>\n", "src/styles.css.ejs": "<% if (blank) { %>\n<% if (tailwind) { %>@import 'tailwindcss';\n\n<% } %>\n* {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n font-family: system-ui, sans-serif;\n}\n\nmain {\n width: min(42rem, calc(100% - 2rem));\n margin: 4rem auto;\n}\n<% } else if (!includeExamples) { %>\n@import 'tailwindcss';\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody,\n#app {\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n}\n<% } else { %>\n@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap');\n@import 'tailwindcss';\n\n:root {\n --sea-ink: #173a40;\n --sea-ink-soft: #416166;\n --lagoon: #4fb8b2;\n --lagoon-deep: #328f97;\n --palm: #2f6a4a;\n --sand: #e7f0e8;\n --foam: #f3faf5;\n --surface: rgba(255, 255, 255, 0.74);\n --surface-strong: rgba(255, 255, 255, 0.9);\n --line: rgba(23, 58, 64, 0.14);\n --inset-glint: rgba(255, 255, 255, 0.82);\n --kicker: rgba(47, 106, 74, 0.9);\n --bg-base: #e7f3ec;\n --header-bg: rgba(251, 255, 248, 0.84);\n --chip-bg: rgba(255, 255, 255, 0.8);\n --chip-line: rgba(47, 106, 74, 0.18);\n --link-bg-hover: rgba(255, 255, 255, 0.9);\n --hero-a: rgba(79, 184, 178, 0.36);\n --hero-b: rgba(47, 106, 74, 0.2);\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody,\n#app {\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n color: var(--sea-ink);\n font-family: 'Manrope', ui-sans-serif, system-ui, sans-serif;\n background-color: var(--bg-base);\n background:\n radial-gradient(1100px 620px at -8% -10%, var(--hero-a), transparent 58%),\n radial-gradient(1050px 620px at 112% -12%, var(--hero-b), transparent 62%),\n radial-gradient(720px 380px at 50% 115%, rgba(79, 184, 178, 0.1), transparent 68%),\n linear-gradient(\n 180deg,\n color-mix(in oklab, var(--sand) 68%, white) 0%,\n var(--foam) 44%,\n var(--bg-base) 100%\n );\n overflow-x: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\na {\n color: var(--lagoon-deep);\n text-decoration-color: rgba(50, 143, 151, 0.4);\n text-decoration-thickness: 1px;\n text-underline-offset: 2px;\n}\n\na:hover {\n color: #246f76;\n}\n\ncode {\n font-size: 0.9em;\n border: 1px solid var(--line);\n background: color-mix(in oklab, var(--surface-strong) 82%, white 18%);\n border-radius: 7px;\n padding: 2px 7px;\n}\n\n.page-wrap {\n width: min(1080px, calc(100% - 2rem));\n margin-inline: auto;\n}\n\n.display-title {\n font-family: 'Fraunces', Georgia, serif;\n}\n\n.island-shell {\n border: 1px solid var(--line);\n background: linear-gradient(165deg, var(--surface-strong), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 22px 44px rgba(30, 90, 72, 0.1),\n 0 6px 18px rgba(23, 58, 64, 0.08);\n backdrop-filter: blur(4px);\n}\n\n.feature-card {\n background: linear-gradient(\n 165deg,\n color-mix(in oklab, var(--surface-strong) 93%, white 7%),\n var(--surface)\n );\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 18px 34px rgba(30, 90, 72, 0.1),\n 0 4px 14px rgba(23, 58, 64, 0.06);\n}\n\n.demo-page {\n width: min(1080px, calc(100% - 2rem));\n margin-inline: auto;\n padding-block: clamp(2.25rem, 6vw, 4.5rem);\n color: var(--sea-ink);\n}\n\n.demo-page-wide {\n width: min(1280px, calc(100% - 2rem));\n}\n\n.demo-center {\n min-height: calc(100vh - 13rem);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.demo-panel,\n.demo-card {\n border: 1px solid var(--line);\n background: linear-gradient(165deg, var(--surface-strong), var(--surface));\n box-shadow:\n 0 1px 0 var(--inset-glint) inset,\n 0 18px 34px rgba(30, 90, 72, 0.1),\n 0 4px 14px rgba(23, 58, 64, 0.06);\n backdrop-filter: blur(4px);\n}\n\n.demo-panel {\n border-radius: 1.25rem;\n padding: clamp(1.25rem, 4vw, 2rem);\n}\n\n.demo-card {\n border-radius: 1rem;\n padding: 1rem;\n}\n\n.demo-title {\n margin: 0;\n color: var(--sea-ink);\n font-size: clamp(1.75rem, 4vw, 2.75rem);\n line-height: 1.05;\n font-weight: 800;\n letter-spacing: 0;\n}\n\n.demo-section-title {\n margin: 0;\n color: var(--sea-ink);\n font-size: 1rem;\n font-weight: 700;\n}\n\n.demo-muted {\n color: var(--sea-ink-soft);\n}\n\n.demo-input,\n.demo-select,\n.demo-textarea {\n width: 100%;\n border: 1px solid var(--line);\n border-radius: 0.75rem;\n background: color-mix(in oklab, var(--surface-strong) 88%, white 12%);\n color: var(--sea-ink);\n outline: none;\n transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;\n}\n\n.demo-input,\n.demo-select {\n padding: 0.7rem 0.9rem;\n}\n\n.demo-input-fit {\n width: auto;\n}\n\n.demo-textarea {\n min-height: 7rem;\n padding: 0.8rem 0.9rem;\n resize: vertical;\n}\n\n.demo-input:focus,\n.demo-select:focus,\n.demo-textarea:focus {\n border-color: color-mix(in oklab, var(--lagoon-deep) 58%, var(--line));\n box-shadow: 0 0 0 3px color-mix(in oklab, var(--lagoon) 24%, transparent);\n}\n\n.demo-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1px solid color-mix(in oklab, var(--lagoon-deep) 34%, var(--line));\n border-radius: 0.85rem;\n background: color-mix(in oklab, var(--lagoon) 22%, var(--surface-strong));\n color: var(--sea-ink);\n padding: 0.72rem 1rem;\n font-size: 0.9rem;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n}\n\n.demo-button:hover {\n transform: translateY(-1px);\n background: color-mix(in oklab, var(--lagoon) 30%, var(--surface-strong));\n}\n\n.demo-button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n transform: none;\n}\n\n.demo-button-secondary {\n border-color: var(--line);\n background: color-mix(in oklab, var(--surface-strong) 74%, transparent);\n color: var(--sea-ink-soft);\n}\n\n.demo-button-danger {\n border-color: rgba(196, 71, 71, 0.28);\n background: rgba(196, 71, 71, 0.1);\n color: #9f3030;\n}\n\n.demo-list-item {\n border: 1px solid var(--line);\n border-radius: 0.9rem;\n background: color-mix(in oklab, var(--chip-bg) 82%, transparent);\n padding: 0.9rem 1rem;\n}\n\n.demo-pill {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n border: 1px solid var(--chip-line);\n border-radius: 999px;\n background: var(--chip-bg);\n color: var(--sea-ink-soft);\n padding: 0.35rem 0.65rem;\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.demo-alert {\n border: 1px solid rgba(193, 126, 42, 0.3);\n border-radius: 1rem;\n background: rgba(193, 126, 42, 0.1);\n color: var(--sea-ink);\n padding: 1rem;\n}\n\n.demo-alert-danger {\n border-color: rgba(196, 71, 71, 0.3);\n background: rgba(196, 71, 71, 0.1);\n}\n\n.demo-code-block {\n border: 1px solid var(--line);\n border-radius: 1rem;\n background: color-mix(in oklab, var(--chip-bg) 88%, transparent);\n color: var(--sea-ink);\n padding: 1rem;\n}\n\n.demo-table-shell {\n overflow-x: auto;\n border: 1px solid var(--line);\n border-radius: 1rem;\n background: color-mix(in oklab, var(--surface-strong) 78%, transparent);\n}\n\n.demo-table {\n width: 100%;\n border-collapse: collapse;\n color: var(--sea-ink);\n}\n\n.demo-table th,\n.demo-table td {\n border-bottom: 1px solid var(--line);\n padding: 0.75rem 1rem;\n text-align: left;\n}\n\n.demo-table th {\n background: color-mix(in oklab, var(--chip-bg) 88%, transparent);\n color: var(--sea-ink);\n font-weight: 700;\n}\n\n.demo-table tr:hover td {\n background: color-mix(in oklab, var(--lagoon) 8%, transparent);\n}\n\n.site-header {\n position: sticky;\n top: 0;\n z-index: 50;\n border-bottom: 1px solid var(--line);\n background: var(--header-bg);\n backdrop-filter: blur(10px);\n}\n\n.nav-shell {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.5rem 0.75rem;\n padding: 0.75rem 0;\n}\n\n.brand-pill {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n border-radius: 999px;\n border: 1px solid var(--chip-line);\n background: var(--chip-bg);\n padding: 0.5rem 0.875rem;\n color: var(--sea-ink);\n text-decoration: none;\n box-shadow: 0 8px 24px rgba(30, 90, 72, 0.08);\n}\n\n.brand-dot {\n height: 0.5rem;\n width: 0.5rem;\n border-radius: 999px;\n background: linear-gradient(90deg, #56c6be, #7ed3bf);\n}\n\n.island-kicker {\n letter-spacing: 0.16em;\n text-transform: uppercase;\n font-weight: 700;\n font-size: 0.69rem;\n color: var(--kicker);\n}\n\n.nav-link {\n position: relative;\n display: inline-flex;\n align-items: center;\n color: var(--sea-ink-soft);\n text-decoration: none;\n}\n\n.nav-link::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -6px;\n width: 100%;\n height: 2px;\n transform: scaleX(0);\n transform-origin: left;\n background: linear-gradient(90deg, var(--lagoon), #7ed3bf);\n transition: transform 170ms ease;\n}\n\n.nav-link:hover,\n.nav-link.is-active {\n color: var(--sea-ink);\n}\n\n.nav-link:hover::after,\n.nav-link.is-active::after {\n transform: scaleX(1);\n}\n\n.rise-in {\n animation: rise-in 700ms cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n@keyframes rise-in {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n<% } %>\n", "tsconfig.json.ejs": "{\n <% if (addOnEnabled.eslint) { %>\"include\": [\"**/*.ts\", \"**/*.tsx\", \"eslint.config.js\", \"prettier.config.js\", \"vite.config.js\"],\n <% } else { %>\"include\": [\"**/*.ts\", \"**/*.tsx\"],<% } %>\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"jsx\": \"preserve\",\n \"jsxImportSource\": \"solid-js\",\n \"module\": \"ESNext\",\n \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n \"types\": [\"vite/client\"],\n\n /* Bundler mode */\n \"moduleResolution\": \"bundler\",\n \"allowImportingTsExtensions\": true,\n \"verbatimModuleSyntax\": true,\n \"noEmit\": true,\n\n /* Linting */\n \"skipLibCheck\": true,\n \"strict\": true,\n \"noUnusedLocals\": true,\n \"noUnusedParameters\": true,\n \"noFallthroughCasesInSwitch\": true,\n \"noUncheckedSideEffectImports\": true<% if (addOnEnabled['solid-ui']) { %>,\n \"paths\": {\n \"~/*\": [\"./src/*\"]\n }\n <% } %>\n }\n}\n", "tsr.config.json": "{\n \"target\": \"solid\"\n}\n", "vite.config.ts.ejs": "import { defineConfig } from \"vite\";\n<% const showDevtools = !blank || integrations.some((integration) => integration.type === 'devtools') -%>\n<% if (showDevtools) { -%>\nimport { devtools } from '@tanstack/devtools-vite'\n<% } -%>\n<% if (tailwind) { -%>\nimport tailwindcss from \"@tailwindcss/vite\"\n<% } -%>\n<% if (routerOnly) { %>\nimport { tanstackRouter } from '@tanstack/router-plugin/vite'\n<% } else { %>\nimport { tanstackStart } from \"@tanstack/solid-start/plugin/vite\";\n<% } %>\nimport solidPlugin from 'vite-plugin-solid';\n<% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportContent(integration) %>\n<% } %>\n\nexport default defineConfig({\n resolve: { tsconfigPaths: true },\n plugins: [<% if (showDevtools) { %>devtools(), <% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportCode(integration) %>,<% } %>\n <% if (tailwind) { %>tailwindcss(),<% } %>\n <% if (routerOnly) { %>tanstackRouter({ target: 'solid', autoCodeSplitting: true }),<% } else { %>tanstackStart(),<% } %>\n solidPlugin(<% if (!routerOnly) { %>{ ssr: true }<% } %>),\n ],\n})\n" } } satisfies WorkerFrameworkManifestModule['framework']