Releases: apollographql/apollo-kotlin
v4.2.0
Generate custom scalars as inline classes with @map
and @mapTo
(#6404)
It is now possible to configure the adapters to use with scalars by using the @map
directive:
extend schema @link(url: "https://specs.apollo.dev/kotlin_labs/v0.5/", import: ["@mapTo", "@map"])
extend scalar Date @map(to: "kotlinx.datetime.Instant", with: "com.apollographql.adapters.InstantAdapter")
If the to
parameter is an inline value class, use the inlineProperty
parameter to have the generated code box/unbox the value. In that case, with
needs to point to an adapter of the underlying type:
extend scalar Timestamp @map(to: "com.example.Timestamp", with: "com.apollographql.apollo.api.LongAdapter", inlineProperty: "ts")
For the common cases where the scalar can be represented as a built-in Kotlin type (String, Boolean, Int, Long, Float, Double), you can use @mapTo
and the compiler infers the adapter and generates an inline value class automatically:
extend scalar Length @mapTo(builtIn: Long)
Scalar definitions in schemas downloaded from introspection (#6389)
Downloading or converting an SDL schema from introspection now includes scalar definitions.
This is required for clients to get a full view of the schema.
Support for @disableErrorPropagation
Apollo Kotlin now automatically adds @disableErrorPropagation
if your server supports it and you opted in @catchByDefault
in your schema extensions. This allows to use non-null types more liberally and still get support for partial data.
See graphql/graphql-js#4348 and graphql-java/graphql-java#3772
Contributors 💜
Many thanks to @bobbysothebys, @jvanderwee, @dhritzkiv, @lwasyl and @rohandhruva for all the contributions and help in this release 💜
👷♂️ All changes
- [intellij-plugin] Fix MemoryCache package name (#6383)
- [intellij-plugin] Rover: always pass path to supergraph.yaml if present (#6384)
- [intellij-plugin] Make 'Download Schema action' consider deep subprojects (#6394)
- [intellij-plugin] Fix a crash when invoking the 'missing
@link
' quickfix (#6402) - [intellij-plugin] Use configured Gradle JVM when executing tasks (#6425)
- [intellij-plugin] Fix pulling normalized cache for recent AS (#6437)
- [intellij-plugin] Use a coroutines to prevent an IllegalStateException (#6460, #6487)
- [intellij-plugin] Use coroutines in ApolloCodegenService (#6477, #6487)
- [intellij-plugin]Use incubating cache 0.0.8 and show errors in cache viewer (#6439)
- [runtime] Use ephemeral NSURLSessionConfiguration by default (#6376)
- [runtime] Add toString() method to ApolloResponse (#6409)
- [runtime] Better error messages for ApolloClient.Builder() (#6424)
- [runtime] Add Swift interceptor iOS test and allow
HttpInterceptor.intercept()
to throwThrowable
(#6403) - [runtime] Add cacheInterceptor() and autoPersistedQueriesInterceptor() (#6456)
- [runtime] Revert behaviour change (#6482)
- [runtime] Introduce
@DataBuilderDsl
(#6484) - [ast] Simplify semanticEquals (#6388)
- [ast] Remove
withBuiltInDefinitions()
and add flag to dump scalar definitions in SDL (#6389) - [ast] Refactor schema validation (#6396)
- [ast] Better
@link
handling (#6417) - [ast] Add support for
@disableErrorPropagation
(#6414) - [compiler] Add
@map
and@mapTo
(#6404) - [compiler] Inline classes, fix using inline classes in input positions (#6427)
- [compiler] Java Codegen: add some
@SuppressWarnings("unchecked")
(#6434) - [gradle-plugin] Make logLevel property internal to not take it into account when caching (#6399)
- [gradle-plugin] expose regular configurations for multi-module projects (#6408)
- [gradle-plugin] Keep the
@RequiresOptIn
annotation in the Gradle plugin (#6406) - [gradle-plugin] Remove possible eager task creation (#6442)
- [infra] Track
@ApolloInternal
in public ABI (#6407) - [infra] Track
@ApolloExperimental
symbols in public API (#6416) - [infra] Cache: add a 'large list' benchmark (#6432)
- [infra] Remove a bunch of warnings (#6441)
- [all] Bump Kotlin to 2.1.10 (#6370)
- [all] Bump Kotlin to 2.1.20 (#6431)
v4.1.1
Kotlin 2.1.0 (#6291)
The artifacts are now compiled with Kotlin 2.1.0. This change should be transparent for JVM and Android users thanks to languageVersion
but requires klib consumers (native + JS) to update their KGP version to 2.1.0.
Rover LSP support in the IntelliJ plugin (#6274)
The IntelliJ plugin now has a dedicated mode for backend developers that uses Rover LSP (Language Server Protocol) to parse federation and connectors directives. This mode is only available when using IntelliJ Ultimate and other IDEs with LSP support. It is recommended for subgraphs authors.
Gradle isolated projects support (#6351)
This release supports Gradle isolated projects for shorter configuration times.
💙💙 Contributors 💙💙
Many thanks to @jvanderwee, @varahash, @whyoleg, @StylianosGakis and @scana for all the contributions and help in this release !
👷♂️ All changes
- [all] Do not set the license URL in the POMs (#6247)
- [all] Bump Kotlin to 2.1.0 (#6291)
- [all] Bump atomicfu (#6245)
- [intellij-plugin] Play nice with IDEs without Kotlin/Gradle (#6358)
- [intellij-plugin] Reduce usage of GradleExecutionHelper (#6355)
- [intellij-plugin] Use our own executeOnPooledThread instead of Android Plugin's (#6310)
- [intellij-plugin] Make Java and Kotlin dependencies optional (#6304)
- [intellij-plugin] Pass arguments to rover (#6303)
- [intellij-plugin] Move Rover settings to own section and add note about needing v0.27.0+ (#6278)
- [intellij-plugin] Remove untilBuild (#6279)
- [intellij-plugin] Add support for the Apollo LSP via Rover (#6274)
- [intellij-plugin] Don't reference AdbShellCommandsUtil.executeCommandBlocking that's been removed (#6268)
- [intellij-plugin] Make verifyPlugin fail on certain problems (#6256)
- [intellij-plugin] Do not use internal symbol (#6255)
- [intellij-plugin] Add explicit dependency to com.intellij.modules.json (#6254)
- [gradle-plugin] Add a fail-safe mode to disable 2-step introspection and use minimal introspection query (#6360)
- [gradle-plugin] Isolated Projects support (#6351)
- [gradle-plugin] expose the outgoing variants (#6329)
- [gradle-plugin] Better Gradle error message (#6326)
- [gradle-plugin] Fix classloader caching. Many thanks @scana for catching this (#6309)
- [gradle-plugin] Manage our classloaders manually (#6305)
- [gradle-plugin] Only call
onSchema()
once in multi-module scenrios (#6252) - [runtime] Copy executionContext inside HttpRequest.newBuilder (#6350)
- [runtime] Apple HttpEngine: lock the handlers map (#6348)
- [runtime] Allow to initialize WebSocketEngine lazily (#6290)
- [runtime] Remove CloseableBackgroundDispatcher and bump coroutines version (#6286)
- [runtime] Override JsonNumber.toString() (#6273)
- [runtime] Implement ApolloWebSocketClosedException on darwin targets and update docs (#6275)
- [ast] Make deprecation.reason non-nullable (#6311)
- [ast] Allow multiple
@link
schema extensions (#6284) - [normalized-cache] Add ApolloStore.ALL_KEYS to notify all watchers (#6337)
- [http-cache] HTTP cache: do not remove cached entries on transport errors (#6314)
- [execution] Add apollo-execution (#6356)
v4.1.0
Ktor 3.0.0
Version 4.1.0 updates usages of Ktor from 2.3.11 to 3.0.0:
- If you are using
apollo-runtime-js
orapollo-debug-server-jvm
, you need to update your app to Ktor 3.0.0+ at the same time as updating to Apollo 4.1.0 (apollo-debug-server-android
is unaffected). - If you are using the deprecated
apollo-mockserver
orapollo-ktor-support
from this repo, you need to update to the new coordinates.
All other cases are unaffected. In particular, apollo-runtime
on Android and iOS uses OkHttp and NsUrlConnection respectively and is not impacted by the Ktor update.
You can read more details in the pull request.
New media type: application/graphql-response+json
application/graphql-response+json
is a new media type being introduced by the GraphQL over HTTP draft. It allows differentiating a valid GraphQL response from an error JSON response that could be transmitted by a cache or proxy in the HTTP chain.
If your server uses application/graphql-response+json
and returns non-2xx response, Apollo Kotlin will now parse those responses and expose data
and errors
instead of returning an ApolloHttpException
before.
K2 support for the IntelliJ plugin
The IntelliJ plugin is now compatible with K2 (#6150)
Removed apollo-mockserver
and apollo-ktor-support
apollo-mockserver
is now atcom.apollographql.mockserver:apollo-mockserver:0.1.0
and developed at https://github.com/apollographql/apollo-kotlin-mockserverapollo-ktor-support
is now atcom.apollographql.ktor:apollo-engine-ktor:0.1.0
and developed at https://github.com/apollographql/apollo-kotlin-ktor-support/
👷♂️ All changes
- [all] Update kotlinpoet to 2.0.0 (#6215)
- [all] Update to Ktor 3 (#6214)
- [all] Remove
apollo-mockserver
andapollo-ktor-support
(#6215) - [all] Remove mockserver as a dependency of apollo-testing-support (#6218)
- [ast] Do not escape slashes in single quoted strings (#6190)
- [runtime] Add support for application/graphql-response+json (#6170)
- [runtime] Do not call experimental webSocket() method re-entrently (#6197)
- [debug server] Remove Ktor dependency from apollo-debug-server JVM (#6224)
- [codegen] Do not add internal to private members (#6213)
- [codegen] Fix name clash in data builder names when two types differ only by their case (#6195)
- [gradle plugin] Allow null in KSP arguments for Apollo Compiler Plugins (#6200)
- [gradle plugin] Do not log the full introspection JSON (#6199)
- [gradle plugin] Deprecate TargetLanguage.KOTLIN_1_5 (#6193)
- [IJ Plugin] Make the cache viewer understand the blob db format (#6187)
- [IJ Plugin] Bump IJ Platform Gradle Plugin to 2.0.1 (#6185)
- [IJ Plugin] Migrate to the K2 compatible Analysis API (#6150)
- [IJ Plugin] Schedule the GraphQL configuration reload early (#6228)
- [IJ Plugin] Rename related generated code when renaming an Operation/Fragment (#6227)
- [IJ Plugin] Only highlight the name of unused operations, rather than the whole operation (#6226)
v4.0.1
This release contains a handful of bug fixes and improvements.
⚙️ Add ApolloCompilerPlugin.schemaListener()
The compiler plugins API has been extended to allow listening to schema changes.
This can be used to have plugins generate code based on the schema. To do this, implement the schemaListener
function on your plugin:
class MyCompilerPlugin() : ApolloCompilerPlugin {
@ApolloExperimental
override fun schemaListener(): SchemaListener {
return object : SchemaListener {
override fun onSchema(schema: Schema, outputDirectory: File) {
// Generate some code inside outputDirectory based on schema
}
}
}
}
🚀 Allow mapping scalars to simple generic types
Previously, to map a scalar to a generic type, you had to use a typealias
.
Now, simple generic types are accepted, and common types like List
and String
don't need to be fully qualified:
mapScalar("MassList", "List<com.example.Measure<com.example.Mass>>", "com.example.MassListAdapter")
💙 Contributors
Many thanks to @ebrattli, @agrosner and @cvb941 for their contributions to this release 💙!
👷 All changes
- [gradle-plugin] Deprecate
"operationOutput"
and./gradlew downloadApolloSchema
(#6097) - [gradle-plugin] Use
registerJavaGeneratingTask
(#6149) - [apollo-ast] Add GQLDocument.validate(SchemaValidationOptions) to allow adding external schemas. (#6164)
- [compiler] Add ApolloCompilerPlugin.schemaDocumentListener() (#6165)
- [compiler] Pass schema to ApolloCompilerPlugin.schemaListener (#6166)
- [compiler] Avoid enum value clashing with the getter
field
(#6093) - [compiler] Fix a few additional instances of %L used instead of %N (#6117)
- [compiler] Escape properties in input builder function body (#6116)
- [compiler] Provide a more descriptive error message when a resolution of a specific
ResolverKey
fails (#6136) - [compiler] Deprecate
@nonnull
(#6152) - [compiler] Allow mapping scalars to simple generic types (#6158)
- [tooling] Allow to shutdown SchemaDownloader (#6091)
- [tooling] Remove warning (#6092)
- [WebSockets] connectionParams -> connectionPayload (#6103)
- [WebSockets] add NetworkTransport.closeConnection() (#6105)
- [BREAKING][runtime] Change NetworkMonitor to expose a StateFlow directly (#6119)
- [runtime] Add 'OfflineException' as a cause when using failFastIfOffline (#6104)
- [apollo-api] Fix reading
JsonNumber
inMapJsonReader
(#6141) - [cache] Allow to store
JsonNumber
inRecord
(#6139) - [cache] Fix cascade SQL cache remove loops forever on cyclic references (#6137)
- [IJ Plugin] Bump pluginUntilBuild to 242 and pluginSinceBuild to 241 (#6111)
- [IJ Plugin] Add ApolloOneOfGraphQLViolationInspection (#6125)
- [IJ Plugin] Improve performance of ApolloGraphQLConfigFilePresentInspection and ApolloGraphQLConfigFilePresentAnnotator (#6126)
- [IJ Plugin] Fix high latency field inspection (#6142)
- [IJ Plugin] Correctly name Open In items (#6151)
- [infra] Bump Kotlin to 2.0.10 (#6107)
- [infra] Bump Kotlin to 2.0.20 (#6131)
- [infra] Bump develocity (#6128)
- [infra] Update Apollo Execution (#6138)
- [infra] Bump develocity (#6144)
- [infra] Allow compiling the project with Java22 (#6145)
v4.0.0
Apollo Kotlin 4 is a maturity release. It focuses on tooling, stability and making the library more maintainable, so it can evolve smoothly for the many years to come.
While most of the core APIs stayed the same, Apollo Kotlin 4 contains a few binary breaking changes. To account for that, and in order to be more future-proof, we changed the package name to com.apollographql.apollo
.
You need to replace all the com.apollographql.apollo3
with com.apollographql.apollo
in your codebase.
- Migration guide: https://www.apollographql.com/docs/kotlin/migration/4.0.
- Evolution policy: https://www.apollographql.com/docs/kotlin/essentials/evolution.
Thanks again to everyone who provided feedback during the alphas/betas.
Main changes
- New package name (migration guide)
- Moved artifacts (Apollo Kotlin galaxy documentation page)
- Improved error handling (migration guide)
- Android Studio/IntelliJ Plugin (installation instructions)
- Multiplatform GraphQL parser (doc)
- Apollo Compiler Plugin API (doc)
- WasmJs support
- NetworkMonitor API (doc)
- Experimental WebSocket API (doc)
- Experimental support for
@oneOf
(GraphQL RFC) - Experimental support for
@semanticNonNull
and@catch
(doc)
Changes against 3.8.5
- #5984 - Add doNotStoreOnDisk()
- #5982 - RetryOnNetworkErrorInterceptor should be configurable
- #5971 - writeOperation/writeFragment no longer publish updates by default
- #5966 - Move apollo-execution out of the main repo
- #5952 - [IJ Plugin] Cache GraphQL project config
- #5946 - Sub-protocol not included when opening websocket [4.0.0-beta6]
- #5933 - [IJ/AS plugin] Internal error: NullPointerException
- #5929 - Unnecessary AndroidX Multidex library included
- #5922 - Apply com.apollographql.apollo3 plugin will break the dependencies in Kotlin Multiplatform according to IDEA
- #5917 - Enabling apollo metadata generation for multi-module codegen causes build cache misses
- #5901 - A request with any enum having rawValue = null hangs forever
- #5899 - [IJ Plugin] UI for 'Go to declaration' is too wide
- #5896 - [IJ Plugin] Cache viewer icon has wrong color in "new ui" theme
- #5887 - [IJ Plugin] Warn when .graphqlrc files are present
- #5885 - Cronet request lifecycle not behaving correctly with Apollo.
- #5884 - [IJ/AS plugin] Internal error: NullPointerException
- #5834 - SQL cache is unusably slow
- #5833 - Make apollo-mockserver a separate repository
- #5832 - MegaIssue: Independant versioning
- #5827 - [IJ Plugin] Incorrect error when repeating
@semanticNonNullField
- #5819 - "Could not read normalized cache" in AS plugin
- #5808 - Support for tree shaking in the __Schema.possibleTypes()
- #5801 - ClassCastException is thrown when building an ApolloClient using a builder in KotlinJS
- #5799 - isFromCache is potentially confusing
- #5796 - Make it impossible to pass as input some type which was generated only to preserve forwards compatibility but was not meant to be used as input
- #5795 - WasmJs support for apollo-adapters
- #5781 - Codegen: rework how compiled field arguments are generated
- #5777 - ApolloClient.Builder.okHttpClient() returns null instead of this
- #5775 - Lazy version of okHttpCallFactory?
- #5771 - [IJ Plugin] Crash when navigating to GraphQL operation via margin marker
- #5768 - [IJ/AS plugin] Internal error: NullPointerException
- #5757 - ApolloParseException is wrapping SocketException, StreamResetException
- #5753 - [IJ/AS plugin] Internal error: NullPointerException
- #5745 - Run subscriptions like queries with IDE plugins
- #5738 - [IJ Plugin] Tweak navigation from GraphQL to generated code
- #5727 - [Intellij Plugin] Truncate "go to" data
- #5723 - Remove sendApqExtensions and sendDocument from MutableExecutionOptions
- #5715 - Make NetworkMonitor work without androidx.startup
- #5714 - Upgrade IJ platform minVersion
- #5713 - Make benchmarks a composite build
- #5712 - generateServiceApolloSources task fails with nondescript NullPointerException when type extension references unknown key field
- #5697 - Websocket won't reopen on iOS
- #5667 - Experimental
@defer
support does not work with AutoPersistedQueryInterceptor - #5659 - Use StreamingNSURLSessionHttpEngine by default on Apple
- #5648 - Megaissue: improvements to WebSockets
- #5647 - [IJ Plugin] Try the new IntelliJ Platform Gradle Plugin 2.0
- #5641 - Introspection is broken in the beta
- #5616 - [IJ Plugin] Send telemetry only for projects using Apollo
- #5575 - [IJ/AS plugin] Internal error: Throwable
- #5568 - Disallow
@typePolicy
on unions - #5507 - 🧩 [IJ Plugin] Remove client only directives before sending the query to the server
- #5500 - [IJ Plugin] v3 -> v4 Migration: add
@link
imports for used kotlin_labs directives - #5481 - [IJ/AS plugin] Internal error: ClassCastException
- #5468 - Publish apollo-cli
- #5455 - Build fails after schema file rename when Gradle configuration cache enabled
- #5449 - [gradle-plugin] download{Service}SchemaFromIntrospection fails
- #5431 - Support
@oneOf
for Input Objects - #5415 - Compiler plugin API + classloader isolation
- #5413 - [IJ plugin] Automatically import certain directives
- #5379 - Allow the cache viewer to sort items more "intelligently" when showing cache entries that have a number at the end
- #5374 - [IJ Plugin] Inspection to warn when using input types constructors
- #5372 - [IJ plugin] Normalized cache: reload button for file caches
- #5345 - [RFC] Remove X...
v4.0.0-rc.2
We're on the road to v4 with this second release candidate which includes a few minor tweaks as well as one new feature.
Note: in v4.0.0-rc.1 apollo-debug-server
and apollo-tooling
depended on com.apollographql.apollo3
artifacts. This is no longer the case with v4.0.0-rc.2
, where all dependencies are under the com.apollographql.apollo
group id.
Add memoryCacheOnly (#6049)
.memoryCacheOnly(true)
can be set on calls to read and store records in the memory cache only even when a persistent cache is configured.
This can be useful in scenarios where long term storage isn't needed and performance is important.
- [gradle-plugin] Use a better warning for Service.schemaFile users (#6036)
- [all] Update apollo-kotlin-execution (#6040)
- [IJ Plugin] Add com.apollographql.apollo:apollo-api-jvm to dependencySupport (#6039)
- [all] Update to Gradle 8.9 (#6056)
- [gradle-plugin] Undeprecate schemaFile (#6055)
- [gradle-plugin] Disable service-loading
ApolloCompilerPlugin
(#6059)
v3.8.5
Version 3.8.5 is a maintenance release. New developments happen in the 4.x versions.
- [all] Bump okio to 3.9.0 (#5868)
- [runtime] Adding checks for json end_document in http transport (#5894)
- [runtime] Adding checks for json end_document in http batching interceptors (#5892)
- [codegen] Fix mapping of the builtin Float scalar type (#6047)
- [normalized-cache] SqlNormalizedCacheFactory make sqldriver public to support Sqlcipher data encryption. (#5972)
v4.0.0-rc.1
New package name & evolution policy
We changed the package name from com.apollographql.apollo3
to com.apollographql.apollo
for version 4. This is a safe default for the many years to come and works well with our new evolution policy.
If you are updating from version 3 or an alpha/beta version 4, you need to replace all com.apollographql.apollo3
with com.apollographql.apollo
Apollo galaxy
As part of this release, some of the non-core artifacts have been moved to separate coordinates and GitHub repositories. Moving forward, this will allow us to iterate faster on those artifacts while keeping the core ones more maintainable.
Some of the existing symbols are kept as deprecated to ease the transition (like MockServer
for an example). Others (the -incubating
ones) have been removed, and you need to update them now.
You can read more in the migration guide.
All changes
- [BREAKING][all] Change package name to
com.apollographql.apollo
- [BREAKING][all] Remove incubating compose support (moved to a separate repo, see migration guide)(#5987)
- [BREAKING][all] Remove incubating apollo-cli (moved to a separate repo, see migration guide)(#5986)
- [BREAKING][all] Remove incubating normalized cache (moved to a separate repo, see migration guide)(#5985)
- [BREAKING][all] Nullability: update nullability directives to v0.4 (#6002)
- [BREAKING][all] Suffix ApolloStore write/publish overloads with
Sync
to avoid them taking precedence over their suspend counterparts (#5976) - [NEW][cache] SqlNormalizedCacheFactory make sqldriver public to support Sqlcipher data encryption. (#5973)
- [NEW][runtime] Add ApolloClient.Builder.retryOnErrorInterceptor (#5989)
- [adapters] Deprecate apollo-adapters (moved to a separate repo, see migration guide)(#6012)
- [mockserver] Deprecate com.apollographql.apollo3.mockserver.MockServer (moved to a separate repo, see migration guide)(#5943)
- [🐘gradle-plugin] Rename the multi-module configurations (#6027)
- [IJ Plugin] Tweak cache name display for Apollo 3, 4, and incubating (#6026)
- [compiler] remove unused argument to scalarAdapterInitializer() (#5996)
- [java] Use published version of the Java support libs (#5991)
- [runtime] Deprecate apollo engine ktor and publish engine tests (#5988)
- [mpp-utils] Cleanup mpp utils (#5980)
- [CI] use
gradle/actions/setup-gradle
instead ofgradle-build-action
(#5981) - [infra] Update to develocity API (#5967)
- [incubating cache] Add a CacheKeyApolloResolver based on ApolloResolver (incubating) (#5970)
- [mockserver] Robustify TCP server (#5968)
- [runtime] adding checks for json end_document in http batching interceptors (#5893)
- [IJ plugin] Cache ApolloKotlinService into project settings (#5962)
- [IJ plugin] Avoid a ConcurrentModificationException occurring in conjunction to the IJ Platform Gradle plugin. (#5959)
- [websockets] Send Sec-WebSocket-Protocol (#5948)
v4.0.0-beta.7
Main changes:
- #5931: This version is built with K2. You need Kotlin 1.9+ on the JVM to build against it and Kotlin 2.0 for other platforms.
- #5865:
ApolloCompilerPluginProvider
is introduced to allow passing arguments to compiler plugins. See the compiler plugins documentation for more details.
👷 All changes
[testing] Use com.apollographql.mockserver.MockServer (#5939)
[testing] Simplify our implementation of runTest (#5935)
[testing] Prepare apollo-testing-support to new MockServer (#5934)
[runtime] Remove multidex library (#5930)
[all] Bump languageVersion/apiVersion to Kotlin 2.0 (#5931)
[codegen] fix mapping of the builtin Float type (#5928)
[IJ Plugin] Add inspection to warn about the presence of a GraphQL config file (#5908)
[codegen] Add a null-check to java enum safeValueOf (#5904)
[gradle-plugin] Remove eager configuration (#5923)
[gradle-plugin] sort input files (#5919)
[IJ Plugin] Suppress GraphQLDuplicateDirective for certain directives (#5910)
[adapters] Add KtorHttpUrlAdapter (#5915)
[IJ Plugin] Add a "new UI" compatible icon (#5906)
[IJ Plugin] Operation and fragment definition rename (#5912)
[IJ Plugin] Add @link
directives to extra.graphqls during v3->v4 migration (#5909)
[IJ Plugin] Remove GraphQL IJ plugin issue workaround (#5907)
[cache] Pagination: use "field key" instead of "field name" (#5898)
[IJ Plugin] Improve the presentation of GraphQL elements when navigating to them (#5900)
[IJ Plugin] Include subfolders when contributing GraphQL config (#5871)
[runtime] Remove existing interceptors from ApolloClient.Builder before adding new ones (#5858)
[codegen] Add ApolloCompilerPluginProvider (#5865)
[runtime] Clear current ApolloStore related interceptors when calling .store()
on builder (#5857)
[cache] Call through to loadRecords from the MemoryCache to the SQL one (#5848)
[runtime] deprecate operationIdGenerator (#5850)
v3.8.4
Version 3.8.4 is a maintenance release with one bug fix and 2 performance improvements. New developments happen in the 4.x versions.