# What changed in serde

> 17 changes in serde 1 from its official release notes, upgrade guides and advisories: 15 breaking, 1 new APIs and options. Each one cited. Sources checked 2026-11-15. HTML: https://unstale.sh/cargo/serde/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## serde 1

### Breaking changes

- Visitor implementations used for deserializing standard library types are now private and unavailable for use by other crates. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Deserialization-related traits now carry a 'de lifetime, enabling safe zero-copy deserialization that borrows from input data. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Deserializer::deserialize has been renamed to deserialize_any; update implementations and calls to use the new method name. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- deserialize_struct_field has been renamed to deserialize_identifier, reflecting its use for both struct fields and enum discriminants. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- EnumVisitor has been renamed to EnumAccess, clarifying the deserializer-provided accessor's role. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Fixed-size sequences have been removed from the data model; fixed-size arrays and tuples are represented as tuples. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Some implicit conversions are gone; for example, JSON null no longer successfully deserializes into a string. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- ValueDeserializer has been renamed to IntoDeserializer. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- MapVisitor has been renamed to MapAccess, clarifying the deserializer-provided accessor's role. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- SeqVisitor has been renamed to SeqAccess, clarifying the deserializer-provided accessor's role. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- The Bytes and ByteBuf wrapper types have moved to the serde_bytes crate. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Rc<T> and Arc<T> implementations require opting in by enabling the rc feature of the Serde dependency. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- The serde_test Token API has been redesigned to align with modern naming conventions and Serde concepts. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- Variant indices during deserialization now use u32 instead of usize. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
- VariantVisitor has been renamed to VariantAccess, clarifying the deserializer-provided accessor's role. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)

### New APIs and options

- Derive Serialize and Deserialize implementations for structs and enums defined in other crates by specifying the remote type. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)

### Behavior and default changes

- Serde is stable as of this release; planned enhancements no longer involve further breaking changes. (1.0.0) — [release notes](https://github.com/serde-rs/serde/releases/tag/v1.0.0)
