Server-Side Rendering and Live Queries

TanStack Start routes render on the server for the first pageload of a browsing session. Neither the React Query nor standard Convex useQuery() hooks kick off requests for this data during this initial SSR pass, but the React Query hook useSuspenseQuery() does. The React Query client is then serialized with whatever data was loaded to make it available in the browser at hydration time. This reduces rendering on the server and updating on the client from two steps to one step: isomorphic data fetching with a single hook.

Try reloading this page to see the difference between useSuspenseQuery() and useQuery().

9
User 90445/21/25, 9:35 AM

hello Nipunn! I'll be late to make the meeting tomorrow morning

4
User 46325/21/25, 9:34 AM

hey Nipunn- how's the weather in SF?

9
User 92445/21/25, 9:34 AM

hello James, what's your favorite ice cream place?

9
User 92445/21/25, 9:34 AM

hi James... how's the weather in SF?

9
User 92445/21/25, 9:34 AM

Hi Nipunn! I'll be late to make the meeting tomorrow morning

9
User 95015/20/25, 3:09 PM

hello James; Could you let the customer know we've fixed their issue?

9
User 95015/20/25, 3:09 PM

hey Nipunn; Could you let the customer know we've fixed their issue?

9
User 95015/20/25, 3:09 PM

hi James... Could you let the customer know we've fixed their issue?

7
User 715/20/25, 3:08 PM

Hi James; how was your weekend?

3
User 3755/20/25, 3:08 PM

Hi Emma- what's your favorite ice cream place?

2
User 2795/20/25, 3:08 PM

hi Nipunn! how's the weather in SF?

6
User 6775/20/25, 3:08 PM

hey Jamie, what's your favorite ice cream place?

1
User 1615/20/25, 3:08 PM

Hi Nipunn! I'll be late to make the meeting tomorrow morning

3
User 3655/20/25, 3:08 PM

hello Jamie! I'll be late to make the meeting tomorrow morning

1
User 1875/20/25, 3:08 PM

hello Nipunn... how's the weather in SF?

8
User 8215/20/25, 3:08 PM

hello James... how's the weather in SF?

5
User 5645/20/25, 3:08 PM

Hi James; Could you let the customer know we've fixed their issue?

1
User 1185/20/25, 3:08 PM

hey Jamie... what's your favorite ice cream place?

9
User 9075/20/25, 3:08 PM

hello Nipunn, how was your weekend?

5
User 5215/20/25, 3:08 PM

hello Nipunn... I'll be late to make the meeting tomorrow morning

1const { data } = useSuspenseQuery(convexQuery(
2 api.messages.listMessages,
3 { channel: "chatty" }
4))
1const { data, isPending } = useQuery(convexQuery(
2 api.messages.listMessages,
3 { channel: "chatty" }
4))

On the browser these queries resume their subscriptions which you can see by .

Another way to opt into server-side data loading is to load the query in a loader.

Learn More

TanStack Start SSR Guide