eed3si9n/gigahorse
60.0
Adequate · 20 September 2026
4.7k
lines of production code
Scala
primary language
1
measurement over time
What this system is
Gigahorse is a Scala HTTP client library that provides a unified, reactive API for making HTTP and WebSocket requests. It supports multiple underlying backends, including Apache HTTP, AsyncHttpClient, OkHttp, and Apache Pekko HTTP, allowing users to choose their preferred implementation. The system handles core web capabilities such as streaming, multipart forms, authentication, and SSL configuration across Scala 2.12, 2.13, and 3.
How it got here
2016 — Initial release and build modernization
4 changes.
This period marks the initial release of the Gigahorse core HTTP client library for Scala, introducing comprehensive configuration and request building capabilities. Concurrently, the project underwent significant build system modernization, migrating from sbt 0.13 to sbt 1.x and adopting Bazel to support Scala 2.12, 2.13, and 3.
2017 — HTTP client module expansion
4 changes.
This period focused on expanding the Gigahorse library by adding support for AsyncHttpClient and OkHttp as underlying HTTP clients. The work included implementing core HTTP and WebSocket capabilities for both modules, alongside establishing a new Netty-based test infrastructure to validate these integrations.
2022–2025 — Apache Pekko migration and build tooling
5 changes.
The project migrated its HTTP client backend from Akka to Apache Pekko and upgraded the Apache HTTP client to version 5.x, introducing streaming and improved authentication support. Concurrently, the build system was enhanced to support Scala 2.12 and 2.13 cross-compilation with Scalafix integration, and helper scripts were added to streamline version management and code fixes.
Features
Add AsyncHttpClient support for Gigahorse
This change introduces a new \asynchttpclient\ support module for Gigahorse, implementing the \ReactiveHttpClient\ interface using the AsyncHttpClient library. It provides full HTTP capabilities including full and streaming responses, file downloads, and WebSocket communication, along with configurable SSL/TLS settings, connection pooling, and proxy support.
asynchttpclient/src/main · high confidence
Add OkHttp support for HTTP and WebSocket requests
Users can now use OkHttp as the underlying HTTP client for the Gigahorse library. This change introduces a new \gigahorse.support.okhttp\ module that implements the \HttpClient\ interface using the OkHttp3 library, enabling standard HTTP operations (GET, POST, PUT, DELETE, PATCH) and WebSocket communication. The implementation includes support for file uploads, multipart forms, and SSL configuration, though it currently does not support preemptive authentication.
okhttp · high confidence
Added bin/multiversion and bin/scalafix helper scripts
The repository now includes two new executable scripts in the bin directory. bin/multiversion is a wrapper that downloads and executes the Twitter bazel-multiversion tool (version 0.2.0) for supported Linux and macOS platforms, caching the binary in the user's home directory. bin/scalafix is a utility that queries Bazel for scalafix targets based on a provided build target query and runs them sequentially, allowing users to apply scalafix rules to multiple targets at once.
bin · high confidence
Initial release of the Gigahorse core HTTP client library
This change introduces the core module for Gigahorse, a new HTTP client for Scala. It provides a comprehensive configuration system (Config) for managing timeouts, redirects, proxy settings, SSL, and connection pooling, alongside a rich request builder (Request) that supports various HTTP methods, body types (including multipart forms and files), authentication schemes (Basic, Digest, NTLM, etc.), and custom headers. The library is built using sbt-contraband for type-safe configuration generation and is configured for Bazel builds.
core · high confidence
Behavioural changes
Add Scala 2.12 and 2.13 cross-build tooling with Scalafix integration
The build system now supports cross-compilation for Scala 2.12 (2.12.18) and Scala 2.13 (2.13.11) via new local module and repository configurations. The \scala\_library\ rule has been enhanced to automatically generate SemanticDB artifacts and run Scalafix checks on sources, while the compiler flag \-Werror\ is now explicitly removed from scalac options to prevent build failures from warnings during this process.
tools · high confidence
Apache HTTP backend upgraded to version 5.x with new streaming and multipart support
The Apache HTTP client backend has been migrated from version 4.x to 5.x, introducing several behavioral improvements and new capabilities. Users benefit from more robust handling of authentication, including scoped auth credentials and configurable preemptive auth for Basic schemes. The backend now supports HTTP version policies and fixes header parsing, particularly regarding content-type charsets. Additionally, new streaming handlers (byte and character streams) and a dedicated multipart form producer enable efficient file uploads and large response processing without loading entire bodies into memory.
apache-http/src/main · high confidence
Migrate HTTP client implementation to Apache Pekko HTTP
The HTTP client backend has been updated from Akka HTTP to Apache Pekko HTTP. This change replaces the underlying Akka dependencies with their Pekko equivalents (e.g., \org.apache.pekko\), allowing the library to function with the Pekko ecosystem. Users benefit from continued support and compatibility with the new Pekko actor system while maintaining the same Gigahorse API surface.
pekko-http · high confidence
Migrate build to sbt 1.13 and Pekko, add HTTP client shading
The build system has been upgraded from sbt 0.13 to sbt 1.13, and the project now supports Scala 2.12, 2.13, and 3. The underlying HTTP client implementation has shifted from AsyncHttpClient 1.x to 2.12.4, and Akka HTTP dependencies have been replaced with Apache Pekko HTTP. To prevent dependency conflicts, the build now includes custom shading rules that relocate AsyncHttpClient, Netty, and Apache HTTP client packages under a dedicated prefix and excludes logging libraries from the shaded artifacts.
project · high confidence
Migration to Bazel build system
The project has adopted Bazel as a build system, introducing configuration files such as WORKSPACE, MODULE.bazel, and .bazelrc to manage dependencies and toolchains. This change enables cross-compilation for Scala 2.12 and 2.13, integrates specific library versions like ssl-config-core 0.7.1 and async-http-client 2.0.39, and establishes a standardized development environment with .java-version 1.8 and Scalafmt 3.10.7.
(repo-wide) · high confidence
New Netty-based test infrastructure for HTTP and WebSocket testing
The common-test module now uses a custom test server built on Netty and Unfiltered, replacing previous implementations. This change introduces a dedicated test plan (TestPlan) that supports HTTP features such as basic and preemptive authentication, redirects, form uploads, multipart handling, and signature calculation, along with a separate WebSocket echo server (WsTestPlan) for testing WebSocket connectivity. The build configuration (BUILD.bazel) explicitly declares dependencies on Netty and Unfiltered components, ensuring the test suite can exercise these specific behaviors in a controlled environment.
common-test · high confidence
Test coverage
Added tests for Apache HTTP client configuration and authentication; Added tests for AsyncHttpClient integration.
Dependencies
Upgrade to SBT 1.x and add Scala 3 support
The build system has been migrated from SBT 0.13 to SBT 1.x, updating the \build.sbt\ structure to use modern \ThisBuild\ settings. This change adds support for Scala 3 alongside existing Scala 2.12 and 2.13 versions, enabling the library to be compiled and published for all three major Scala versions. The project structure is also expanded to include new modules for Apache HTTP, OkHttp, AsyncHttpClient, and Pekko HTTP, reflecting a broader backend support strategy.
(dependencies) · 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
Baseline
- First survey — no prior run to compare against. CAI 60.
Lenses
- Code Health 97
- Architecture 100
- Maturity 41
- Readiness 73
- Security 70
Changes since last survey
- 282 commits — 256 feature/other, 26 fixes
By area
- (repo) — 102 commits
- (root) — 46 commits
- core/src — 32 commits
- common-test/src — 15 commits
- project/Dependencies.scala — 15 commits
- .github/workflows — 13 commits
- asynchttpclient/src — 9 commits
- apache-http/src — 8 commits
- akka-http/src — 7 commits
- docs/ja — 6 commits
- project/Shade.scala — 5 commits
- project/plugin.sbt — 5 commits
- project/build.properties — 4 commits
- docs/00.md — 3 commits
- 3rdparty/jvm — 2 commits
- pekko-http/src — 2 commits
- .github/dependabot.yml — 1 commit
- docs/03-processing.md — 1 commit
- docs/05.md — 1 commit
- notes/0.3.0.markdown — 1 commit
Notable commits
- fix: Fix Apache HTTP redirect configuration
- fix: Fix ApacheHttpClient parsing of content type charset
- fix: Fix Request.scala change
- fix: Fix Travis testing
- fix: Fix build
- fix: Fix common test
- fix: Fix shutdown behavior
- fix: Fix the "underlying" mistake
- fix: Fix things
- fix: Merge pull request #124 from mkurz/fix/apache-request-redirect-setting
- fix: Merge pull request #36 from jkugiya/fix/close_file
- fix: Merge pull request #38 from volth/fix-DelimitedPublisher
- fix: Merge pull request #43 from xuwei-k/fix-warn
- fix: Revert FileBody to just upload
- fix: ci: Fix release
- fix: fix "adaptation of argument list" warning
- fix: fix DelimitedPublisher case when received chunk has no delimiter
- fix: fix DelimitedPublisher case when there are two delimiters in a row
- fix: fix compile error with latest Scala 2.13
- fix: fix test. add User-Agent header
- …and 262 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
eed3si9n/gigahorse 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 20 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 67eecbf5b5e066e1b14691ac3cbb167619a54a4e — 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-b51f968c9b10.