We intended this version to be the first release candidate but we found a few bugs justifying a new beta instead. Many thanks to @CoreFloDev, @olivierg13, @rohandhruva, @adavis and @sproctor for identifying the bugs and sending feedback, this helps a ton 🙏 💙 . Next one should be release candidate 🤞 🚀
The escaping of Kotlin keywords used in field names now uses Kotlin's backtick escaping (`keyword`) convention instead of suffixing an underscore (keyword_). This could impact the generated code in your projects if a schema contains such fields. (#3630)
Before going stable, the public API has been tweaked to ensure consistency.
Upload creation (#3613)Creating an Upload used to be possible by calling Upload.fromXyz() methods and now has been changed to use a Builder API which is more consistent with the rest of the API:
// Before
val upload = Upload.fromSource(okioSource)
// or if you're on the JVM
val upload = Upload.fromFile(file)
// After
val upload = DefaultUpload.Builder()
.content(bufferedSource)
// or if you're on the JVM
.content(file)
.build()
The method to enable or disable Automatic Persisted Queries on a specific call has been renamed to a more meaningful name:
// Before
val response = apolloClient.query(HeroNameQuery())
.hashedQuery(false)
.execute()
// After
val response = apolloClient.query(HeroNameQuery())
.enableAutoPersistedQueries(false)
.execute()
During the course of the alpha and beta, a number of APIs have been evolving, and to allow a smooth transition by early adopters, some early APIs have been marked as deprecated in favor of new ones.
Now that we are soon reaching a stable API, it is time to remove these early APIs.
This means if you were using 3.0.0-beta04 or earlier you may want to first review the deprecation warnings and update your code to use the newer APIs, before upgrading to this version.
ApolloResponse, you can now do so by using a Builder API (#3608)BufferedSource as input. (#3620)HttpEngine (OkHttpEngine, NSURLSessionHttpEngine, and KtorHttpEngine) have all been renamed to DefaultHttpEngine for consistency (#3617)// Before
String result = StringAdapter.INSTANCE.fromJson(jsonReader,CustomScalarAdapters.Empty);
// After
String result = Adapters.StringAdapter.fromJson(jsonReader,CustomScalarAdapters.Empty);
IOException in Adapter APIs, making it possible to catch it in Java code (#3603)Fetched April 11, 2026