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.WARNINGsymbols are nowDeprecationLevel.ERROR.
๐ PreviousDeprecationLevel.ERRORsymbols 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.2format for@deferand@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
@ignoresupport (#6900). - โ Add support descriptions on variable definitions (#6699).
- โ Add support for directives on directive definitions (#6803).
- ๐ Speed up field merging validation (#6875).
- Validate
@oneOfinput 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.1compatibility 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) andwatchosDeviceArm64(#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
Acceptheader 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.ignoreUnknownKeysandApolloClient.Builder.ignoreUnknownKeys(#6473). - โช Restore
JsonReaderstate if a field throws in-flight (#6775). - ๐ Make
Optional.Absentadata object(#6686); useif/elseto avoidIntboxing (#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-cacheartifact is deprecated.๐ Instead, Apollo Kotlin now uses OkHttp's
cacheUrlOverride()and supports POST caching viaenablePostCaching(#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.generateApolloEnumsto generate enums as a sealed hierarchy with a__Knowninterface (#6611). - ๐ Allow generating Data Builders outside the main source set (#6485).
- โ Add
generateApolloProjectIdeModeltask (#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.transformafter processing (#6510). - ๐ Rename
@linkPurposeandImportdefinitions (#6838). - Escape names in
equals(),hashCode(),copy(), andtoString()(#6843). - Escape
/*and*/in KDocs (#6805). - Ignore scalars/enums in
checkCapitalizedFields(#6502). - ๐ Fix
IndexOutOfBoundsExceptioninkeyFieldsvalidation (#6748). - Do not check already-checked fragments in
checkCapitalizedFields(#6718).
- GraphQL golden path : incremental delivery (
-
v5.0.0-rc.1 Changes
May 04, 2026 -
v5.0.0-rc.0 Changes
April 27, 2026 -
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, 2026This version is probably one of the last alpha before going
-rc.- ๐ [NEW] Add support for
@ignore(#6900) - ๐ [FIX] Gradle plugin: set
org.gradle.categoryattribute and use reverse DNS naming to avoid name clashes (#6886) - [FIX] Fix validation of
@oneOfinput objects. (#6894) - โฌ๏ธ [DOWNGRADE] Downgrade
compileSdkversion to 35 for better compatibility (#6899, #6902)
๐ Many thanks to @eboudrant for the contributions in this release ๐
- ๐ [NEW] Add support for
-
v5.0.0-alpha.5 Changes
February 25, 2026โ
5.0.0-alpha.5is "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
PurposeandImportdefinitions in #6838 - [FIX] Escape names in equals(), hashCode(), copy(), and toString() in #6843
-
v5.0.0-alpha.3 Changes
November 13, 2025๐
@streamsupportYou may now use
@streamto 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
@deferand@streamwill 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.wspackage 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-cacheartifacts 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.libraryplugin.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
@catchsupport 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
@deferand@streamas ofincremental/v0.2by @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.InsertionPointto control where the interceptors are added by @martinbonnin in #6761 - ๐ NEW: Introduce
RetryStrategyby @martinbonnin in #6764 - ๐ FIX: Make
Optional.Absentadata objectby @JakeWharton in #6686 - ๐ FIX: Use regular
if/elseto avoidIntboxing 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
@deferdocumentation by @calvincestari in #6751 - โก๏ธ UPDATE: Bump KGP to 2.2.20 by @BoD in #6716
-
v5.0.0-alpha.2 Changes
August 21, 2025In this new alpha of v5, here are the main highlights:
- WasmJs target added to GraphQL subscriptions
- Experimental
generateApolloEnumsoption 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.generateApolloEnumsto generate enums with a__Knowninterface (#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!