June 1st, 2026
New this release:
-
🎉 (all, @dnorred) Implement
serde::Serializerandserde::Deserializertraits foraws_smithy_types::Document, allowing it to be used as a self-describing data format. This enables converting anySerializetype into aDocumentviato_document()and deserializing aDocumentinto anyDeserializetype viafrom_document(). -
🎉 (server, smithy-rs#4640) Add
requestBodyMaxBytescodegen setting to limit the size of non-streaming request bodies buffered into memory. When set, requests exceeding the limit are rejected with a 400 response before additional data is read. This prevents memory-exhaustion denial-of-service attacks via unboundedTransfer-Encoding: chunkedbodies. The default is0(no limit) for backwards compatibility. Streaming operations are unaffected.To enable, add to your
smithy-build.json:{ "codegen": { "requestBodyMaxBytes": 2097152 } } -
🎉 (server, smithy-rs#4669, @amodam-user) Server-generated Rust enums for named Smithy
@enumshapes now additionally deriveCopy. Server enums are closed (noUnknown(...)fallback) and contain only unit variants, so they are universallyCopy-eligible. Unnamed@enumstring shapes are unaffected because they generate aStringnewtype that cannot beCopy. -
🎉 (client, smithy-rs#4662, @jcdyer) # Add
tls::rustls::CryptoMode::Custom(rustls::crypto::CryptoProvider)to allow custom TLS handlingThis enables custom tls handling through the mechanisms enabled by rustls, including support for custom
providers likerustls-openssl. -
🐛 (client) Improve the
Debugoutput of HTTPHeadersandRequestinaws-smithy-runtime-apito redact values of headers commonly used to carry sensitive data. The header name remains visible and the value is replaced with a placeholder that includes the original byte length to preserve diagnostic utility. Theaws-sigv4signer applies the same redaction when logging the canonical request. The plainDisplayimpl onCanonicalRequestis unchanged to preserve the raw canonical form used by downstream consumers. -
🐛 (client) Fix paginator codegen for operations whose
@paginatedoutputTokentargets a@requiredmember. Previously, the generatedsrc/lens.rsborrowing accessor emitted a direct field access (input.field) instead of a reference (&input.field) for required members, causing a type mismatch (Option<&String>vsString). -
🐛 (client, @PeterUlb) Fix
ConnectorBuilder::default()to enableTCP_NODELAYby default. Previously, the auto-derivedDefaultimpl leftenable_tcp_nodelayatfalse, while the curatedConnector::builder()initialized it totrue. TheDefaultimpl onConnectorBuilderis now hand-written to matchConnector::builder(), so all construction paths, including the SDK'sdefault_https_client, getenable_tcp_nodelay = trueconsistently. WithoutTCP_NODELAY, Nagle's algorithm can hold small writes in the kernel waiting for ACKs; on request shapes emitted as multiple small sub-MSS writes, such as the tested HTTP/2 small-body SDK path where HEADERS and DATA are flushed separately, this can add roughly one RTT plus delayed-ACK time. Callers who relied on the previous unintendedenable_tcp_nodelay = falsedefault ofConnectorBuilder::default()can restore that behavior with.enable_tcp_nodelay(false).
Contributors
Thank you for your contributions! ❤