NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2693 most downloaded on crates.io
runtime library for Cap'n Proto data encoding
Last release 1 months ago
08 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
207 releases · first in 2014
prepare for capnp-v0.27.2 release
prepare for capnp-v0.27.2 release
capnp::private API.)prepare for capnp-v0.27.1 release
prepare for capnp-v0.27.1 release
One column per quarter.
prepare for v0.27.0 release
prepare for v0.27.0 release
RawBrandedStructSchema. StructSchema,
Field, EnumSchema and Enumerant, and Type.Type::loose_equals().Debug impls for StructSchema, Field, EnumSchema, and Enumerant.private/layout.rs.impl PrimitiveElement for bool.prepare for capnp-v0.26.2 release
prepare for capnp-v0.26.2 release
BufferSegments::new().read_message_no_alloc().prepare for capnp-v0.26.1 release
prepare for capnp-v0.26.1 release
Use GeneratedCodeArena in construction of RawEnumSchema, avoiding need for an unsafe{}.
Prevent some instances of possible undefined behavior relating to pointer::add().
Add impl FromTypelessPipeline for T, to support pipelining on generic capabilities.
impl<T: FromClientHook> FromTypelessPipeline for T, to support pipelining
on generic capabilities.Fix clippy::cast_possible_truncation warnings.
Fix iterator size_hint() so that it returns the remaining size, not the initial size.
Prevent undefined behavior on zero-sized alloc in HeapAllocator.
Prevent multiple potential integer overflows in message construction logic.
Add GeneratedCodeArena, allowing constant::Reader::new() and RawStructSchema::new() to no longer need an unsafe marker.
constant::Reader::new() and RawStructSchema::new() to
no longer need an unsafe marker.Make primitive_list return None from as_slice(), to prevent undefined behavior.
as_slice(), to prevent undefined behavior.Add unsafe const constructor of constant::Reader and prevent direction construction.
constant::Reader and prevent direction construction.RawStructSchema and prevent direction construction.Add #![allow(clippy::all)] in capnp::generated_code().
#![allow(clippy::all)] in capnp::generated_code().Fix ReaderArenaImpl::size_in_words(), which had been returning the size in bytes.
ReaderArenaImpl::size_in_words(), which had been returning the size in bytes.Update capability::FromServer trait for new async fn method signatures.
capability::FromServer trait for new async fn method signatures.Update capability::Server trait for new async fn support.
capability::Server trait for new async fn support.Resolve type on construction of Field. This is expected to improve performance of certain usage patterns of the dynamic API.
Field. This is expected to improve performance of
certain usage patterns of the dynamic API.Fix buffer sizing in flatten_segments(). A bug was causing unnecessary allocations in write_message_to_words() and write_message_segments_to_words().
flatten_segments(). A bug was causing unnecessary allocations in
write_message_to_words() and write_message_segments_to_words().Implement Clone for capnp::Client.
Add generated_code!() macro to make it easier to import generated code.
generated_code!() macro to make it easier to import generated code.Add capability::DynClientHook to avoid warnings in generated code.
capability::DynClientHook to avoid warnings in generated code.Add introspect::panic_invalid_field_index() and introspect::panic_invalid_annotation_indices() so that generated code can pass Clippy while still work
introspect::panic_invalid_field_index() and introspect::panic_invalid_annotation_indices()
so that generated code can pass Clippy while still working on Rust 2015.impl<T, E> From<Result<T, E>> for Promise<T, E>.Mark wire_pointers::set_capability_pointer() and PointerBuilder::get_root() as unsafe. These functions live under the private module, so no downstream
wire_pointers::set_capability_pointer() and PointerBuilder::get_root() as unsafe.
These functions live under the private module, so no downstreams users should be directly
using them.Into impls for converting EnumSchema and StructSchema into their raw counterparts.Bump minimum required rustc version to 1.81.0.
core::Error trait, allowing no_std mode to include Error impls.ReaderSegments implementations.introspect::Type in favor of new loose_equals() method.Restore the "unpredictable function pointer comparison" in impl PartialEq for RawBrandedStructSchema and suppress the rustc warning. Downstream users
impl PartialEq for RawBrandedStructSchema and suppress the rustc warning.
Downstream users are advised to avoid using depending on type equality.
A future capnp release may remove this impl.Avoid function pointer comparison in impl PartialEq for RawBrandedStructSchema, as advised by a rustc warning. The new implementation is more expensiv
impl PartialEq for RawBrandedStructSchema,
as advised by a rustc warning. The new implementation is more expensive.DynamicStruct and DynamicList accessors, to avoid
the now-more-expensive equality method.Fix compilation on 16-bit architectures by setting smaller traveral limit.
?Sized bound to a ReaderSegments blanket impl.Add message::Reader::get_segments() method.
message::Reader::get_segments() method.Fix bug where ptr::copy_nonoverlapping() was potentially being called on invalid pointers (with length = 0).
ptr::copy_nonoverlapping() was potentially being called
on invalid pointers (with length = 0).Add support for downcasting dynamic values to fully concrete list and struct types.
Add trait hook support for streaming RPC methods.
unsafe impl Sync to BuilderArenaImpl.unsafe impl Send from message::Builder to BuilderArenaImpl.Nothing published for this version
Add Results::set_pipeline() and ResultsHook::set_pipeline().
Results::set_pipeline() and ResultsHook::set_pipeline().Fix ExactSizeIterator implementations so that they return the number of remaining elements instead of the total length of the underlying list.
Fix bug in dynamic reflection where get_named() and has_named() could panic on a field that is not present in the schema.
get_named() and has_named() could
panic on a field that is not present in the schema.Fix possible undefined behavior in primitive_list::as_slice() on empty lists.
unaligned feature is enabled.Rename ReadSegmentTableResult to NoAllocSegmentTableInfo and make it public.
Revert SingleSegmentAllocator generalization because it was unsound.
Implement SetterInput for all T : AsRef .
Use binary search instead of linear scan in DynamicStruct::get_named().
Add PartialEq impls for text::Reader <-> String.
Regenerate schema_capnp.rs after fixing overly-restrictive lifetimes for struct lists.
Add PartialOrd impls for text::Reader.
Add Debug impl for primitive_list::Reader, struct_list::Reader, and others.
Add support for List(Void) in primitive_list::as_slice().
Deprecate StructBuilder::get_pointer_field_mut().
Update try_push_segment() to avoid possible overflow panic in 32-bit mode.
Deprecate SegmentLengthsBuilder::push_segment() in favor of try_push_segment().
Add read_message_no_alloc() and try_read_message_no_alloc() in serialize and serialize_packed.
Map std::ErrorKind::UnexpectedEof to capnp::ErrorKind::PrematureEndOfFile.
Make BuilderArena usable in no-alloc contexts. Only single-segment messages are supported.
Add SingleSegmentAllocator, for use in no-alloc contexts.
Add #[inline] attribute to many text::Reader and text::Builder methods.
Add optional (default-enabled) alloc feature to allow no-alloc mode.
alloc feature to allow no-alloc mode.embedded-io feature.Fix indexing bug in schema::FieldSubset.
schema::FieldSubset.Fix type mismatch copy/paste bug in dynamic_list::Builder::set().
dynamic_list::Builder::set().Add support for reflection. See dynamic_value.rs and schema.rs.
Your coding agent can read these notes before it upgrades. Set up the MCP server →