seanmonstar/reqwest
72.6
Strong · 29 September 2026
18.2k
lines of production code
Rust
primary language
2
measurements over time
What this system is
This system is a comprehensive HTTP client library for Rust that provides both asynchronous and synchronous APIs for making web requests. It supports multiple protocols including HTTP/1, HTTP/2, and experimental HTTP/3, while offering robust TLS management, custom DNS resolution, and WebAssembly compatibility. The library enables users to construct and execute requests with features like JSON handling, form data submission, and proxy support across various execution environments.
Features
Add WASM example demonstrating Reqwest-based GitHub API fetch
A new example located in examples/wasm\_github\_fetch has been added to demonstrate using the Reqwest library within a WebAssembly context. The example fetches branch information from the GitHub API and displays the latest commit details in the browser. It includes the necessary build configuration (webpack, wasm-pack), JavaScript entry point, and Rust source code, along with a .gitignore and an osv-scanner configuration to ignore npm packages during vulnerability scans.
_examples/wasm\_github\fetch · high confidence
Async implementation layer for reqwest
This change introduces the \async\_impl\ module, which provides the core asynchronous HTTP client implementation. It includes the \Client\ and \ClientBuilder\ for configuring and executing requests, \Request\ and \RequestBuilder\ for constructing HTTP requests, \Response\ for handling replies, and \Body\ for managing request payloads. The module also supports multipart form data via \multipart.rs\, HTTP upgrades via \upgrade.rs\, and experimental HTTP/3 support via \h3\_client.rs\. This layer serves as the foundation for the public \reqwest\ API, handling the underlying async I/O, connection pooling, and protocol logic.
_src/async\impl · high confidence
Experimental HTTP/3 client implementation with Happy Eyeballs and connection pooling
This change introduces the core infrastructure for the experimental HTTP/3 client, including a new connector that supports Happy Eyeballs for IPv4/IPv6 address resolution, a DNS resolution layer, and a connection pool to manage and reuse HTTP/3 connections. The implementation allows the client to handle HTTP/3 requests by establishing QUIC connections, managing connection state, and providing a service interface compatible with the existing client architecture.
_src/async\_impl/h3\client · high confidence
Introduce WebAssembly (WASM) support for the HTTP client
Adds a new \wasm\ module providing a \Client\, \Request\, \Response\, and \Body\ implementation that wraps the browser's Fetch API, enabling the library to function in WebAssembly environments. This includes support for multipart form data (behind the \multipart\ feature), request timeouts, caching, credentials, and response body parsing (JSON, text, bytes, and streams).
src/wasm · high confidence
Introduce blocking synchronous HTTP client API
This change adds a new \reqwest::blocking\ module that provides a synchronous, blocking API for making HTTP requests, allowing users to execute requests without needing an async runtime. The module exposes a \Client\ and \ClientBuilder\ that mirror the asynchronous interface, along with \Request\, \Response\, and \Body\ types. It includes a convenience \get\ function for simple requests and supports features like multipart forms, cookies, and timeouts. The implementation bridges the async internals to the current thread using \tokio::sync\ and thread parking, ensuring that blocking calls do not panic when used outside an async context.
src/blocking · high confidence
Introduction of request-scoped configuration system
A new \config\ module has been added to provide a generic mechanism for storing and retrieving configuration values on a per-request basis. This system uses the \RequestConfigValue\ trait and \RequestConfig\ struct to associate specific configuration keys with their value types, allowing multiple distinct configurations (even of the same type) to be stored in request extensions without ambiguity. The module currently includes a \TotalTimeout\ configuration key, enabling request-level timeout overrides.
src · high confidence
Updated examples to use async reqwest and added new usage demos
The example files have been modernized to use the async reqwest API with the tokio runtime, replacing the previous synchronous request crate usage. The simple example now accepts a URL via CLI argument and supports wasm32 targets. New examples have been added to demonstrate specific features: blocking HTTP requests, sending and receiving JSON (both dynamic and typed via serde), submitting form data, using HTTP/3, connecting through a Tor SOCKS proxy, and offloading TLS handshake work to a lower-priority background thread pool using a custom Tower layer.
examples · high confidence
Behavioural changes
Initial release of reqwest v0.13 with rustls default and HTTP/3 support
This release introduces reqwest v0.13, making rustls the default TLS backend (replacing native-tls) and adding experimental HTTP/3 support. Key behavioral changes include renaming the rustls feature to just 'rustls', switching the default crypto provider to aws-lc, and removing long-deprecated methods and features like trust-dns. The changelog also documents fixes for DNS resolution strategies, proxy authentication, and redirect handling, alongside new configuration options for HTTP/1 header limits and TLS key logging.
(repo-wide) · high confidence
New DNS resolution architecture with Hickory DNS and custom resolver support
The DNS resolution layer has been refactored to support custom resolvers via a new \Resolve\ trait, allowing users to inject their own DNS logic. The default implementation now uses the Hickory DNS library (migrated from trust-dns), which prefers IPv6 addresses and falls back to Google's public DNS if system configuration fails. A new \GaiResolver\ wrapper is also provided for standard system resolution, and the \Name\ type now implements \FromStr\ for easier parsing.
src/dns · high confidence
Test coverage
Added test support infrastructure for HTTP/2 delays, Unix sockets, and CRL validation; Expanded test coverage for TLS, compression, HTTP/3, and client configuration.
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
Score
- CAI 71 → 73 (+1.3)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.
Lenses
- Code Health 92 → 92 (+0.0)
- Architecture 100 → 100 (-0.3)
- Maturity 58 → 57 (-0.3)
- Readiness 74 → 77 (+2.7)
- Security 87 → 92 (+5.4)
- Performance 100 (new)
Resolved (1)
- Off-boarding risk: anonymized user #1
New (2)
- Dependency hygiene PARTLY measured — Cargo dependencies read, no committed lock to grade for currency
- Off-boarding risk: anonymized user #1
Changes since last survey
- 2 commits — 2 feature/other, 0 fixes
By area
- (root) — 2 commits
Notable commits
- change: build: declare base64 with default-features = false (#3100)
- change: chore(deps): update to tower-http 0.7 (#3062)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
seanmonstar/reqwest 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 29 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 aff2ddb677e20517baec5254b8800c6d371aa010 — the exact code this score is about.
- Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-70910855e4b4.