Skip to content
CAI
Software that uses CAICheck a score

kittinunf/fuel

60.3

Adequate · 25 September 2026

3.7k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This release delivers a comprehensive multiplatform overhaul, introducing native HTTP loader implementations for Apple, JVM, and WebAssembly targets, alongside new Server-Sent Events support. The library's architecture has been significantly refactored to use a common \HttpLoader\ abstraction, replacing previous default client implementations and internal HTTP handling classes. Additionally, the project upgrades to Kotlin 2.0 and Gradle 9.3.1, while adding JSON deserialization extensions for Jackson, Moshi, and kotlinx-serialization, with corresponding test suite updates.

Features

Add JSON deserialization extension for HttpResponse

A new \toJson\ extension function is added to \HttpResponse\, allowing users to deserialize HTTP response bodies into typed Kotlin objects using kotlinx-serialization. The function accepts a \Json\ configuration and a \DeserializationStrategy\, returning a \Result\ wrapping the deserialized object or a \Throwable\.

fuel-kotlinx-serialization/src/commonMain · high confidence

Add JSON deserialization extensions for Jackson and Moshi

New extension functions are added to convert HTTP responses into Kotlin objects using Jackson and Moshi. For Jackson, a \toJackson\ function parses the response body using a Jackson \ObjectMapper\. For Moshi, \toMoshi\ functions allow parsing the response into a specified class or type using a \JsonAdapter\. Both implementations leverage \kotlinx-io\ for reading the response source.

fuel-jackson-jvm/src/main, fuel-moshi-jvm/src/main · high confidence

Add Maven publication and signing support for JVM libraries

A new Gradle plugin (publication.gradle.kts) has been added to the build system, enabling Maven repository publishing for JVM libraries. This includes configuration for Sonatype staging and snapshot repositories, automatic inclusion of Javadoc artifacts, and PGP signing of published artifacts using environment variables or local properties for credentials.

plugins/src · high confidence

Add mockbin-native sample using Kotlinx-io and Fuel

A new sample application for the mockbin-native project has been introduced, demonstrating a native Kotlin HTTP client setup. The sample utilizes the Fuel library for network requests and Kotlinx-io for reading the response body, providing a concrete example of how to integrate these libraries in a native environment.

samples/mockbin-native · high confidence

Added Apple platform HTTP loader with SSE support

The library now supports HTTP requests on Apple platforms (iOS, macOS, etc.) via a new \AppleHttpLoader\ implementation. This adds native support for standard HTTP methods (GET, POST, PUT, DELETE, HEAD, PATCH) and introduces Server-Sent Events (SSE) support on Apple platforms, allowing users to consume streaming responses using Kotlin Flows.

fuel/src/appleMain · high confidence

New common API entry point and HTTP loader abstraction

The library introduces a new \Fuel\ singleton object in the common module that serves as the primary entry point for HTTP methods (get, post, put, patch, delete, head, method, and sse). This object manages an \HttpLoader\ via a new \HttpLoaderFactory\ interface, allowing platform-specific implementations to be injected. The \Request\ class and its \Builder\ are now defined in common, supporting parameters, headers, and body. Additionally, extension functions on \String\ (e.g., \httpGet\, \httpPost\) are provided for convenience. The \HttpLoader\ interface and \HttpResponse\ class are also moved to common, standardizing the HTTP execution model across platforms.

fuel/src/commonMain · high confidence

Platform-specific HTTP loaders for JVM and WebAssembly

The library now provides concrete HTTP loader implementations for the JVM and WebAssembly (Wasm) platforms. On the JVM, the new \JVMHttpLoader\ and \HttpUrlFetcher\ leverage OkHttp to execute requests, supporting standard HTTP methods and Server-Sent Events (SSE). For WebAssembly, \WasmHttpLoader\ and \HttpUrlFetcher\ implement the same interface using the browser's native \fetch\ API. This change introduces the underlying network execution layer for these platforms, enabling HTTP functionality on JVM and Wasm targets.

fuel/src/jvmMain · high confidence

WebAssembly (Wasm) support for the httpbin-wasm sample

The httpbin-wasm sample now runs in WebAssembly-enabled browsers. A new Kotlin entry point (Main.kt) and an HTML template (index.html) have been added to the wasmJsMain source set, enabling the sample to execute on the Wasm platform.

samples/httpbin-wasm · high confidence

Removals

Removed OkHttp progress tracking sample

The sample code demonstrating how to track download progress using OkHttp's interceptor and custom response body wrappers has been removed from the project.

fuel-samples/progress · high confidence

Behavioural changes

Migrated HTTP response handling to JVM-specific implementation

The \ResponseExtension\ logic has been moved from the shared \fuel-forge\ module to the \fuel-forge-jvm\ module. This change updates the \toForge\ function to accept a \fuel.HttpResponse\ and use \kotlinx.io\ for reading the response body, replacing the previous \okhttp3.Response\-based implementation.

fuel-forge-jvm/src/main · medium confidence

Removal of Kotlin-based weather sample application

The Kotlin-based weather sample application, which demonstrated synchronous and asynchronous HTTP requests using the Moshi library for JSON parsing, has been removed from the repository. This eliminates the example code that previously showcased the library's capabilities for fetching and parsing weather data.

fuel-samples/weather · high confidence

Removal of Moshi response extension functions

The file ResponseExtension.kt, which provided convenience functions to convert HTTP responses into Moshi objects, has been removed. Users relying on these extension methods will need to handle Moshi serialization manually or use alternative conversion utilities.

fuel-moshi/src/main · high confidence

Removal of centralized library version definitions

