NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io, #658 most downloaded on crates.io
Zero-copy deserialization framework for Rust
Latest stable
0.8.18
Last release 3 months ago
05 Aug 2026
Release timing varies
gaps range from 9 days to 6 months
Most releases are documented
notes for 47 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
95 releases · first in 2020
Drag across the ruler to compare, or tap a release to open it.
This bugfix release fixes tinyvec integration.
This bugfix release fixes tinyvec integration.
Thanks to @Kixiron for reporting the issue!
This bugfix release corrects an issue with WriteSerializer where it would consider partial writes a success.
This bugfix release corrects an issue with WriteSerializer where it would consider partial writes a success.
Thanks to @Diomendius for the bug report.
This bugfix release addresses a few minor issues:
This bugfix release addresses a few minor issues:
ArchivedString::as_ref is now inlinedarchive_attr is used in combination with archive(as = "...") now spans the offending attribute for clarityThanks again to @Diomendius for reporting an issue.
Your coding agent can read these notes before it upgrades. Set up the MCP server →
This bugfix release fixes a minor issue with deserializing strings in certain configurations, deprecates #[archive(repr(...))] in favor of #[archive_a…
This bugfix release fixes a minor issue with deserializing strings in certain configurations, deprecates #[archive(repr(...))] in favor of #[archive_attr(repr(...))], and fixes support for using multiple repr arguments simultaneously (#184, i.e. repr(C, packed)).
Thanks to @Diomendius for reporting this bug!
This bugfix release fixes some tests that made assumptions about platform atomic support.
This bugfix release fixes some tests that made assumptions about platform atomic support.
This bugfix release contains the following changes:
This bugfix release contains the following changes:
AsVec wrapper for associative containersDebug impls for builtin types and improves existing onesArchivedString internals to allow other crates to use themThanks to everyone who filed issues and feature requests.
This bugfix release adds the new `AsOwned` wrapper type to allow users to serialize Cows and points URLs to the new github repo and book pages.
This bugfix release adds the new AsOwned wrapper type to allow users to serialize Cows and points URLs to the new github repo and book pages.
This bugfix release corrects some ArchiveCopySafe impls that were not marked unsafe. Thanks @PonasKovas for reporting the issue!
This bugfix release corrects some ArchiveCopySafe impls that were not marked unsafe. Thanks @PonasKovas for reporting the issue!
This bugfix releases fixes the tinyvec integration since the addition of scratch space. Thanks @Kixiron for reporting the issue!
This bugfix releases fixes the tinyvec integration since the addition of scratch space. Thanks @Kixiron for reporting the issue!
This bugfix release contains no code changes, but copies the license file into the individual crates and corrects an incorrect line ending for packagi
This bugfix release contains no code changes, but copies the license file into the individual crates and corrects an incorrect line ending for packaging on Fedora.
0.7 is the seventh major release of rkyv. This release focused on filling out rkyv's feature set and providing commonly-requested features. This is in
0.7 is the seventh major release of rkyv. This release focused on filling out rkyv's feature set and providing commonly-requested features. This is intended to be the final major feature release before stabilizing for 1.0.
rend crate.no_std validation. In many cases, the alloc crate will be required.no_std containers. In many cases, the alloc crate will be required.crate attribute to allow using rkyv from a different dependency name.resolve is now unsafe with proper safety documentation.#[with(...)].#[archive_attr(...)].#[archive(as = "...")].arbitrary_enum_discriminant feature.ArchiveCopy is now behind a feature and can automatically implement itself with a feature.Archive derives now support the repr argument.memoffset crate have been removed in favor of standard library alternatives.ArchivedHashMap to bring it closer in line with HashMap.BTreeMap and BTreeSet implementations optimized for IO.PathBuf has been added using the ToString wrapper.Mutex and RwLock has been added using the Lock wrapper.AtomicUsize and AtomicIsize has been added. Atomics now archive as non-atomic types by default. They can be archived as true atomics using the Atomic wrapper.CStr and CString has been added.Global allocator.indexmap crate with custom archived IndexMap and IndexSet implementations.uuid crate.tinyvec crate.Thanks to everyone who contributed by filing issues, providing implementations, and being active members of the discord. Special thanks to some of the especially active members:
This is a pre-release of 0.7. The changelist for 0.7 will be as follows:
This is a pre-release of 0.7. The changelist for 0.7 will be as follows:
0.7 is the seventh major release of rkyv. This release focused on filling out rkyv's feature set and providing commonly-requested features. This is intended to be the final major feature release before stabilizing for 1.0.
rend crate.no_std validation. In many cases, the alloc crate will be required.no_std containers. In many cases, the alloc crate will be required.crate attribute to allow using rkyv from a different dependency name.resolve is now unsafe with proper safety documentation.#[with(...)].#[archive_attr(...)].#[archive(as = "...")].arbitrary_enum_discriminant feature.ArchiveCopy is now behind a feature and can automatically implement itself with a feature.Archive derives now support the repr argument.memoffset crate have been removed in favor of standard library alternatives.ArchivedHashMap to bring it closer in line with HashMap.BTreeMap and BTreeSet implementations optimized for IO.PathBuf has been added using the ToString wrapper.Mutex and RwLock has been added using the Lock wrapper.AtomicUsize and AtomicIsize has been added. Atomics now archive as non-atomic types by default. They can be archived as true atomics using the Atomic wrapper.CStr and CString has been added.Global allocator.indexmap crate with custom archived IndexMap and IndexSet implementations.uuid crate.tinyvec crate.Thanks to everyone who contributed by filing issues, providing implementations, and being active members of the discord. Special thanks to some of the especially active members:
This is a pre-release of 0.7. The changelist for 0.7 will be as follows:
This is a pre-release of 0.7. The changelist for 0.7 will be as follows:
0.7 is the seventh major release of rkyv. This release focused on filling out rkyv's feature set and providing commonly-requested features. This is intended to be the final major feature release before stabilizing for 1.0.
rend crate.no_std validation. In many cases, the alloc crate will be required.no_std containers. In many cases, the alloc crate will be required.crate attribute to allow using rkyv from a different dependency name.resolve is now unsafe with proper safety documentation.#[with(...)].#[archive_attr(...)].#[archive(as = "...")].arbitrary_enum_discriminant feature.ArchiveCopy is now behind a feature and can automatically implement itself with a feature.Archive derives now support the repr argument.memoffset crate have been removed in favor of standard library alternatives.ArchivedHashMap to bring it closer in line with HashMap.BTreeMap and BTreeSet implementations optimized for IO.PathBuf has been added using the ToString wrapper.Mutex and RwLock has been added using the Lock wrapper.CStr and CString has been added.Global allocator.indexmap crate with custom archived IndexMap and IndexSet implementations.uuid crate.tinyvec crate.Thanks to everyone who contributed by filing issues, providing implementations, and being active members of the discord. Special thanks to some of the especially active members:
This bugfix release fixes the following issues:
This bugfix release fixes the following issues:
std is no longer pulled in by an updated ptr_metaSerialize and Deserialize now explicitly use ::core::result::Result to prevent local Result types from breaking the derives (thanks @adaszko!)no_std builds with specialization now function correctly again (thanks @PiDelport!)Thanks to everyone who contributed fixes and filed issues!
This bugfix release corrects the std dependency in ptr_meta to avoid pulling in the standard library on no_std targets.
This bugfix release corrects the std dependency in ptr_meta to avoid pulling in the standard library on no_std targets.
0.6.5 is a bugfix release with a few minor changes:
0.6.5 is a bugfix release with a few minor changes:
ArchivedHashMap::serialize_from_iter is now pub so users can leverage it in writing their own structuresAlignedVecArchivedDuration and other types have been switched to derived implementationsThanks to everyone who contributed to this release!
0.6.4 is a bugfix release that switches some relative paths to absolute paths in macros. The minimum supported rustc version has also been bumped to 1
0.6.4 is a bugfix release that switches some relative paths to absolute paths in macros. The minimum supported rustc version has also been bumped to 1.50, but these are due to changes from before this release.
0.6.3 is a bugfix release that fixes deriving traits for structs with const generic parameters and adds some helper functions for AlignedVec to conver
0.6.3 is a bugfix release that fixes deriving traits for structs with const generic parameters and adds some helper functions for AlignedVec to convert it to Vec (#111).
v0.6.2 is a minor update that adds support for types from std::net. Thanks to @DBLouis for the implementations!
v0.6.2 is a minor update that adds support for types from std::net. Thanks to @DBLouis for the implementations!
Newly supported types:
Ipv4AddrIpv6AddrIpAddrSocketAddrV4SocketAddrV6SocketAddrUndefined behavior was being caused because slice::deserialize was returning a null pointer for empty slices and zero-sized types, which was used to c
v0.6.1 is a hotfix for #116.
Undefined behavior was being caused because slice::deserialize was returning a null pointer for empty slices and zero-sized types, which was used to construct a Box with from_raw. This is unsound behavior since Box stores its pointer internally as a NonNull. The problem is fixed by having deserialize return NonNull::dangling() instead. This typically only presented in release mode.
The release checklist has been updated to include running tests in release to prevent release-only issues in the future.
This minor release addresses a security flaw that leaked uninitialized memory through struct padding. The fix required an API change for resolving, bu
This minor release addresses a security flaw that leaked uninitialized memory through struct padding. The fix required an API change for resolving, but should have no performance impacts. Thanks to @as-com for reporting the issue.
Note that ArchiveCopy types may still leak uninitialized memory in their padding bytes, and should be avoided on types that contain large blocks of padding. In practice, this is usually only an issue for enums. You can still use these types safely by removing #[archive(copy)].
This minor release fixes an issue with AlignedVec that caused its Drop implementation not to deallocate memory.
This minor release fixes an issue with AlignedVec that caused its Drop implementation not to deallocate memory.
This minor release provides more flexible serialization for BufferSerializer and adds `AlignedSerializer`, a new higher-performance serializer. It als
This minor release provides more flexible serialization for BufferSerializer and adds AlignedSerializer, a new higher-performance serializer. It also cleans up some documentation and moves a few things around for tidiness.
Version 0.5 brings bugfixes, ergonomics improvements, and new features:
Version 0.5 brings bugfixes, ergonomics improvements, and new features:
#[archive(bound(serialize = "...", deserialize = "..."))]unreachable! to unreachable_unchecked should give a few small performance gainsPartialEq and PartialOrd can now be implemented between original and archived types with #[archive(compare(PartialEq, PartialOrd))]const_generics default featureThanks to everyone who provided suggestions and pull requests!
This release brings a few small features and a bugfix:
This release brings a few small features and a bugfix:
AlignedVec helper has been added, making it easier to ensure that byte buffers are properly aligned when accessing and deserializing. Docs have been updated to use AlignedVec where needed. Note that Vec is still perfectly fine for serializing and writing.archived_value and related functions to ensure that the buffer provided is properly aligned for the root type. This doesn't ensure that the entire buffer is properly aligned for all types inside it, use check_archive to ensure that.This release includes a few minor features and a bugfix:
This release includes a few minor features and a bugfix:
Archive implementation for core::time::DurationInfallible type to make it easier to deserialize types that cannot failThis hotfix update fixes no_std support and some dependency issues in the test crate that were preventing it from being properly tested.
This hotfix update fixes no_std support and some dependency issues in the test crate that were preventing it from being properly tested.
This release changes some major APIs and adds shared pointer support:
This release changes some major APIs and adds shared pointer support:
#32 Introduces new context traits in place of the previous context struct. #33 Allows serialization parameterization over the type of the serializer, allowing users to choose the complexity of their serializers and create their own. #34 Renames Unarchive to Deserialize. #35 Splits Archive into Serialize to allow a clean hierarchy while still enabling parameterization. #39 Removes the Resolve trait and simplifies the API. #37 Performed some cleanup on the rkyv_dyn API. #36 Added shared and weak pointer support. #41 Added validation support for shared and weak pointers. #40 Added deserialization contexts to match serialization and verification contexts. #47 Introduced Serializers and Deserializers. #42 Added an attribute to rename the resolver type for archived values. #51 Fixed a performance regression. #45 Updated and greatly improved the book's documentation. #59 Introduced the ptr_meta crate and vastly reduced the number of dangerous transmutations. #56 Added archive implementations for usize and isize. #55 Made the support for 32/64-bit much more uniform and consistent.
Thanks to everyone who contributed by asking questions, filing issues, and making feature requests.
This bugfix corrects atomic implementations for embedded systems and untangles some dev dependencies that made it difficult to publish crates.
This bugfix corrects atomic implementations for embedded systems and untangles some dev dependencies that made it difficult to publish crates.
Bugs fixed:
v0.3.0 changes a few major APIs, adds new features, simplifies the framework, and adds lots of documentation:
v0.3.0 changes a few major APIs, adds new features, simplifies the framework, and adds lots of documentation:
Unarchive trait with counterparts for unsized types and trait objects. Unarchive is a direct replacement for deserialization and converts archived types back into their unarchived forms.WriteExt and SeekExt and folds their functionality into Write and Seek respectively.#[archive(copy)] and #[archive(name = "...")] or #[archive(derive(...))].ArchiveSelf to ArchiveCopy and SelfResolver to CopyResolver. The derive argument is now #[archive(copy)].v0.2.1 adds some small new features and fixes a handful of bugs:
v0.2.1 adds some small new features and fixes a handful of bugs:
strict feature, all archived types will be #[repr(C)]. This is probably unnecessary except for the extra cautious.Seek trait has been added, along with the archive_root helper. This allows archiving the root object at position 0 in the archive, which is useful for self-describing formats like files and messages.The next release will be v0.2.1 with any bugfixes and non-breaking changes.
This is a major feature release, adding a wide variety of new features and plugging some existing holes:
#7 Relative pointers now have 64-bit support through the long_rel_ptrs feature.
#8 Mutable archives can now be created and mutated through pinned references.
#11, #16 bytecheck support has been added, allowing for archive validation. Bytecheck is built with the explicit goal of validating untrusted and potentially malicious data.
#12 The core and std archived types are now exposed and documented.
#13 Duplicate impls now provide a much more friendly error message to help you track down the problem.
#15 Recursive data structures can now be archived properly with use of the #[recursive] attribute on recursive fields.
The next release will be v0.2.1 with any bugfixes and non-breaking changes.
This is a bugfix release to address issues discovered after the previous release and minor feature shortcomings:
This is a bugfix release to address issues discovered after the previous release and minor feature shortcomings:
#2 Crates with no_std support need #![no_std] #3 Examples allow buffer mutation after archiving #4 Archived fields don't match the visibility of their unarchived counterparts #5 Doesn't compile on rustc < 1.47
Actions have also been set up for the repo to automatically build and run tests.
Nothing published for this version
Nothing published for this version
One column per quarter.