releases.shpreview
Apollo GraphQL/Apollo Kotlin

Apollo Kotlin

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMay
Less
More
Releases8Avg2/moVersionsv4.4.2 to v5.0.0

Apollo Kotlin 5 is a major release focused on:

  • GraphQL golden path: incremental delivery (@defer/@stream), fragment arguments, service capabilities, onError, nullability, field extensions, @oneOf, schema coordinates, ...
  • Modernized infrastructure: KGP 2.3.10, Gradle 9, AGP 9, classloader isolation, isolated projects support.

In addition, Apollo Kotlin 5 stabilizes the new WebSocket engine, adds new KMP targets, a new HTTP cache strategy on top of OkHttp, new compiler plugin APIs, and more.

Previous DeprecationLevel.WARNING symbols are now DeprecationLevel.ERROR.
Previous DeprecationLevel.ERROR symbols are removed.

Apollo Kotlin 5 is an incremental release. Most of the APIs are compatible with Apollo Kotlin 4. The main breaking changes are in experimental Data Builders and Apollo Compiler Plugins.

For an upgrade walkthrough, see the v5 migration guide.

🚀 GraphQL golden path

Apollo Kotlin 5 implements the latest version of the GraphQL specification draft as well as support for many experimental RFCs.

Those RFCs solve long-standing pain points in GraphQL, such as semantic nullability or fragment arguments.

  • Add incremental/v0.2 format for @defer and @stream (#6331).
  • Add fragment arguments (#6882).
  • Add support for onError (#6860).
  • Add support for service capabilities (#6858).
  • Add field extensions (#6856, #6867).
  • Add schema coordinates (#6560).
  • Add @ignore support (#6900).
  • Add support descriptions on variable definitions (#6699).
  • Add support for directives on directive definitions (#6803).
  • Speed up field merging validation (#6875).
  • Validate @oneOf input objects when they create cycles (#6894).

🧰 Modernized infrastructure

The Gradle plugin now uses Gratatouille classloader isolation, instead of GR8 relocation previously (#6524). This makes the plugin more robust and easier to debug.

Apollo Kotlin 5 uses KGP 2.3, with 2.1 compatibility for JVM and Android consumers. Native and JS consumers must compile with KGP 2.3+.

  • Switch the Gradle plugin to Gratatouille (#6524).
  • Simplify task wiring and propagate task dependencies in multi-module setups (#6562, #6879).
  • Avoid eager configuration of Gradle objects (#6820).
  • Add linuxX64 (#6493), linuxArm64 (#6929) and watchosDeviceArm64 (#6791) targets.
  • Bump to 2.3.10 (#6873). Native/JS/Wasm consumers must compile with Kotlin 2.3.
  • Update to Gradle 9 (#6548, #6652, #6769, #6862, #6887).
  • Bump Ktor to 3.1.2 (#6465).
  • AGP9 support, including com.android.kotlin.multiplatform.library (#6703, #6707, #6736).
  • Add a default Accept header to introspection queries (#6616).

🚗 Runtime

Apollo Kotlin 5 stabilizes the new WebSocket API, making it easier to manage the lifecycle of the WebSocket and retry subscriptions.

  • Promote experimental WebSockets to stable; the previous implementation (under com.apollographql.apollo.ws) is deprecated (#6774).
  • Add RetryStrategy (#6764).
  • Add ApolloRequest.Builder.url(String) (#6758).
  • Add ApolloCall.extensions() (#6834).
  • Add ApolloCall.ignoreUnknownKeys and ApolloClient.Builder.ignoreUnknownKeys (#6473).
  • Restore JsonReader state if a field throws in-flight (#6775).
  • Make Optional.Absent a data object (#6686); use if/else to avoid Int boxing (#6688).

🗄️ Normalized cache

The normalized cache artifacts are also deprecated and moved to a separate repository apollo-kotlin-normalized-cache (#6888).

This new cache supports:

  • TTL
  • Garbage collection
  • Pagination
  • Partial results

Note that the SQLite storage format is not backward-compatible. See the dedicated migration guide for more details.

🌐 HTTP cache

The legacy apollo-http-cache artifact is deprecated.

Instead, Apollo Kotlin now uses OkHttp's cacheUrlOverride() and supports POST caching via enablePostCaching (#6739).

See the migration guide for more details.

🛠️ Compiler & AST

  • Add schema-transform API (#6450).
  • Allow registering multiple compiler plugins; introduce Service.pluginsArguments (#6523, #6622).
  • Add Service.issueSeverity() to control the severity of compiler issues per type (#6731).
  • Introduce Service.generateApolloEnums to generate enums as a sealed hierarchy with a __Known interface (#6611).
  • Allow generating Data Builders outside the main source set (#6485).
  • Add generateApolloProjectIdeModel task (#6666).
  • Add a specific issue type for fragment cycles (#6759).
  • Move validation tests to apollo-ast (#6868).
  • Reorganize parser, introspection, and merger tests (#6857).
  • Warn on unused fragments (#6601).
  • Pretty-print the operation manifest (#6720).
  • Allow empty deprecation messages (#6729, #6779).
  • Add key fields of possible types of interfaces and fragments (#6515).
  • Add key fields to selections even when they're already selected with an alias (#6503).
  • Transform GraphQL documents before running validation (#6511).
  • Call DocumentTransform.transform after processing (#6510).
  • Rename @link Purpose and Import definitions (#6838).
  • Escape names in equals(), hashCode(), copy(), and toString() (#6843).
  • Escape /* and */ in KDocs (#6805).
  • Ignore scalars/enums in checkCapitalizedFields (#6502).
  • Fix IndexOutOfBoundsException in keyFields validation (#6748).
  • Do not check already-checked fragments in checkCapitalizedFields (#6718).

Compatibility release for Kotlin 2.4.0-Beta1. This release contains only a single change:

  • [FIX] Compatibility with Kotlin 2.4-Beta1: Remove legacy JS target check (#6910)

Maintenance release that adds a new KMP target and makes it easier to work with the new cache and AGP9.

This version also bumps KGP to 2.2. This is transparent for Android/JVM consumers but requires native/JS/wasm consumers to use KGP 2.2 to compile against 4.4.2.

  • [NEW] Add watchosDeviceArm64 (#6892)
  • [UPDATE] Upgrade KGP to 2.2 (#6892)
  • [FIX] If the new cache is present, do not import @typePolicy and @fieldPolicy (#6896)
  • [FIX] Use the same classloader than the one which loaded apollo-gradle-plugin to lookup the AGP version (#6877) (#6893)

New developments happen in the 5.0 alphas.

4.4.0 adds compatibility with AGP9 as well as a few other fixes.

Most of the development is now made in the 5.x alphas.

👷‍♂️ All changes

  • [NEW] AGP9 support (#6844)
  • [NEW] Add @catch support for responseBased codegen (#6698)
  • [NEW] Add ApolloInterceptor.InsertionPoint to control where the interceptors are added (#6767)
  • [FIX] Do not check already checked fragments in checkCapitalizedFields (#6721)
  • [FIX] Restore JsonReader state if a field throws in-flight (#6781)

This is maintenance release that includes a few fixes.

👷‍♂️ All changes

  • [fix] Normalize the order of arguments of checked definitions (#6651)
  • [fix] Make sure that the introspection endpoint property value is checked at execution time (#6658)
  • [fix] Do not silently discard network exceptions (#6671)

💜 Contributors

Many thanks to @francescocervone for the Gradle plugin fix 💜

Maintainance release to fix the Accept: header during introspection. Many thanks @pedromfmachado for diving into this!

This release also contains infrastructure work:

What's Changed

Full Changelog: https://github.com/apollographql/apollo-kotlin/compare/v4.3.1...v4.3.2

This is maintenance release that fixes an issue with Gradle task dependencies when using connectToAndroidSourceSet().

This release also introduces an Enhanced Client Awareness feature that adds the version of the library to requests in the extensions object. This is useful for server-side analytics and debugging. This is enabled by default, and can be disabled by calling sendEnhancedClientAwareness(false) on your ApolloClient.Builder.

💜 Contributors

Many thanks to @calvincestari for the client awareness contribution 💜

👷‍♂️ All changes

  • Backport IJ plugin changes from main (#6559)
  • simplify task wiring and fix propagating task dependencies when using connectToAndroidSourceSet() (#6564)
  • feature: Enhanced Client Awareness (#6567)

Version 4.3.0

Version 4.3.0 allows adding multiple compiler plugins and stabilizes ApolloCompilerPlugin.beforeCompilationStep() as the main entry point for compiler plugins. You can read more in the compiler plugins documentation page.

This allows to move some cache-specific code generation logic to the new normalized cache repo and better separate concerns.

Moving forward, ApolloCompilerPlugin.beforeCompilationStep() and ApolloCompilerRegistry.registerOperationIdsGenerator() are considered stable because they play an important part in setting up persisted queries. Other APIs are considered more advanced and will most likely stay unstable for the foreseeable future.

Contributors 💜

Many thanks to @gnehz972 and @mengdd for their fixes about HTTP batching 💜

👷‍♂️ All changes

  • Fix losing response headers when using batch request (#6538)
  • fix the batch size not respected issue (#6528)
  • prepare compiler plugins for 4.3 (#6549)
  • Allow to register multiple compiler plugins (#6546)
  • Add key fields to selections even when they're already selected with an alias (#6503) (#6544)
  • Ignore scalars/enums in checkCapitalizedFields (#6502) (#6543)
  • Call DocumentTransform.transform after processing (#6510) (#6512)

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 https://github.com/graphql/graphql-js/pull/4348 and https://github.com/graphql-java/graphql-java/pull/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 throw Throwable (#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)

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)
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 or apollo-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 or apollo-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
👷‍♂️ All changes
  • [all] Update kotlinpoet to 2.0.0 (#6215)
  • [all] Update to Ktor 3 (#6214)
  • [all] Remove apollo-mockserver and apollo-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)

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 in MapJsonReader (#6141)
  • [cache] Allow to store JsonNumber in Record (#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)

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.

Thanks again to everyone who provided feedback during the alphas/betas.

Main changes
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-APOLLO-... custom headers
  • #5342 - [IJ/AS plugin] Internal error: IllegalArgumentException
  • #5338 - Unexpected behavior of @include directive on a fragment
  • #5337 - [RFC] Error handling -- @catch & partial data
  • #5331 - [IJ plugin] Quality of life improvements
  • #5329 - [IJ plugin] Sometimes db files are not in the list from "Pull from device"
  • #5312 - useV3ExceptionHandling should populate data even if errors are present
  • #5311 - Warnings are surfaced during build when fragments with params are used in queries
  • #5299 - [IJ/AS plugin] Cache viewer
  • #5266 - [IJ/AS plugin] Internal error: PluginException
  • #5261 - [IJ/AS plugin] Internal error: PluginException
  • #5241 - Apollo Parse Exception - failed to parse
  • #5239 - [IJ/AS plugin] Analytics
  • #5235 - [IJ/AS Plugin] Use JetBrains Marketplace for weekly snapshots instead of Repsy
  • #5233 - NullPointerException for Request with single-quote character
  • #5230 - useV3ExceptionHandling should not throw ApolloGraphQLException
  • #5224 - generateServiceApolloSources crashes if a fragment definition references itself
  • #5221 - Implicit task dependency not working
  • #5220 - [IDE Plugin] Sandbox Button Does Not Carry Over Fragments from other Modules
  • #5217 - Retrying a subscription does not renew the id and may cause an error on the server because the id is already used
  • #5213 - Gradle crash when @typePolicy defined for nonexistant field.
  • #5207 - Add options to not generate data classes
  • #5200 - Subscriptions: support SUBSCRIPTION_SCHEMA_RELOAD
  • #5186 - Cache: Variable defaultValues are not taken into account for cache keys
  • #5173 - [IJ/AS Plugin] Middle click on Fragment definition overrides GraphQL Go to usages.
  • #5172 - [IJ/AS plugin] Ignore id field in Unused field inspection
  • #5171 - Consider migrating generated code to use Enum.entries instead of Enum.values() for Kotlin 1.9 and onwards
  • #5159 - Increase the maximum JSON nesting level, or make it customisable
  • #5112 - :app:generateStorefrontApolloSources Variables used in the query are warned as unused.
  • #5066 - 🧩 [IJ/AS plugin] "Find unused fields" inspection
  • #5057 - [IJ plugin] Quick fix for expensive field: add @defer
  • #5040 - [IJ/AS plugin] Operation renaming improvement
  • #5039 - [IJ/AS plugin] Migration helper for the v4 multi-module syntax
  • #5035 - Android Studio Plugin - Navigate to Query Gutter Icon Missing
  • #5033 - [IJ plugin] "Go to declaration" doesn't offer graphql target when used on an import alias
  • #5028 - [IJ/AS plugin] Feature: Apollo Studio field insights
  • #5000 - Un-minimized query in comment has parse errors
  • #4977 - [IJ/AS plugin] Show errors when mixing .graphql / .graphqls file contents
  • #4942 - [IJ/AS plugin] Don't crash when ToolingModel method are not present
  • #4931 - False positives on unused(?) input fields, Apollo: Use of deprecated input field {{ name }}
  • #4925 - Task downloadFooApolloSchemaFromIntrospection fails to comply with configuration cache
  • #4921 - Support for AGP 8.2.0
  • #4920 - apollo-ast: support merging definitions without validation
  • #4919 - [IJ/AS plugin] Navigation from code to GQL definition
  • #4889 - [IJ/AS plugin] Support both AS stable and IJ stable
  • #4858 - Remove initRuntimeIfNeeded() in Project
  • #4805 - With more than one subscription and network off for long duration, webSocketReopenWhen can take unexpectedly long to establish connection when network is back on.
  • #4797 - Cannot use GQLDocument.toUtf8() on documents that include the extend keyword
  • #4784 - Fragments are skipped when the if condition is a variable with a false default value
  • #4775 - WebSockets: allow changing the serverUrl of WebSocketNetworkTransport
  • #4761 - IntelliJ plugin description, link to terms, etc.
  • #4760 - [IJ/AS plugin] Make the GQL plugin setting to handle Apollo directives always checked
  • #4759 - Automatic "compat" -> "operationBased" migration
  • #4747 - generateOptionalOperationVariables setting is ignored.
  • #4744 - Use Apollo Kotlin inside Apollo Kotlin
  • #4732 - External interfaces for JS interop
  • #4728 - Poor Performance of Kotlin/JS
  • #4711 - RFC: v4 error handling
  • #4710 - RFC: v4 package name
  • #4701 - Kotlin/Wasm
  • #4669 - Unit testing error resolving class
  • #4625 - [IJ/AS plugin] Support for multiple schemas according to configuration
  • #4623 - [IJ/AS plugin v3
  • #4622 - [IJ/AS plugin] Migration helpers v3
  • #4621 - [IJ/AS plugin] Automatic codegen invocation
  • #4620 - [IJ/AS plugin] Project setup
  • #4619 - [IJ/AS plugin] Initial release umbrella ticket
  • #4576 - Android (JAVA)Apollo subscription only onConnected() is called
  • #4574 - js client requests can fail due to inclusion of apollo specific headers
  • #4542 - Allow supplying something other than suspending functions to core builders
  • #4530 - The POM for com.apollographql.apollo3:apollo-rx3-support-java🫙3.7.1 is missing, no dependency information available
  • #4519 - Update to SQLDelight 2
  • #4518 - Enforce validation of operation directives
  • #4516 - 🐘 Gradle config: mandate service name
  • #4504 - Allow custom SqlDriver to support multi-platform encryption
  • #4416 - enable configuration cache
  • #4350 - maven-publish doesn't play well with -apollo modules generated when generateApolloMetadata is used
  • #4325 - [Umbrella issue] modernize build system
  • #4283 - [Umbrella issue] Better Java support in Apollo Kotlin
  • #4205 - Validation for custom schema directives
  • #4171 - 🧹 4.0 cleanups
  • #4160 - 🐜 Multiplatform AST parser
  • #4150 - Deprecate dispose() methods and instead implement okio.Closeable
  • #4062 - Deprecate ApolloCompositeException with Error level and use suppressed exceptions instead
  • #4003 - ApolloCall execute / toFlow / exception handling improvements
  • #3890 - Passing executionContext to the platform engine
  • #3751 - Automatic "codegenModels" migration
  • #3733 - @nonull could have surprising effects in error cases
  • #3694 - [umbrella issue] Java Runtime
  • #3283 - Trigger a compilation error on name clashes
  • #3152 - Provide module information (JPMS)
  • #3143 - Implement toString for InputTypes
  • #2823 - Cache and connection restore for Subscription
  • #2783 - ApolloParseException caused by SocketTimeoutError while reading response body
  • #2765 - Subscription switched to DISCONNECTED
  • #2673 - [Compiler] Validate operation directives
  • #2520 - Feature request: Resilient Parsing
  • #2079 - Ktlint should not warn on generated Apollo code
  • #1692 - On the fly code generation
  • #650 - Create Android Studio Plugin

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)

Version 3.8.4 is a maintenance release with one bug fix and 2 performance improvements. New developments happen in the 4.x versions.

  • [java-runtime] Fix ApolloClient.Builder.okHttpClient() returns null instead of this (#5860)
  • [normalized-cache] Use a single transaction when using MemoryCache chaining (#5861)
  • [normalized-cache] Call through to loadRecords from the MemoryCache to the SQL one (#5863)

Version 3.8.3 is a maintenance release with two new convenience APIs and a Kotlin update. New developments happen in the 4.x versions.

Note: because Apollo Kotlin now depends on kotlin-stdlib version 1.9, you need the 1.8+ Kotlin compiler to compile your project.

  • [all] update Kotlin to 1.9 (#5412)
  • [runtime] Add ApolloClient.Builder(ApolloHttpCache) (#5638) (#5640)
  • [runtime] Allow buildPostBody to write operation extensions (#5631)
  • [runtime] compose support: Catch exceptions and expose them in .exception (#5018)
  • [http-cache] Ignore IOException when calling ApolloHttpCache.remove (#5730)
  • [all] Add deprecations on symbols that are getting removed in v4 (#5746)

A maintenance release with bugfixes, mostly around WebSockets and subscriptions as well as a LocalTime adapter and options to work with operation manifests.

Huge THANK YOU to @baconz, @AlexHartford, @Oleur for the love they put in WebSocket contributions as well as @Jephuff for their first contribution 💙 .

👷‍ All changes

  • add Service.operationManifestFormat (#4981)
  • WebSockets: Fix fan out in websocket network transport (#4972)
  • Test: Throw inside flow in MapTestNetworkTransport (#4982)
  • Doc: Add Optional.Absent in documentation (#4979)
  • Doc: clarify that operationBased codegen is the recommendation (#4966)
  • AST: use existing as the base for copying enum values (#4943)
  • Cache: Fix deleting records in the SqlNormalizedCache with cascade-true (#4938)
  • Compiler: Fix deprecated input field usage false positive (#4935)
  • Doc: Clarify KDoc of watch() (#4914)
  • WebSockets: allow changing the serverUrl of WebSocketNetworkTransport (#4885)
  • WebSockets: accept connectionPayload lambda instead of static auth (#4855)
  • Add LocalTime adapter for Java and Kotlin (#4829)
  • Doc: Add a section about the operationBased codegen (3.x) (#4940)

This patch release contains 2 bug fixes.

👷‍ All changes

  • Add ignoreApolloClientHttpHeaders (#4838)
  • Download introspection: handle GraphQL errors (#4861)
Last Checked
33m ago
Tracking since Jun 11, 2020