janko/down
66.6
Adequate · 20 September 2026
1.2k
lines of production code
Ruby
primary language
1
measurement over time
What this system is
This system is a Ruby library designed for downloading and opening remote resources via HTTP. It provides a unified API for streaming downloads with memory-efficient chunked reading, supporting multiple pluggable HTTP backends such as Net::HTTP, http.rb, and HTTPX. The library handles core networking tasks including authentication, progress callbacks, and error management across these different implementations.
Removals
Removed multi-version Ruby testing script
The \bin/test-versions\ script, which was used to run tests across multiple Ruby versions (including 1.9.3, 2.0.0, 2.1.5, 2.2.2, JRuby, and Rubinius), has been removed. This eliminates the automated capability to validate the application against this specific set of legacy and alternative Ruby runtimes.
bin · high confidence
Behavioural changes
Down library rewritten with new backends and ChunkedIO
The Down library has been completely rewritten, introducing a new \Down::ChunkedIO\ class that wraps response enumerators into IO-like objects for streaming downloads. The library now supports multiple HTTP backends: \Down::Http\ (using http.rb), \Down::Httpx\ (using HTTPX), \Down::NetHttp\ (using Net::HTTP/open-uri), and a deprecated \Down::Wget\ backend. The rewrite includes improved error handling with specific exception classes like \Down::NotFound\, \Down::ClientError\, and \Down::ServerError\, better memory management through chunked reading, and support for features like progress callbacks, content length checks, and basic authentication across all backends.
lib/down · high confidence
Refactor to pluggable HTTP backends with Net::HTTP as default
The library has been refactored to support pluggable HTTP backends, replacing the previous single-implementation approach. The default backend is now explicitly set to \Down::NetHttp\, and the core \download\ and \open\ methods now delegate to this backend, allowing users to switch implementations (e.g., to HTTP.rb) via the \Down.backend\ setter. This change removes direct dependencies on \open-uri\ and \timeout\ in the main entry point, simplifies the API by forwarding arguments to the backend, and introduces a version-aware User-Agent header.
lib · high confidence
Test coverage
Added test support helpers for deprecation, warnings, and a local httpbin server; Migrate test suite to real HTTP server and new backend tests.
Dependencies
Upgrade to Ruby 3.2+ and modernize dependencies
The gem now requires Ruby 3.2 or higher, dropping support for older versions. Dependencies have been updated to use addressable \~\> 2.8 and base64 \~\> 0.3, while development dependencies now include minitest \~\> 6.0, mocha \~\> 1.5, and specific versions of httpx and http for testing. The gemspec also explicitly lists included files and adds a license field.
(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 67.
Lenses
- Code Health 98
- Architecture 69
- Maturity 59
- Readiness 65
- Security 96
Changes since last survey
- 300 commits — 269 feature/other, 31 fixes
By area
- (root) — 176 commits
- lib/down — 81 commits
- test/http_test.rb — 8 commits
- lib/down.rb — 7 commits
- test/down_test.rb — 5 commits
- test/net_http_test.rb — 5 commits
- test/test_helper.rb — 5 commits
- .github/workflows — 4 commits
- test/chunked_io_test.rb — 4 commits
- (repo) — 2 commits
- test/support — 2 commits
- test/httpx_test.rb — 1 commit
Notable commits
- fix: Attempt once more to fix the test suite on Travis
- fix: Attempt to fix Travis CI errors by upgrading JRuby
- fix: Attempt to fix failures on Travis CI
- fix: Code fix for unknown HTTP error codes (#42)
- fix: Fix CI (#81)
- fix: Fix Cookie HTTP request header (#71)
- fix: Fix Docker settings for tests (#19)
- fix: Fix FiberErrors on chunked & gzipped responses
- fix: Fix StopIteration error in ChunkedIO when :chunks is an empty Enumerator
- fix: Fix #pos not always being updated after Down::ChunkedIO#gets
- fix: Fix a bug in Down::ChunkedIO#read with last chunk
- fix: Fix a test failure caused by updating Webmock
- fix: Fix failing test on JRuby
- fix: Fix frozen string literal warnings in Ruby 3.4
- fix: Fix incorrect timeout settings for Down::Http
- fix: Fix keyword arguments warnings on Ruby 2.7
- fix: Fix kwarg warnings in Down.download and Down.open
- fix: Fix potential race condition with JRuby tests
- fix: Fix shadowing outer local variable warnings
- fix: Fix specs on Ruby 3.4
- …and 280 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
janko/down 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 1095fb3fb0355af71d2c2c7ee210f27137793066 — 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.