- 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
index.md docs/
1# TanStack React Start23TanStack React Start is a modern full-stack React framework that provides server-side rendering (SSR), streaming, server functions, API routes, and integrated bundling capabilities built on top of TanStack Router and Vite. It enables developers to build scalable React applications with advanced features like type-safe server functions, real-time data streaming, and seamless client-server communication through RPC-style APIs.45## Package Information67- **Package Name**: @tanstack/react-start8- **Package Type**: npm9- **Language**: TypeScript10- **Installation**: `npm install @tanstack/react-start`1112## Core Imports1314```typescript15import {16useServerFn,17createServerFn,18createIsomorphicFn,19createServerOnlyFn,20createClientOnlyFn,21createMiddleware,22createStart,23hydrate,24json,25mergeHeaders26} from "@tanstack/react-start";27```2829For entry points:30```typescript31// Client-side components32import { StartClient, hydrateStart } from "@tanstack/react-start/client";3334// Server-side components35import { StartServer, defaultStreamHandler, defaultRenderHandler } from "@tanstack/react-start/server";3637// RPC functionality38import { createClientRpc } from "@tanstack/react-start/client-rpc";39import { createServerRpc } from "@tanstack/react-start/server-rpc";4041// Vite plugin42import { tanstackStart } from "@tanstack/react-start/plugin/vite";43```4445## Basic Usage4647```typescript48// 1. Server function example49import { createServerFn } from "@tanstack/react-start";5051const getUser = createServerFn()52.handler(async (id: string) => {53// Server-only code54return await db.user.findUnique({ where: { id } });55});5657// 2. Client usage of server function58import { useServerFn } from "@tanstack/react-start";5960function UserProfile({ userId }: { userId: string }) {61const getUserFn = useServerFn(getUser);62const [user, setUser] = useState(null);6364useEffect(() => {65getUserFn(userId).then(setUser);66}, [userId]);6768return user ? <div>Hello, {user.name}!</div> : <div>Loading...</div>;69}7071// 3. Vite configuration72import { defineConfig } from "vite";73import { tanstackStart } from "@tanstack/react-start/plugin/vite";7475export default defineConfig({76plugins: [tanstackStart()],77});78```7980## Architecture8182TanStack React Start is built around several key components:8384- **Server Functions**: Type-safe functions that run on the server but can be called from the client85- **Isomorphic Functions**: Functions with different implementations for client and server environments86- **Middleware System**: Composable middleware for server function validation, authentication, and processing87- **SSR Components**: `StartClient` and `StartServer` for hydration and server-side rendering88- **RPC System**: Client-server communication layer with automatic serialization89- **Vite Integration**: Seamless development experience with hot module replacement and bundling9091## Capabilities9293### Server Functions9495Create and manage server-side functions with full type safety and automatic serialization. Perfect for database operations, API calls, and server-side business logic.9697```typescript { .api }98function createServerFn<TMethod extends Method>(99options?: { method?: TMethod }100): ServerFnBuilder<{}, TMethod>;101102interface ServerFnBuilder<TRegister, TMethod extends Method> {103handler<TResponse>(104handler: (...args: any[]) => Promise<TResponse> | TResponse105): ServerFn<TRegister, TMethod, TResponse>;106middleware<TMiddleware>(107middleware: TMiddleware108): ServerFnBuilder<TRegister & TMiddleware, TMethod>;109inputValidator<TValidator>(110validator: TValidator111): ServerFnBuilder<TRegister & { validator: TValidator }, TMethod>;112}113114function useServerFn<T extends (...args: any[]) => Promise<any>>(115serverFn: T116): (...args: Parameters<T>) => ReturnType<T>;117```118119[Server Functions](./server-functions.md)120121### Isomorphic Functions122123Create functions with different implementations for client and server environments, enabling code that adapts to its execution context.124125```typescript { .api }126function createIsomorphicFn(): IsomorphicFnBase;127128interface IsomorphicFnBase {129server<TArgs extends Array<any>, TServer>(130serverImpl: (...args: TArgs) => TServer131): ServerOnlyFn<TArgs, TServer>;132client<TArgs extends Array<any>, TClient>(133clientImpl: (...args: TArgs) => TClient134): ClientOnlyFn<TArgs, TClient>;135}136137function createServerOnlyFn<TArgs extends Array<any>, TServer>(138serverImpl: (...args: TArgs) => TServer139): ServerOnlyFn<TArgs, TServer>;140141function createClientOnlyFn<TArgs extends Array<any>, TClient>(142clientImpl: (...args: TArgs) => TClient143): ClientOnlyFn<TArgs, TClient>;144```145146[Isomorphic Functions](./isomorphic-functions.md)147148### Middleware System149150Build composable middleware for server functions to handle validation, authentication, logging, and other cross-cutting concerns.151152```typescript { .api }153function createMiddleware<TType extends MiddlewareType>(154options?: { type?: TType }155): CreateMiddlewareResult<{}, TType>;156157interface CreateMiddlewareResult<TRegister, TType> {158middleware<T>(middleware: T): CreateMiddlewareResult<TRegister & T, TType>;159inputValidator<T>(validator: T): CreateMiddlewareResult<TRegister & T, TType>;160client<T>(client: T): CreateMiddlewareResult<TRegister & T, TType>;161server<T>(server: T): CreateMiddlewareResult<TRegister & T, TType>;162}163```164165[Middleware](./middleware.md)166167### SSR Components168169React components for server-side rendering and client-side hydration with streaming support.170171```typescript { .api }172function StartClient(): JSX.Element;173function StartServer<TRouter extends AnyRouter>(props: {174router: TRouter;175}): JSX.Element;176177function createStartHandler(178streamHandler?: StreamHandler179): RequestHandler<Register>;180181function defaultStreamHandler(): StreamHandler;182function defaultRenderHandler(): RenderHandler;183```184185[SSR Components](./ssr-components.md)186187### RPC System188189Type-safe client-server RPC communication with automatic serialization and request handling.190191```typescript { .api }192function createClientRpc(193functionId: string,194fetcher: (...args: any[]) => Promise<any>195): ClientRpc;196197function createServerRpc(198functionId: string,199splitImportFn: (...args: any[]) => any200): ServerRpc;201```202203[RPC System](./rpc-system.md)204205### Core Utilities206207Core utilities for application initialization, hydration, and response handling.208209```typescript { .api }210function createStart<TOptions>(211options?: TOptions212): StartInstance<TOptions>;213214function hydrate<T>(data: T): Promise<T>;215216function json<T>(217data: T,218options?: { status?: number; headers?: HeadersInit }219): JsonResponse;220221function mergeHeaders(...headers: HeadersInit[]): Headers;222```223224### Request/Response Utilities225226Utilities for accessing request information and handling server-side operations.227228```typescript { .api }229function getRequest(): Request;230function getRequestHeaders(): Record<string, string>;231function getRequestHeader(name: string): string | undefined;232function getRequestIP(options?: { ipHeader?: string }): string | undefined;233```234235[Request/Response Utilities](./request-response.md)236237### Server Handler Creation238239Functions for creating request handlers and managing server-side operations.240241```typescript { .api }242function createStartHandler(243options?: { streamHandler?: StreamHandler }244): RequestHandler<Register>;245246function handleServerAction<T>(action: T): Promise<T>;247248function requestHandler<TRegister>(249handler: (request: Request) => Response | Promise<Response>250): RequestHandler<TRegister>;251```252253[Server Utilities](./server-utilities.md)254255### Vite Integration256257Vite plugin for seamless integration with TanStack Start, providing automatic configuration and development tools.258259```typescript { .api }260function tanstackStart(261options?: TanStackStartInputConfig262): Array<PluginOption>;263264interface TanStackStartInputConfig {265framework?: 'react';266defaultEntryPaths?: {267client?: string;268server?: string;269start?: string;270};271// Additional configuration options272}273```274275[Vite Plugin](./vite-plugin.md)276277## Types278279```typescript { .api }280// Core server function types281type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';282283interface ServerFn<TRegister, TMethod extends Method, TResponse> {284(...args: any[]): Promise<TResponse>;285url: string;286functionId: string;287}288289interface ServerFnBuilder<TRegister, TMethod extends Method> {290handler<TResponse>(291handler: (...args: any[]) => Promise<TResponse> | TResponse292): ServerFn<TRegister, TMethod, TResponse>;293middleware<TMiddleware>(294middleware: TMiddleware295): ServerFnBuilder<TRegister & TMiddleware, TMethod>;296inputValidator<TValidator>(297validator: TValidator298): ServerFnBuilder<TRegister & { validator: TValidator }, TMethod>;299}300301// Isomorphic function types302interface IsomorphicFn<TArgs extends Array<any>, TServer, TClient> {303(...args: TArgs): TServer | TClient;304}305306interface ServerOnlyFn<TArgs extends Array<any>, TServer>307extends IsomorphicFn<TArgs, TServer> {308client<TClient>(309clientImpl: (...args: TArgs) => TClient310): IsomorphicFn<TArgs, TServer, TClient>;311}312313interface ClientOnlyFn<TArgs extends Array<any>, TClient>314extends IsomorphicFn<TArgs, undefined, TClient> {315server<TServer>(316serverImpl: (...args: TArgs) => TServer317): IsomorphicFn<TArgs, TServer, TClient>;318}319320interface IsomorphicFnBase {321server<TArgs extends Array<any>, TServer>(322serverImpl: (...args: TArgs) => TServer323): ServerOnlyFn<TArgs, TServer>;324client<TArgs extends Array<any>, TClient>(325clientImpl: (...args: TArgs) => TClient326): ClientOnlyFn<TArgs, TClient>;327}328329// Middleware types330interface FunctionMiddleware<TRegister = {}, TMethod extends Method = Method> {331// Middleware implementation details332}333334interface RequestMiddleware {335// Request middleware implementation336}337338type AnyFunctionMiddleware = FunctionMiddleware<any, any>;339type AnyRequestMiddleware = RequestMiddleware;340341// Session management types342interface SessionManager<T> {343get(): Promise<T | undefined>;344update(updater: (current: T | undefined) => T): Promise<void>;345clear(): Promise<void>;346}347348interface SessionOptions {349cookie?: {350domain?: string;351httpOnly?: boolean;352maxAge?: number;353path?: string;354sameSite?: 'strict' | 'lax' | 'none';355secure?: boolean;356};357}358359// Cookie management types360interface CookieOptions {361domain?: string;362expires?: Date;363httpOnly?: boolean;364maxAge?: number;365path?: string;366sameSite?: 'strict' | 'lax' | 'none';367secure?: boolean;368}369370// Request/Response types371interface RequestHandler<T> {372(request: Request): Promise<Response>;373}374375interface RequestOptions {376onError?: (error: Error) => Response | Promise<Response>;377onRequest?: (request: Request) => Request | Promise<Request>;378onResponse?: (response: Response) => Response | Promise<Response>;379}380381// Router types382interface AnyRouter {383// Router implementation details from TanStack Router384}385386// Response types387interface JsonResponse {388json(): any;389status: number;390headers: Headers;391}392393interface DehydratedRouter {394// Dehydrated router state395}396397// Start instance types398interface StartInstance<TSerializationAdapters = any, TDefaultSsr = any, TRequestMiddlewares = any, TFunctionMiddlewares = any> {399getOptions(): StartInstanceOptions<TSerializationAdapters, TDefaultSsr, TRequestMiddlewares, TFunctionMiddlewares>;400}401402interface StartInstanceOptions<TSerializationAdapters, TDefaultSsr, TRequestMiddlewares, TFunctionMiddlewares> {403// Start instance configuration options404}405406type AnyStartInstance = StartInstance<any, any, any, any>;407type AnyStartInstanceOptions = StartInstanceOptions<any, any, any, any>;408409// RPC types410interface ClientRpc {411// Client RPC implementation412}413414interface ServerRpc {415// Server RPC implementation416}417418// Vite plugin types419interface TanStackStartInputConfig {420framework?: 'react';421defaultEntryPaths?: {422client?: string;423server?: string;424start?: string;425};426[key: string]: any;427}428429interface PluginOption {430name: string;431configResolved?: (config: any) => void;432configureServer?: (server: any) => void;433buildStart?: (options: any) => void;434transform?: (code: string, id: string) => any;435}436437// Registration interface for type augmentation438interface Register {439// Extend this interface to register custom types440}441```