NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #953 most downloaded on crates.io
A protobuf library extending prost with reflection support and dynamic messages.
Last release 3 months ago
09 Jul 2026
Release timing varies
gaps range from 8 days to 6 months
Nearly every release is documented
notes for 56 of 56 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
57 releases · first in 2021
One column per quarter.
Fixed a performance regression in encoding of DynamicMessage
Fix proto3 default for is_packed when FieldOptions is present but packed is absent
Update prost to v0.14.2 and fix error handling
Add FieldDescriptor::is_required
Add FieldDescriptor::is_required (#181)
Add OneofDescriptor::is_synthetic
Fixed documentation for prost-reflect-build
Revert accidental removal of docs.rs metadata
The descriptors for well-known types returned by DescriptorPool::global() have been updated to match the definitions in protobuf version 25.4.
DescriptorPool::global() have been updated to match the definitions in protobuf version 25.4.The JSON deserializer now accepts messages with oneofs where multiple fields are set, but only one is non-null, to better conform to the specification
google.protobuf.Value or google.protobuf.NullValue.deny_unknown_fields field is set to false when deserializing from JSON, unknown enum fields will now be ignored, in addition to unknown fields. This matches the behaviour of this flag in other implementations.The minimum supported rust version is now 1.74.0.
DescriptorPool::add_file_descriptor_protos. ([#150])All type name domains are now permitted when serializing google.protobuf.Any types in the JSON format. ([#148]).
google.protobuf.Any types in the JSON format. ([#148]).Fixed empty lists not being allowed in the text format. ([#143]).
Added the print_message_fields_in_index_order option to the text format, which causes fields to be print in the order they are defined in the protofil
print_message_fields_in_index_order option to the text format, which causes fields to be print in the order they are defined in the protofile. ([#140]).The descriptors for well known types are now distributed as Rust code instead of a binary protobuf file, to make auditing of the package easier ([# 13
Added the skip_default_fields option to the text format, which has the same behaviour as the equivalent option for the JSON format ([#131]).
skip_default_fields option to the text format, which has the same behaviour as the equivalent option for the JSON format ([#131]).Fixed an issue with the name resolution changes in the previous release, causing some valid files to be rejected (protox#86)
Fixed a case where resolution of names was less strict than protoc ([protox#82])
### Changed - Updated to prost 0.13.0
Fixed resolution of field types when the type name is the same as the field name ([#99])
The minimum supported rust version is now 1.70.0.
The minimum supported rust version is now 1.64.0.
DescriptorPool, the library now validates that all referenced types are contained within the dependency files (including files imported using import public). Fixes [#57].Added new APIs for getting and clearing message fields:
DynamicMessage::fields Gets an iterator over all fields of this message.DynamicMessage::fields_mut Gets an iterator returning mutable references to all fields of this message.DynamicMessage::take_fields Clears all fields from the message and returns an iterator yielding the values.DynamicMessage::extensions Gets an iterator over all extension fields of this message.DynamicMessage::extensions_mut Gets an iterator returning mutable references to all extension fields of this message.DynamicMessage::take_extensions Clears all extension fields from the message and returns an iterator yielding the values.DynamicMessage::take_field Clears the value for the given field, and returns it.DynamicMessage::take_field_by_name Clears the value for the field with the given name, and returns it.DynamicMessage::take_field_by_number Clears the value for the field with the given number, and returns it.DynamicMessage::take_extension Clears the value for the given extension field and returns it.DynamicMessage::unknown_fields() Gets an iterator over unknown fields for this message.DynamicMessage::take_unknown_fields() Clears all unknown fields from the message and returns an iterator yielding the values.UnknownField An unknown field found when deserializing a protobuf message..Monomorphised some code in DescriptorPool::add_* methods to reduce binary size. Thanks to [@srijs] for [#40] and [#41].
DescriptorPool::add_* methods to reduce binary size. Thanks to [@srijs] for [#40] and [#41].Updated logos dependency to 0.13.0.
Adjusted the Debug implementation for DescriptorError to be more concise and readable.
Debug implementation for DescriptorError to be more concise and readable.Added `Kind::wire_type`. Thanks to [@slinkydeveloper] for [#34]
Kind::wire_type. Thanks to [@slinkydeveloper] for [#34]Added a global descriptor pool which can be fetched using `DescriptorPool::global()`. By default it just contains well-known types, but additional fil
DescriptorPool::global(). By default it just contains well-known types, but additional files can be added using DescriptorPool::decode_global_file_descriptor_set() and DescriptorPool::add_global_file_descriptor_proto(). ([#13])file_descriptor_set_bytes attribute as an alternative to descriptor_pool, which automatically registers the file with the global pool.Builder::file_descriptor_pool_bytes to set the file_descriptor_set_bytes derive attribute.DescriptorPool (previously, the code would skip files with identical contents, but now it skips any file with the same name).Builder::file_descriptor_expr to Builder::descriptor_pool.crate::DESCRIPTOR_POOL. One of descriptor_pool or file_descriptor_pool_bytes must be set explicitly.Fixed type resolution for double fields. Thanks to [@jackkleeman] for [#29]
Updated the base64 dependency to version 0.21.0.
The path for repeated extension options now includes the array index (for consistency with the output of protoc).
Added the `path()` method to all descriptor types, which returns a path that can be used to get source code info by comparing against `Location::path`
path() method to all descriptor types, which returns a path that can be used to get source code info by comparing against Location::path.options() method to all descriptor types, which returns a message containing the options defined for the descriptor, including custom options.uninterpreted_options field of options is now used to populate options if it is present.
text-format feature flag is not enabled, then options set through the aggregate_value field will be ignored.DescriptorPool instance.file(), line() and column() methods to get more context information about errors.miette feature is enabled, DescriptorError now implements Diagnostic. When source code is provided through DescriptorError::with_source_code, and span information is provided in FileDescriptorProto::source_code_info, then the error will have labels annotating relevant portions of the source.FileDescriptor::dependencies now returns all imported files, instead of just those imported with import public. The new public_dependencies method preserves the old behaviour ([#19]).reflect-well-known-types feature flag has been removed, and the functionality is now always available.Nothing published for this version
Added support for parsing and formatting dynamic messages using the text format. This functionality is enabled with the new text_format feature flag.
text_format feature flag. See DynamicMessage::parse_text_format and DynamicMessage::to_text_format.Display implementation for DynamicMessage and Value which uses the text format. This is available even when the text_format feature is disabled.try_set_field, try_set_field_by_number and try_set_field_by_nameValue::into_map_key()### Fixed - Fixed docs build
Added MessageDescriptor::get_extension_by_full_name().
MessageDescriptor::get_extension_by_full_name().serde feature is enabled, the functions in prost-types for parsing and formatting time types are now used. This removes the time dependency.Added the FileDescriptor API for inspecting individual protobuf files.
FileDescriptor API for inspecting individual protobuf files.MessageDescriptor to get child messages, enums and extensions.DescriptorPool (formerly FileDescriptor) now supports adding individual FileDescriptorProto instances (#6).
DescriptorPool (formerly FileDescriptor) now supports adding individual FileDescriptorProto instances (#6).FileDescriptor has been renamed to DescriptorPool. (The name FileDescriptor may be used in a future release to provide an API for inspecting individual source files)
FileDescriptor::new has been renamed to DescriptorPool::from_file_descriptor_set.FileDescriptor::file_descriptor_set has been replaced by DescriptorPool::file_descriptor_protos to allow for it containing multiple sets of descriptors.parent_file method on all descriptor types has been renamed to parent_pool.file_descriptor parameter of the ReflectMessage derive macro has been renamed to descriptor_pool.prost-reflect-build is changed from crate::FILE_DESCRIPTOR to crate::DESCRIPTOR_POOL.Updated to version `0.10.0` of prost.
0.10.0 of prost.The public dependencies prost, prost-types and bytes are now re-exported from the crate root.
prost, prost-types and bytes are now re-exported from the crate root.Added implementations of [ReflectMessage] for the google well-known types in `prost-types`, behind a feature flag reflect-well-known-types.
ReflectMessage] for the google well-known types in prost-types, behind a feature flag reflect-well-known-types.Added file_descriptor_proto methods to descriptor types to access raw details about the file the object is defined in.
file_descriptor_proto methods to descriptor types to access raw details about the file the object is defined in.Fixed handling of enums with the allow_alias option (see [#9]).
allow_alias option (see [#9]).Added MessageDescriptor::descriptor_proto and friends to get the raw prost_types representation of protobuf definitions.
MessageDescriptor::descriptor_proto and friends to get the raw prost_types representation of protobuf definitions.…serde feature is enabled. This avoids security vulnerabilities RUSTSEC-2020-0071 and RUSTSEC-2020-0159 which are not yet patched in chrono.
chrono dependency with time for parsing and formatting RFC 3339 timestamps when the serde feature is enabled. This avoids security vulnerabilities RUSTSEC-2020-0071 and RUSTSEC-2020-0159 which are not yet patched in chrono.The Cardinality enum is now exported. Thanks to [@benesch] for [#4].
Cardinality enum is now exported. Thanks to [@benesch] for [#4].DynamicMessage now stores all fields (normal, extensions, and unknown) in the same storage, reducing its footprint from 48 bytes to 40.
DynamicMessage now stores all fields (normal, extensions, and unknown) in the same storage, reducing its footprint from 48 bytes to 40.Added DynamicMessage::get_field_mut and friends for in-place modification of messages.
DynamicMessage::get_field_mut and friends for in-place modification of messages.Extension fields are now decoded from their byte representation
DynamicMessage::get_extension no longer returns an option.New helper method DynamicMessage::decode.
DynamicMessage::decode.SerializeOptions::emit_unpopulated_fields to SerializeOptions::skip_default_fields (note the meaning is inverted as well!).DynamicMessage::{has_field,get_field,set_field,clear_field} now take a field descriptor instead of a number. Use the new _by_number variants for the old behavior.The library now passes the protobuf conformance tests. This uncovered a number of edge cases:
10.00) are now accepted when parsing integers from the JSON representation.null in JSON deserialization.google.protobuf.NullValue now accepts the "NULL_VALUE" string.google.protobuf.FieldMask fails if the path cannot be roundtripped through camelCase.google.protobuf.Duration uses a different number of trailing zeroes depending on the precision of the input.google.protobuf.Timestamp and google.protobuf.Duration fails if it is outside the allowed range.Fixed deserialization of negative durations
Added MessageDescriptor::map_entry_key_field and MessageDescriptor::map_entry_value_field to help with inspecting message types.
MessageDescriptor::map_entry_key_field and MessageDescriptor::map_entry_value_field to help with inspecting message types.Value::is_valid_for_field to validate that value types are compatible with message fields.DynamicMessage::set_value now asserts that the value type is compatible with the field type.FieldDescriptor::is_packed returning true for non-repeated fields.Added support for JSON mapping of google.protobuf.Any.
google.protobuf.Any.Builder methods on SerializeOptions and DeserializeOptions are now const.
SerializeOptions and DeserializeOptions are now const.Fixed docs for ReflectMessage macro.
ReflectMessage macro.Added parent_message() method to MessageDescriptor and EnumDescriptor to support inspecting the structure of nested types.
parent_message() method to MessageDescriptor and EnumDescriptor to support inspecting the structure of nested types.package_name() method to MessageDescriptor, EnumDescriptor and ServiceDescriptor to determine which package they are defined in.ReflectMessage trait for types which can identify themselves with a MessageDescriptor.prost_build to generate ReflectMessage implementations.merge_from_message to transcode_from and to_message to transcode_to.Added support for serializing and deserializing with serde. By default the serialization format is the canonical JSON encoding.
Initial release, including support for inspecting message types at runtime.
Your coding agent can read these notes before it upgrades. Set up the MCP server →