You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: fix TanStack Start SSR-first framing in comparison doc
Correct the SSR characterization flagged in review: TanStack Start is
SSR-first (routes server-rendered by default; opt out per route via
ssr:false / 'data-only' / SPA mode), not "client-first / SSR opt-in."
Also from review:
- Note the TanStack client libraries are OSS-compatible while RSC and
TanStack Router SSR require Pro (parallels the Next.js doc's callout).
- Clarify Start is built on Vite/Nitro (post-Vinxi, since v1.121.0), not
Vinxi.
- Soften the RSC colocation equivalence in the summary.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|**TanStack Query**| Client-side server-state cache (fetch, cache, invalidate) |**Complement.** Point it at a Rails JSON API. |
34
-
|**TanStack Router**| Type-safe client router with data loading + search-param validation |**Complement.** Client-only works in OSS; SSR is a Pro feature (see [TanStack Router](../../oss/building-features/tanstack-router.md)). |
|**TanStack Query**| Client-side server-state cache (fetch, cache, invalidate) |**Complement.** Point it at a Rails JSON API. |
39
+
|**TanStack Router**| Type-safe client router with data loading + search-param validation |**Complement.** Client-only works in OSS; SSR is a Pro feature (see [TanStack Router](../../oss/building-features/tanstack-router.md)). |
|**TanStack Start**| Full-stack React framework (TanStack Router + Vite/Nitro + server functions) |**Substitute.** This is the layer that overlaps with Rails. |
37
42
38
43
Adopting Query, Router, and Table does **not** require leaving Rails — React on Rails apps use them on
39
44
top of a Rails backend today. The only part you are choosing _between_ is the framework: **TanStack
@@ -46,8 +51,8 @@ data access, authorization, persistence, background work, and rendering HTML for
46
51
The two stacks supply that server very differently.
47
52
48
53
-**TanStack Start brings the _wiring_ for a server, and you supply the server.** Start is
49
-
**client-first**: client-side interactivity is the default, and you opt into server-side rendering per
50
-
route. Its server story is **server functions** — typed functions guaranteed to run server-side,
54
+
**SSR-first**: routes are server-rendered by default, with fine-grained selective SSR to opt a route
55
+
out (`ssr: false` / `'data-only'`, or SPA mode). Its server story is **server functions** — typed functions guaranteed to run server-side,
51
56
callable from the client as if they were local. But Start ships **no database, ORM, or auth of its
52
57
own**; it works with "any database, bring your own stack" (Drizzle is the common choice). You assemble
53
58
the backend; Start types the boundary to it.
@@ -96,9 +101,9 @@ is solving a problem you have already solved, in a second language.
96
101
97
102
## Rendering and first paint
98
103
99
-
-**TanStack Start** is client-first with **opt-in, per-route SSR**. You choose SSR/SSG/CSR per route,
100
-
which is flexible, but server rendering is something you turn on where you need it rather than the
101
-
default.
104
+
-**TanStack Start** is **SSR-first**: routes are server-rendered by default. It offers fine-grained
105
+
**selective SSR** — opt a route out with `ssr: false` or `ssr: 'data-only'`, or use SPA mode — which
106
+
is a genuine strength for tuning per-route rendering.
102
107
-**React on Rails** server-renders React from Rails (via the Node renderer in Pro), and **React on
103
108
Rails Pro** adds streaming SSR and RSC: the HTML shell streams immediately and server-rendered data
104
109
streams in progressively. TanStack Router state can be SSR'd and hydrated via Pro
@@ -122,17 +127,17 @@ Rails you generate them. (Improving this out of the box is on the roadmap — ch
122
127
> Marked "as of 2026" where a row reflects a current state rather than a permanent design choice. Both
123
128
> ecosystems move quickly — check each project's release notes before treating a label as permanent.
0 commit comments