Skip to main content

Feature matrix

Every feature of TanStack Query's core, and where to find it — or why it is not here. The names in the right-hand column are on the API reference pages, with their types and defaults.

Here​

Queries, staleness, background refetchingStaleTime, RefetchOn, RefetchInterval
Request deduplication across observersone fetch for N readers of one key
Retries with backoffRetryPolicy, RetryDelay, and failureCount / failureReason on the result
CancellationQueryCancelToken, client.cancelQueries
Garbage collectionGcTime
Mutations, optimistic updates, rollbackonMutate → onError/onSettled
Mutation scopes (serialised writes)MutationScope
Infinite queries, both directions, maxPagesInfiniteQueryOptions
initialData and placeholderDataincluding keepPrevious
select and structural sharingQuerySelectOptions, a second options shape with select required; plus buildWhen on the builders and the keyless reads
select from a shared options factorywithSelect(select) keeps every other field
A list of queriesQueriesObserver / QueriesBuilder
Combining results of different types(a, b).combine(…) over a record, combine over a List, combineWith, optional(), CombineMemo
How many queries are fetching, how many mutations are running (useIsFetching, useIsMutating)client.isFetching() / IsFetchingController, client.isMutating()
Cancelling a mutation, a context for its functionMutation.cancel(), MutationController.cancel(), mutationFnWithContext
Giving up after N failuresconsecutiveErrorCount on QueryState and QueryResult
Structural sharing into your own classesStructurallyShareable
Cache-wide mutation stateMutationStateObserver / MutationStateController, and .typed for one mutation type
Cache events and global callbacksqueryCache.subscribe, mutationCache.subscribe, meta
Offline behaviourNetworkMode, paused mutations, resumePausedMutations
Per-client focus / online / notify managersnot module-level singletons
A Flutter binding with four equal call stylesand no dependency beyond Flutter
Widget teststhe teardown is a documented snippet, not an export — see Testing

Deliberately not in 1.0​

TanStack QueryHere
Persistence and hydration (hydrate, dehydrate, persister, isRestoring)not in 1.0; Query.setState is the door a persister would use
notifyOnChangeProps, trackResultselect, plus buildWhen on the builders and the keyless reads, mutations included
throwOnErrorerrors live in the sealed result (QueryError)
queryKeyHashFnQueryKey is a value type
structuralSharing via replaceEqualDeepdeep value equality for lists, maps and sets, == for everything else, plus an optional structuralSharing hook; a class that implements StructurallyShareable is walked into
useQueries' heterogeneous tuple and its combine stepQueriesObserver is homogeneous. Different data types are combined with combine on a record of results — (a, b).combine((a, b) => …) gives a CombinedResult (pending / error / data with refetchError), with an optional CombineMemo; the same combine over a List, combineWith for a list plus a source of another type, optional() for a source the screen can do without
streamedQuerynot ported
experimental_prefetchInRender, Suspense, fetchOptimisticReact-only, not ported
select on fetchQuerymap the future
initialDataUpdatedAt as a functioninitialDataUpdatedAtCompute, a DateTime? Function() evaluated only when the data is actually seeded
SSR: isServer, environmentManager, timeoutManagernot ported
MutationFunctionContextmutationFn takes its variables only; mutationFnWithContext: (variables, context) is the two-argument form. Its context adds the typed onMutateResult and a signal to client, meta and mutationKey — and cancel() on a mutation, which TanStack Query does not have, cancels it
Callbacks in setMutationDefaultsnot ported
Devtoolsnone — see debugging

The differences​

Where query_kit behaves differently rather than not at all — one key, one exact type; whole-result comparison with buildWhen; two options shapes; named filters: — see differences from TanStack Query.