- Spec files
npm-tanstack--react-start
Describes: pkg:npm/@tanstack/react-start@1.131.x
- Description
- SSR, Streaming, Server Functions, API Routes, bundling and more powered by TanStack Router and Vite. Ready to deploy to your favorite hosting provider.
- Author
- tessl
- Last updated
How to use
npx @tessl/cli registry install tessl/npm-tanstack--react-start@1.131.0
server.md docs/
1# Server-Side Rendering23Server-side rendering components, streaming handlers, request processing utilities, and server route creation for TanStack React Start applications with full SSR support and React Server Components integration.45## Capabilities67### StartServer Component89Main server-side application component that renders the React application on the server.1011```typescript { .api }12/**13* Main server-side application component for TanStack Start14* Renders the React application with router provider on the server15* @param props - Component props containing the router instance16* @returns JSX element with router provider for server rendering17*/18function StartServer<TRouter extends AnyRouter>(props: {19router: TRouter20}): JSX.Element;21```2223**Usage Example:**2425```typescript26import { StartServer } from '@tanstack/react-start/server';27import { createRouter } from './router';2829function serverEntry({ request }: { request: Request }) {30const router = createRouter();31return <StartServer router={router} />;32}33```3435### Request Handler Creation3637Core functionality for creating request handlers that process incoming HTTP requests.3839```typescript { .api }40/**41* Creates a Start request handler for processing HTTP requests42* @param options - Configuration options including router factory43* @returns Function that accepts a handler callback and returns configured handler44*/45function createStartHandler(options: {46createRouter: () => AnyRouter;47}): (handler: HandlerCallback) => HandlerCallback;4849interface CustomizeStartHandler {50(handler: HandlerCallback): HandlerCallback;51}5253interface HandlerCallback {54(context: {55request: Request;56router: AnyRouter;57responseHeaders: Headers;58}): Response | Promise<Response>;59}60```6162**Usage Example:**6364```typescript65import { createStartHandler, defaultStreamHandler } from '@tanstack/react-start/server';66import { createRouter } from './router';6768// Create the main request handler69export default createStartHandler({70createRouter,71})(defaultStreamHandler);72```7374### Default Handlers7576Pre-configured handlers for common server-side rendering scenarios.7778```typescript { .api }79/**80* Default streaming handler for server-side rendering with streaming support81* Renders the application as a stream for optimal performance82*/83const defaultStreamHandler: HandlerCallback;8485/**86* Default render handler for server-side rendering to string87* Renders the application to a complete HTML string88*/89const defaultRenderHandler: HandlerCallback;90```9192**Usage Examples:**9394```typescript95import {96createStartHandler,97defaultStreamHandler,98defaultRenderHandler99} from '@tanstack/react-start/server';100101// Using streaming handler (recommended)102const streamHandler = createStartHandler({ createRouter })(defaultStreamHandler);103104// Using string rendering handler105const stringHandler = createStartHandler({ createRouter })(defaultRenderHandler);106```107108### Router SSR Utilities109110Utilities for server-side rendering integration with TanStack Router.111112```typescript { .api }113/**114* Attaches server-side rendering utilities to a router instance115* @param router - Router instance to enhance with SSR capabilities116*/117function attachRouterServerSsrUtils(router: AnyRouter): void;118119/**120* Creates a request handler for processing HTTP requests with router121* @param options - Handler configuration options122* @returns Configured request handler function123*/124function createRequestHandler(options: {125createRouter: () => AnyRouter;126getRouter?: (request: Request) => AnyRouter;127}): (request: Request) => Promise<Response>;128129/**130* Defines a handler callback with proper typing131* @param callback - Handler function to wrap132* @returns Typed handler callback133*/134function defineHandlerCallback(135callback: HandlerCallback136): HandlerCallback;137138/**139* Transforms a ReadableStream with router integration140* @param options - Transformation options141* @returns Transformed stream142*/143function transformReadableStreamWithRouter(options: {144request: Request;145router: AnyRouter;146responseHeaders: Headers;147children: React.ReactNode;148}): ReadableStream;149150/**151* Transforms a pipeable stream with router integration152* @param options - Transformation options153* @returns Transformed pipeable stream154*/155function transformPipeableStreamWithRouter(options: {156request: Request;157router: AnyRouter;158responseHeaders: Headers;159children: React.ReactNode;160}): any; // Pipeable stream type varies by React version161```162163### Server Functions Handler164165Handler for processing server function requests.166167```typescript { .api }168/**169* Handles server function action requests170* Processes RPC-style calls from client to server functions171* @param request - HTTP request containing server function call172* @returns Response with server function result173*/174function handleServerAction(request: Request): Promise<Response>;175```176177### Server Routes178179Creation and management of server-only routes for API endpoints and server-side logic.180181```typescript { .api }182/**183* Creates a server-only route that doesn't render on the client184* @param options - Server route configuration options185* @returns Configured server route186*/187function createServerRoute<TRouteTypes extends ServerRouteTypes>(188options: ServerRouteOptions<TRouteTypes>189): ServerRouteWithTypes<TRouteTypes>;190191/**192* Creates a file-based server route193* @param path - File path for the route194* @returns File-based server route creator function195*/196function createServerFileRoute<TPath extends string>(197path: TPath198): CreateServerFileRoute<TPath>;199200/**201* Creates a server-only root route202* @param options - Root route configuration options203* @returns Configured server root route204*/205function createServerRootRoute<TRouteTypes extends ServerRouteTypes>(206options?: ServerRouteOptions<TRouteTypes>207): ServerRouteWithTypes<TRouteTypes>;208209interface ServerRouteOptions<TRouteTypes extends ServerRouteTypes> {210id?: string;211path?: string;212methods?: ServerRouteMethodsOptions<TRouteTypes>;213middleware?: ServerRouteMiddleware<TRouteTypes>;214afterMiddleware?: ServerRouteAfterMiddleware<TRouteTypes>;215}216217interface CreateServerFileRoute<TPath extends string> {218(options?: ServerRouteOptions<any>): ServerFileRoutesByPath[TPath];219}220221interface ServerRouteTypes {222params?: Record<string, any>;223search?: Record<string, any>;224context?: Record<string, any>;225}226```227228**Usage Examples:**229230```typescript231import { createServerRoute, createServerFileRoute } from '@tanstack/react-start/server';232233// Create a server route234const apiRoute = createServerRoute({235path: '/api/users',236methods: {237GET: async ({ request }) => {238const users = await getUsersFromDatabase();239return Response.json(users);240},241POST: async ({ request }) => {242const userData = await request.json();243const newUser = await createUser(userData);244return Response.json(newUser);245},246},247});248249// Create a file-based server route250const userRoute = createServerFileRoute('/api/users/$userId')({251methods: {252GET: async ({ params }) => {253const user = await getUserById(params.userId);254return Response.json(user);255},256},257});258```259260### Server Route Methods261262HTTP method handlers and utilities for server routes.263264```typescript { .api }265interface ServerRouteMethods<TRouteTypes extends ServerRouteTypes> {266GET?: ServerRouteMethodHandlerFn<TRouteTypes>;267POST?: ServerRouteMethodHandlerFn<TRouteTypes>;268PUT?: ServerRouteMethodHandlerFn<TRouteTypes>;269PATCH?: ServerRouteMethodHandlerFn<TRouteTypes>;270DELETE?: ServerRouteMethodHandlerFn<TRouteTypes>;271HEAD?: ServerRouteMethodHandlerFn<TRouteTypes>;272OPTIONS?: ServerRouteMethodHandlerFn<TRouteTypes>;273}274275interface ServerRouteMethodHandlerFn<TRouteTypes extends ServerRouteTypes> {276(context: ServerRouteMethodHandlerCtx<TRouteTypes>):277| Response278| Promise<Response>279| any280| Promise<any>;281}282283interface ServerRouteMethodHandlerCtx<TRouteTypes extends ServerRouteTypes> {284request: Request;285params: TRouteTypes['params'];286search: TRouteTypes['search'];287context: TRouteTypes['context'];288}289290type ServerRouteVerb =291| 'GET'292| 'POST'293| 'PUT'294| 'PATCH'295| 'DELETE'296| 'HEAD'297| 'OPTIONS';298```299300### Server Route Builders301302Fluent API for building server routes with middleware and validation.303304```typescript { .api }305interface ServerRouteMethodBuilder<TRouteTypes extends ServerRouteTypes> {306/** Add middleware to the route method */307middleware<TMiddleware>(308middleware: ServerRouteMethodBuilderMiddleware<TRouteTypes, TMiddleware>309): ServerRouteMethodBuilderWithTypes<TRouteTypes, TMiddleware>;310311/** Add after middleware to the route method */312afterMiddleware<TAfterMiddleware>(313middleware: ServerRouteMethodBuilderAfterMiddleware<TRouteTypes, TAfterMiddleware>314): ServerRouteMethodBuilderWithTypes<TRouteTypes, TAfterMiddleware>;315316/** Set the handler function for the route method */317handler(318handler: ServerRouteMethodBuilderHandler<TRouteTypes>319): ServerRouteMethod<TRouteTypes>;320}321322interface ServerRouteMethodBuilderWithTypes<TRouteTypes, TMiddleware>323extends ServerRouteMethodBuilder<TRouteTypes> {324middleware: TMiddleware;325}326327interface ServerRouteMethodBuilderHandler<TRouteTypes extends ServerRouteTypes> {328(context: ServerRouteMethodHandlerCtx<TRouteTypes>):329| Response330| Promise<Response>331| any332| Promise<any>;333}334335interface ServerRouteMethodBuilderMiddleware<TRouteTypes, TMiddleware> {336(context: ServerRouteMethodHandlerCtx<TRouteTypes>): TMiddleware | Promise<TMiddleware>;337}338339interface ServerRouteMethodBuilderAfterMiddleware<TRouteTypes, TAfterMiddleware> {340(context: ServerRouteMethodHandlerCtx<TRouteTypes>): TAfterMiddleware | Promise<TAfterMiddleware>;341}342```343344### HTTP Constants345346HTTP header constants and utilities.347348```typescript { .api }349/** TanStack Start specific header constants */350const HEADERS: {351readonly TSS_SHELL: 'X-TSS_SHELL';352};353```354355### H3 Integration356357Integration utilities for H3 server framework.358359```typescript { .api }360/**361* Converts H3 event to Web Request362* @param event - H3 event object363* @returns Web Request object364*/365function toWebRequest(event: H3Event): Request;366367/**368* Defines an H3 event handler369* @param handler - Handler function for H3 events370* @returns Configured H3 event handler371*/372function defineEventHandler<T>(373handler: (event: H3Event) => T | Promise<T>374): H3EventHandler<T>;375376interface H3Event {377node: {378req: IncomingMessage;379res: ServerResponse;380};381context: Record<string, any>;382[key: string]: any;383}384385interface H3EventHandler<T> {386(event: H3Event): T | Promise<T>;387}388389/**390* Runs a function with an H3 event in AsyncLocalStorage context391* @param event - H3 event to store in context392* @param fn - Function to run with the event context393* @returns Promise resolving to the function result394*/395function runWithEvent<T>(396event: H3Event,397fn: () => T | Promise<T>398): Promise<T>;399400/**401* Gets the current H3 event from AsyncLocalStorage context402* @returns Current H3 event403* @throws Error if no event is found in context404*/405function getEvent(): H3Event;406```407408## Core Types409410```typescript { .api }411interface AnyRouter {412state: {413matches: Array<any>;414location: any;415};416navigate: (options: any) => Promise<any>;417resolveRedirect: (redirect: any) => { options: any };418}419420interface ServerRoute<TRouteTypes extends ServerRouteTypes = ServerRouteTypes> {421id: string;422path: string;423methods: ServerRouteMethods<TRouteTypes>;424middleware?: Array<ServerRouteMiddleware<TRouteTypes>>;425afterMiddleware?: Array<ServerRouteAfterMiddleware<TRouteTypes>>;426}427428interface AnyServerRoute extends ServerRoute<any> {}429430interface ServerRouteWithTypes<TRouteTypes extends ServerRouteTypes>431extends ServerRoute<TRouteTypes> {}432433interface AnyServerRouteWithTypes extends ServerRouteWithTypes<any> {}434435interface ServerRouteManifest {436routes: Record<string, AnyServerRoute>;437}438439interface ServerFileRoutesByPath {440[path: string]: AnyServerRoute;441}442443interface ServerRouteMiddleware<TRouteTypes extends ServerRouteTypes> {444(context: ServerRouteMethodHandlerCtx<TRouteTypes>): any | Promise<any>;445}446447interface ServerRouteAfterMiddleware<TRouteTypes extends ServerRouteTypes> {448(context: ServerRouteMethodHandlerCtx<TRouteTypes>): any | Promise<any>;449}450451interface ServerRouteMethodsOptions<TRouteTypes extends ServerRouteTypes> {452[verb in ServerRouteVerb]?: ServerRouteMethodHandlerFn<TRouteTypes>;453}454455interface ServerRouteMethodsRecord<TRouteTypes extends ServerRouteTypes> {456[verb in ServerRouteVerb]: ServerRouteMethod<TRouteTypes>;457}458459interface ServerRouteMethod<TRouteTypes extends ServerRouteTypes> {460verb: ServerRouteVerb;461handler: ServerRouteMethodHandlerFn<TRouteTypes>;462middleware?: Array<ServerRouteMiddleware<TRouteTypes>>;463afterMiddleware?: Array<ServerRouteAfterMiddleware<TRouteTypes>>;464}465466interface ServerRouteAfterMethods<TRouteTypes extends ServerRouteTypes> {467[verb in ServerRouteVerb]: Array<ServerRouteAfterMiddleware<TRouteTypes>>;468}469470type ResolveAllServerContext<TRouteTypes extends ServerRouteTypes> =471TRouteTypes['context'] extends Record<string, any>472? TRouteTypes['context']473: {};474475type MergeMethodMiddlewares<T1, T2> = T1 & T2;476477type AssignAllMethodContext<TRouteTypes, TContext> = TRouteTypes & {478context: TContext;479};480481type AnyRouteMethodsBuilder = ServerRouteMethodBuilder<any>;482483interface ServerRouteMethodBuilderTypes {484params?: Record<string, any>;485search?: Record<string, any>;486context?: Record<string, any>;487}488489interface ServerRouteMethodBuilderOptions<TRouteTypes extends ServerRouteTypes> {490middleware?: Array<ServerRouteMethodBuilderMiddleware<TRouteTypes, any>>;491afterMiddleware?: Array<ServerRouteMethodBuilderAfterMiddleware<TRouteTypes, any>>;492}493494interface ServerRouteAddFileChildrenFn<TRouteTypes extends ServerRouteTypes> {495(children: Array<AnyServerRoute>): ServerRouteWithTypes<TRouteTypes>;496}497```