All Versions
55
Latest Version
Avg Release Cycle
38 days
Latest Release
34 days ago

Changelog History
Page 1

  • v5.0.0 Changes

    May 12, 2026

    ๐Ÿš€ 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).
  • v5.0.0-rc.1 Changes

    May 04, 2026

    ๐ŸŽ This version is the same as 5.0.0-rc.0 with a fix for a performance regression in the compiler (#6938). Many thanks @apramana for diving into this.

  • v5.0.0-rc.0 Changes

    April 27, 2026

    ๐Ÿš€ First release candidate of Apollo Kotlin 5.

    • ๐Ÿง [NEW] Add linuxArm64 target (#6929)
    • ๐Ÿง [NEW] Add linux WebSockets support (#6929)
    • 0๏ธโƒฃ [FIX] Always strip @catchByDefault in executable documents (#6932)
    • ๐Ÿ”€ [FIX] Cache: merge data in the presence of include directives (#6922)
  • v5.0.0-alpha.7 Changes

    April 07, 2026

    ๐Ÿš€ Compatibility release for Kotlin 2.4.0-Beta1

    • [NEW] Pass parent and parentType to FakeResolver (#6913)
    • ๐Ÿšš [FIX] Compatibility with Kotlin 2.4-Beta1: Remove legacy JS target check (#6908)

    Full Changelog : v5.0.0-alpha.6...v5.0.0-alpha.7

  • v5.0.0-alpha.6 Changes

    March 27, 2026

    This version is probably one of the last alpha before going -rc.

    • ๐Ÿ‘ [NEW] Add support for @ignore (#6900)
    • ๐Ÿ”Œ [FIX] Gradle plugin: set org.gradle.category attribute and use reverse DNS naming to avoid name clashes (#6886)
    • [FIX] Fix validation of @oneOf input objects. (#6894)
    • โฌ‡๏ธ [DOWNGRADE] Downgrade compileSdk version to 35 for better compatibility (#6899, #6902)

    ๐Ÿš€ Many thanks to @eboudrant for the contributions in this release ๐Ÿ’™

  • v5.0.0-alpha.5 Changes

    February 25, 2026

    โœ… 5.0.0-alpha.5 is "golden-path" ready โœจ! It supports the latest GraphQL experimental features:

    It also bumps KGP version to 2.3.10. This has no impact for JVM/Android consumers but requires Native/JS/Wasm consumers to compile with Kotlin 2.3.

    ๐Ÿš€ Many thanks to @abeggsnf for the contributions in this release!

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

    • [NEW] Add fragment-arguments (#6882)
    • ๐Ÿ‘ [NEW] Add support for service capabilities (#6858)
    • ๐Ÿ‘ [NEW] Add support for onError (#6860)
    • [NEW] Implement field extensions (#6856, #6867)
    • [NEW] Use KGP 2.3.10 (#6873)
    • ๐Ÿ“œ [NEW] Add GraphQLWsProtocol.parseServerMessage() (#6871)
    • ๐Ÿ”€ [NEW] Rework field merging validation (#6875)
    • ๐Ÿ— [FIX] Data builders: fix nullable fields of composite type (#6855)
    • ๐Ÿ”Œ [FIX] Use the same classloader than the one which loaded apollo-gradle-plugin to lookup the AGP version (#6877)
    • [FIX] Use public AGP API for version detection instead of internal class (#6874)
  • v5.0.0-alpha.4 Changes

    January 23, 2026

    ๐Ÿš€ Many thanks @MatthewFolbigg, @scana, and @simonlebras for their contributions to this release!

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

    What's Changed

    • [NEW] Add watchosDeviceArm64 target in #6791
    • ๐Ÿ‘ [NEW] Add support for directives on directive definitions in #6803
    • [NEW] Add ApolloCall.extensions() in #6834
    • ๐Ÿ”Œ [FIX] Do not compute key fields and key args when the Cache compiler plugin is present in #6797
    • [FIX] Escape /* and */ in KDocs in #6805
    • [FIX] Fix DataBuilders in multi-modules scenarios in #6810
    • ๐Ÿ— [FIX] Data Builders: do not build the FakeResolver multiple times in #6811
    • ๐Ÿ”ง [FIX] Gradle Plugin: Avoid eager configuration of Gradle objects in #6820
    • [FIX] Rename @link Purpose and Import definitions in #6838
    • [FIX] Escape names in equals(), hashCode(), copy(), and toString() in #6843
  • v5.0.0-alpha.3 Changes

    November 13, 2025

    ๐Ÿ‘ @stream support

    You may now use @stream to stream list responses from a compatible server.

    ๐Ÿ‘ To do this, opt in support for the incremental:v0.2 protocol:

    valapolloClient=ApolloClient.Builder()
        .networkTransport(HttpNetworkTransport.Builder()
                .serverUrl("http://example.com/graphql")
                .incrementalDeliveryProtocol(IncrementalDeliveryProtocol.V0\_2)
                .build()
        )
        .build()
    

    ๐Ÿ”€ Using @defer and @stream will stay opt-in until the RFC is merged.

    Experimental WebSockets are stable

    ๐Ÿ“ฆ The experimental WebSockets are promoted to stable. In particular, the request url may now be changed in interceptors. This can be used together with RetryStrategy to change the authentication parameters when retrying a subscription. The previous implementation (using the com.apollographql.apollo.ws package name) is now deprecated.

    ๐Ÿ“„ Read more in the migration guide.

    Leveraging OkHttp cache

    ๐Ÿ— You can now use OkHttp cacheUrlOverride() to cache POST requests.

    ๐Ÿ”ง To do so, configure a cache on your OkHttpClient and use enablePostCaching:

    valapolloClient=ApolloClient.Builder()
        .networkTransport(HttpNetworkTransport.Builder()// Enable POST caching.httpRequestComposer(DefaultHttpRequestComposer(serverUrl=mockServer.url(), enablePostCaching=true))
                .httpEngine(DefaultHttpEngine{OkHttpClient.Builder()
                          .cache(directory=File(application.cacheDir,"http\_cache"), maxSize=10\_000\_000)
                          .build()
                    }
                )
                .build()
        )
        .build()
    

    ๐Ÿ—„ The existing apollo-http-cache artifacts have been deprecated. Moving forward, leveraging the cache of existing clients (OkHttp, Ktor, etc...) is the recommended way to do caching at the HTTP layer.

    ๐Ÿ“„ Read more in the migration guide.

    ๐Ÿ‘ AGP9 support

    ๐Ÿ”Œ The Gradle plugin now works with AGP 9 and the com.android.kotlin.multiplatform.library plugin.

    Service.issueSeverity()

    You may now control the severity of issues found by the compiler in your Gradle scripts:

    service("service") { 
      packageName.set("com.example")// Do not fail the build on unused fragments// Valid values are the names of the subclasses of `com.apollographql.apollo.ast.Issue`issueSeverity("UnusedFragment","warn") 
    }
    

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

    • ๐Ÿ†• NEW: Promote experimental websockets to stable by @martinbonnin in #6774
    • ๐Ÿ†• NEW: Add @catch support for responseBased codegen by @martinbonnin in #6697
    • ๐Ÿ†• NEW: Support descriptions on variable definitions by @BoD in #6699
    • ๐Ÿ†• NEW: Support Android Gradle Plugin 9 (AGP9) by @martinbonnin in #6703
    • ๐Ÿ†• NEW: Add Service.issueSeverity() by @martinbonnin in #6731
    • ๐Ÿ†• NEW: Add HTTP caching using OkHttp cacheUrlOverride by @martinbonnin in #6739
    • ๐Ÿ†• NEW: Implement @defer and @stream as of incremental/v0.2 by @BoD in #6331
    • ๐Ÿ†• NEW: Add ApolloRequest.Builder.url(String) by @martinbonnin in #6758
    • ๐Ÿ†• NEW: Add a specific issue type for fragment cycles by @martinbonnin in #6759
    • ๐Ÿ†• NEW: Add ApolloInterceptor.InsertionPoint to control where the interceptors are added by @martinbonnin in #6761
    • ๐Ÿ†• NEW: Introduce RetryStrategy by @martinbonnin in #6764
    • ๐Ÿ›  FIX: Make Optional.Absent a data object by @JakeWharton in #6686
    • ๐Ÿ›  FIX: Use regular if/else to avoid Int boxing by @JakeWharton in #6688
    • ๐Ÿ›  FIX: Remove kotlin-node dependency by @martinbonnin in #6708
    • ๐Ÿ›  FIX: Do not check already checked fragments in checkCapitalizedFields by @BoD in #6718
    • ๐Ÿ›  FIX: Pretty-print operation manifest by @BoD in #6720
    • ๐Ÿ›  FIX: Allow empty deprecationReasons by @martinbonnin in #6729
    • ๐Ÿ›  FIX: Fix IndexOutOfBoundsException in keyFields validation by @BoD in #6748
    • ๐Ÿ›  FIX: Allow multiple success responses in ApolloCall.execute() by @BoD in #6772
    • ๐Ÿ›  FIX: Restore JsonReader state if a field throws in-flight by @martinbonnin in #6775
    • ๐Ÿ›  FIX: Exclude auto-imported cache related directives when the Apollo cache plugin is present by @BoD in #6766
    • ๐Ÿ›  FIX: fix a timeout leak in the default HttpEngine by @martinbonnin in #6762
    • ๐Ÿ“„ DOCS: add linuxX64 as supported for apollo-runtime by @hrach in #6689
    • ๐Ÿ“„ DOCS: Update @defer documentation by @calvincestari in #6751
    • โšก๏ธ UPDATE: Bump KGP to 2.2.20 by @BoD in #6716
  • v5.0.0-alpha.2 Changes

    August 21, 2025

    In this new alpha of v5, here are the main highlights:

    • WasmJs target added to GraphQL subscriptions
    • Experimental generateApolloEnums option to generate enums as a sealed hierarchy distinguishing known and unknown values
    • ๐Ÿ›  and a handful of bug fixes and improvements.

    Your feedback is greatly appreciated as you try the new version!

    ๐Ÿšง To migrate your project, please read the migration guide (work in progress).

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

    • ๐Ÿ‘ [new] Add GraphQL subscriptions support for wasmJs target (#6637)
    • [new] Introduce Service.generateApolloEnums to generate enums with a __Known interface (#6611)
    • [new] Add generateApolloProjectIdeModel task (#6666)
    • ๐Ÿ”Œ [new] Introduce Service.pluginsArguments and relax the check for multiple plugins (#6622)
    • 0๏ธโƒฃ [fix] Added default Accept header to introspection query (#6616)
    • [fix] Fix error reporting on invalid documents (#6642)5
    • [fix] [Execution] Fix coercing variable values (#6644)
    • [fix] Normalize the order of arguments of checked definitions (#6650)
    • [fix] Make sure that the introspection endpoint property value is checked at execution time (#6657)
    • [fix] Use the more lenient dependencies API (#6667)
    • [fix] Do not silently discard network exceptions (#6669)
    • โฌ†๏ธ [upgrade] Use built-in Node fetch (#6674)

    ๐Ÿ’œ Contributors

    ๐Ÿš€ Many thanks to @pedromfmachado, @jvanderwee, @aryapreetam and @francescocervone for the contributions and help in this release ๐Ÿ’œ

  • v5.0.0-alpha.1 Changes

    June 30, 2025

    ๐Ÿš€ Small release to fix a publishing discrepency in the versions. Thanks @ychescale9 for the heads up!

    • ๐Ÿ”Œ [fix] Fix can't resolve apollo-gradle-plugin-tasks (#6603)
    • [new] Warn on unused fragments (#6601)