All Versions
Latest Version
Avg Release Cycle
13 days
Latest Release
328 days ago

Changelog History
Page 1

  • v2.4.6 Changes

    November 30, 2020

    ๐Ÿ”– Version 2.4.6 is a minor release with fixes around multiplatform, normalized cache and others. Many thanks to @tylerbwong and @lwasyl for their work on the metalava integration and enum serialization respectively.

    Full Changelog

    [Normalized cache] Add interface for classes generated for enum types and fix sealed classes json representation (#2776)
    ๐Ÿ”ง [Multiplatform] fix NSURLSession configuration (#2777)
    โœ… [Test] adding test coverage (#2770)
    โช [Runtime] revert to okhttp 3 to support older versions of Android (#2769)
    ๐Ÿ”Œ [Gradle Plugin] make convertApolloSchema never up-to-date (#2761)
    [Multiplatform] Do not use Java8 Duration (#2767)
    ๐Ÿ— [Build scripts] Fix error.NonExistentClass in Metalava Signature Files (#2755)
    ๐Ÿ“ฆ [codegen] Honor packageName for schema types as well (#2759)

  • v2.4.5 Changes

    November 18, 2020

    ๐Ÿ”– Version 2.4.5 is a minor release with Gradle plugin improvements for manipulating schemas as well as a few other bugfixes.


    You can now convert your schema from Json to SDL and vice-versa:

    ./gradlew convertApolloSchema --from schema.json --to schema.sdl


    ๐Ÿ“„ You can now push a schema to your Apollo Studio registry:

    ./gradlew uploadApolloSchema --key $key --graph $graph --schema schema.sdl

    Full Changelog

    ๐Ÿฑ โœจ New

    ๐Ÿ”Œ [Gradle Plugin] add ./gradlew convertApolloSchema --from schema.json --to schema.sdl (#2757)
    ๐Ÿ”Œ [Gradle plugin] Add pushApolloSchema (#2737)
    [Publishing] add version and a few other attributes to the jar Manifest (#2736)
    ๐Ÿ‘ [Runtime] Introduce custom error class for better error handling (#2751)

    ๐Ÿ›  ๐Ÿ‘ทโ€ Fixes

    [Codegen] Fix capitalized field names in input objects (#2746)

  • v2.4.4 Changes

    November 11, 2020

    ๐Ÿ”– Version 2.4.4 is a hotfix release to disable using Kotlin parameters default values to represent GraphQL variables default values (#2741). This is not needed as the server can infer the variable default value from the query document and created a bunch of other issues (#2744 and #2742) in addition to sending uneeded variables alongside the query.

    query GetHero($myBool: Boolean = true) { ... }

    will now correctly generate

    // no variable will be sent alongside the query by default// and the server will read the default value from the GraphQL query documentdata class GetHero(val myBool: Input\<Boolean\> = Input.absent())

    โฌ†๏ธ This bug was introduced in version 2.4.2. If you're using GraphQL queries with variables default values, please upgrade to 2.4.4.

    0๏ธโƒฃ #2741 also fixes a crash in the handling of @include directives using variables default values in a much less invasive way. Many thanks to @DSteve595 for investigating this and pointing to the correct solution.

    ๐Ÿ”„ Changes:

    • โช [Codegen] Revert default values as Kotlin default parameters and made skipField more robust (#2741)
  • v2.4.3 Changes

    November 09, 2020

    ๐Ÿ”– Version 2.4.3 is a minor version to fix a regression in ./gradlew downloadApolloSchema introduced in 2.4.2. The task would fail asking for a service even if schema and endpoint were correctly passed (See #2728 for more details).
    Many thanks to @nicusorflorin for spotting this!

    ๐Ÿ›  Other included fixes:

    ๐Ÿ‘ [SDL] better handling of string escapes (#2729)
    [KMP] added a 'timeoutMillis' parameter to ApolloHttpNetworkTransport (#2680)

  • v2.4.2 Changes

    November 02, 2020

    ๐Ÿ”– Version 2.4.2 is a maintenance release with language improvements and fixes, better SQL cache debug, Websocket management and more.

    SDL type extensions

    ๐Ÿ‘ Type extensions are now supported in SDL schemas. SDL schema can now include extension like below:

    extend type Starship { shieldLevel: Float!}

    0๏ธโƒฃ Variable default values

    0๏ธโƒฃ Apollo Android now supports default values for variables (#2709)

    query GetHero( $myBool: Boolean = true, $unit: LengthUnit! = FOOT, $listOfInts: [Int] = [1, 2, 3] ) { ...}

    will generate:

    data class GetHero( val myBool: Input\<Boolean\> = Input.optional(true), val unit: LengthUnit = LengthUnit.safeValueOf("FOOT"), val listOfInts: Input\<List\<Int?\>\> = Input.optional(listOf(1, 2, 3)) ) 

    โšก๏ธ This only works for scalar types and their list/nonnull declinations. Full support for input object will be added later. Follow #2572 for updates

    ๐Ÿ‘ Better subscription Websocket management

    SubscriptionManger.reconnect is now exposed as public API. It can be called to reconnect a WebSocket if credentials/token needs to be refreshed.

    Full Changelog

    ๐Ÿฑ โœจ New

    [Subscriptions] expose SubscriptionManager.reconnect() (#2706)
    0๏ธโƒฃ [Compiler] Add support for default variable values (#2704)
    [SQL cache] implement SqlNormalizedCache.dump (#2709)
    ๐Ÿ‘ [SDL] add support for type extensions (#2666)
    ๐Ÿ“ฆ [Multi-modules] Add packageName option to override fragments package name (#2669)

    ๐Ÿ›  ๐Ÿ‘ทโ€ Fixes

    ๐Ÿ—„ [Compiler] fix @deprecated(reason:"") directive (#2720)
    ๐Ÿ—„ [Compiler] fix @deprecated directive without any deprecation reason (#2692)
    ๐Ÿ”Œ [Gradle plugin] fix downloadApolloSchema variants detection (#2712)
    ๐Ÿ‘ [Compiler] support multiple arguments in directives (#2711)
    ๐Ÿ”€ [Compiler] Fix merging fields would forget inline fragments in some cases (#2689)
    [Multiplatform] set the correct Content-Type on iOS (#2691)
    [SDL] allow to have schemas without mutations/subscriptions (#2684)
    ๐Ÿ”Œ [Gradle Plugin] Make CheckDuplicate task cacheable (#2688)
    [Java codegen] Do not try to annotate primitive types in List type parameters (#2663)
    [Compiler] Fix Missing Referenced Fragments in Root query type (#2647)
    [Publishing] fix the license url and a few other dangling urls after the master -> (#2639)

    ๐Ÿ“š ๐Ÿ“– Documentation

    ๐Ÿ“š [Documentation] use the correct "image/jpeg" mimetype. (#2699)

    ๐Ÿฑ โค๏ธ External contributors

    Many thanks to:

  • v2.4.1 Changes

    October 05, 2020

    ๐Ÿ”– Version 2.4.1 brings a bunch of bug fixes, support for Gradle configuration cache and better Apollo Studio integration.

    ๐Ÿ”ง Gradle configuration cache

    ๐Ÿ— Apollo Android now supports Gradle configuration cache. Configuration cache is still an incubating Gradle feature. If you notice any warning in your builds, please file an issue

    Studio integration

    ๐Ÿ“š Users of Apollo Studio can now use the built-in ApolloClientAwarenessInterceptor to get more insights about their Android clients. Check the related documentation for more details how to do this.

    ๐Ÿ”Œ Also, the Gradle plugin can now download schemas from the registry in addition to using introspection. To download a schema from the registry, use the --graph argument:

    ./gradlew downloadApolloSchema --graph $APOLLO_GRAPH --key $APOLLO_KEY --schema schema.[json | sdl]

    Full Changelog

    ๐Ÿฑ โœจ New

    ๐Ÿ”Œ [Gradle Plugin] add registry download (#2617)
    [Runtime] add a client awareness OkHttp interceptor (#2603)
    ๐Ÿ”ง [Gradle Plugin] configuration cache compatibility (#2608)

    ๐Ÿ›  ๐Ÿ‘ทโ€ Fixes

    [Compiler] fix line wrapping on long lines with forEach lambda. (#2621)
    [Compiler] fix cache key for arguments that contain lists (#2592)
    ๐Ÿ [Gradle Plugin] fix absolute paths in windows (#2615)

    ๐Ÿฑ โš™๏ธ Internal

    ๐ŸŒฒ [Runtime] Fix some operation log calls (#2599)

    ๐Ÿฑ โค๏ธ External contributors

    ๐Ÿ“š Many thanks to @SamuelFrankSmith, @BenSchwab, @moshkit, @annieechen for their awesome work on codegen, runtime, documentation and help keep the project in good shape in general!

  • v2.4.0 Changes

    September 22, 2020

    ๐Ÿ”– Version 2.4.0 brings multiple new features and bugfixes. Read below for the most important changes and full changelog

    ๐Ÿ‘ Experimental Multi-Modules support

    ๐Ÿ”– Version 2.4.0 brings Multi-Modules support. With Multi-Modules, you can reuse GraphQL fragments from different Gradle modules for better separation of concerns and improved build speed.

    ๐Ÿ“‡ Configure your parent module to generate Apollo metadata:

    // parent/build.gradle.ktsapollo { generateApolloMetadata.set(true) }

    And declare your parent module as a dependency of your feature module:

    // feature/build.gradle.ktsdependencies { implementation("com.apollographql.apollo:apollo-runtime:xyz") // more regular dependencies// Apollo dependencies apolloMetadata(project(":parent")) // You still need to declare the parent module as a regular dependency implementation(project(":parent")) }

    ๐Ÿ“š For more information, read the official documentation

    ๐Ÿฑ โš ๏ธ Multi-Modules is currently experimental and we'd love to hear how it worked (or not worked) for you. We welcome issues/feedback through the Github Issues

    SDL schemas improvements

    ๐Ÿ”– Version 2.4.0 brings even more fixes and tools to work with SDL schemas. SDL schemas are a more concise and readable way to work with GraphQL schemas. To use them, replace schema.json with your SDL schema schema.sdl. You can get a SDL schema from your GraphQL Playground if your endpoint has an associated Playground instance. If you don't have a playground instance or another way to download a SDL file, version 2.4.0 can make an introspection query and save it in SDL format. The schema will be saves as Json or SDL depending on the filename extension:

    ./gradlew downloadApolloSchema --endpoint https://your.graphql/endpoint --schema src/main/graphql/com/example/schema.sdl


    ๐Ÿšš If you're using apollo-coroutines-support, version 2.4.0 brings apolloCall.await() (#2574). It is more concise than the previous apolloCall.toDeferred().await() and also respects structured concurrency. We strongely encourage to move to .await(). Many thanks to @R4md4c for adding this!

    Kotlin 1.4.10

    โœ… The Kotlin 1.4.10 ecosystem is moving forward and we bumped a few dependencies (sqldeligh, okio, kotlin-compile-testing, coroutines and obviously kotlin).

    ๐Ÿ‘€ The Gradle plugin is also compiled against Kotlin 1.4.10 despite Gradle forcing Kotlin 1.3.72 at runtime. We compile with apiVersion = "1.3" and our tests do not show any issue but please let us know if you see any weird Gradle behaviour.


    ๐Ÿ”– Version 2.4.0 fixes how files were written in variables (#2566) and allows to subclass FileUpload to make it work without a File. With Android 11 and scoped storage out of the door, this will allow to upload from a content uri or any other data source. The API was inspired by OkHttp RequestBody. If you ever used OkHttp before, you shouldn't be disoriented:

      object upload : FileUpload(mimetype) {
        override fun contentLength(): Long {
          TODO("return contentLength here")
        override fun fileName(): String? {
          TODO("return fileName to use in the multipart request here")
        override fun writeTo(sink: BufferedSink) {
          TODO("write the data here")

    Full Changelog

    ๐Ÿฑ โœจ New

    • ๐Ÿ‘ Multi-module support (#2514)
    • ๐Ÿ”Œ [Plugin] Allow to download SDL schemas (#2586)
    • ๐Ÿ—„ [Plugin] Add an option to fail on deprecated usages (#2575)
    • [FileUpload] allow to sub class FileUpload (#2569)
    • [FileUpload] Allow to encode custom scalar types as null and use it for file uploads (#2566)
    • ๐Ÿ‘ [Coroutines] Add ApolloCall.await with better structured concurrency support. (#2574)

    ๐Ÿ‘ท ๐Ÿ‘ทโ€โ™‚๏ธ Fixes

    • [RxJava] fix retry() (#2587)
    • [SDL] Fix a scalar definition after a union defintion (#2559)
    • [Compiler] fix optional Int properties with an uppercase name (#2543)
    • [SQLNormalizedCache] fix watcher not called on initial cache write (#2538)

    ๐Ÿฑ โš™๏ธ Internal

    • โšก๏ธ Update CI to use main instead of master (#2594)
    • โšก๏ธ Update LICENSE with new organization name (#2584)
    • โž• Add Kotlin as language for the codeblock (#2580)
    • โฌ†๏ธ Bump Kotlin to 1.4.10 (#2578)
    • โฌ†๏ธ Bump sql delight version to 1.4.3 (#2564)
    • Compile Kotlin against stdlib 1.3 (#2555)
    • Put the location of the .xcodeproj file for Kotlin Multiplatform Mobile integration in Android Studio (#2554)
    • ๐Ÿ”Œ [Plugin] allow running the plugin on Gradle 5.6 (#2539)
    • โฌ†๏ธ Bump kotlin compile testing (#2547)

    ๐Ÿฑ โค๏ธ External contributors

    ๐Ÿ“š Many thanks to @R4md4c, @dush1729, @jaggs6 for their awesome work on coroutines, documentation and keeping the project in good shape in general!

  • v2.3.1 Changes

    August 24, 2020

    ๐Ÿš€ Kotlin 1.4 release

    ๐Ÿš€ This is the Kotlin 1.4 release. It contains native binaries compiled for 1.4 and bumps some dependencies.

    ๐Ÿ— It also fixes ApolloCall.Builder.useHttpGetMethodForQueries, thanks a lot to @ubuntudroid for diving into this!

    ๐Ÿฑ โœจ New

    • ๐Ÿ‘ Kotlin 1.4 support (#2510)

    ๐Ÿ‘ท ๐Ÿ‘ทโ€โ™‚๏ธ Fixes

    • ๐Ÿ›  Fix RealApolloCall.toBuilder() not respecting useHttpGetMethodForQueries (#2530)
  • v2.3.0 Changes

    August 13, 2020

    ๐Ÿฑ โš ๏ธ Auto Persisted Queries changes

    โฌ†๏ธ Enabling Auto Persisted Queries with ApolloClient.Builder.enableAutoPersistedQueries(true) will now enable mutations as well (#2509). This should cause no problem in the vast majority of cases. Server supporting auto persisted queries usually support auto persisted mutations as well. As a precautionary measure, we nonetheles recommend testing the integration with your server after upgrading.

    ๐Ÿ‘ JS support for generated models

    ๐Ÿ“š The generated models and parsers can now target Javascript thanks to @andersio and @omainegra ๐Ÿ’›. Check out the documentation for adding it to your multiplatform project. For runtime support, follow this issue.


    In addition to OperationIdGenerator, you can now generate operation IDs in batch. This is useful if your backend requires a list of operations to whitelist that should be sent all at once.

    Exemple usage:

    // build.gradle.ktsapollo { // ... operationOutputGenerator.set(object : com.apollographql.apollo.compiler.OperationOutputGenerator { // don't forget to bump the version if you change the implementation override val version = "v1"override fun generate(operationDescriptorList: Collection\<OperationDescriptor\>): OperationOutput { return operationDescriptorList.associate { it.source.md5() to it } } }) }

    Full Changelog

    ๐Ÿฑ โœจ New

    • ๐Ÿ”Œ [Gradle Plugin] add a way to generate operation ids as batch (#2476)
    • ๐Ÿ‘ [Multiplatform] JS support in apollo-api (#2467)
    • โœ… [SDL] add a basic validation test (#2493)

    ๐Ÿ‘ท ๐Ÿ‘ทโ€โ™‚๏ธ Fixes

    • ๐Ÿ‘ [Runtime] AutoPersistedQueries supported for mutations
    • ๐Ÿ—„ [Runtime] add missing @deprecated and toBuilder for ApolloMutationCall (#2501)
    • [Kotlin Runtime] do not use Java8 forEach which is not available on some older android versions (#2517)
    • ๐Ÿ›  [SqlLite Cache] bump SqlDelight version, fixes compatibility with SqlDelight 1.4.0 (#2508)
    • ๐Ÿ”Œ [Plugin] better error message for multiple schemas (#2488)
    • 0๏ธโƒฃ [Compiler] allow defaultValue="null" for non-string scalar types (#2490)
    • [RxJava2] Add is disposed checking to single (#2480)
    • [SQL Cache] Fix writeToCacheAsynchronously boolean always false when prepareInterceptorChain() is called (#2484)

    ๐ŸŽ โšก Performance

    ๐Ÿฑ โš™๏ธ Internal

    • ๐Ÿ‘ [apollo-api] prefix Boolean Kotlin properties with is for better java interop (#2474)

    ๐Ÿฑ โค๏ธ External contributors

    Many thanks to @JakeSteam, @nymerias, @s1ee, @andersio, @omainegra and @olivierg13 for their awesome contributions!

  • v2.2.3 Changes

    July 24, 2020


    ๐ŸŽ Normalized cache performance improvements:

    ๐ŸŽ Continuing from version 2.2.2, this version adds even more cache performance improvements. For SqlNormalizedCache, reads are now wrapped in a transaction, which will make things faster, especially on large objects (#2422).
    You also have the option to opt-in asynchonous cache writes (#2416):

    apolloClient.normalizedCache(cacheFactory, cacheKeyResolver, true)

    ๐Ÿ’ป Passing true for writeToCacheAsynchronously will make your UI display faster since it will get the network response without waiting for the cache write to happen.

    ๐Ÿ‘ SDL schema support:

    ๐Ÿ‘ Apollo Android now supports SDL (Schema Definition Language) for schemas (#2417). SDL is more concise and easier to read than the introspection json. To use it, place your SDL file in src/main/graphql/$some/$subdirectory/schema.sdl

    ๐Ÿฑ โœจ New

    • ๐Ÿ”Œ [Codegen] Enable SDL schema Apollo Plugin support (#2417)
    • ๐ŸŽ [Performance] Batch normalized sql cache reads (#2422)
    • ๐ŸŽ [Performance] Run ApolloCacheInterceptor store write on dispatcher thread (#2416)
    • [Runtime] add ApolloClient.autoPersistedOperationsInterceptorFactory (#2420)
    • ๐Ÿ‘ [apollo-normalized-cache] multiplatform support (#2457)

    ๐Ÿ‘ท ๐Ÿ‘ทโ€โ™‚๏ธ Fixes

    • [Publication] Fix packaging of apollo-normalized-cache (#2465)
    • [Compiler] Fix issue with using inline fragment inside another inline fragment (#2462)
    • [LruNormalizedCache] Fix a most likely Java -> Kotlin conversion error in the weighteer implementation (#2428)
    • [Kotlin Runtime] calling cancel() on the connection closes it too early, keep the (#2426)
    • ๐Ÿ— [Build] unbreak the generation of com.apollo.compiler.VERSION (#2424)
    • [Subscriptions] Allow calls to WebSocketSubscriptionTransport#send when not connected. (#2419)
    • ๐Ÿ‘ [Compiler] Support empty graphql files (#2418)
    • ๐Ÿ‘ [Coroutines-support] expose runtime/coroutines dependencies (#2415)

    ๐Ÿฑ โš™๏ธ Internal

    • ๐Ÿ— [Runtime] deprecate the "builder" methods on ApolloCall and add them on the Builder instead (#2434)
    • ๐Ÿ— [Build scripts] make the project compile with jdk13 (#2449)
    • [Tooling] ๐Ÿ› ๏ธ Add tasks to check if the API is backward compatible (#2408)
    • โ™ป๏ธ [Compiler] Refactor package structure for GraphQL and SDL parsers (#2411)

    ๐Ÿฑ โค๏ธ External contributors

    Many thanks to @BenSchwab, @jeffnyauke, @DSteve595, @Shevatro and @baconz for their awesome contributions!