// Generated by scripts/generate-manifest.mjs. Do not edit by hand. import type { ManifestCatalog } from '../../manifest-types.js' export const manifestCatalog: ManifestCatalog = { "frameworks": [ { "id": "react", "name": "React", "description": "Templates for React", "version": "0.1.0", "supportedModes": { "file-router": { "displayName": "File Router", "description": "TanStack Start with file-based routing", "forceTypescript": true } }, "basePackageJSON": { "name": "", "private": true, "type": "module", "imports": { "#/*": "./src/*" }, "scripts": { "dev": "vite dev --port 3000", "generate-routes": "tsr generate", "build": "vite build", "preview": "vite preview" }, "dependencies": { "@tanstack/react-router": "latest", "@tanstack/react-start": "latest", "react": "^19.2.0", "react-dom": "^19.2.0" }, "devDependencies": { "@vitejs/plugin-react": "^6.0.1", "vite": "^8.0.0" }, "pnpm": { "onlyBuiltDependencies": [ "esbuild", "lightningcss" ] } }, "optionalPackages": { "typescript": { "devDependencies": { "@types/react": "^19.2.0", "@types/node": "^22.10.2", "@types/react-dom": "^19.2.0", "typescript": "^6.0.2" } }, "tailwindcss": { "dependencies": { "@tailwindcss/vite": "^4.1.18", "tailwindcss": "^4.1.18" } }, "devtools": { "dependencies": { "@tanstack/react-devtools": "latest", "@tanstack/react-router-devtools": "latest" }, "devDependencies": { "@tanstack/devtools-vite": "latest" } }, "examples": { "devDependencies": { "@tailwindcss/typography": "^0.5.16" } }, "file-router": { "devDependencies": { "@tanstack/router-cli": "^1.132.0" } } }, "addOns": [ { "name": "AI", "description": "Streaming chat UI with model-agnostic backend (OpenAI, Anthropic, etc).", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "tanstack", "color": "#EC4899", "priority": 60, "link": "", "routes": [ { "icon": "MessagesSquare", "url": "/demo/ai-chat", "name": "Chat", "path": "src/routes/demo/ai-chat.tsx", "jsName": "AIChatDemo" }, { "icon": "ImageIcon", "url": "/demo/ai-image", "name": "Generate Image", "path": "src/routes/demo/ai-image.tsx", "jsName": "AIImageDemo" }, { "icon": "ChefHat", "url": "/demo/ai-structured", "name": "Structured Output", "path": "src/routes/demo/ai-structured.tsx", "jsName": "AISturcturedDemo" } ], "integrations": [ { "type": "header-user", "path": "src/components/demo-AIAssistant.tsx", "jsName": "TanChatAIAssistant" } ], "dependsOn": [ "store" ], "variables": [], "id": "ai", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/ai": "latest", "@tanstack/ai-anthropic": "latest", "@tanstack/ai-client": "latest", "@tanstack/ai-gemini": "latest", "@tanstack/ai-ollama": "latest", "@tanstack/ai-openai": "latest", "@tanstack/ai-react": "latest", "highlight.js": "^11.11.1", "lucide-react": "^0.577.0", "streamdown": "^2.3.0", "zod": "^4.3.6" } }, "smallLogo": "" }, { "name": "Apollo Client", "description": "Integrate Apollo Client with streaming SSR support for GraphQL data fetching.", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "api", "color": "#311C87", "priority": 15, "link": "https://github.com/apollographql/apollo-client-integrations/tree/main/packages/tanstack-start", "routes": [ { "icon": "Network", "url": "/demo/apollo-client", "name": "Apollo Client", "path": "src/routes/demo.apollo-client.tsx", "jsName": "ApolloClientDemo" } ], "id": "apollo-client", "version": "0.0.0", "packageAdditions": { "dependencies": { "@apollo/client": "^4.1.6", "@apollo/client-integration-tanstack-start": "^0.14.4-rc.0", "graphql": "^16.10.0", "rxjs": "^7.8.2" } }, "smallLogo": "\n\n\n\n\n\n\n\n\n\n\n" }, { "name": "Better Auth", "description": "Self-hosted user accounts and sessions (open source, full control).", "phase": "add-on", "type": "add-on", "category": "auth", "exclusive": [ "auth" ], "color": "#000000", "priority": 26, "link": "https://www.better-auth.com", "modes": [ "file-router" ], "routes": [ { "url": "/demo/better-auth", "name": "Better Auth", "path": "src/routes/demo/better-auth.tsx", "jsName": "BetterAuthDemo" } ], "integrations": [ { "type": "header-user", "jsName": "BetterAuthHeader", "path": "src/integrations/better-auth/header-user.tsx" } ], "id": "better-auth", "version": "0.0.0", "packageAdditions": { "dependencies": { "better-auth": "^1.5.3" } }, "smallLogo": "\n\n\n\n\n\n\n\n\n" }, { "name": "Clerk", "description": "Hosted user accounts with prebuilt sign-in UI and social providers (managed).", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "auth", "exclusive": [ "auth" ], "color": "#6C47FF", "priority": 150, "partner": { "id": "clerk", "tier": "silver" }, "link": "https://clerk.com", "routes": [ { "url": "/demo/clerk", "name": "Clerk", "path": "src/routes/demo.clerk.tsx", "jsName": "ClerkDemo" } ], "integrations": [ { "type": "header-user", "jsName": "ClerkHeader", "path": "src/integrations/clerk/header-user.tsx" }, { "type": "provider", "jsName": "ClerkProvider", "path": "src/integrations/clerk/provider.tsx" } ], "envVars": [ { "name": "VITE_CLERK_PUBLISHABLE_KEY", "description": "Clerk publishable key", "required": true, "secret": false, "file": ".env.local" }, { "name": "CLERK_SECRET_KEY", "description": "Clerk secret key", "required": true, "secret": true, "file": ".env.local" } ], "id": "clerk", "version": "0.0.0", "packageAdditions": { "dependencies": { "@clerk/tanstack-react-start": "^1.4.21" } }, "smallLogo": "\n\n\n\n\n" }, { "name": "Compiler", "phase": "setup", "description": "Auto-memoize components and hooks (fewer re-renders, no manual useMemo/useCallback).", "link": "https://react.dev/learn/react-compiler", "modes": [ "code-router", "file-router" ], "type": "add-on", "category": "tooling", "color": "#61DAFB", "priority": 50, "routes": [], "id": "compiler", "version": "0.0.0", "packageAdditions": { "devDependencies": { "@rolldown/plugin-babel": "^0.2.3", "babel-plugin-react-compiler": "^1.0.0" } }, "smallLogo": "" }, { "name": "Convex", "description": "Reactive document database with real-time queries and serverless functions.", "link": "https://convex.dev", "phase": "add-on", "type": "add-on", "category": "database", "exclusive": [ "database", "orm" ], "color": "#EE342F", "priority": 140, "modes": [ "file-router" ], "routes": [ { "url": "/demo/convex", "name": "Convex", "path": "src/routes/demo.convex.tsx", "jsName": "ConvexDemo" } ], "integrations": [ { "type": "provider", "path": "src/integrations/convex/provider.tsx", "jsName": "ConvexProvider" } ], "envVars": [ { "name": "CONVEX_DEPLOYMENT", "description": "Convex deployment name", "required": false, "secret": false, "file": ".env.local" }, { "name": "VITE_CONVEX_URL", "description": "Convex deployment URL", "required": true, "secret": false, "file": ".env.local" } ], "id": "convex", "version": "0.0.0", "packageAdditions": { "dependencies": { "@convex-dev/react-query": "0.1.0", "convex": "^1.32.0", "lucide-react": "^0.577.0" } }, "smallLogo": "\n\n\n\n\n" }, { "name": "DB", "description": "TanStack DB", "phase": "add-on", "type": "add-on", "category": "tanstack", "color": "#F97316", "priority": 48, "modes": [ "file-router" ], "link": "https://tanstack.com/db/latest", "dependsOn": [ "tanstack-query" ], "routes": [ { "icon": "Database", "url": "/demo/db-chat", "name": "DB Chat", "path": "src/routes/demo.db-chat.tsx", "jsName": "DBChatDemo" } ], "id": "db", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/query-db-collection": "latest", "@tanstack/react-db": "latest", "zod": "^4.3.6" } }, "smallLogo": "" }, { "name": "Drizzle", "description": "Type-safe SQL query builder for Postgres, SQLite, or MySQL.", "phase": "add-on", "type": "add-on", "category": "orm", "exclusive": [ "orm" ], "color": "#C026D3", "priority": 46, "link": "https://orm.drizzle.team/", "modes": [ "file-router" ], "options": { "database": { "type": "select", "label": "Database Provider", "description": "Choose your database provider", "default": "postgresql", "options": [ { "value": "postgresql", "label": "PostgreSQL" }, { "value": "sqlite", "label": "SQLite" }, { "value": "mysql", "label": "MySQL" } ] } }, "routes": [ { "icon": "Database", "url": "/demo/drizzle", "name": "Drizzle", "path": "src/routes/demo/drizzle.tsx", "jsName": "DemoDrizzle" } ], "id": "drizzle", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Form", "description": "TanStack Form", "phase": "add-on", "type": "add-on", "category": "tanstack", "color": "#EAB308", "priority": 44, "modes": [ "file-router", "code-router" ], "link": "https://tanstack.com/form/latest", "routes": [ { "icon": "ClipboardType", "url": "/demo/form/simple", "name": "Simple Form", "path": "src/routes/demo.form.simple.tsx", "jsName": "FormSimpleDemo" }, { "icon": "ClipboardType", "url": "/demo/form/address", "name": "Address Form", "path": "src/routes/demo.form.address.tsx", "jsName": "FormAddressDemo" } ], "shadcnComponents": [ "button", "select", "input", "textarea", "slider", "switch", "label" ], "id": "form", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/react-form": "latest", "zod": "^4.3.6" } }, "smallLogo": "" }, { "name": "MCP", "phase": "setup", "description": "Expose your app as an MCP server so AI clients (Claude, Cursor) can call into it.", "link": "https://mcp.dev", "modes": [ "file-router" ], "type": "add-on", "category": "api", "color": "#10B981", "priority": 42, "warning": "MCP is still in development and may change significantly or not be compatible with other add-ons.\nThe MCP implementation does not support authentication.", "routes": [ { "icon": "Webhook", "url": "/demo/mcp-todos", "name": "MCP", "path": "src/routes/demo.mcp-todos.tsx", "jsName": "MCPTodosDemo" } ], "id": "mcp", "version": "0.0.0", "packageAdditions": { "dependencies": { "@modelcontextprotocol/sdk": "^1.27.1", "zod": "^4.3.6" } }, "smallLogo": "ModelContextProtocol" }, { "name": "Neon", "description": "Serverless Postgres (auto-scales to zero, branchable per environment).", "link": "https://neon.com", "phase": "add-on", "type": "add-on", "category": "database", "exclusive": [ "database" ], "color": "#00E599", "modes": [ "file-router" ], "routes": [ { "icon": "Database", "url": "/demo/neon", "name": "Neon", "path": "src/routes/demo.neon.tsx", "jsName": "NeonDemo" } ], "integrations": [ { "type": "vite-plugin", "jsName": "neon", "path": "neon-vite-plugin.ts" } ], "id": "neon", "version": "0.0.0", "packageAdditions": { "dependencies": { "@neondatabase/serverless": "^1.0.2", "vite-plugin-neon-new": "^0.8.0" } }, "smallLogo": "" }, { "name": "oRPC", "description": "Integrate oRPC into your application.", "phase": "add-on", "modes": [ "file-router" ], "link": "https://orpc.unnoq.com/", "dependsOn": [ "tanstack-query" ], "type": "add-on", "category": "api", "color": "#FF6B6B", "priority": 34, "routes": [ { "icon": "Network", "url": "/demo/orpc-todo", "name": "oRPC Todo", "path": "src/routes/demo.orpc-todo.tsx", "jsName": "ORPCTodos" } ], "id": "oRPC", "version": "0.0.0", "packageAdditions": { "dependencies": { "@orpc/client": "^1.13.6", "@orpc/json-schema": "^1.13.6", "@orpc/openapi": "^1.13.6", "@orpc/server": "^1.13.6", "@orpc/tanstack-query": "^1.13.6", "@orpc/zod": "^1.13.6", "zod": "^4.3.6" } }, "smallLogo": "" }, { "name": "Paraglide (i18n)", "description": "Type-safe i18n with localized routing and message bundles.", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "i18n", "color": "#14B8A6", "priority": 30, "link": "https://github.com/opral/paraglide-js", "routes": [ { "icon": "Languages", "url": "/demo/i18n", "name": "I18n example", "path": "src/routes/demo.i18n.tsx", "jsName": "I18nDemo" } ], "integrations": [ { "type": "header-user", "path": "src/components/LocaleSwitcher.tsx", "jsName": "ParaglideLocaleSwitcher" } ], "id": "paraglide", "version": "0.0.0", "packageAdditions": { "devDependencies": { "@inlang/paraglide-js": "^2.13.1" } }, "smallLogo": "\n \n 🪂\n\n" }, { "name": "PostHog", "description": "Product analytics, session replay, and feature flags", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "analytics", "color": "#1D4AFF", "priority": 20, "link": "https://posthog.com", "routes": [ { "icon": "BarChart", "url": "/demo/posthog", "name": "PostHog", "path": "src/routes/demo/posthog.tsx", "jsName": "PostHogDemo" } ], "integrations": [ { "type": "provider", "jsName": "PostHogProvider", "path": "src/integrations/posthog/provider.tsx" } ], "id": "posthog", "version": "0.0.0", "packageAdditions": { "dependencies": { "@posthog/react": "^1.7.0", "posthog-js": "^1.358.1" } } }, { "name": "PowerSync", "description": "Add PowerSync offline sync to your application.", "phase": "add-on", "type": "add-on", "category": "database", "color": "#2563EB", "priority": 55, "link": "https://docs.powersync.com/client-sdk-references/js-web", "modes": [ "file-router" ], "envVars": [ { "name": "VITE_POWERSYNC_URL", "description": "PowerSync instance URL", "required": true, "file": ".env.local" }, { "name": "VITE_POWERSYNC_TOKEN", "description": "Client-visible development token for local testing; VITE_* env vars are exposed to the browser", "required": false, "file": ".env.local" } ], "integrations": [ { "type": "vite-plugin", "path": "powersync-vite-plugin.ts", "jsName": "powersyncVite", "code": "powersyncVite()" }, { "type": "provider", "path": "src/integrations/powersync/provider.tsx", "jsName": "PowerSyncProvider" } ], "routes": [ { "url": "/demo/powersync", "name": "PowerSync", "path": "src/routes/demo/powersync.tsx", "jsName": "PowerSyncDemo" } ], "id": "powersync", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "\n \n \n \n \n\n" }, { "name": "Prisma", "description": "Type-safe database client with schema migrations (Postgres, MySQL, SQLite, MongoDB).", "phase": "add-on", "type": "add-on", "category": "orm", "exclusive": [ "orm" ], "color": "#2D3748", "priority": 120, "partner": { "id": "prisma", "tier": "bronze" }, "link": "https://www.prisma.io/", "modes": [ "file-router" ], "postInitSpecialSteps": [ "post-init-script" ], "options": { "database": { "type": "select", "label": "Database Provider", "description": "Choose your database provider", "default": "postgres", "options": [ { "value": "postgres", "label": "Prisma PostgreSQL" }, { "value": "sqlite", "label": "SQLite" }, { "value": "mysql", "label": "MySQL" } ] } }, "routes": [ { "icon": "Database", "url": "/demo/prisma", "name": "Prisma", "path": "src/routes/demo/prisma.tsx", "jsName": "DemoPrisma" } ], "id": "prisma", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Sentry", "phase": "setup", "description": "Add Sentry's TanStack Start SDK for server error monitoring and tracing.", "link": "https://sentry.com/", "modes": [ "file-router" ], "type": "add-on", "category": "monitoring", "color": "#362D59", "priority": 130, "partner": { "id": "sentry", "tier": "bronze" }, "routes": [ { "url": "/demo/sentry/testing", "name": "Sentry", "path": "src/routes/demo.sentry.testing.tsx", "jsName": "SentryDemo" } ], "id": "sentry", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Shadcn", "description": "Copy-paste accessible UI components (Tailwind + Radix primitives).", "phase": "add-on", "modes": [ "file-router", "code-router" ], "link": "https://ui.shadcn.com/", "type": "add-on", "category": "styling", "tailwind": true, "color": "#000000", "priority": 30, "id": "shadcn", "version": "0.0.0", "packageAdditions": { "dependencies": { "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.577.0", "tailwind-merge": "^3.0.2", "tw-animate-css": "^1.3.6" }, "devDependencies": { "@tailwindcss/typography": "^0.5.16" } }, "smallLogo": "\n" }, { "name": "Shopify", "description": "Headless Shopify storefront — products, cart, Shopify-hosted checkout, and optional customer accounts. Mounts /shop/* routes alongside your existing app.", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "other", "tailwind": true, "color": "#5A31F4", "priority": 80, "link": "https://shopify.dev/docs/storefronts/headless", "dependsOn": [ "tanstack-query" ], "options": { "customerAccount": { "type": "select", "label": "Customer Accounts", "description": "Add /shop/account/* routes (Shopify Customer Account API, OAuth setup required).", "default": "disabled", "options": [ { "value": "disabled", "label": "No (skip account routes)" }, { "value": "enabled", "label": "Yes (include OAuth + account dashboard)" } ] } }, "integrations": [ { "type": "header-user", "jsName": "ShopifyHeaderCart", "path": "src/integrations/shopify/header-cart.tsx" } ], "routes": [ { "icon": "ShoppingBag", "url": "/shop", "name": "Shop", "path": "src/routes/shop.index.tsx", "jsName": "ShopIndex" }, { "url": "/shop/cart", "name": "Cart", "path": "src/routes/shop.cart.tsx", "jsName": "ShopCart" } ], "envVars": [ { "name": "SHOPIFY_STORE_DOMAIN", "description": "Your store's myshopify.com domain. Defaults to Shopify's public Hydrogen demo store.", "required": false, "secret": false, "file": ".env.local" }, { "name": "SHOPIFY_STOREFRONT_API_VERSION", "description": "Storefront API version (e.g. 2026-01).", "required": false, "secret": false, "file": ".env.local" }, { "name": "SHOPIFY_PUBLIC_STOREFRONT_TOKEN", "description": "Public Storefront API token. Defaults to Shopify's public Hydrogen demo token.", "required": false, "secret": false, "file": ".env.local" }, { "name": "SHOPIFY_PRIVATE_STOREFRONT_TOKEN", "description": "Optional private Storefront API token. Higher rate limits + buyer-IP forwarding when set.", "required": false, "secret": true, "file": ".env.local" }, { "name": "SHOPIFY_CUSTOMER_ACCOUNT_CLIENT_ID", "description": "Customer Account API client ID. Required when customerAccount=enabled.", "required": false, "secret": true, "file": ".env.local" }, { "name": "SHOPIFY_CUSTOMER_ACCOUNT_SHOP_ID", "description": "Numeric Shop ID (Shopify admin > Settings > Customer accounts). Required when customerAccount=enabled.", "required": false, "secret": false, "file": ".env.local" }, { "name": "SHOPIFY_CUSTOMER_ACCOUNT_REDIRECT_URI", "description": "OAuth callback URL. Defaults to http://localhost:3000/shop/account/callback.", "required": false, "secret": false, "file": ".env.local" }, { "name": "SHOPIFY_SESSION_SECRET", "description": "32+ char secret used to sign customer session cookies. Required when customerAccount=enabled.", "required": false, "secret": true, "file": ".env.local" } ], "id": "shopify", "version": "0.0.0", "packageAdditions": { "dependencies": { "@shopify/hydrogen-react": "^2026.1.0", "valibot": "^1.0.0" } }, "smallLogo": "\n" }, { "name": "Store", "description": "Add TanStack Store to your application.", "phase": "add-on", "link": "https://tanstack.com/store/latest", "type": "add-on", "category": "tanstack", "color": "#B89A56", "priority": 22, "modes": [ "file-router", "code-router" ], "routes": [ { "icon": "Store", "url": "/demo/store", "name": "Store", "path": "src/routes/demo.store.tsx", "jsName": "StoreDemo" } ], "integrations": [ { "type": "devtools", "path": "src/lib/demo-store-devtools.tsx", "jsName": "StoreDevtools" } ], "id": "store", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/react-store": "latest", "@tanstack/store": "latest" }, "devDependencies": { "@tanstack/devtools-event-client": "latest" } }, "smallLogo": "" }, { "name": "Storybook", "description": "Integrate Storybook into your application.", "phase": "add-on", "modes": [ "file-router" ], "link": "https://storybook.js.org/", "type": "add-on", "category": "tooling", "color": "#FF4785", "priority": 1, "command": { "command": "npx", "args": [ "storybook", "init", "-y", "--no-dev" ] }, "id": "storybook", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Strapi", "description": "Headless CMS with admin UI (self-hosted, content models in TypeScript).", "link": "https://strapi.io/", "phase": "add-on", "type": "add-on", "category": "cms", "color": "#4945FF", "priority": 110, "modes": [ "file-router" ], "routes": [ { "url": "/demo/strapi", "name": "Strapi Articles", "path": "src/routes/demo/strapi.tsx", "jsName": "StrapiArticles" } ], "id": "strapi", "version": "0.0.0", "packageAdditions": { "dependencies": { "@strapi/client": "^1.6.1", "lucide-react": "^0.577.0", "react-markdown": "^9.0.1", "remark-gfm": "^4.0.0", "use-debounce": "^10.1.0" } }, "smallLogo": "\n\n\n\n\n\n\n\n" }, { "name": "T3Env", "description": "Validate process.env at build time (catch missing/wrong env vars before runtime).", "phase": "add-on", "type": "add-on", "category": "tooling", "color": "#6366F1", "priority": 29, "link": "https://github.com/t3-oss/t3-env", "modes": [ "file-router", "code-router" ], "id": "t3env", "version": "0.0.0", "packageAdditions": { "dependencies": { "@t3-oss/env-core": "^0.13.10", "zod": "^4.3.6" } }, "smallLogo": "\n\n\n\n\n\n" }, { "name": "tRPC", "description": "Integrate tRPC into your application.", "phase": "add-on", "modes": [ "file-router" ], "link": "https://trpc.io/", "dependsOn": [ "tanstack-query" ], "type": "add-on", "category": "api", "color": "#2596BE", "priority": 27, "routes": [ { "icon": "Network", "url": "/demo/trpc-todo", "name": "tRPC Todo", "path": "src/routes/demo.trpc-todo.tsx", "jsName": "TRPCTodos" } ], "id": "tRPC", "version": "0.0.0", "packageAdditions": { "dependencies": { "@trpc/client": "^11.11.0", "@trpc/server": "^11.11.0", "@trpc/tanstack-react-query": "^11.11.0", "superjson": "^2.2.2", "zod": "^4.3.6" } }, "smallLogo": "" }, { "name": "Table", "description": "Integrate TanStack Table into your application.", "phase": "add-on", "modes": [ "file-router", "code-router" ], "link": "https://tanstack.com/table/latest", "type": "add-on", "category": "tanstack", "color": "#06B6D4", "priority": 28, "routes": [ { "icon": "Table", "url": "/demo/table", "name": "TanStack Table", "path": "src/routes/demo.table.tsx", "jsName": "TableDemo" } ], "id": "table", "version": "0.0.0", "packageAdditions": { "dependencies": { "@faker-js/faker": "^10.3.0", "@tanstack/match-sorter-utils": "latest", "@tanstack/react-table": "latest" } }, "smallLogo": "" }, { "name": "Query", "description": "Integrate TanStack Query into your application.", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "add-on", "category": "tanstack", "color": "#EF4444", "priority": 10, "link": "https://tanstack.com/query/latest", "routes": [ { "icon": "Network", "url": "/demo/tanstack-query", "name": "TanStack Query", "path": "src/routes/demo/tanstack-query.tsx", "jsName": "TanStackQueryDemo" } ], "integrations": [ { "type": "devtools", "path": "src/integrations/tanstack-query/devtools.tsx", "jsName": "TanStackQueryDevtools" } ], "id": "tanstack-query", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/react-query": "latest", "@tanstack/react-query-devtools": "latest", "@tanstack/react-router-ssr-query": "latest" } }, "smallLogo": "" }, { "name": "WorkOS", "description": "Enterprise SSO, SAML, and directory sync (good for B2B apps).", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "auth", "exclusive": [ "auth" ], "color": "#6363F1", "priority": 160, "partner": { "id": "workos", "tier": "silver" }, "link": "https://workos.com", "routes": [ { "icon": "CircleUserRound", "url": "/demo/workos", "name": "WorkOS", "path": "src/routes/demo.workos.tsx", "jsName": "WorkOSDemo" } ], "integrations": [ { "type": "header-user", "jsName": "WorkOSHeader", "path": "src/components/workos-user.tsx" }, { "type": "provider", "jsName": "WorkOSProvider", "path": "src/integrations/workos/provider.tsx" } ], "envVars": [ { "name": "WORKOS_CLIENT_ID", "description": "WorkOS client ID", "required": true, "secret": false, "file": ".env.local" }, { "name": "WORKOS_API_KEY", "description": "WorkOS API key", "required": true, "secret": true, "file": ".env.local" }, { "name": "WORKOS_REDIRECT_URI", "description": "AuthKit callback URL", "required": true, "default": "http://localhost:3000/api/auth/callback", "secret": false, "file": ".env.local" }, { "name": "WORKOS_COOKIE_PASSWORD", "description": "Session cookie encryption password (at least 32 characters)", "required": true, "secret": true, "file": ".env.local" }, { "name": "WORKOS_API_HOSTNAME", "description": "WorkOS API hostname", "required": false, "default": "api.workos.com", "secret": false, "file": ".env.local" } ], "id": "workos", "version": "0.0.0", "packageAdditions": { "engines": { "node": ">=22.11.0" }, "dependencies": { "@workos-inc/node": "^10.8.0", "@workos/authkit-tanstack-react-start": "^0.11.0" } }, "smallLogo": "\n\n\n\n" }, { "name": "Biome", "description": "Biome toolchain support.", "phase": "setup", "type": "toolchain", "category": "tooling", "exclusive": [ "linter" ], "color": "#60A5FA", "priority": 2, "modes": [ "code-router", "file-router" ], "link": "https://biomejs.dev", "id": "biome", "version": "0.0.0", "packageAdditions": { "scripts": { "format": "biome format", "lint": "biome lint", "check": "biome check" }, "devDependencies": { "@biomejs/biome": "2.4.5" } }, "smallLogo": "\n\n \n \n\n" }, { "name": "ESLint", "description": "ESLint + Prettier toolchain support.", "phase": "setup", "type": "toolchain", "category": "tooling", "exclusive": [ "linter" ], "color": "#4B32C3", "priority": 0, "modes": [ "code-router", "file-router" ], "link": "https://eslint.org", "id": "eslint", "version": "0.0.0", "packageAdditions": { "scripts": { "lint": "eslint", "format": "prettier --write . && eslint --fix", "check": "prettier --check ." }, "devDependencies": { "@tanstack/eslint-config": "latest", "eslint": "^9.20.0", "prettier": "^3.8.1" } }, "smallLogo": "\n\n \n \n \n \n\n" }, { "name": "Events", "description": "A pastry conference website with speakers, sessions, schedule, and AI assistant built with content-collections and TanStack Start for Netlify.", "phase": "example", "modes": [ "file-router" ], "type": "example", "category": "other", "color": "#F59E0B", "priority": 10, "link": "", "routes": [ { "url": "/", "path": "src/routes/index.tsx", "jsName": "EventsHome" }, { "url": "/schedule", "path": "src/routes/schedule.index.tsx", "name": "Schedule", "jsName": "SchedulePage" }, { "url": "/speakers", "path": "src/routes/speakers.index.tsx", "name": "Speakers", "jsName": "SpeakersPage" }, { "url": "/speakers/$slug", "path": "src/routes/speakers.$slug.tsx", "jsName": "SpeakerDetail" }, { "url": "/talks", "path": "src/routes/talks.index.tsx", "name": "Sessions", "jsName": "TalksPage" }, { "url": "/talks/$slug", "path": "src/routes/talks.$slug.tsx", "jsName": "TalkDetail" }, { "url": "/api/remy-chat", "path": "src/routes/api.remy-chat.ts", "jsName": "RemyChatAPI" } ], "integrations": [ { "type": "header-user", "path": "src/components/RemyButton", "jsName": "RemyButton" }, { "type": "vite-plugin", "import": "import contentCollections from '@content-collections/vite'", "code": "contentCollections()" } ], "dependsOn": [], "variables": [], "id": "events", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/ai": "latest", "@tanstack/ai-anthropic": "latest", "@tanstack/ai-client": "latest", "@tanstack/ai-gemini": "latest", "@tanstack/ai-ollama": "latest", "@tanstack/ai-openai": "latest", "@tanstack/ai-react": "latest", "@tanstack/store": "latest", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.577.0", "marked": "^15.0.8", "streamdown": "^2.3.0", "tailwind-merge": "^3.0.2", "tailwindcss-animate": "^1.0.7", "zod": "^4.3.6" }, "devDependencies": { "@content-collections/core": "^0.13.1", "@content-collections/vite": "^0.3.0" } } }, { "name": "Resume", "description": "Professional resume template with content-collections and shadcn UI components for Netlify.", "phase": "example", "modes": [ "file-router" ], "type": "example", "category": "other", "color": "#8B5CF6", "priority": 10, "link": "", "routes": [ { "url": "/", "path": "src/routes/index.tsx", "jsName": "ResumeHome" } ], "integrations": [ { "type": "header-user", "path": "src/components/ResumeAssistantButton", "jsName": "ResumeAssistantButton" }, { "type": "vite-plugin", "import": "import contentCollections from '@content-collections/vite'", "code": "contentCollections()" } ], "dependsOn": [], "variables": [], "id": "resume", "version": "0.0.0", "packageAdditions": { "dependencies": { "@radix-ui/react-checkbox": "^1.2.2", "@radix-ui/react-hover-card": "^1.1.10", "@radix-ui/react-separator": "^1.1.4", "@radix-ui/react-slot": "^1.2.0", "@tanstack/ai": "latest", "@tanstack/ai-anthropic": "latest", "@tanstack/ai-client": "latest", "@tanstack/ai-gemini": "latest", "@tanstack/ai-ollama": "latest", "@tanstack/ai-openai": "latest", "@tanstack/ai-react": "latest", "@tanstack/store": "latest", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.577.0", "marked": "^15.0.8", "streamdown": "^2.3.0", "tailwind-merge": "^3.0.2", "tailwindcss-animate": "^1.0.7", "zod": "^4.3.6" }, "devDependencies": { "@content-collections/core": "^0.13.1", "@content-collections/vite": "^0.3.0" } } }, { "name": "Shopify Storefront", "description": "A polished Shopify storefront starter — TanStack Start + Shopify Storefront API + optional customer accounts. Hosted checkout, deploy anywhere.", "phase": "example", "modes": [ "file-router" ], "type": "example", "category": "other", "color": "#5A31F4", "priority": 5, "link": "https://shopify.dev/docs/storefronts/headless", "dependsOn": [ "shopify" ], "default": true, "routes": [ { "url": "/", "path": "src/routes/index.tsx", "jsName": "ShopHome" } ], "integrations": [], "variables": [], "id": "shopify-storefront", "version": "0.0.0", "packageAdditions": { "dependencies": {} } }, { "name": "Cloudflare", "description": "Deploy to Cloudflare Workers (edge runtime, KV/D1/R2 bindings).", "link": "https://developers.cloudflare.com/workers/vite-plugin/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#F38020", "priority": 200, "partner": { "id": "cloudflare", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { cloudflare } from '@cloudflare/vite-plugin'", "code": "cloudflare({ viteEnvironment: { name: 'ssr' } })" } ], "id": "cloudflare", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Netlify", "description": "Deploy to Netlify (Functions and Edge Functions, GitHub-driven).", "link": "https://docs.netlify.com", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#00C7B7", "priority": 180, "partner": { "id": "netlify", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import netlify from '@netlify/vite-plugin-tanstack-start'", "code": "netlify()" } ], "id": "netlify", "version": "0.0.0", "packageAdditions": { "devDependencies": { "@netlify/vite-plugin-tanstack-start": "^1.2.15" }, "pnpm": { "onlyBuiltDependencies": [ "sharp" ] } }, "smallLogo": "" }, { "name": "Nitro (agnostic)", "description": "Generic Nitro adapter (deploy to any Node-compatible host).", "link": "https://v3.nitro.build/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#ECDC5A", "priority": 0, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro({ rollupConfig: { external: [/^@sentry\\//] } })" } ], "default": true, "id": "nitro", "version": "0.0.0", "packageAdditions": { "dependencies": { "nitro": "3.0.260610-beta" } }, "smallLogo": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, { "name": "Railway", "description": "Deploy to Railway (full-stack PaaS for Node + databases).", "link": "https://railway.com/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#9B4DCA", "priority": 160, "partner": { "id": "railway", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro({ rollupConfig: { external: [/^@sentry\\//] } })" } ], "id": "railway", "version": "0.0.0", "packageAdditions": {} }, { "name": "Render", "description": "Deploy to Render (full-stack cloud platform with GitHub integration).", "link": "https://render.com/", "phase": "add-on", "modes": [ "file-router" ], "type": "deployment", "supportedPackageManagers": [ "npm", "yarn", "pnpm", "bun" ], "category": "deploy", "exclusive": [ "deploy" ], "color": "#46E3B7", "priority": 150, "partner": { "id": "render", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro({ rollupConfig: { external: [/^@sentry\\//] } })" } ], "id": "render", "version": "0.0.0", "packageAdditions": {} }, { "name": "Vercel", "description": "Deploy to Vercel (Functions, static assets, and Git previews).", "link": "https://vercel.com/docs/frameworks/full-stack/tanstack-start", "phase": "add-on", "modes": [ "file-router" ], "type": "deployment", "supportedPackageManagers": [ "npm", "yarn", "pnpm", "bun" ], "category": "deploy", "exclusive": [ "deploy" ], "color": "#000000", "priority": 140, "partner": { "id": "vercel", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro()" } ], "id": "vercel", "version": "0.0.0", "packageAdditions": { "dependencies": { "nitro": "3.0.260610-beta" } } } ] }, { "id": "solid", "name": "Solid", "description": "Solid templates for Tanstack Router Applications", "version": "0.1.0", "supportedModes": { "file-router": { "displayName": "File Router", "description": "TanStack Start with file-based routing", "forceTypescript": true } }, "basePackageJSON": { "name": "app-ts", "private": true, "type": "module", "scripts": { "dev": "vite dev --port 3000", "generate-routes": "tsr generate", "build": "vite build", "start": "node .output/server/index.mjs", "preview": "vite preview" }, "dependencies": { "@tanstack/solid-router": "latest", "@tanstack/solid-start": "latest", "solid-js": "^1.9.12" }, "devDependencies": { "vite-plugin-solid": "^2.11.12", "vite": "^8.0.0" }, "pnpm": { "onlyBuiltDependencies": [ "esbuild", "lightningcss" ] } }, "optionalPackages": { "typescript": { "devDependencies": { "typescript": "^6.0.2" } }, "tailwindcss": { "dependencies": { "@tailwindcss/vite": "^4.1.18", "tailwindcss": "^4.1.18" } }, "devtools": { "dependencies": { "@tanstack/solid-router-devtools": "latest" }, "devDependencies": { "@tanstack/devtools-vite": "latest" } }, "file-router": { "devDependencies": { "@tanstack/router-cli": "^1.133.21" } } }, "addOns": [ { "name": "Better Auth", "description": "Self-hosted user accounts and sessions (open source, full control).", "phase": "add-on", "type": "add-on", "category": "auth", "exclusive": [ "auth" ], "color": "#000000", "link": "https://www.better-auth.com/", "modes": [ "file-router" ], "routes": [ { "url": "/demo/better-auth", "name": "Better Auth", "path": "src/routes/demo.better-auth.tsx", "jsName": "BetterAuthDemo" } ], "integrations": [ { "type": "header-user", "jsName": "BetterAuthHeader", "path": "src/integrations/better-auth/header-user.tsx" } ], "id": "better-auth", "version": "0.0.0", "packageAdditions": { "dependencies": { "better-auth": "^1.5.3" } }, "smallLogo": "\n\n\n\n\n\n\n\n\n" }, { "name": "Convex", "description": "Reactive document database with real-time queries and serverless functions.", "link": "https://convex.dev", "phase": "add-on", "type": "add-on", "category": "database", "exclusive": [ "database", "orm" ], "color": "#EE342F", "modes": [ "file-router" ], "routes": [ { "url": "/demo/convex", "name": "Convex", "path": "src/routes/demo.convex.tsx", "jsName": "ConvexDemo" } ], "integrations": [ { "type": "provider", "path": "src/integrations/convex/provider.tsx", "jsName": "ConvexProvider" } ], "id": "convex", "version": "0.0.0", "packageAdditions": { "dependencies": { "convex": "^1.32.0", "convex-solidjs": "^0.0.3", "lucide-solid": "^0.577.0" } }, "smallLogo": "\n\n\n\n\n" }, { "name": "Form", "description": "TanStack Form", "phase": "add-on", "link": "https://tanstack.com/form/latest", "modes": [ "file-router", "code-router" ], "type": "add-on", "category": "tanstack", "color": "#EAB308", "routes": [ { "url": "/demo/form", "name": "Form", "path": "src/routes/demo.form.tsx", "jsName": "FormDemo" } ], "id": "form", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/solid-form": "latest" } }, "smallLogo": "" }, { "name": "Sentry", "phase": "setup", "description": "Add Sentry for error monitoring and crash reporting (requires Start).", "link": "https://sentry.com/", "modes": [ "file-router" ], "type": "add-on", "category": "monitoring", "color": "#362D59", "partner": { "id": "sentry", "tier": "bronze" }, "routes": [ { "url": "/demo/sentry/bad-event-handler", "name": "Sentry", "path": "src/routes/demo.sentry.bad-event-handler.tsx", "jsName": "SentryBadEventHandlerDemo" } ], "id": "sentry", "version": "0.0.0", "packageAdditions": { "dependencies": { "@sentry/solid": "^10.67.0" } }, "smallLogo": "" }, { "name": "Solid-UI", "description": "Copy-paste accessible UI components for Solid (Tailwind + Radix-style primitives).", "phase": "add-on", "link": "https://ui.shadcn.com/", "modes": [ "file-router", "code-router" ], "type": "add-on", "category": "styling", "tailwind": true, "color": "#000000", "id": "solid-ui", "version": "0.0.0", "packageAdditions": { "dependencies": { "@fontsource/inter": "^5.1.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "tailwind-merge": "^3.0.2", "tailwindcss-animate": "^1.0.7" } }, "smallLogo": "\n \n \n \n" }, { "name": "Store", "description": "Add TanStack Store to your application.", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "add-on", "category": "tanstack", "color": "#B89A56", "link": "https://tanstack.com/store/latest", "routes": [ { "url": "/demo/store", "name": "Store", "path": "src/routes/demo.store.tsx", "jsName": "StoreDemo" } ], "id": "store", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/solid-store": "latest", "@tanstack/store": "latest" } }, "smallLogo": "" }, { "name": "Strapi", "description": "Headless CMS with admin UI (self-hosted, content models in TypeScript).", "link": "https://strapi.io/", "phase": "add-on", "type": "add-on", "category": "cms", "color": "#4945FF", "modes": [ "file-router" ], "routes": [ { "url": "/demo/strapi", "name": "Strapi", "path": "src/routes/demo.strapi.tsx", "jsName": "StrapiDemo" } ], "id": "strapi", "version": "0.0.0", "packageAdditions": { "dependencies": { "@strapi/client": "^1.6.1" } }, "smallLogo": "\n\n\n\n\n\n\n\n" }, { "name": "T3Env", "description": "Validate process.env at build time (catch missing/wrong env vars before runtime).", "phase": "add-on", "link": "https://github.com/t3-oss/t3-env", "type": "add-on", "category": "tooling", "color": "#6366F1", "modes": [ "file-router", "code-router" ], "id": "t3env", "version": "0.0.0", "packageAdditions": { "dependencies": { "@t3-oss/env-core": "^0.13.10", "zod": "^4.3.6" } }, "smallLogo": "\n\n\n\n\n\n" }, { "name": "TanStack Query", "description": "Integrate TanStack Query into your application.", "phase": "add-on", "modes": [ "file-router" ], "type": "add-on", "category": "tanstack", "color": "#EF4444", "link": "https://tanstack.com/query/latest", "routes": [ { "url": "/demo/tanstack-query", "name": "TanStack Query", "path": "src/routes/demo.tanstack-query.tsx", "jsName": "TanStackQueryDemo" } ], "integrations": [ { "type": "provider", "path": "src/integrations/tanstack-query/provider.tsx", "jsName": "TanStackQueryProvider" }, { "type": "header-user", "path": "src/integrations/tanstack-query/header-user.tsx", "jsName": "TanStackQueryHeaderUser" } ], "id": "tanstack-query", "version": "0.0.0", "packageAdditions": { "dependencies": { "@tanstack/solid-query": "latest", "@tanstack/solid-query-devtools": "latest" } }, "smallLogo": "" }, { "name": "Biome", "description": "Biome toolchain support.", "phase": "setup", "type": "toolchain", "category": "tooling", "exclusive": [ "linter" ], "color": "#60A5FA", "modes": [ "code-router", "file-router" ], "link": "https://biomejs.dev", "id": "biome", "version": "0.0.0", "packageAdditions": { "scripts": { "format": "biome format", "lint": "biome lint", "check": "biome check" }, "devDependencies": { "@biomejs/biome": "2.4.5" } }, "smallLogo": "\n\n \n \n\n" }, { "name": "ESLint", "description": "ESLint + Prettier toolchain support.", "phase": "setup", "type": "toolchain", "category": "tooling", "exclusive": [ "linter" ], "color": "#4B32C3", "modes": [ "code-router", "file-router" ], "link": "https://eslint.org", "id": "eslint", "version": "0.0.0", "packageAdditions": { "scripts": { "lint": "eslint", "format": "prettier --write . && eslint --fix", "check": "prettier --check ." }, "devDependencies": { "@tanstack/eslint-config": "latest", "eslint": "^9.20.0", "prettier": "^3.8.1" } }, "smallLogo": "\n\n \n \n \n \n\n" }, { "name": "TanStack Chat", "description": "A chat example that uses TanStack Start and TanStack Store. Features chat with Anthropic Sonnet, chat history and custom prompts.", "phase": "example", "type": "example", "category": "other", "color": "#00D1B2", "modes": [ "file-router" ], "link": "", "routes": [ { "url": "/example/chat", "name": "Chat" } ], "dependsOn": [ "solid-ui", "store" ], "id": "tanchat", "version": "0.0.0", "packageAdditions": { "dependencies": { "highlight.js": "^11.11.1", "lucide-solid": "^0.577.0", "markdown-it": "^14.1.0" } } }, { "name": "Cloudflare", "description": "Deploy to Cloudflare Workers (edge runtime, KV/D1/R2 bindings).", "link": "https://developers.cloudflare.com/workers/vite-plugin/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#F38020", "priority": 200, "partner": { "id": "cloudflare", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { cloudflare } from '@cloudflare/vite-plugin'", "code": "cloudflare({ viteEnvironment: { name: 'ssr' } })" } ], "id": "cloudflare", "version": "0.0.0", "packageAdditions": {}, "smallLogo": "" }, { "name": "Netlify", "description": "Deploy to Netlify (Functions and Edge Functions, GitHub-driven).", "link": "https://docs.netlify.com", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#00C7B7", "priority": 180, "partner": { "id": "netlify", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import netlify from '@netlify/vite-plugin-tanstack-start'", "code": "netlify()" } ], "id": "netlify", "version": "0.0.0", "packageAdditions": { "devDependencies": { "@netlify/vite-plugin-tanstack-start": "^1.2.15" }, "pnpm": { "onlyBuiltDependencies": [ "sharp" ] } }, "smallLogo": "" }, { "name": "Nitro (agnostic)", "description": "Generic Nitro adapter (deploy to any Node-compatible host).", "link": "https://v3.nitro.build/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#ECDC5A", "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro()" } ], "default": true, "id": "nitro", "version": "0.0.0", "packageAdditions": { "dependencies": { "nitro": "3.0.260610-beta" } }, "smallLogo": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" }, { "name": "Railway", "description": "Deploy to Railway (full-stack PaaS for Node + databases).", "link": "https://railway.com/", "phase": "add-on", "modes": [ "file-router", "code-router" ], "type": "deployment", "category": "deploy", "exclusive": [ "deploy" ], "color": "#9B4DCA", "priority": 160, "partner": { "id": "railway", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro()" } ], "id": "railway", "version": "0.0.0", "packageAdditions": { "scripts": { "start": "node .output/server/index.mjs" }, "dependencies": { "nitro": "3.0.260610-beta" } } }, { "name": "Render", "description": "Deploy to Render (full-stack cloud platform with GitHub integration).", "link": "https://render.com/", "phase": "add-on", "modes": [ "file-router" ], "type": "deployment", "supportedPackageManagers": [ "npm", "yarn", "pnpm", "bun" ], "category": "deploy", "exclusive": [ "deploy" ], "color": "#46E3B7", "priority": 150, "partner": { "id": "render", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro()" } ], "id": "render", "version": "0.0.0", "packageAdditions": { "scripts": { "start": "node .output/server/index.mjs" }, "dependencies": { "nitro": "3.0.260610-beta" } } }, { "name": "Vercel", "description": "Deploy to Vercel (Functions, static assets, and Git previews).", "link": "https://vercel.com/docs/frameworks/full-stack/tanstack-start", "phase": "add-on", "modes": [ "file-router" ], "type": "deployment", "supportedPackageManagers": [ "npm", "yarn", "pnpm", "bun" ], "category": "deploy", "exclusive": [ "deploy" ], "color": "#000000", "priority": 140, "partner": { "id": "vercel", "tier": "gold" }, "integrations": [ { "type": "vite-plugin", "import": "import { nitro } from 'nitro/vite'", "code": "nitro()" } ], "id": "vercel", "version": "0.0.0", "packageAdditions": { "dependencies": { "nitro": "3.0.260610-beta" } } } ] } ] }