NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2134 most downloaded on crates.io
(De-)serialization support for the `application/x-www-form-urlencoded` format
Last release 3 months ago
30 Jun 2026
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 16 of 16 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
16 releases · first in 2022
One column per quarter.
Deserialize "on" as boolean true
true
<input type="checkbox"> defaults to this valueon, true or false)Add ser and de Cargo features for serialization and deserialization
ryu Cargo featureser and de Cargo features for serialization and deserialization
serde_html_forms dependenciesUpdate minimum supported Rust version to 1.63.
Update minimum supported Rust version to 1.63.
Previously, it was declared as 1.56 but not tested, and was actually 1.81 as of version 0.3.0.
Small documentation fix in README.md.
Small documentation fix in README.md.
Change deserialize_any to forward to deserialize_map instead of deserialize_seq
deserialize_any to forward to deserialize_map instead of deserialize_seq
serde_urlencoded, which is now revertedserde_json::Value, you will now
get an Object instead of an Arrayfoo=&bar=)
as Some(_) rather than None, except for Option<bool> and Option<{number}> (for
specific number types that are either builtin or part of the standard library)
#[serde(deserialize_with)] with the new
deserialization helper functions (see next changelog entry)serde_html_form::de::empty_as_none and serde_html_form::de::empty_as_none::seq
Nonede::from_readerSwitch serde dependency to serde_core.
Switch serde dependency to serde_core.
Add Deserializer::from_bytes.
Add Deserializer::from_bytes.
Fix deserialization of optional sequences of a single non-string element.
Fix deserialization of optional sequences of a single non-string element.
Add push_to_string for serializing a struct to the end of an existing String buffer (instead of allocating a fresh one for the serialized output).
Add push_to_string for serializing a struct to the end of an existing String
buffer (instead of allocating a fresh one for the serialized output).
Fix deserialization of optional sequences of a single element.
Fix deserialization of optional sequences of a single element.
Improve README and crate documentation (now the exact same, instead of just a single-line description).
Improve README and crate documentation (now the exact same, instead of just a single-line description).
This release only upgrades one of the crates' dev-dependencies.
This release only upgrades one of the crates' dev-dependencies.
This release only upgrades one of the crates' private dependencies.
This release only upgrades one of the crates' private dependencies.
Support deserialization of sequences with duplicate keys. This used to fail, but passes now:
Support deserialization of sequences with duplicate keys. This used to fail, but passes now:
let result = vec![("foo".to_owned(), 1), ("bar".to_owned(), 2), ("foo".to_owned(), 3)];
assert_eq!(super::from_str("foo=1&bar=2&foo=3"), Ok(result));
This should mainly affect deserialization to a type that's explicitly a sequence, like arrays or Vec,
but some other things were changed too so if you are getting unexpected deserialization errors, please open an issue.
This release has a minimum Rust version of 1.56.
Support deserialization of Optional values to better support forms with optional inputs of non-string types:
Support deserialization of Optional values to better support forms with optional inputs of non-string types:
#[derive(Deserialize, PartialEq)]
struct MyForm {
field: Option<u16>,
}
// What browsers send when a value is given
assert_eq!(serde_html_form::from_str("field=5").unwrap(), MyForm { field: Some(5) });
// What browsers send when no value is given
assert_eq!(serde_html_form::from_str("field=").unwrap(), MyForm { field: None });
// This also works
assert_eq!(serde_html_form::from_str("").unwrap(), MyForm { field: None });
Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →