# Client SDKs

**URL:** https://community.apollographql.com/c/client-sdk/21.md

[Latest](https://community.apollographql.com/latest.md) · [Categories](https://community.apollographql.com/categories.md) · [Tags](https://community.apollographql.com/tags.md)

---

## [About the Client SDKs category](https://community.apollographql.com/t/about-the-client-sdks-category/8144)

<div class="topic-metadata">

**Author:** [@Justin\_Gonzalez](https://community.apollographql.com/u/Justin_Gonzalez)\
**Replies:** 0\
**Last updated:** [January 23, 2025, 11:22pm UTC](https://community.apollographql.com/t/about-the-client-sdks-category/8144 "2025-01-23T23:22:22Z")

</div>

If you’re working with React, iOS, Kotlin, or other frameworks, this is the place to connect, troubleshoot and get support. Why use this category? Use this space to: Troubleshoot issues with Apollo Client SDKs on web …

---

## [Should BatchHttpLink exclude mutations by default?](https://community.apollographql.com/t/should-batchhttplink-exclude-mutations-by-default/10058)

<div class="topic-metadata">

**Author:** [@markl](https://community.apollographql.com/u/markl)\
**Replies:** 4\
**Last updated:** [September 17, 2026, 5:15pm UTC](https://community.apollographql.com/t/should-batchhttplink-exclude-mutations-by-default/10058 "2026-09-17T17:15:41Z")

</div>

BatchHttpLink’s default batchKey function does not distinguish between queries and mutations. Both get grouped into the same batch. I understand that in theory it’s a valid transport level optimization since the server a…

---

## [Should a tightly coupled mutation hook spread a component-owned fragment?](https://community.apollographql.com/t/should-a-tightly-coupled-mutation-hook-spread-a-component-owned-fragment/10032)

<div class="topic-metadata">

**Author:** [@craigmwright](https://community.apollographql.com/u/craigmwright)\
**Replies:** 0\
**Last updated:** [August 31, 2026, 4:52pm UTC](https://community.apollographql.com/t/should-a-tightly-coupled-mutation-hook-spread-a-component-owned-fragment/10032 "2026-08-31T16:52:03Z")

</div>

Apollo recommends colocating fragments with the components that consume their fields. The documentation also recommends that a parent component include only fragments belonging to its directly rendered children, creating…

---

## [V4: Event loop saturation when InMemoryCache executeSelectionSet/executeSubSelectedArray caches are full (thrashing under high subscription churn)](https://community.apollographql.com/t/v4-event-loop-saturation-when-inmemorycache-executeselectionset-executesubselectedarray-caches-are-full-thrashing-under-high-subscription-churn/10009)

<div class="topic-metadata">

**Author:** [@kimh](https://community.apollographql.com/u/kimh)\
**Replies:** 1\
**Last updated:** [August 28, 2026, 5:00pm UTC](https://community.apollographql.com/t/v4-event-loop-saturation-when-inmemorycache-executeselectionset-executesubselectedarray-caches-are-full-thrashing-under-high-subscription-churn/10009 "2026-08-28T17:00:56Z")

</div>

We have an app that maintains a large number of concurrent GraphQL subscriptions (order of 500+) writing frequent updates into a single InMemoryCache during the initial load and UI maintains about the same number of watc…

---

## [iOS SQLiteNormalizedCache cold start can be slower than reloading data from backend](https://community.apollographql.com/t/ios-sqlitenormalizedcache-cold-start-can-be-slower-than-reloading-data-from-backend/9344)

<div class="topic-metadata">

**Author:** [@josh\_josh\_josh](https://community.apollographql.com/u/josh_josh_josh)\
**Replies:** 5\
**Last updated:** [August 2, 2026, 8:23pm UTC](https://community.apollographql.com/t/ios-sqlitenormalizedcache-cold-start-can-be-slower-than-reloading-data-from-backend/9344 "2026-08-02T20:23:31Z")

</div>

I have a simple query that loads a list of Visa card transactions. I’m currently testing with a large list of 4922 TransactionFragments. (Queries & Fragments shown at bottom of this post). As you can see from the follow…

---

## [Multi-module codegen: "unused fragment" warnings for fragments used only in downstream modules](https://community.apollographql.com/t/multi-module-codegen-unused-fragment-warnings-for-fragments-used-only-in-downstream-modules/9942)

<div class="topic-metadata">

**Author:** [@Iulian\_Iancu\_mindera](https://community.apollographql.com/u/Iulian_Iancu_mindera)\
**Replies:** 1\
**Last updated:** [July 7, 2026, 1:11pm UTC](https://community.apollographql.com/t/multi-module-codegen-unused-fragment-warnings-for-fragments-used-only-in-downstream-modules/9942 "2026-07-07T13:11:10Z")

</div>

We have a large multi-module Android project using Apollo Kotlin 5.0.1. To share GraphQL fragments across features we put each shared fragment in its own Gradle module and wire cross-module codegen with metadata: apol…

---

## [Best way to structure GraphQL queries for a data-heavy game dashboard?](https://community.apollographql.com/t/best-way-to-structure-graphql-queries-for-a-data-heavy-game-dashboard/9916)

<div class="topic-metadata">

**Author:** [@ketchum2812](https://community.apollographql.com/u/ketchum2812)\
**Replies:** 0\
**Last updated:** [June 15, 2026, 4:01pm UTC](https://community.apollographql.com/t/best-way-to-structure-graphql-queries-for-a-data-heavy-game-dashboard/9916 "2026-06-15T16:01:02Z")

</div>

Hi everyone, I’m working on a game project that has several dashboards displaying player progress, achievements, levels, statistics, and leaderboard information. We’re currently using Apollo Client and have noticed tha…

---

## [React router client loader and preloadQuery](https://community.apollographql.com/t/react-router-client-loader-and-preloadquery/9838)

<div class="topic-metadata">

**Author:** [@YoavSh](https://community.apollographql.com/u/YoavSh)\
**Replies:** 1\
**Last updated:** [May 13, 2026, 2:10pm UTC](https://community.apollographql.com/t/react-router-client-loader-and-preloadquery/9838 "2026-05-13T14:10:06Z")

</div>

Hi I have a react router 7 application (data mode) with Apollo client. I have a route loader where I use preloadQuery to fetch the pages’s data and I also use preloadQuery.toPromise(queryRef) to prevent route transitio…

---

## [Many repeat cache watches causing memory/CPU overhead](https://community.apollographql.com/t/many-repeat-cache-watches-causing-memory-cpu-overhead/9556)

<div class="topic-metadata">

**Author:** [@jcostello](https://community.apollographql.com/u/jcostello)\
**Replies:** 19\
**Last updated:** [May 6, 2026, 8:40pm UTC](https://community.apollographql.com/t/many-repeat-cache-watches-causing-memory-cpu-overhead/9556 "2026-05-06T20:40:41Z")

</div>

I’m working on a large project that can render up to 5,000 items on a page at once. In general, we try to follow fragment colocation, where a component uses useFragment to declare its data requirements. However, we’re se…

---

## [Is CacheAndNetwork FetchPolicy going to be deprecated in future?](https://community.apollographql.com/t/is-cacheandnetwork-fetchpolicy-going-to-be-deprecated-in-future/9821)

<div class="topic-metadata">

**Author:** [@vijay\_v\_joshi](https://community.apollographql.com/u/vijay_v_joshi)\
**Replies:** 1\
**Last updated:** [May 6, 2026, 8:20am UTC](https://community.apollographql.com/t/is-cacheandnetwork-fetchpolicy-going-to-be-deprecated-in-future/9821 "2026-05-06T08:20:55Z")

</div>

Hello Team, I see this comment “// CacheAndNetwork is deprecated but should still work” , Is there plan to deprecate this FetchPolicy in future. If not, why was this comment added to the code? Thank you, Vijay

---

## [Big query vs multiples queries](https://community.apollographql.com/t/big-query-vs-multiples-queries/9783)

<div class="topic-metadata">

**Author:** [@LelouchRevolution](https://community.apollographql.com/u/LelouchRevolution)\
**Replies:** 2\
**Last updated:** [April 2, 2026, 8:34pm UTC](https://community.apollographql.com/t/big-query-vs-multiples-queries/9783 "2026-04-02T20:34:59Z")

</div>

Hello folks! I’m new to GraphQL and was wondering what the best approach is for building a screen in React. Should I go with one big query or split it into multiple GraphQL queries? Thanks in advance!

---

## [Apollo iOS 2.0 Migration and parsing data](https://community.apollographql.com/t/apollo-ios-2-0-migration-and-parsing-data/9756)

<div class="topic-metadata">

**Author:** [@irisha8787](https://community.apollographql.com/u/irisha8787)\
**Replies:** 1\
**Last updated:** [March 21, 2026, 12:39am UTC](https://community.apollographql.com/t/apollo-ios-2-0-migration-and-parsing-data/9756 "2026-03-21T00:39:37Z")

</div>

Prior to 2.0 version, GraphQLResponse had a few helpful public functions like parseResponse that could be used by the consumers, but now they seem to be removed. I didn’t see any info on these in the migration guide, is …

---

## [Two quries with some common objects causing infinite api calls](https://community.apollographql.com/t/two-quries-with-some-common-objects-causing-infinite-api-calls/9747)

<div class="topic-metadata">

**Author:** [@Muhammad\_Abdul\_Rehma](https://community.apollographql.com/u/Muhammad_Abdul_Rehma)\
**Replies:** 0\
**Last updated:** [March 10, 2026, 10:03am UTC](https://community.apollographql.com/t/two-quries-with-some-common-objects-causing-infinite-api-calls/9747 "2026-03-10T10:03:25Z")

</div>

I can see this topic was opened with the same issue, i tired everything from the docs, but I didn’t find any solution. Any luck if anyone founds solution for this?

---

## [Question about generateApolloMetadata support in Apollo iOS for multi-module projects](https://community.apollographql.com/t/question-about-generateapollometadata-support-in-apollo-ios-for-multi-module-projects/9742)

<div class="topic-metadata">

**Author:** [@engsulta](https://community.apollographql.com/u/engsulta)\
**Replies:** 1\
**Last updated:** [March 9, 2026, 4:46pm UTC](https://community.apollographql.com/t/question-about-generateapollometadata-support-in-apollo-ios-for-multi-module-projects/9742 "2026-03-09T16:46:02Z")

</div>

Hi team, We’re working on an iOS project with a multi-module architecture where several feature modules share core GraphQL fragments defined in a common module. In Apollo Android/Kotlin, the generateApolloMetadata opt…

---

## [Remove references from queries after eviction and before repopulation (from another query)](https://community.apollographql.com/t/remove-references-from-queries-after-eviction-and-before-repopulation-from-another-query/9714)

<div class="topic-metadata">

**Author:** [@Mateo\_Jaouen](https://community.apollographql.com/u/Mateo_Jaouen)\
**Replies:** 1\
**Last updated:** [February 11, 2026, 10:30pm UTC](https://community.apollographql.com/t/remove-references-from-queries-after-eviction-and-before-repopulation-from-another-query/9714 "2026-02-11T22:30:04Z")

</div>

Hello, I’m facing an issue with references while moving a “file” from a folder to a subfolder. When I move an “file“ I first evict it from the cache (then invalidate the destination folder queries), the object disappea…

---

## [Cache.evict does not retrigger query](https://community.apollographql.com/t/cache-evict-does-not-retrigger-query/9672)

<div class="topic-metadata">

**Author:** [@raxell](https://community.apollographql.com/u/raxell)\
**Replies:** 3\
**Last updated:** [February 2, 2026, 10:46am UTC](https://community.apollographql.com/t/cache-evict-does-not-retrigger-query/9672 "2026-02-02T10:46:54Z")

</div>

Hi, I’m using useBackgroundQuery to aggregate data into a single query. I have a structure like the following: const FRAGMENT = gql\` fragment ComponentXFragment on Query { myList { id } } \` const Com…

---

## [Incorrect mutation caller return type — \`data\` is nullish when \`errorPolicy\` is \`none\`](https://community.apollographql.com/t/incorrect-mutation-caller-return-type-data-is-nullish-when-errorpolicy-is-none/9667)

<div class="topic-metadata">

**Author:** [@SimpleCreations](https://community.apollographql.com/u/SimpleCreations)\
**Replies:** 2\
**Last updated:** [January 23, 2026, 4:19pm UTC](https://community.apollographql.com/t/incorrect-mutation-caller-return-type-data-is-nullish-when-errorpolicy-is-none/9667 "2026-01-23T16:19:52Z")

</div>

Consider the following example: const \[createPost\] = useMutation(CreatePostDocument); const handleSubmit = async () =\> { const { data } = await createPost({ variables: { text: 'abc' } }); if (data != null) …

---

## [useFragment requires concrete \_\_typename for interface types](https://community.apollographql.com/t/usefragment-requires-concrete-typename-for-interface-types/9657)

<div class="topic-metadata">

**Author:** [@jcostello](https://community.apollographql.com/u/jcostello)\
**Replies:** 1\
**Last updated:** [January 23, 2026, 12:49pm UTC](https://community.apollographql.com/t/usefragment-requires-concrete-typename-for-interface-types/9657 "2026-01-23T12:49:20Z")

</div>

I’m working on a large project that is currently running into some friction when using useFragment with types that implement interfaces. Context: Our app preloads data in a custom package and components then read that …

---

## [Tutorial Series: Headless Craft CMS with GraphQL and React](https://community.apollographql.com/t/tutorial-series-headless-craft-cms-with-graphql-and-react/9652)

<div class="topic-metadata">

**Author:** [@kmgdev](https://community.apollographql.com/u/kmgdev)\
**Replies:** 0\
**Last updated:** [January 20, 2026, 6:17pm UTC](https://community.apollographql.com/t/tutorial-series-headless-craft-cms-with-graphql-and-react/9652 "2026-01-20T18:17:42Z")

</div>

Hi everyone, I’ve recently completed a tutorial series on setting up a React site using Apollo Client to query a headless Craft CMS backend. It’s designed for frontend devs coming from traditional CMS development looking…

---

## [Set headers in RetryLink](https://community.apollographql.com/t/set-headers-in-retrylink/9605)

<div class="topic-metadata">

**Author:** [@swrobel](https://community.apollographql.com/u/swrobel)\
**Replies:** 3\
**Last updated:** [January 7, 2026, 9:00am UTC](https://community.apollographql.com/t/set-headers-in-retrylink/9605 "2026-01-07T09:00:10Z")

</div>

I’m interested in adding a header Request-Attempt to help identify requests made via RetryLink functionality, and how many retries may have been attempted. Looking at the API docs, I don’t see a way to modify operation.…

---

## [User Apollo Client in combination wit Pulse Logger](https://community.apollographql.com/t/user-apollo-client-in-combination-wit-pulse-logger/9595)

<div class="topic-metadata">

**Author:** [@Paul\_Vaughan](https://community.apollographql.com/u/Paul_Vaughan)\
**Replies:** 0\
**Last updated:** [December 17, 2025, 4:03pm UTC](https://community.apollographql.com/t/user-apollo-client-in-combination-wit-pulse-logger/9595 "2025-12-17T16:03:43Z")

</div>

Question: How should network logging & URLSession metrics be implemented in Apollo iOS v2 (replacement for URLSessionClient subclassing)? I’m migrating an iOS app from Apollo iOS \< 2.0 to Apollo iOS v2, and I’m running i…

---

## [Cache performance issues on v3 (maybeBroadcastWatch)](https://community.apollographql.com/t/cache-performance-issues-on-v3-maybebroadcastwatch/9570)

<div class="topic-metadata">

**Author:** [@cain](https://community.apollographql.com/u/cain)\
**Replies:** 2\
**Last updated:** [December 4, 2025, 11:05pm UTC](https://community.apollographql.com/t/cache-performance-issues-on-v3-maybebroadcastwatch/9570 "2025-12-04T23:05:42Z")

</div>

Hi all, we have a react web app and its performance is degrading quite a bit, im trying to debug and understand why. The issue seems to be related to how many components are listing for cache updates of a query. I know …

---

## [Handling dynamic puzzle data in apollo client](https://community.apollographql.com/t/handling-dynamic-puzzle-data-in-apollo-client/9575)

<div class="topic-metadata">

**Author:** [@audrey4578](https://community.apollographql.com/u/audrey4578)\
**Replies:** 1\
**Last updated:** [December 1, 2025, 4:10pm UTC](https://community.apollographql.com/t/handling-dynamic-puzzle-data-in-apollo-client/9575 "2025-12-01T16:10:49Z")

</div>

Hello everyone, I’ve encountered an issue with dynamic fields while experimenting with retrieving structured puzzle data from a source akin to the spellbeegame platform. When new puzzle nodes are added, apollo begins to …

---

## [Issues querying dynamic puzzle data through apollo client?](https://community.apollographql.com/t/issues-querying-dynamic-puzzle-data-through-apollo-client/9573)

<div class="topic-metadata">

**Author:** [@norman458](https://community.apollographql.com/u/norman458)\
**Replies:** 1\
**Last updated:** [December 1, 2025, 4:10pm UTC](https://community.apollographql.com/t/issues-querying-dynamic-puzzle-data-through-apollo-client/9573 "2025-12-01T16:10:12Z")

</div>

Similar to the letters boxed puzzles I’ve been working on, I’ve been experimenting with a small side project that retrieves structured puzzle data from a source. However, I’m encountering an odd problem when retrieving d…

---

## [Query executed multiple times](https://community.apollographql.com/t/query-executed-multiple-times/9549)

<div class="topic-metadata">

**Author:** [@raxell](https://community.apollographql.com/u/raxell)\
**Replies:** 10\
**Last updated:** [November 25, 2025, 12:53pm UTC](https://community.apollographql.com/t/query-executed-multiple-times/9549 "2025-11-25T12:53:58Z")

</div>

Hi, I’m using useSuspenseQuery to retrieve some data. The code is something like this: import QUERY from './query.gql' const Content = ({ id }: { id: string }) =\> { // This comes from a standard react context, I have…

---

## [\[v4\] data field in return type of .query() typed as undefined](https://community.apollographql.com/t/v4-data-field-in-return-type-of-query-typed-as-undefined/9565)

<div class="topic-metadata">

**Author:** [@Adrien\_Pelegris](https://community.apollographql.com/u/Adrien_Pelegris)\
**Replies:** 1\
**Last updated:** [November 21, 2025, 5:18pm UTC](https://community.apollographql.com/t/v4-data-field-in-return-type-of-query-typed-as-undefined/9565 "2025-11-21T17:18:30Z")

</div>

Currently, the type of the data field in the result of calling the query() method can be undefined : export interface QueryResult\<TData = unknown\> { /\*\* {@inheritDoc @apollo/client!QueryResultDocumentation#data:me…

---

## [Recommended Way to Persist Pagination Offset Value Between Components?](https://community.apollographql.com/t/recommended-way-to-persist-pagination-offset-value-between-components/9563)

<div class="topic-metadata">

**Author:** [@kmgdev](https://community.apollographql.com/u/kmgdev)\
**Replies:** 1\
**Last updated:** [November 18, 2025, 5:50pm UTC](https://community.apollographql.com/t/recommended-way-to-persist-pagination-offset-value-between-components/9563 "2025-11-18T17:50:48Z")

</div>

I’ve got a super basic offset pagination setup on a blog website. There’s a homepage component with an entry listing, and a single page component for the post detail. I’m using offsetLimitPagination() to load new entries…

---

## [Why does firstvaluefrom from watchedquery return undefined](https://community.apollographql.com/t/why-does-firstvaluefrom-from-watchedquery-return-undefined/9552)

<div class="topic-metadata">

**Author:** [@Kheang\_Hok\_Chin](https://community.apollographql.com/u/Kheang_Hok_Chin)\
**Replies:** 5\
**Last updated:** [November 11, 2025, 3:13pm UTC](https://community.apollographql.com/t/why-does-firstvaluefrom-from-watchedquery-return-undefined/9552 "2025-11-11T15:13:04Z")

</div>

Hi guys, When migrating from v3 to v4, in this documentation it says result is deprecated for watchQuery : ObservableQuery - Apollo GraphQL Docs and also in v4 doc: ObservableQuery - Apollo GraphQL Docs I did some tes…

---

## [Strategies for updating the local cache for new "second class" objects](https://community.apollographql.com/t/strategies-for-updating-the-local-cache-for-new-second-class-objects/9547)

<div class="topic-metadata">

**Author:** [@gboysko](https://community.apollographql.com/u/gboysko)\
**Replies:** 0\
**Last updated:** [November 7, 2025, 8:39pm UTC](https://community.apollographql.com/t/strategies-for-updating-the-local-cache-for-new-second-class-objects/9547 "2025-11-07T20:39:05Z")

</div>

I’m trying to find a way to effectively update newly created “second class” objects in the InMemoryCache. By “second class”, I mean objects that depend on a parent object. When I’m creating these types of objects, I’ve a…

---

## [useMutation hook usage in apollo v4](https://community.apollographql.com/t/usemutation-hook-usage-in-apollo-v4/9532)

<div class="topic-metadata">

**Author:** [@raxell](https://community.apollographql.com/u/raxell)\
**Replies:** 4\
**Last updated:** [November 3, 2025, 8:35am UTC](https://community.apollographql.com/t/usemutation-hook-usage-in-apollo-v4/9532 "2025-11-03T08:35:50Z")

</div>

Hi, regarding the migration to apollo client v4, the migration guide says As a result, we now recommend the use of core APIs directly in several use cases where synchronization with a component is not needed or intende…

[Next page](https://community.apollographql.com/c/client-sdk/21.md?page=1)
