capnp
runtime library for Cap'n Proto data encoding
0.27.0
14M downloads/mo
#2590 most downloaded on crates.io
capnproto/capnproto-rust
What this package is like to depend on
Last release 21 days ago
02 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 120 of 205 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
205 releases · first in 2014
20 releases in the last 12 months
see the full history below
Release timeline
205 releases · Nov 2014 to Aug 2026
2015
2017
2019
2021
2023
2025
Releases
latest 60 of 205-
0.27.002 Aug 2026Release notes
Open source →- Use TypeId to implement precise equality for
RawBrandedStructSchema.StructSchema,Field,EnumSchemaandEnumerant, andType. - Deprecate
Type::loose_equals(). - Add
Debugimpls forStructSchema,Field,EnumSchema, andEnumerant. - Clean up some internal API in
private/layout.rs. - Add bounds checking in
impl PrimitiveElement for bool.
- Use TypeId to implement precise equality for
-
0.26.205 Jul 2026Release notes
Open source →- Avoid possible panic in
BufferSegments::new(). - Avoid possible desyncing in
read_message_no_alloc().
- Avoid possible panic in
-
0.26.102 Jul 2026Release notes
Open source →- Fix case where zeroing missed 7 bytes.
- Remove spurious bound from IntoInternalListReader impl for enum_list.
- Add missing (Bool, Bool) case in introspect.rs.
-
0.26.017 Jun 2026Release notes
Open source →- Use GeneratedCodeArena in construction of RawEnumSchema, avoiding need for an unsafe{}.
- Update Allocator methods to use NonNull.
-
0.25.616 Jun 2026Release notes
Open source →- Prevent some instances of possible undefined behavior relating to pointer::add().
-
0.25.501 Jun 2026Release notes
Open source →- Add
impl<T: FromClientHook> FromTypelessPipeline for T, to support pipelining on generic capabilities.
- Add
-
0.25.412 Apr 2026 -
0.25.330 Mar 2026Release notes
Open source →- Fix iterator size_hint() so that it returns the remaining size, not the initial size.
-
0.25.212 Mar 2026 -
0.25.112 Feb 2026Release notes
Open source →- Prevent multiple potential integer overflows in message construction logic.
-
0.25.009 Jan 2026Release notes
Open source →- Add GeneratedCodeArena, allowing
constant::Reader::new()andRawStructSchema::new()to no longer need anunsafemarker.
- Add GeneratedCodeArena, allowing
-
0.24.108 Jan 2026Release notes
Open source →- Make primitive_list<bool> return None from
as_slice(), to prevent undefined behavior.
- Make primitive_list<bool> return None from
-
0.24.024 Dec 2025Release notes
Open source →- Add unsafe const constructor of
constant::Readerand prevent direction construction. - Add unsafe const constructor of
RawStructSchemaand prevent direction construction.
- Add unsafe const constructor of
-
0.23.222 Dec 2025 -
0.23.116 Dec 2025Release notes
Open source →- Fix
ReaderArenaImpl::size_in_words(), which had been returning the size in bytes.
- Fix
-
0.23.028 Oct 2025 -
0.22.027 Oct 2025Release notes
Open source →- Update
capability::Servertrait for newasync fnsupport. - Update optional embedded-io dependency from 0.6.1 to 0.7.1.
- Update
-
0.21.717 Oct 2025Release notes
Open source →- Resolve type on construction of
Field. This is expected to improve performance of certain usage patterns of the dynamic API.
- Resolve type on construction of
-
0.21.611 Oct 2025Release notes
Open source →- Fix buffer sizing in
flatten_segments(). A bug was causing unnecessary allocations inwrite_message_to_words()andwrite_message_segments_to_words().
- Fix buffer sizing in
-
0.21.531 Aug 2025 -
0.21.425 Jul 2025 -
0.21.322 Jul 2025 -
0.21.202 Jul 2025Release notes
Open source →- Add
introspect::panic_invalid_field_index()andintrospect::panic_invalid_annotation_indices()so that generated code can pass Clippy while still working on Rust 2015. - Add
impl<T, E> From<Result<T, E>> for Promise<T, E>.
- Add
-
0.21.126 May 2025Release notes
Open source →- Mark
wire_pointers::set_capability_pointer()andPointerBuilder::get_root()asunsafe. These functions live under theprivatemodule, so no downstreams users should be directly using them. - Add
Intoimpls for convertingEnumSchemaandStructSchemainto their raw counterparts.
- Mark
-
0.21.008 Apr 2025Release notes
Open source →- Bump minimum required rustc version to 1.81.0.
- Use
core::Errortrait, allowing no_std mode to includeErrorimpls. - Generalize
ReaderSegmentsimplementations. - Remove equality impls for
introspect::Typein favor of newloose_equals()method.
-
0.20.607 Mar 2025Release notes
Open source →- Restore the "unpredictable function pointer comparison" in
impl PartialEq for RawBrandedStructSchemaand suppress the rustc warning. Downstream users are advised to avoid using depending on type equality. A future capnp release may remove this impl.
- Restore the "unpredictable function pointer comparison" in
-
0.20.505 Mar 2025Release notes
Open source →- Avoid function pointer comparison in
impl PartialEq for RawBrandedStructSchema, as advised by a rustc warning. The new implementation is more expensive. - Weaken some assertions in
DynamicStructandDynamicListaccessors, to avoid the now-more-expensive equality method.
- Avoid function pointer comparison in
-
0.20.402 Mar 2025Release notes
Open source →- Fix compilation on 16-bit architectures by setting smaller traveral limit.
- Add a
?Sizedbound to a ReaderSegments blanket impl.
-
0.20.322 Oct 2024 -
0.20.215 Oct 2024Release notes
Open source →- Fix bug where
ptr::copy_nonoverlapping()was potentially being called on invalid pointers (with length = 0).
- Fix bug where
-
0.20.123 Sep 2024Release notes
Open source →- Add support for downcasting dynamic values to fully concrete list and struct types.
-
0.20.017 Sep 2024Release notes
Open source →- Add trait hook support for streaming RPC methods.
- Add
unsafe impl Syncto BuilderArenaImpl. - Move
unsafe impl Sendfrom message::Builder to BuilderArenaImpl. - Fix misspelled error variant: UnexepectedFarPointer -> UnexpectedFarPointer.
-
0.19.815 Oct 2024Nothing published for this version
-
0.19.709 Sep 2024 -
0.19.628 May 2024Release notes
Open source →- Fix ExactSizeIterator implementations so that they return the number of remaining elements instead of the total length of the underlying list.
-
0.19.516 May 2024Release notes
Open source →- Fix bug in dynamic reflection where
get_named()andhas_named()could panic on a field that is not present in the schema.
- Fix bug in dynamic reflection where
-
0.19.413 May 2024Release notes
Open source →- Fix possible undefined behavior in primitive_list::as_slice() on empty lists.
- Disable primitive_list::as_slice() when T is larger than one byte and the
unalignedfeature is enabled. - Enable primitive_list::as_slice() for big-endian targets when T is at most one byte.
-
0.19.329 Mar 2024Release notes
Open source →- Rename ReadSegmentTableResult to NoAllocSegmentTableInfo and make it public.
- Rename NoAllocBufferSegments::from_segment_table() to NoAllocBufferSegments::from_segment_table_info() and make it public.
-
0.19.219 Feb 2024 -
0.19.115 Jan 2024 -
0.19.014 Jan 2024Release notes
Open source →- Use binary search instead of linear scan in DynamicStruct::get_named().
- Rename SetPointerBuilder to SetterInput.
- Add Receiver type parameter to SetterInput.
- Support setting text fields by text::Reader or &str, via the SetterInput tactic. This will break code that uses the into() to convert from str to text::Reader in the arguments of such methods.
- Also support setting primitive list fields by native Rust slices, and text list fields by slices of AsRef<str>.
- Update embedded-io dependency to version 0.6.1.
- Use AsRef<[u8]> instead of Deref<Target=[u8]> in NoAllocBufferSegments.
- Generalize SingleSegmentAllocator to take any type that implements AsMut<[u8]>.
-
0.18.1311 Jan 2024 -
0.18.1211 Jan 2024Release notes
Open source →- Regenerate schema_capnp.rs after fixing overly-restrictive lifetimes for struct lists.
-
0.18.1106 Jan 2024 -
0.18.1010 Dec 2023Release notes
Open source →- Add Debug impl for primitive_list::Reader, struct_list::Reader, and others.
-
0.18.901 Dec 2023 -
0.18.830 Nov 2023Release notes
Open source →- Deprecate StructBuilder::get_pointer_field_mut().
- Improve docstring on dynamic_struct::Reader::has().
-
0.18.715 Nov 2023Release notes
Open source →- Update try_push_segment() to avoid possible overflow panic in 32-bit mode.
-
0.18.615 Nov 2023Release notes
Open source →- Add overflow checking during segment table reading, to prevent some potential denial of service attacks on 32-bit targets.
- Deprecate SegmentLengthsBuilder::push_segment() in favor of try_push_segment().
-
0.18.515 Nov 2023Release notes
Open source →- Add read_message_no_alloc() and try_read_message_no_alloc() in serialize and serialize_packed.
- Enable write_message() in no-alloc mode.
-
0.18.408 Nov 2023Release notes
Open source →- Map std::io::ErrorKind::UnexpectedEof to capnp::ErrorKind::PrematureEndOfFile.
-
0.18.324 Oct 2023Release notes
Open source →- Make BuilderArena usable in no-alloc contexts. Only single-segment messages are supported.
-
0.18.224 Oct 2023 -
0.18.111 Sep 2023 -
0.18.004 Sep 2023Release notes
Open source →- Add optional (default-enabled)
allocfeature to allow no-alloc mode. - Lazier UTF-8 validation.
- Add missing #[inline] attributes for f32 and f64.
- Add optional
embedded-iofeature. - Make SliceSegments a special case of BufferSegments.
- Add optional (default-enabled)
-
0.17.212 Jun 2023 -
0.17.109 Jun 2023 -
0.17.008 May 2023 -
0.16.113 Mar 2023 -
0.16.017 Jan 2023Release notes
Open source →- Remove deprecated
HasTypeId::type_id()method. - Remove deprecated
MessageSize::plus_eqmethod. - Remove
RefCellfrom builder arena. Should result in minor performance boost. - Mark
Allocator::deallocate_segmentasunsafe. - Remove
ToU16andFromU16traits in favor ofcore::converttraits. - Remove
FromStructBuilderandFromStructReadertraits in favor ofcore::converttraits.
- Remove deprecated