Implement, review, debug, and refactor TanStack Start React Server Components in React 19 apps. Use when tasks mention @tanstack/react-start/rsc, renderServerComponent, createCompositeComponent, CompositeComponent, renderToReadableStream, createFromReadableStream, createFromFetch, Composite Components, React Flight streams, loader or query owned RSC caching, router.invalidate, structuralSharing: false, selective SSR, stale names like renderRsc or .validator, or migration from Next App Router RSC patterns. Do not use for generic SSR or non-TanStack RSC frameworks except brief comparison.
Treat TanStack Start RSCs as fetchable React Flight payloads, not as a framework-owned server tree. Start from data ownership and cache ownership, then choose the smallest RSC primitive that fits.
vite.config.* for tanstackStart({ rsc: { enabled: true } }), rsc(), and viteReact().loader, loaderDeps, staleTime, ssr, and errorComponent.createServerFn, createServerOnlyFn, .server.*, and imports from @tanstack/react-start/server.router.invalidate(), invalidateQueries, refetchQueries, or GET cache headers.ssr: falserenderServerComponent(...) returns a renderable fragment. It does not support slots.createCompositeComponent(...) is for server-rendered UI that must accept client-provided children, render props, or component props.structuralSharing: false.props.children..inputValidator(...). Older snippets may still show .validator(...); normalize them.renderServerComponentcreateCompositeComponent + <CompositeComponent src={...} />renderToReadableStream, createFromReadableStream, createFromFetchcreateServerFn + response cache headers and/or external server cacherouter.invalidate()queryClient.invalidateQueries(...) or refetchQueries(...)renderServerComponentcreateCompositeComponentssr: 'data-only'ssr: falseloaderDepsuseSuspenseQuery + SSR ensureQueryDataPromise.alluse() inside Suspensechildren: free-form composition, no server-to-client data flowChildren.map, cloneElement, or inspect children on the server, stop and convert it to a render propparams + minimal loaderDeps)?structuralSharing: false for any RSC value?createServerFn({ method: 'POST' }) calls instead of hidden server actions?renderServerComponent, .inputValidator) instead of stale ones?docs/current-api-notes.mddocs/composite-components.mddocs/caching-refresh-ssr.mddocs/debugging-review.mddocs/architecture.mdexamples/01-renderable-route-loader.tsxexamples/02-composite-slots.tsxexamples/03-query-owned-rsc.tsxexamples/04-selective-ssr-data-only.tsxexamples/05-ssr-false-browser-loader.tsxexamples/06-low-level-flight-api-route.tsxcreateServerFn or createServerOnlyFn