PackageTrack
Sign in Get early access

com.squareup.retrofit2:adapter-rxjava2

3.0.0 #408 most downloaded on Maven Central square/retrofit

What this package is like to depend on

Last release 1 years ago

15 May 2025

Ships unpredictably

gaps range from 1 weeks to 3.8 years

Nearly every release is documented

notes for 20 of 20 stable releases

Nothing withdrawn

no release was ever pulled

9 years old

20 releases · first in 2017

0 releases in the last 12 months

see the full history below

Release timeline

20 releases · May 2017 to May 2025
2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 20
  1. 3.0.0 15 May 2025
    Release notes

    Changed

    • Upgrade to OkHttp 4.12 (from 3.14).

      This is the version of OkHttp that is written in Kotlin, and as a result Retrofit now has a transitive Kotlin dependency. However, this is also the supported version of OkHttp whereas the previous version was out of support for nearly 4 years.

    Note: The 3.x versions of Retrofit maintain forward binary-compatibility with the 2.x versions.
    This means libraries compiled against 2.x can still be used with the 3.x versions.

    Open source →
    Release notes

    Changed

    • Upgrade to OkHttp 4.12 (from 3.14).

      This is the version of OkHttp that is written in Kotlin, and as a result Retrofit now has a transitive Kotlin dependency. However, this is also the supported version of OkHttp whereas the previous version was out of support for nearly 4 years.

    Note: The 3.x versions of Retrofit maintain forward binary-compatibility with the 2.x versions. This means libraries compiled against 2.x can still be used with the 3.x versions.

    Open source →
  2. 2.12.0 15 May 2025
    Release notes

    New

    • First-party converters now support deferring serialization to happen when the request body is written (i.e., during HTTP execution) rather than when the HTTP request is created. In some cases this moves conversion from a calling thread to a background thread, such as in the case when using Call.enqueue directly.

      The following converters support this feature through a new withStreaming() factory method:

      • Gson
      • Jackson
      • Moshi
      • Protobuf
      • Wire

    Fixed

    • Primitive types used with @Tag now work by storing the value boxed with the boxed class as the key.
    Open source →
    Release notes

    New

    • First-party converters now support deferring serialization to happen when the request body is written (i.e., during HTTP execution) rather than when the HTTP request is created. In some cases this moves conversion from a calling thread to a background thread, such as in the case when using Call.enqueue directly.

      The following converters support this feature through a new withStreaming() factory method:

      • Gson
      • Jackson
      • Moshi
      • Protobuf
      • Wire

    Fixed

    • Primitive types used with @Tag now work by storing the value boxed with the boxed class as the key.
    Open source →
  3. 2.11.0 28 Mar 2024
    Release notes

    New

    • The built-in OptionalConverterFactory is now public to allow installing it before other converters which consume all types (e.g., Moshi, Gson, Jackson, etc.).

    Fixed

    • Ensure that exceptions thrown from failure to parse method annotations can be observed by multiple threads/callers. Previously only the first caller would see the actual parsing exception and other callers would get a cryptic ClassCastException.
    Open source →
    Release notes

    New

    • The built-in OptionalConverterFactory is now public to allow installing it before other converters which consume all types (e.g., Moshi, Gson, Jackson, etc.).

    Fixed

    • Ensure that exceptions thrown from failure to parse method annotations can be observed by multiple threads/callers. Previously only the first caller would see the actual parsing exception and other callers would get a cryptic ClassCastException.
    Open source →
  4. 2.10.0 18 Mar 2024
    Release notes

    New

    • Support using Unit as a response type. This can be used for non-body HTTP methods like HEAD or body-containing HTTP methods like GET where the body will be discarded without deserialization.

    • kotlinx.serialization converter!

      This was imported from github.com/JakeWharton/retrofit2-kotlinx-serialization-converter/ and remains unchanged from its 1.0.0 release.

      The Maven coordinates are com.squareup.retrofit2:converter-kotlinx-serialization.

    • JAXB 3 converter!

      The Maven coordinates are com.squareup.retrofit2:converter-jaxb3.

    • @Header, @Headers, and @HeaderMap can now set non-ASCII values through the allowUnsafeNonAsciiValues annotation property. These are not technically compliant with the HTTP specification, but are often supported or required by services.

    • Publish a BOM of all modules. The Maven coordinates are com.squareup.retrofit2:retrofit-bom.

    • Invocation now exposes the service Class<?> and the instance on which the method was invoked. This disambiguates the source when service inheritence is used.

    • A response type keeper annotation processor is now available for generating shrinker rules for all referenced types in your service interface. In some cases, it's impossible for static shrinker rules to keep the entirety of what Retrofit needs at runtime. This annotation processor generates those additional rules. For more info see its README.

    Changed

    • Add shrinker rules to retain the generic signatures of built-in types (Call, Response, etc.) which are used via reflection at runtime.
    • Remove backpressure support from RxJava 2 and 3 adapters. Since we only deliver a single value and the Reactive Streams specification states that callers must request a non-zero subscription value, we never need to honor backpressure.
    • Kotlin Retrofit.create function now has a non-null lower bound. Even if you specified a nullable type before this function would never return null.
    • Suspend functions now capture and defer all Throwable subtypes (not just Exception subtypes) to avoid Java's UndeclaredThrowableException when thrown synchronously.
    • Eagerly reject suspend fun functions that return Call<Body>. These are never correct, and should declare a return type of Body directly.
    • Support for Java 14-specific and Java 16-specific reflection needed to invoke default methods on interfaces have been moved to separate versions of a class through a multi-release jar. This should have no observable impact other than the jar now contains classes which target Java 14 and Java 16 bytecode that might trip up some static analysis tools which are not aware of multi-release jars.
    • Parameter names are now displayed in exception messages when available in the underlying Java bytecode.
    • Jackson converter now supports binary formats by using byte streams rather than character streams in its implementation. Use the create(ObjectMapper, MediaType) overload to supply the value of the Content-Type header for your format.

    Fixed

    • Do not include synthetic methods when doing eager validation.
    • Use per-method rather than per-class locking when parsing annotations. This eliminates contention when multiple calls are made in quick succession at the beginning of the process lifetime.
    Open source →
    Release notes

    New

    • Support using Unit as a response type. This can be used for non-body HTTP methods like HEAD or body-containing HTTP methods like GET where the body will be discarded without deserialization.

    • kotlinx.serialization converter!

      This was imported from github.com/JakeWharton/retrofit2-kotlinx-serialization-converter/ and remains unchanged from its 1.0.0 release.

      The Maven coordinates are com.squareup.retrofit2:converter-kotlinx-serialization.

    • JAXB 3 converter!

      The Maven coordinates are com.squareup.retrofit2:converter-jaxb3.

    • @Header, @Headers, and @HeaderMap can now set non-ASCII values through the allowUnsafeNonAsciiValues annotation property. These are not technically compliant with the HTTP specification, but are often supported or required by services.

    • Publish a BOM of all modules. The Maven coordinates are com.squareup.retrofit2:retrofit-bom.

    • Invocation now exposes the service Class<?> and the instance on which the method was invoked. This disambiguates the source when service inheritence is used.

    • A response type keeper annotation processor is now available for generating shrinker rules for all referenced types in your service interface. In some cases, it's impossible for static shrinker rules to keep the entirety of what Retrofit needs at runtime. This annotation processor generates those additional rules. For more info see its README.

    Changed

    • Add shrinker rules to retain the generic signatures of built-in types (Call, Response, etc.) which are used via reflection at runtime.
    • Remove backpressure support from RxJava 2 and 3 adapters. Since we only deliver a single value and the Reactive Streams specification states that callers must request a non-zero subscription value, we never need to honor backpressure.
    • Kotlin Retrofit.create function now has a non-null lower bound. Even if you specified a nullable type before this function would never return null.
    • Suspend functions now capture and defer all Throwable subtypes (not just Exception subtypes) to avoid Java's UndeclaredThrowableException when thrown synchronously.
    • Eagerly reject suspend fun functions that return Call<Body>. These are never correct, and should declare a return type of Body directly.
    • Support for Java 14-specific and Java 16-specific reflection needed to invoke default methods on interfaces have been moved to separate versions of a class through a multi-release jar. This should have no observable impact other than the jar now contains classes which target Java 14 and Java 16 bytecode that might trip up some static analysis tools which are not aware of multi-release jars.
    • Parameter names are now displayed in exception messages when available in the underlying Java bytecode.
    • Jackson converter now supports binary formats by using byte streams rather than character streams in its implementation. Use the create(ObjectMapper, MediaType) overload to supply the value of the Content-Type header for your format.

    Fixed

    • Do not include synthetic methods when doing eager validation.
    • Use per-method rather than per-class locking when parsing annotations. This eliminates contention when multiple calls are made in quick succession at the beginning of the process lifetime.
    Open source →
  5. 2.9.0 20 May 2020
    Release notes
    • New: RxJava 3 adapter!

      The Maven coordinates are com.squareup.retrofit2:adapter-rxjava3.

      Unlike the RxJava 1 and RxJava 2 adapters, the RxJava 3 adapter's create() method will produce asynchronous HTTP requests by default. For synchronous requests use createSynchronous() and for synchronous on a scheduler use createWithScheduler(..).

    Open source →
  6. 2.8.2 18 May 2020
    Release notes
    • Fix: Detect running on the Android platform by using system property rather than the presence of classes. This ensures that even when you're running on the JVM with Android classes present on the classpath you get JVM semantics.
    • Fix: Update to OkHttp 3.14.9 which contains an associated Android platform detection fix.
    Open source →
  7. 2.8.1 26 Mar 2020
    Release notes
    • Fix: Do not access MethodHandles.Lookup on Android API 24 and 25. The class is only available on Android API 26 and higher.
    Open source →
  8. 2.8.0 24 Mar 2020
    Release notes
    • New: Add Call.timeout() which returns the okio.Timeout of the full call.
    • Fix: Change Call.awaitResponse() to accept a nullable response type.
    • Fix: Support default methods on Java 14+. We had been working around a bug in earlier versions of Java. That bug was fixed in Java 14, and the fix broke our workaround.
    Open source →
  9. 2.7.2 25 Feb 2020
    Release notes
    • Fix: Update to OkHttp 3.14.7 for compatibility with Android R (API 30).
    Open source →
  10. 2.7.1 03 Jan 2020
    Release notes
    • Fix: Support 'suspend' functions in services interfaces when using 'retrofit-mock' artifact.
    Open source →
  11. 2.7.0 10 Dec 2019
    Release notes

    This release changes the minimum requirements to Java 8+ or Android 5+. See this blog post for more information on the change.

    • New: Upgrade to OkHttp 3.14.4. Please see its changelog for 3.x.
    • Fix: Allow service interfaces to extend other interfaces.
    • Fix: Ensure a non-null body is returned by Response.error.
    Open source →
  12. 2.6.4 03 Jan 2020
    Release notes
    • Fix: Support 'suspend' functions in services interfaces when using 'retrofit-mock' artifact.
    Open source →
  13. 2.6.3 10 Dec 2019
    Release notes
    • Fix: Change mechanism for avoiding UndeclaredThrowableException in rare cases from using yield an explicit dispatch which ensures that it will work even on dispatchers which do not support yielding.
    Open source →
  14. 2.6.2 07 Nov 2019
    Release notes
    • Fix: Avoid IOExceptions being wrapped in UndeclaredThrowableException in rare cases when using Response<..> as a return type for Kotlin 'suspend' functions.
    Open source →
  15. 2.6.1 07 Nov 2019
    Release notes
    • Fix: Avoid IOExceptions being wrapped in UndeclaredThrowableException in rare cases.
    • Fix: Include no-content ResponseBody for responses created by Response.error.
    • Fix: Update embedded R8/ProGuard rules to not warn about nested classes used for Kotlin extensions.
    Open source →
  16. 2.6.0 07 Nov 2019
    Release notes
    • New: Support suspend modifier on functions for Kotlin! This allows you to express the asynchrony of HTTP requests in an idiomatic fashion for the language.

      @GET("users/{id}")
      suspend fun user(@Path("id") id: Long): User
      

      Behind the scenes this behaves as if defined as fun user(...): Call<User> and then invoked with Call.enqueue. You can also return Response<User> for access to the response metadata.

      Currently this integration only supports non-null response body types. Follow issue 3075 for nullable type support.

    • New: @Tag parameter annotation for setting tags on the underlying OkHttp Request object. These can be read in CallAdapters or OkHttp Interceptors for tracing, analytics, varying behavior, and more.

    • New: @SkipCallbackExecutor method annotation will result in your Call invoking its Callback on the background thread on which the HTTP call was made.

    • New: Support OkHttp's Headers type for @HeaderMap parameters.

    • New: Add Retrofit.Builder.baseUrl(URL) overload.

    • Fix: Add embedded R8/ProGuard rule which retains Retrofit interfaces (while still allowing obfuscation). This is needed because R8 running in 'full mode' (i.e., not in ProGuard-compatibility mode) will see that there are no subtypes of these interfaces and rewrite any code which references instances to null.

    • Fix: Mark HttpException.response() as @Nullable as serializing the exception does not retain this instance.

    • Fix: Fatal errors (such as stack overflows, out of memory, etc.) now propagate to the OkHttp Dispatcher thread on which they are running.

    • Fix: Ensure JAX-B converter closes the response body when an exception is thrown during deserialization.

    • Fix: Ignore static methods when performing eager validation of interface methods.

    • Fix: Ensure that calling source() twice on the ResponseBody passed to a Converter always returns the same instance. Prior to the fix, intermediate buffering would cause response data to be lost.

    Open source →
  17. 2.5.0 29 Jul 2019
    Release notes
    • New: Built-in support for Kotlin's Unit type. This behaves the same as Java's Void where the body content is ignored and immediately discarded.
    • New: Built-in support for Java 8's Optional and CompletableFuture types. Previously the 'converter-java8' and 'adapter-java8' dependencies were needed and explicitly adding Java8OptionalConverterFactory and/or Java8CallAdapterFactory to your Retrofit.Builder in order to use these types. Support is now built-in and those types and their artifacts are marked as deprecated.
    • New: Invocation class provides a reference to the invoked method and argument list as a tag on the underlying OkHttp Call. This can be accessed from an OkHttp interceptor for things like logging, analytics, or metrics aggregation.
    • New: Kotlin extension for Retrofit which allows you call create passing the interface type only as a generic parameter (e.g., retrofit.create<MyService>()).
    • New: Added Response.success overload which allows specifying a custom 2xx status code.
    • New: Added Calls.failure overload which allows passing any Throwable subtype.
    • New: Minimal R8 rules now ship inside the jar requiring no client configuration in the common case.
    • Fix: Do not propagate fatal errors to the callback. They are sent to the thread's uncaught exception handler.
    • Fix: Do not enqueue/execute an otherwise useless call when the RxJava type is disposed by onSubscribe.
    • Fix: Call RxJavaPlugins assembly hook when creating an RxJava 2 type.
    • Fix: Ensure both the Guava and Java 8 Optional converters delegate properly. This ensures that converters registered prior to the optional converter can be used for deserializing the body type.
    • Fix: Prevent @Path values from participating in path-traversal. This ensures untrusted input passed as a path value cannot cause you to make a request to an un-intended relative URL.
    • Fix: Simple XML converter (which is deprecated) no longer wraps subtypes of RuntimeException or IOException when it fails.
    • Fix: Prevent JAXB converter from loading remote entities and DTDs.
    • Fix: Correctly detect default methods in interfaces on Android (API 24+). These still do not work, but now a correct exception will be thrown when detected.
    • Fix: Report more accurate exceptions when a @QueryName or @QueryMap precedes a @Url parameter.
    • Update OkHttp dependency to 3.12.
    Open source →
  18. 2.4.0 29 Jul 2019
    Release notes
    • New: Retrofit.Builder exposes mutable lists of the added converter and call adapter factories.
    • New: Call adapter added for Scala's Future.
    • New: Converter for JAXB replaces the now-deprecated converter for Simple XML Framework.
    • New: Add Java 9 automatic module names for each artifact corresponding to their root package.
    • Fix: Do not swallow Errors from callbacks (usually OutOfMemoryError).
    • Fix: Moshi and Gson converters now assert that the full response was consumed. This prevents hiding bugs in faulty adapters which might not have consumed the full JSON input which would then cause failures on the next request over that connection.
    • Fix: Do not conflate OkHttp Call cancelation with RxJava unsubscription/disposal. Prior to this change, canceling of a Call would prevent a cancelation exception from propagating down the Rx stream.
    Open source →
  19. 2.3.0 13 May 2017
    Release notes
    • Retrofit now uses @Nullable to annotate all possibly-null values. We've added a compile-time dependency on the JSR 305 annotations. This is a [provided][maven_provided] dependency and does not need to be included in your build configuration, .jar file, or .apk. We use @ParametersAreNonnullByDefault and all parameters and return types are never null unless explicitly annotated @Nullable.

      Warning: this release is source-incompatible for Kotlin users. Nullability was previously ambiguous and lenient but now the compiler will enforce strict null checks.

    • New: Converters added for Java 8's and Guava's Optional which wrap a potentially-nullable response body. These converters still rely on normal serialization library converters for parsing the response bytes into an object.

    • New: String converters that return null for an @Query or @Field parameter are now skipped.

    • New: The mock module's NetworkBehavior now throws a custom subclass of IOException to more clearly indicate the exception's source.

    • RxJava 1.x converter updated to 1.3.0 which stabilizes the use of Completable.

    • Fix: Add explicit handling for OnCompleteFailedException, OnErrorFailedException, and OnErrorNotImplementedException for RxJava 1.x to ensure they're correct delivered to the plugins/hooks for handling.

    • Fix: NoSuchElementException thrown when unsubscribing from an RxJava 1.x Single.

    Open source →
  20. 2.2.0 29 Jul 2019
    Release notes
    • RxJava 2.x is now supported with a first-party 'adapter-rxjava2' artifact.
    • New: @QueryName annotation allows creating a query parameter with no '=' separator or value.
    • New: Support for messages generated by Protobuf 3.0 or newer when using the converter for Google's protobuf.
    • New: RxJava 1.x call adapter now correctly handles broken subscribers whose methods throw exceptions.
    • New: Add toString() implementations for Response and Result.
    • New: The Moshi converter factory now offers methods for enabling null serialization and lenient parsing.
    • New: Add createAsync() to RxJava 1.x call adapter factory which executes requests using Call.enqueue() using the underlying HTTP client's asynchronous support.
    • New: NetworkBehavior now allows setting an error percentage and returns HTTP errors when triggered.
    • HttpException has been moved into the main artifact and should be used instead of the versions embedded in each adapter (which have been deprecated).
    • Promote the response body generic type on CallAdapter from the adapt method to the enclosing class. This is a source-incompatible but binary-compatible change which is only relevant if you are implementing your own CallAdapters.
    • Remove explicit handling of the now-defunct RoboVM platform.
    • Fix: Close response on HTTP 204 and 205 to avoid resource leak.
    • Fix: Reflect the canceled state of the HTTP client's Call in Retrofit's Call.
    • Fix: Use supplied string converters for the String type on non-body parameters. This allows user converters to handle cases such as when annotating string parameters instead of them always using the raw string.
    • Fix: Skip a UTF-8 BOM (if present) when using the converter for Moshi.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive