- Spec files
npm-tanstack--react-start
Describes: pkg:npm/@tanstack/react-start@1.132.x
- Description
- Modern full-stack React framework with SSR, streaming, server functions, and API routes powered by TanStack Router and Vite.
- Author
- tessl
- Last updated
How to use
npx @tessl/cli registry install tessl/npm-tanstack--react-start@1.132.0
vite-plugin.md docs/
1# Vite Plugin23The TanStack Start Vite plugin provides seamless integration with Vite for development and build processes. It configures automatic transformations, optimizations, and provides the necessary tooling for server functions, isomorphic functions, and SSR support.45## Capabilities67### TanStack Start Plugin89The main Vite plugin that provides complete integration with TanStack Start features.1011```typescript { .api }12/**13* Creates the TanStack Start Vite plugin with configuration options14* @param options - Plugin configuration options15* @returns Array of Vite plugins for complete Start integration16*/17function tanstackStart(18options?: TanStackStartInputConfig19): Array<PluginOption>;2021interface TanStackStartInputConfig {22/** Framework type - currently only 'react' is supported */23framework?: 'react';2425/** Default entry point paths for different environments */26defaultEntryPaths?: {27client?: string;28server?: string;29start?: string;30};3132/** Additional plugin-specific options */33[key: string]: any;34}3536interface PluginOption {37name: string;38configResolved?: (config: any) => void;39configureServer?: (server: any) => void;40buildStart?: (options: any) => void;41transform?: (code: string, id: string) => any;42}43```4445**Usage Examples:**4647```typescript48// Basic Vite configuration49import { defineConfig } from "vite";50import { tanstackStart } from "@tanstack/react-start/plugin/vite";5152export default defineConfig({53plugins: [tanstackStart()],54});5556// Advanced configuration with custom options57export default defineConfig({58plugins: [59tanstackStart({60framework: "react",61defaultEntryPaths: {62client: "./src/entry.client.tsx",63server: "./src/entry.server.tsx",64start: "./src/entry.start.ts"65}66})67],68// Additional Vite configuration69build: {70target: "esnext"71}72});7374// Multiple environments configuration75export default defineConfig(({ command, mode }) => ({76plugins: [77tanstackStart({78framework: "react",79// Environment-specific configuration80...(mode === "production" && {81optimizeDeps: {82include: ["react", "react-dom"]83}84})85})86]87}));88```8990## Plugin Configuration9192### Environment-Specific Settings9394The plugin automatically configures different settings for client and server environments:9596```typescript97// Client environment configuration98{99resolve: {100dedupe: ["react", "react-dom", "@tanstack/react-start", "@tanstack/react-router"]101},102optimizeDeps: {103exclude: ["@tanstack/react-start", "@tanstack/react-router"],104include: [105"react",106"react/jsx-runtime",107"react/jsx-dev-runtime",108"react-dom",109"react-dom/client"110]111}112}113114// Server environment configuration115{116optimizeDeps: {117exclude: ["@tanstack/react-start", "@tanstack/react-router"],118include: [119"react",120"react/jsx-runtime",121"react/jsx-dev-runtime",122"react-dom",123"react-dom/server"124]125}126}127```128129### Default Entry Points130131The plugin provides default entry points that can be customized:132133```typescript134// Default entry point paths135const defaultEntryPaths = {136client: path.resolve(__dirname, "../default-entry/client.tsx"),137server: path.resolve(__dirname, "../default-entry/server.ts"),138start: path.resolve(__dirname, "../default-entry/start.ts")139};140141// Custom entry points142const customConfig = {143defaultEntryPaths: {144client: "./src/custom-client.tsx",145server: "./src/custom-server.ts",146start: "./src/custom-start.ts"147}148};149```150151## Development Features152153### Hot Module Replacement154155The plugin integrates with Vite's HMR system for rapid development:156157```typescript158// Automatic HMR for server functions159if (import.meta.hot) {160import.meta.hot.accept('./server-functions', () => {161// Server functions are automatically reloaded162});163}164165// HMR for isomorphic functions166if (import.meta.hot) {167import.meta.hot.accept('./isomorphic-functions', () => {168// Both client and server implementations are updated169});170}171```172173### Development Server Integration174175The plugin configures the Vite development server for optimal Start development:176177```typescript178// Development server configuration179{180server: {181middlewareMode: false,182hmr: true,183// Server function handling in development184proxy: {185'/api/functions': {186target: 'http://localhost:3000',187changeOrigin: true188}189}190}191}192```193194## Build Configuration195196### Production Optimizations197198The plugin applies production-specific optimizations during build:199200```typescript201// Production build configuration202{203build: {204rollupOptions: {205external: ["react", "react-dom"],206output: {207globals: {208react: "React",209"react-dom": "ReactDOM"210}211}212},213minify: "esbuild",214sourcemap: true215}216}217```218219### Code Splitting220221Automatic code splitting for optimal loading performance:222223```typescript224// Client bundle splitting225{226build: {227rollupOptions: {228output: {229manualChunks: {230vendor: ["react", "react-dom"],231router: ["@tanstack/react-router"],232start: ["@tanstack/react-start"]233}234}235}236}237}238239// Server bundle configuration240{241build: {242ssr: true,243rollupOptions: {244external: ["react", "react-dom", "node:*"],245output: {246format: "esm"247}248}249}250}251```252253## Advanced Plugin Usage254255### Multi-Environment Builds256257Configure different builds for various deployment targets:258259```typescript260import { defineConfig } from "vite";261import { tanstackStart } from "@tanstack/react-start/plugin/vite";262263export default defineConfig(({ command, mode }) => {264const isProduction = mode === "production";265const isCloudflare = process.env.PLATFORM === "cloudflare";266267return {268plugins: [269tanstackStart({270framework: "react",271// Platform-specific configurations272...(isCloudflare && {273target: "webworker",274external: ["node:*"]275})276})277],278define: {279__PRODUCTION__: isProduction,280__PLATFORM__: JSON.stringify(process.env.PLATFORM || "node")281}282};283});284```285286### Custom Transformations287288Add custom transformations for specific use cases:289290```typescript291import { defineConfig } from "vite";292import { tanstackStart } from "@tanstack/react-start/plugin/vite";293294export default defineConfig({295plugins: [296tanstackStart(),297{298name: "custom-server-fn-transform",299transform(code, id) {300if (id.includes("server-functions")) {301// Custom transformations for server functions302return {303code: transformServerFunctions(code),304map: null305};306}307}308}309]310});311```312313### Integration with Other Tools314315Combine with other Vite plugins and tools:316317```typescript318import { defineConfig } from "vite";319import { tanstackStart } from "@tanstack/react-start/plugin/vite";320import { visualizer } from "rollup-plugin-visualizer";321322export default defineConfig({323plugins: [324tanstackStart(),325326// Bundle analyzer327visualizer({328filename: "dist/stats.html",329open: true,330gzipSize: true331}),332333// Custom environment handling334{335name: "environment-config",336configResolved(config) {337if (config.command === "serve") {338// Development-specific setup339process.env.NODE_ENV = "development";340}341}342}343],344345// Environment variables346define: {347__VERSION__: JSON.stringify(process.env.npm_package_version),348__BUILD_TIME__: JSON.stringify(new Date().toISOString())349}350});351```352353## Environment Variables and Constants354355### Vite Environment Names356357The plugin recognizes specific environment names for configuration:358359```typescript360const VITE_ENVIRONMENT_NAMES = {361client: "client",362server: "server",363start: "start"364} as const;365366// Usage in plugin configuration367if (environmentName === VITE_ENVIRONMENT_NAMES.client) {368// Client-specific configuration369} else if (environmentName === VITE_ENVIRONMENT_NAMES.server) {370// Server-specific configuration371}372```373374### Build-time Constants375376Constants available during build and runtime:377378```typescript379// Available in your application code380declare const __PRODUCTION__: boolean;381declare const __VERSION__: string;382declare const __BUILD_TIME__: string;383declare const __PLATFORM__: "node" | "cloudflare" | "vercel";384385// Usage386if (__PRODUCTION__) {387console.log(`Production build ${__VERSION__} built at ${__BUILD_TIME__}`);388}389```390391## Types392393```typescript { .api }394// Main plugin configuration interface395interface TanStackStartInputConfig {396framework?: 'react';397defaultEntryPaths?: {398client?: string;399server?: string;400start?: string;401};402target?: 'node' | 'webworker' | 'browser';403external?: string[];404optimizeDeps?: {405include?: string[];406exclude?: string[];407noDiscovery?: boolean;408};409resolve?: {410noExternal?: boolean | string[];411external?: string[];412};413}414415// Vite plugin option type416interface PluginOption {417name: string;418configResolved?: (config: ResolvedConfig) => void | Promise<void>;419configureServer?: (server: ViteDevServer) => void | Promise<void>;420buildStart?: (options: NormalizedInputOptions) => void | Promise<void>;421resolveId?: (id: string, importer?: string) => string | null | Promise<string | null>;422load?: (id: string) => string | null | Promise<string | null>;423transform?: (code: string, id: string) => TransformResult | Promise<TransformResult>;424generateBundle?: (options: OutputOptions, bundle: OutputBundle) => void | Promise<void>;425}426427// Environment names constants428interface ViteEnvironmentNames {429readonly client: "client";430readonly server: "server";431readonly start: "start";432}433434// Transform result type435interface TransformResult {436code: string;437map?: string | SourceMap | null;438}439440// Vite configuration types (from Vite)441interface ResolvedConfig {442command: "build" | "serve";443mode: string;444isProduction: boolean;445env: Record<string, any>;446resolve: ResolveOptions;447plugins: Plugin[];448}449450interface ViteDevServer {451middlewares: any;452hot: any;453ws: any;454config: ResolvedConfig;455}456457// Build options458interface NormalizedInputOptions {459input: string | string[] | Record<string, string>;460external: (string | RegExp)[] | RegExp | string | ((id: string, parentId: string, isResolved: boolean) => boolean);461plugins: Plugin[];462}463464interface OutputOptions {465format: "amd" | "cjs" | "es" | "iife" | "umd" | "system";466file?: string;467dir?: string;468globals?: Record<string, string>;469}470471interface OutputBundle {472[fileName: string]: OutputAsset | OutputChunk;473}474```475476## Constants477478```typescript { .api }479// Vite environment names used by the plugin480const VITE_ENVIRONMENT_NAMES: ViteEnvironmentNames;481482// Default plugin configuration483const DEFAULT_CONFIG: TanStackStartInputConfig;484485// Internal plugin markers486const TANSTACK_START_PLUGIN_NAME: "tanstack-react-start:config";487const TANSTACK_START_CORE_PLUGIN_NAME: "tanstack-start-plugin-core";488```