The build configuration no longer uses a centralized Kotlin object to define library versions and dependencies. This change removes the \Library.kt\ file from \buildSrc\, which previously managed versions for Kotlin, Coroutines, OkHttp, Forge, Serialization, Moshi, and JUnit. This aligns with the migration away from Gradle extra properties in favor of more explicit dependency management.

buildSrc · high confidence

Removal of default HTTP client implementation

The default HTTP client implementation has been removed from the \fuel-default\ module. This includes the \Fuel\ singleton object for configuring the default \HttpLoader\, the \Fuels\ object containing top-level extension functions for HTTP methods (GET, POST, PUT, PATCH, DELETE, HEAD, and generic METHOD), and string extension functions for making requests. Users will no longer have access to these default convenience methods and must explicitly configure or provide their own HTTP loader implementation.

fuel-default · high confidence

Removal of internal HTTP loader and request handling classes

The internal implementation classes for HTTP loading and request handling have been removed from the fuel-base module. Specifically, the \ContinuationCallback\, \Extensions\, \HttpException\, \HttpLoader\, \HttpLoaderBuilder\, \HttpLoaders\, \HttpUrlFetcher\, \RealHttpLoader\, and \Request\ classes are no longer present in the codebase. This change eliminates the previous internal architecture for handling HTTP requests and responses, likely as part of a broader refactoring or migration of the HTTP client implementation.

fuel-base/src/main · high confidence

Removal of kotlinx-serialization Response extension

The ResponseExtension.kt file, which provided a toJson() function to parse HTTP responses into kotlinx-serialization objects, has been removed. This eliminates the convenience method for converting response bodies into serialized types within the fuel-kotlinx-serialization module.

fuel-kotlinx-serialization/src/main · high confidence

Removed Kotlin sample using Coroutines

The sample application demonstrating the synchronous blocking style interface has been removed. This change eliminates the dependency on Kotlin Coroutines for this specific example, aligning with the broader project shift to strip Coroutines from the core library.

fuel-samples/simple-client · high confidence

Updated Kotlin to 2.0 and upgraded Gradle wrapper to 9.3.1

The project now targets Kotlin 2.0, requiring Java 8+ bytecode, and upgrades the Gradle wrapper from 8.10.2 to 9.3.1. The README has been updated to reflect the new Kotlin version and the new Maven Central artifact coordinates. Additionally, the repository has adopted Renovate for automated dependency updates and switched from the ktlint Gradle plugin to using super-linter, with corresponding changes to .editorconfig, .gitignore, and the removal of ktlint.gradle.kts.

(repo-wide) · high confidence

Test coverage

Add JVM tests for kotlinx-serialization integration; Added Apple-specific serialization tests; Added tests for Moshi JSON deserialization; Expanded test coverage for HTTP client and utility functions; Removed Kotlinx Serialization test suite; Removed obsolete HTTP loader tests; Removed obsolete Moshi test file; Updated Fuel-Forge JVM tests to use the new Result-based API.

Dependencies

Migrate to Gradle Version Catalogs and Multiplatform Structure

The project has been restructured to use Gradle Version Catalogs for dependency management, centralizing all library versions (such as Kotlin 2.3.0, Jackson 2.21.1, and Moshi 1.15.2) in a single configuration file. This change introduces a new multiplatform build configuration for the core 'fuel' module, enabling support for JVM, iOS, macOS, and WasmJS targets. Additionally, the build system has been updated to target Java 1.8 for JVM modules and Java 17 for the plugins module, while removing legacy build scripts and properties.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 9.3.1

The Gradle wrapper has been upgraded from version 6.3 to 9.3.1, which will cause the project to use the newer Gradle version for builds. Additionally, network timeout and distribution validation settings have been added to the wrapper configuration.

gradle · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 44 → 60 (+16.1)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.2)
  • Architecture 94 → 100 (+5.9)
  • Maturity 51 → 49 (-2.5)
  • Readiness 33 → 60 (+27.4)
  • Security 37 → 65 (+28.4)

Resolved (21)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (11 lines × 2) (fuel/src/appleMain/kotlin/fuel/AppleHttpLoader.kt)
  • Duplicated block (11 lines × 2) (fuel/src/wasmJsMain/kotlin/fuel/WasmHttpLoader.kt)
  • Duplicated block (14 lines × 2) (fuel/src/jvmMain/kotlin/fuel/JVMHttpLoader.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No artifact signing
  • No exposed public API
  • No tests found
  • …and 1 more

New (24)

  • Ambiguous setter overloads. setHttpLoader accepts both a concrete instance and a factory. While technically distinct signatures, it is unclear if the factory is invoked immediately or stored for later use, leading to potential confusion about when the loader is instantiated.
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicate HTTP GET operations with different naming conventions and parameter structures. FuelsKt uses a URL-first approach with optional parameters/headers, while StringsKt implies string-based routing but lacks a URL parameter in the signature provided (likely relying on extension context or implicit state), and uses http prefix. This creates confusion on which entry point to use for simple requests.
  • Duplicate SSE operations. FuelsKt.sse requires a URL, while StringsKt.httpSSE does not. This mirrors the inconsistency found in standard HTTP methods.
  • Duplicate custom HTTP method operations. FuelsKt.method takes a URL, while StringsKt.httpMethod does not (in the signature shown). This inconsistency in required arguments for the same logical operation (sending a custom HTTP verb) is confusing.
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Inconsistent factory access patterns. Fuel.loader() is a static method on the main class, while platform-specific loaders are accessed via their Companion object's invoke. This forces users to know which platform-specific loader to instantiate or rely on the generic Fuel class, but the API surface exposes multiple ways to get an HttpLoader without a unified strategy.
  • …and 4 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

kittinunf/fuel was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 57aa89126e0d488dd54cfc2d0d9215ade2a578a9 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.