You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rustls is now the default TLS backend, instead of native-tls.
rustls crypto provider defaults to aws-lc instead of ring. (rustls-no-provider exists if you want a different crypto provider)
rustls-tls has been renamed to rustls.
rustls roots features removed, rustls-platform-verifier is used by default.
To use different roots, call tls_certs_only(your_roots).
native-tls now includes ALPN. To disable, use native-tls-no-alpn.
query and form are now crate features, disabled by default.
Long-deprecated methods and crate features have been removed (such as trust-dns, which was renamed hickory-dns a while ago).
Many TLS-related methods renamed to improve autocompletion and discovery, but previous name left in place with a "soft" deprecation. (just documented, no warnings)
For example, prefer tls_backend_rustls() over use_rustls_tls().
v0.12.28
Fix compiling on Windows if TLS and SOCKS features are not enabled.
v0.12.27
Add ClientBuilder::windows_named_pipe(name) option that will force all requests over that Windows Named Piper.
v0.12.26
Fix sending Accept-Encoding header only with values configured with reqwest, regardless of underlying tower-http config.
v0.12.25
Add Error::is_upgrade() to determine if the error was from an HTTP upgrade.
Fix sending Proxy-Authorization if only username is configured.
Fix sending Proxy-Authorization to HTTPS proxies when the target is HTTP.
Refactor internal decompression handling to use tower-http.
v0.12.24
Refactor cookie handling to an internal middleware.
Refactor internal random generator.
Refactor base64 encoding to reduce a copy.
Documentation updates.
v0.12.23
Add ClientBuilder::unix_socket(path) option that will force all requests over that Unix Domain Socket.
Add ClientBuilder::retry(policy) and reqwest::retry::Builder to configure automatic retries.
Add ClientBuilder::dns_resolver2() with more ergonomic argument bounds, allowing more resolver implementations.
Add http3_* options to blocking::ClientBuilder.
Fix default TCP timeout values to enabled and faster.
Fix SOCKS proxies to default to port 1080
(wasm) Add cache methods to RequestBuilder.
v0.12.22
Fix socks proxies when resolving IPv6 destinations.
v0.12.21
Fix socks proxy to use socks4a:// instead of socks4h://.
Fix Error::is_timeout() to check for hyper and IO timeouts too.
Fix request Error to again include URLs when possible.
Fix socks connect error to include more context.
(wasm) implement Default for Body.
v0.12.20
Add ClientBuilder::tcp_user_timeout(Duration) option to set TCP_USER_TIMEOUT.
Fix proxy headers only using the first matched proxy.
(wasm) Fix re-adding Error::is_status().
v0.12.19
Fix redirect that changes the method to GET should remove payload headers.
Fix redirect to only check the next scheme if the policy action is to follow.
(wasm) Fix compilation error if cookies feature is enabled (by the way, it's a noop feature in wasm).
v0.12.18
Fix compilation when socks enabled without TLS.
v0.12.17
Fix compilation on macOS.
v0.12.16
Add ClientBuilder::http3_congestion_bbr() to enable BBR congestion control.
Add ClientBuilder::http3_send_grease() to configure whether to send use QUIC grease.
Add ClientBuilder::http3_max_field_section_size() to configure the maximum response headers.
Add ClientBuilder::tcp_keepalive_interval() to configure TCP probe interval.
Add ClientBuilder::tcp_keepalive_retries() to configure TCP probe count.
Add Proxy::headers() to add extra headers that should be sent to a proxy.
Fix redirect::Policy::limit() which had an off-by-1 error, allowing 1 more redirect than specified.
Fix HTTP/3 to support streaming request bodies.
(wasm) Fix null bodies when calling Response::bytes_stream().
v0.12.15
Fix Windows to support both ProxyOverride and NO_PROXY.
Fix http3 to support streaming response bodies.
Fix http3 dependency from public API misuse.
v0.12.14
Fix missing fetch_mode_no_cors(), marking as deprecated when not on WASM.
v0.12.13
Add Form::into_reader() for blocking multipart forms.
Add Form::into_stream() for async multipart forms.
Add support for SOCKS4a proxies.
Fix decoding responses with multiple zstd frames.
Fix RequestBuilder::form() from overwriting a previously set Content-Type header, like the other builder methods.
Fix cloning of request timeout in blocking::Request.
Fix http3 synchronization of connection creation, reducing unneccesary extra connections.
Fix Windows system proxy to use ProxyOverride as a NO_PROXY value.
Fix blocking read to correctly reserve and zero read buffer.
(wasm) Add support for request timeouts.
(wasm) Fix Error::is_timeout() to return true when from a request timeout.
v0.12.12
(wasm) Fix compilation by not compiler tokio/time on WASM.
v0.12.11
Fix decompression returning an error when HTTP/2 ends with an empty data frame.
v0.12.10
Add ClientBuilder::connector_layer() to allow customizing the connector stack.
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: Cargo.lock
Command failed: cargo update --config net.git-fetch-with-cli=true --manifest-path Cargo.toml --package reqwest@0.12.28 --precise 0.13.2
Updating crates.io index
error: failed to select a version for the requirement `reqwest = "^0.12"`
candidate versions found which didn't match: 0.13.2
location searched: crates.io index
required by package `opentelemetry-otlp v0.31.0`
... which satisfies dependency `opentelemetry-otlp = "^0.31.0"` of package `scotty v0.2.9 (/tmp/renovate/repos/github/factorial-io/scotty/scotty)`
I've reviewed this dependency update PR. While the change appears minimal (single version bump), reqwest 0.13.0 introduces several breaking changes that require attention.
❌ BLOCKING ISSUE: Missing form Feature
Critical: The code uses .form() method in scotty/src/oauth/device_flow.rs:148, but reqwest 0.13.0 makes form and queryopt-in features (disabled by default).
Required Fix:
# Cargo.toml line 64reqwest = { version = "0.13.0", default-features = false, features = ["json", "rustls-tls", "http2", "charset", "stream", "form"] }
Impact: Without this feature, the code will fail to compile.
⚠️Breaking Changes to Review
1. Feature Rename: rustls-tls (Currently Used)
The PR uses the renamed feature rustls-tls which is correct for 0.13.0. In 0.12.x it was also rustls-tls, so this is compatible. ✅
However, note that:
The old feature name still works but is soft-deprecated
Recommended new name: rustls (but keeping rustls-tls is fine for now)
2. TLS Backend Change
Before (0.12):native-tls was default
After (0.13):rustls is now default
Your config: Explicitly uses rustls-tls with default-features = false ✅
This is handled correctly since you're explicitly specifying the TLS backend.
3. Rustls Crypto Provider
New default: aws-lc-rs (changed from ring)
Impact: Binary size may change slightly, but functionally equivalent
Your config: No action needed (you're not using rustls-no-provider) ✅
4. Certificate Validation
Change: Now uses rustls-platform-verifier by default instead of webpki roots
Impact: Better platform integration (uses OS certificate store)
Your config: No action needed ✅
5. oauth2 Crate Compatibility
The oauth2 crate (v4.4) in scotty/Cargo.toml:92 uses:
oauth2 = { version = "4.4", default-features = false, features = ["reqwest", "rustls-tls"] }
Action needed: Verify oauth2 v4.4 supports reqwest 0.13. Check if an oauth2 update is also needed.
🧪 Test Coverage Recommendations
Before merging, verify:
OAuth Device Flow:
Test device flow authentication end-to-end
Verify .form() method works correctly in scotty/src/oauth/device_flow.rs:148
HTTP Client:
Run tests in scotty-core/src/http/client.rs (lines 337-568)
Verify error handling, redirects, and timeouts still work
Test all scottyctl commands that make HTTP requests
📋 Action Items
Add "form" feature to reqwest dependency in Cargo.toml:64
Verify oauth2 crate v4.4 is compatible with reqwest 0.13 (or update if needed)
Run full test suite: cargo test
Test OAuth device flow manually
Test scottyctl commands that use HTTP client
💡 Optional Improvements (Not Blocking)
Consider these in a follow-up PR:
Update to new feature names:
reqwest = { version = "0.13.0", default-features = false, features = ["json", "rustls", "http2", "charset", "stream", "form"] }
Review timeout configuration:
The changelog mentions improved default TCP timeouts. Review if your custom timeouts in scotty-core/src/http/client.rs are still optimal.
🎯 Summary
Cannot merge yet - missing required "form" feature will cause compilation failure.
Once the feature is added and oauth2 compatibility is verified, this upgrade should be safe. The breaking changes are well-handled by your explicit feature configuration, except for the missing form feature.
Do not merge this PR as-is. Please update the feature flags as specified above, then verify compilation with:
cargo check --workspace
cargo test --workspace
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.12.8→0.13.0Release Notes
seanmonstar/reqwest (reqwest)
v0.13.2Compare Source
RequestBuilder::json()from override previously set content-type.v0.13.1Compare Source
v0.13.0Compare Source
rustlsis now the default TLS backend, instead ofnative-tls.rustlscrypto provider defaults to aws-lc instead of ring. (rustls-no-providerexists if you want a different crypto provider)rustls-tlshas been renamed torustls.rustls-platform-verifieris used by default.tls_certs_only(your_roots).native-tlsnow includes ALPN. To disable, usenative-tls-no-alpn.queryandformare now crate features, disabled by default.trust-dns, which was renamedhickory-dnsa while ago).tls_backend_rustls()overuse_rustls_tls().v0.12.28
v0.12.27
ClientBuilder::windows_named_pipe(name)option that will force all requests over that Windows Named Piper.v0.12.26
Accept-Encodingheader only with values configured with reqwest, regardless of underlying tower-http config.v0.12.25
Error::is_upgrade()to determine if the error was from an HTTP upgrade.Proxy-Authorizationif only username is configured.Proxy-Authorizationto HTTPS proxies when the target is HTTP.v0.12.24
v0.12.23
ClientBuilder::unix_socket(path)option that will force all requests over that Unix Domain Socket.ClientBuilder::retry(policy)andreqwest::retry::Builderto configure automatic retries.ClientBuilder::dns_resolver2()with more ergonomic argument bounds, allowing more resolver implementations.http3_*options toblocking::ClientBuilder.RequestBuilder.v0.12.22
v0.12.21
socks4a://instead ofsocks4h://.Error::is_timeout()to check for hyper and IO timeouts too.Errorto again include URLs when possible.DefaultforBody.v0.12.20
ClientBuilder::tcp_user_timeout(Duration)option to setTCP_USER_TIMEOUT.Error::is_status().v0.12.19
cookiesfeature is enabled (by the way, it's a noop feature in wasm).v0.12.18
socksenabled without TLS.v0.12.17
v0.12.16
ClientBuilder::http3_congestion_bbr()to enable BBR congestion control.ClientBuilder::http3_send_grease()to configure whether to send use QUIC grease.ClientBuilder::http3_max_field_section_size()to configure the maximum response headers.ClientBuilder::tcp_keepalive_interval()to configure TCP probe interval.ClientBuilder::tcp_keepalive_retries()to configure TCP probe count.Proxy::headers()to add extra headers that should be sent to a proxy.redirect::Policy::limit()which had an off-by-1 error, allowing 1 more redirect than specified.Response::bytes_stream().v0.12.15
ProxyOverrideandNO_PROXY.v0.12.14
fetch_mode_no_cors(), marking as deprecated when not on WASM.v0.12.13
Form::into_reader()for blockingmultipartforms.Form::into_stream()for asyncmultipartforms.RequestBuilder::form()from overwriting a previously setContent-Typeheader, like the other builder methods.blocking::Request.ProxyOverrideas aNO_PROXYvalue.Error::is_timeout()to return true when from a request timeout.v0.12.12
tokio/timeon WASM.v0.12.11
v0.12.10
ClientBuilder::connector_layer()to allow customizing the connector stack.ClientBuilder::http2_max_header_list_size()option.content-length) information when wrapping bodies.v0.12.9
tls::CertificateRevocationListssupport.connection_verbose()to output read logs.multipart::Part::file()to automatically include content-length.v0.12.8
multipart::Form::file()method for adding files easily.Body::wrap()to wrap anyhttp_body::Bodytype.v0.12.7
impl Service<http::Request<_>>forClient.v0.12.6
danger_accept_invalid_hostnamesforrustls.impl Service<http::Request<Body>>forClientand&'_ Client.!Syncbodies inBody::wrap_stream().hickory-dnsis used.Proxyso thatHTTP(S)_PROXYvalues take precedence overALL_PROXY.blocking::RequestBuilder::header()from unsettingsensitiveon passed header values.v0.12.5
blocking::ClientBuilder::dns_resolver()method to change DNS resolver in blocking client.http3feature back, still requiringreqwest_unstable.rustls-tls-no-providerCargo feature to use rustls without a crypto provider.Accept-Encodingheader combinations.v0.12.4
zstdsupport, enabled withzstdCargo feature.ClientBuilder::read_timeout(Duration), which applies the duration for each read operation. The timeout resets after a successful read.v0.12.3
FromStrfordns::Name.ClientBuilder::built_in_webpki_certs(bool)to enable them separately.ClientBuilder::built_in_native_certs(bool)to enable them separately.content-length: 0for GET requests.content_length()to return value when timeout is configured.ClientBuilder::resolve()to use lowercase domain names.v0.12.2
v0.12.1
ClientBuilder::interface()when no TLS is enabled.TlsInfo::peer_certificate()being truncated with rustls.http2feature disabled but TLS negotiated h2 in ALPN.DisplayforErrorto not include its source error.Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.