NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4324 most downloaded on crates.io
Convert sequences of Rust objects to Arrow arrays and back again
Last release 20 days ago
17 Sep 2026
Ships fairly regularly
a new release about every 6 weeks
Most releases are documented
notes for 33 of 37 stable releases
4 versions withdrawn
withdrawn after publishing
5 years old
55 releases · first in 2021
One column per quarter.
Add arrow=60 support
arrow=60 supportAccept zero-offset timezone designators ( +00:00 , -00:00 , +0000 , -0000 , Z , z ) as UTC timezone metadata for timestamp fields
+00:00, -00:00, +0000, -0000, Z, z) as UTC timezone metadata for timestamp fieldsBreaking changes:
arrow<53 support.arrow2 support.marrow dependency to 0.3.0.Bug fixes:
Stricter f32 / f64 to decimal conversions. Only finite floats that are in the range that can be presented are converted.
Breaking changes:
arrow<53 support.arrow2 support.marrow dependency to 0.3.0-rc.1.Bug fixes:
New features:
+00:00, -00:00, +0000, -0000, Z, z) as UTC timezone metadata for timestamp fieldsStricter f32 / f64 to decimal conversions. Only finite floats that are in the range that can be presented are converted.
Breaking changes:
arrow<53 support.arrow2 support.marrow dependency to 0.3.0-rc.1.Bug fixes:
Support deserializing dictionary encoded arrays with null values
arrow=59 supportarrow=59 supportSupport _ separators when serializing strings to "Float16, Float32, Float64", and "Decimal128"
_ separators when serializing strings to "Float16, Float32, Float64", and "Decimal128"FixedSizeListList arraysBreaking change: refactored error handling
arrow=58 supportError into a structErrorKind with the variants MissingField, NullabilityViolationError::custom in favor of Error::newError::custom_from in favor of Error::new_fromFixedSizeListArrayBuilder::into_arrow, ArrayBuilder::into_record_batch, ArrayBuilder::into_marrow, that avoid additional allocations for metadataserde::Serializer instead of a custom trait.arrow=58 supportError into a structErrorKind with the variants MissingField, NullabilityViolationError::custom in favor of Error::newError::custom_from in favor of Error::new_fromFixedSizeListArrayBuilder::into_arrow,
ArrayBuilder::into_record_batch, ArrayBuilder::into_marrow that avoid
additional allocations for metadataserde::Serializer instead of a custom trait.All serializers now directly implement serde::Serializer instead of a custom trait. There are no breaking changes to the public interface, except for…
This release refactors the implementation for serialization. All serializers now directly implement serde::Serializer instead of a custom trait. There are no breaking changes to the public interface, except for a polish of error messages.
FixedSizeListArrayBuilder::into_arrow, ArrayBuilder::into_record_batch, ArrayBuilder::into_marrow that avoid additional allocations for metadata@lonless9 : Add 57 support + Release 0.13.7
@jpopesculian added the option bytes_as_large_binary to TracingOptions
bytes_as_large_binary to TracingOptions
(#281)- Add arrow=56 support
arrow=56 supportAllow dictionaries with nullable values to be deserialized, if all values are valid
Fix: Use the correct lower bound for marrow to enable arrow=55
arrow=55Allow primitive to string conversion
arrow=55 supportallow_to_string to TracerOptions to allow numbers,
booleans and chars to coerce to strings (false by default)The following people contributed to this release:
Allow to use enums / unions in nullable structs. The arrow format requires that each child field of a null struct value contains a dummy value. For un
The following people contributed to this release:
Breaking change: Dictionary data types no longer support sorting
marrow
serde_arrow::Error no longer implements
From<arrow::error::ArrowError>serde_arrow::Error no longer implements
From<arrow2::error::Error>Utf8View, BytesViewmarrow arrays directly, allowing users to use
serde_arrow with different arrow versions at the same time.Date64 semantics: use Date64 exclusively for dates, and Timestamp
for date times
Timestamp(Millisecond, tz) with tz either
being None or Some("UTC")UtcAsDate64Str and NaiveAsDate64Str strategiesTime32 and Time64String from Decimal arraysThe following people contributed to this release:
Nothing published for this version
Nothing published for this version
- Add arrow=54 support
arrow=54 supportFixed deserialization from sliced arrays (#248). Note that the current solution requires up front work when constructing the array deserializers, as d
Add support for various jiff types (jiff::Date, jiff::Time, jiff::DateTime, jiff::Timestamp, jiff::Span, jiff::SignedDuration)
New features
jiff types (jiff::Date, jiff::Time,
jiff::DateTime, jiff::Timestamp, jiff::Span, jiff::SignedDuration)List instead of LargeList by setting
sequence_as_large_list to false in TracingOptionsUtf8 instead
of LargeUtf8 by setting strings_as_large_utf8 to false in
TracingOptions2024-09-30, mapped to Date32) and times
(12:00:00, mapped to Time64(Nanosecond))) in from_sampleschrono::*,
uuid::Uuid, std::net::IpAddr)The following people contributed to this release:
List and strings as Utf8Refactor the underlying implementation to prepare for further development
Refactor the underlying implementation to prepare for further development
New features
Binary, LargeBinary, FixedSizeBinary(n), FixedSizeList(n) support
for arrow2bool from integer arraysBool8 arraysAPI changes
impl serde::Serialize instead of &(impl serde::Serialize + ?Sized)&[FieldRef] instead of &[Field] in arrow APIsRemoved deprecated API
serde_arrow::schema::Schemaserde_arrow::ArrowBuilder and serde_arrow::Arrow2Builderfrom_arrow_fields / to_arrow_fields for SerdeArrowSchema, use the
TryFrom conversions to convert between fields and SerdeArrowSchemaSerdeArrowSchema::new(), Overwrites::new()Nothing published for this version
The following people contributed to this release:
arrow=53 supportThe following people contributed to this release:
Fix tracing of JSON mixing nulls with non-null data
Add support for Binary, LargeBinary (only arrow)
arrow=52 supportBinary, LargeBinary (only arrow)FixedSizeBinary(n) (only arrow>=47)FixedSizeList(n) (only arrow)TracingOptions::overwriteenum E { A, B, C}) as
strings by setting the corresponding field to a string value (Utf,
LargeUtf, Dictionary(_, Utf8), Dictionary(_, LargeUtf8)enums_without_data_as_strings to true in TracingOptionsAdd support for new type wrappers, tuples and tuple structs to serde_arrow::Deserializer
serde_arrow::Serializerserde_arrow::Deserializerserde_arrow::ArrayBuilder with support for both arrow and
arrow2TryFrom<&[Field]> (arrow and arrow2) and
TryFrom<&[FieldRef]> (arrow only) for SerdeArrowSchemaTryFrom<&SerdeArrowSchema> for Vec<Field> and Vec<FieldRef>
for arrow- Add serde_arrow::Deserializer
serde_arrow::DeserializerSupport for serializing/deserializing timestamps with second, microsecond, and nanosecond encoding.
The following people contributed to this release:
Rewrite data type parsing with stricter parsing
Duration(unit)Support Timestamp(Second, tz), Timestamp(Millisecond, tz), Timestamp(Nanosecond, tz). At the moment only (de)serialization from / to integers is suppo
Timestamp(Second, tz), Timestamp(Millisecond, tz),
Timestamp(Nanosecond, tz). At the moment only (de)serialization from / to
integers is supported for non-microsecond unitsTime32(unit)0.11.0 does not contain any known breaking changes. However it's a major refactoring and untested behavior may change.
0.11.0 does not contain any known breaking changes. However it's a major
refactoring and untested behavior may change.
The biggest feature is the removal of the bytecode deserializer and use of the
Serde API directly. With this change, the code is easier to understand and
extend. Further Deserialization implementations can request specific types and
serde_arrow is able to supply them. As a consequence deserialization of
chrono::DateTime<Utc> is supported by serde_arrow without an explicit
strategy.
Further changes:
arrow=51 supportDate32 and Time64 supportto_record_batch, from_record_batch to offer more streamlined APIs for
working with record batchesarrow schemas in SchemaLike::from_value(), e.g.,
let fields = Vec::<Field>::from_value(&batch.schema()).SchemaLike for arrow::datatypes::FieldRefsSchemaLike::from_type() for nested unionsThe following people contributed to this release:
Nothing published for this version
Use the serde serialization APIs directly, instead of using the bytecode serializer. Serialization will be about 2x faster
2x fasterSchemaLike::from_value with incorrect strategy deserializationThe following people contributed to this release:
Nothing published for this version
Decimal128 support: serialize / deserialize `rust_decimal` and `bigdecimal` objects
Decimal128 support: serialize / deserialize
rust_decimal and
bigdecimal objectsarrow=50 supportSchemaLikeSized requirement for SchemaLike::from_samples(..),
SchemaLike::from_type(..), SchemaLike::from_value(..)Debug, PartialEq for Item and ItemsDeprecations (see the documentation of deprecated items for how to migrate):
Breaking changes:
try_parse_dates field in favor of the guess_dates field in
TracingOptions (the setter name is not affected)Improvements:
to_arrow / from_arrow and to_arrow2 /
from_arrow2)SchemaLike trait to support direct construction of arrow / arrow2 fieldsSchemaLike::form_type())serde_json::Value (SchemaLike::from_value())arrow=47, arrow=48, arrow=49arrow2=0.16 supportDeprecations (see the documentation of deprecated items for how to migrate):
serde_arrow::schema::Schema to
serde_arrow::schema::SerdeArrowSchema to prevent name clashes with the
schema types of arrow and arrow2.serialize_into_arrays, deserialize_from_arrays methods in favor
of to_arrow / to_arrow2 and from_arrow / from_arrow2serialize_into_fields methods in favor of
SchemaLike::from_samplesItems and Item
wrappersNothing published for this version
Make bytecode based serialization and deserialization the default
Make bytecode based serialization and deserialization the default
Update arrow version support
arrow=40, arrow=41, arrow=42, arrow=43,arrow=44, arrow=45,
arrow=46 supportarrow=35, arrow=36 supportImprove type support
TracingOptions::default().coerce_numbers(true))Timestamp(Milliseconds, None) and
Timestamp(Milliseconds, Some("UTC")).Quality of life features
serde_arrow::experimental::Schema
that can be easily serialized and deserialized.No longer export the base module: the implementation details as-is where not
really useful. Remove for now and think about a better design.
Bug fixes:
Option<Option<T>>.Nothing published for this version
Nothing published for this version
Fix a bug for unions with unknown variants reported [here][issue-57]. Now serde_arrow correctly handles unions during serialization, for which not all
serde_arrow correctly handles unions during serialization, for which not all
variants were encountered during tracing. Serializing unknown variants will
result in an error. All variants that are seen during tracing are save to use.Nothing published for this version
Add support for arrow=37 with the arrow-37 feature
arrow=37 with the arrow-37 featureNow both [arrow][arrow] and [arrow2][arrow2] are supported. Use the features to select the relevant version of either crate. E.g., to use serde_arrow
Now both [arrow][arrow] and [arrow2][arrow2] are supported. Use the features to
select the relevant version of either crate. E.g., to use serde_arrow with
arrow=0.36:
serde_arrow = { version = "0.6", features = ["arrow-36"] }
serde_arrow now supports deserializing Rust objects from arrays. At the
moment, this operation is supported only for arrow2. Adding support for
arrow is planned.
serde_arrow now supports many more Rust and Arrow features.
serde_arrow no longer relies on its own schema object. Now all schema
information is retrieved from arrow fields with additional metadata.
In addition to the previous API that worked on a sequence of records,
serde_arrow now also supports to operate on a sequence of individual items
(serialize_into_array, deserialize_form_array) and to operate on single
items (ArraysBuilder).
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[arrow]: https://github.com/apache/arrow-rs [arrow2]: https://github.com/jorgecarleitao/arrow2 [polars]: https://github.com/pola-rs/polars [arrow2-to-
Nothing published for this version
Moved marrow into the serde_arrow workspace.
Breaking changes:
arrow2 support.arrow<53 support.Other:
marrow into the serde_arrow workspace.Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →