PackageTrack
Sign in Get early access

arrow-pyarrow

Pyarrow bindings

59.2.0 6.2M downloads/mo #4044 most downloaded on crates.io apache/arrow-rs

What this package is like to depend on

Last release 17 days ago

06 Aug 2026

Ships fairly regularly

a new release about every 4 weeks

Most releases are documented

notes for 16 of 18 stable releases

Nothing withdrawn

no release was ever pulled

1 years old

18 releases · first in 2025

15 releases in the last 12 months

see the full history below

Release timeline

18 releases · Jun 2025 to Aug 2026
2026
Release Pre-release

Releases

latest 18
  1. 59.2.0 06 Aug 2026
    Release notes

    Changelog

    59.2.0 - (2026-08-02)

    Full Changelog

    Enhancements

    • arrow-avro: Deprecate object_store integration by @brancz in #10484
    • chore(arrow): add unchecked array builder methods by @Rich-T-kid in #10440
    • feat(arrow-ipc): add sans-IO stream encoder by @Phoenix500526 in #10277
    • chore(arrow-cast): support suffix white space in arrow-cast parse by @Rich-T-kid in #10396
    • feat(coalesce): add size function by @rluvaton in #10331
    • fix(parquet): support mask filtering across skipped pages by @hhhizzz in #10288
    • chore(arrow-cast): support white space prefixed parse for ints and floats by @Rich-T-kid in #10374
    • chore(arrow-buffer): Make more of i256 available in const code by @AdamGS in #10363
    • feat(arrow-array): Expose builder buffer capacity accessors by @Weijun-H in #10342
    • feat(arrow-arith): Add interval multiplication by i64 by @peterxcli in #10336
    • fix: Make parquet-index work with column paths by @korowa in #10330
    • feat(arrow-csv): add support for parsing Float16 by @Glatzel in #10343
    • Remove the unmaintained paste dependency from arrow by @Phoenix500526 in #10303
    • chore: formalize the default map field names to match default arrow spec by @rluvaton in #10297
    • feat(variant): Add variant_to_arrow Map type support by @sdf-jkl in #10307

    Bug fixes

    • fix(arrow-schema): Persist dictionary ordered flag on FFI schema import by @borchero in #10514
    • fix(arrow-json): validate ListView child nullability by @dk3yyyy in #10486
    • fix(arrow-json): validate map value nullability by @subotac in #10475
    • avro: bound VLQDecoder::long against overlong varints by @STiFLeR7 in #10407
    • arrow-row: Fix decode_fixed_size_list to apply the corrected_type step for dictionary children by @zhuqi-lucas in #10414
    • [Variant] make value mandatory field for VariantArray/ShreddingState by @sdf-jkl in #10318
    • fix off by one error for slice accounting by @Rich-T-kid in #10406
    • fix: GenericByteViewArray::gc() drops inline views on the multi-buffer slow path by @adriangb in #10287
    • fix(arrow-json): render coerced f32 as its value in the string decoder by @hareshkh in #10386
    • fix(arrow-cast): make b64_encode reject invalid UTF-8 from misbehaving Engine impls by @bit2swaz in #10324
    • fix: take FFI_ArrowArrayStream errno values from libc by @fornwall in #10299
    • fix(arrow-data): allow full dictionary key range when concatenating by @raphaelroshan in #10323
    • Don't panic on invalid c ffi schema name by @robert3005 in #10328
    • fix(REE): check upfront if sorting empty array or 0 limit by @Jefffrey in #10293
    • fix(arrow-avro): bound untrusted OCF block size and item counts by @miniex in #10237
    • fix(arrow-array): disallow creating MapArray with nullable key field by @rluvaton in #10272
    • fix: don't panic on ArrayData::try_new on bad input even when force_validate feature is on by @rluvaton in #10282

    Performance improvements

    • perf(parquet): slice up contiguous buffer for decimals and fsb by @MassivePizza in #10364
    • feat(parquet): RowSelection can be backed by a BooleanBuffer by @haohuaijin in #10141
    • perf(parquet): use Cursor in ZSTDCodec to avoid Vec alloc and copy by @MassivePizza in #10345
    • optimize(parquet): Nested list batching child.write calls by @mapleFU in #10085
    • perf(parquet): splice buffered pages with write_all instead of io::copy (adapts #10052) by @adriangb in #10353
    • hoist calls for null_sentinel by @Rich-T-kid in #10356
    • perf: speed up substring_by_char with an ASCII fast path and single-pass bounds by @andygrove in #10334
    • Cache encoded field name in FieldEncoder by @MassivePizza in #10296
    • perf: allow users to skip utf8 validation in arrow-row by @Rich-T-kid in #10319
    • perf: Improve decimal addition and subtraction when scale is equal by @AdamGS in #10333
    • optimize(interleave): implement interleave for FixedSizeList/Map type by @mapleFU in #10046
    • Perf: Pre-size buffer allocations to avoid intermediate allocations by @Rich-T-kid in #10262
    • Perf: create dictionary reader config and default unsafeflag to false by @Rich-T-kid in #10260
    • Perf: Introduce zero copy path when tonic returns an aligned buffer by @Rich-T-kid in #10273
    • Validate short view strings in separate buffer in arrow-row by @Jefffrey in #10250

    Documentation updates

    • chore(parquet): add link to ticket in object_store deprecation message by @alamb in #10502
    • chore(avro): add link to ticket in object_store deprecation message by @alamb in #10503
    • docs: clarify decimal negative scale behavior by @ByteBaker in #10304
    • Docs: fix mutableArrayData comments by @Rich-T-kid in #10326
    • docs: trim release schedule for released versions by @alamb in #10280
    • Align parquet-geospatial crate docs with README by @paleolimbot in #10302

    Miscellaneous

    • Revert "chore: formalize the default map field names to match default arrow spec (#10297)" by @alamb in #10506
    • parquet: deprecate explicit object_store integration by @brancz in #10354
    • fix(parquet): restore opaque return type for RowSelection::iter by @haohuaijin in #10450
    • refactor(parquet): split arrow_reader/selection into smaller modules by @haohuaijin in #10434
    • chore: deduplicate filter nulls code in coalesce/filter kernel by @Jefffrey in #10348
    • chore: remove parquet dependency from parquet_derive by @ByteBaker in #10327
    Open source →
  2. 59.1.0 07 Jul 2026
    Release notes

    Changelog

    59.1.0 (2026-07-03)

    Full Changelog

    Implemented enhancements:

    • Fast path for nested DictionaryArray casting #10247 [arrow]
    • parquet/arrow: reading multiple nested columns fails with "Not all children array length are the same!" when a list continues across DataPageV2 page boundary #10243 [parquet]
    • Add product aggregate kernel to arrow-rs #10150 [arrow]
    • Stricter DataType parsing #10146 [arrow]
    • Support validating CSV headers against Schema #10143 [arrow]
    • arrow-ipc: Supports compression level configuration for arrow-ipc writer #10132 [arrow]
    • [Variant] VariantArray field API naming #10093
    • Add StructArray::field_ APIs symmetric to StructArray::column_ ones #10092 [arrow]
    • arrow-buffer: implement Saturating, CheckedShl, Not num-traits for i256 #10087 [arrow]
    • feat: native concat for MapArray #10047 [arrow]
    • [Variant] Add variant_to_arrow Dictionary/REE type support #10013

    Fixed bugs:

    • arrow-row on fixed size binary/list with size 0 and no nulls return wrong length #10270
    • casting list to 0-size fixedsizelist can cause incorrect output length #10227 [arrow]
    • Buffer count mismatched with metadata when encoding records with dictionary of dictionaries #10213 [arrow]
    • Buffer::into_mutable is not consistent regarding sliced data and can lead to panics #10117 [arrow]
    • parquet_derive: cannot read or write columns whose name is a Rust keyword (raw identifiers like r#type become column "r#type") #10112
    • parquet: fix OffsetBuffer panic on corrupt input #10107 [parquet]
    • Parquet geospatial conversion uses metadata key "algorithm" instead of "edges" in geoarrow metadata #9929 [parquet]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • Soundness: Unsound alignment contract in public FromBytes trait and BitReader::get_batch #10164 [parquet]
    • ParquetPushDecoder: expose the next row-group index that try_next_reader will yield #10148 [parquet]
    • arrow-ipc: Extend writer benchmarks to include dictionaries #10119 [arrow]
    • bench(parquet): benchmark for nested list write #10083 [parquet]
    • Support i256 implement From<i128> #10080 [arrow]

    Merged pull requests:

    * This Changelog was automatically generated by github_changelog_generator

    Open source →
    Release notes

    Full Changelog

    Implemented enhancements:

    • Fast path for nested DictionaryArray casting #10247 [arrow]
    • parquet/arrow: reading multiple nested columns fails with "Not all children array length are the same!" when a list continues across DataPageV2 page boundary #10243 [parquet]
    • Add product aggregate kernel to arrow-rs #10150 [arrow]
    • Stricter DataType parsing #10146 [arrow]
    • Support validating CSV headers against Schema #10143 [arrow]
    • arrow-ipc: Supports compression level configuration for arrow-ipc writer #10132 [arrow]
    • [Variant] VariantArray field API naming #10093
    • Add StructArray::field_ APIs symmetric to StructArray::column_ ones #10092 [arrow]
    • arrow-buffer: implement Saturating, CheckedShl, Not num-traits for i256 #10087 [arrow]
    • feat: native concat for MapArray #10047 [arrow]
    • [Variant] Add variant_to_arrow Dictionary/REE type support #10013

    Fixed bugs:

    • arrow-row on fixed size binary/list with size 0 and no nulls return wrong length #10270
    • casting list to 0-size fixedsizelist can cause incorrect output length #10227 [arrow]
    • Buffer count mismatched with metadata when encoding records with dictionary of dictionaries #10213 [arrow]
    • Buffer::into_mutable is not consistent regarding sliced data and can lead to panics #10117 [arrow]
    • parquet_derive: cannot read or write columns whose name is a Rust keyword (raw identifiers like r#type become column "r#type") #10112
    • parquet: fix OffsetBuffer panic on corrupt input #10107 [parquet]
    • Parquet geospatial conversion uses metadata key "algorithm" instead of "edges" in geoarrow metadata #9929 [parquet]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • Soundness: Unsound alignment contract in public FromBytes trait and BitReader::get_batch #10164 [parquet]
    • ParquetPushDecoder: expose the next row-group index that try_next_reader will yield #10148 [parquet]
    • arrow-ipc: Extend writer benchmarks to include dictionaries #10119 [arrow]
    • bench(parquet): benchmark for nested list write #10083 [parquet]
    • Support i256 implement From<i128> #10080 [arrow]

    Merged pull requests:

    Open source →
  3. 59.0.0 09 Jun 2026
    Release notes

    Changelog

    59.0.0 (2026-06-04)

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • Allow casting plain struct to dictionary encoded struct #10038 [arrow]
    • Optimize arrow-flight #10029
    • Align buffers when importing via from_ffi / ArrowArrayStreamReader #10028 [arrow]
    • Switch Parquet LogicalType enum to macro generated version #9995 [parquet]
    • Future proof Parquet Thrift parser #9973 [parquet]
    • Add DatePart 1-indexed variants #9964 [arrow]
    • perf: Rework Parquet Thrift handling of boolean fields #9946 [parquet]
    • Add benchmarks for REE to parquet #9935 [parquet] [arrow]
    • (re) Allow Large FixedSizeBinaryArrays #9906 [arrow]
    • Add a is_normalized flag to DictionaryArray #9841
    • [Variant] Remove BorrowedShreddingState #9790
    • [parquet] Expose whether FileDecryptionProperties uses a KeyRetriever #9721 [parquet]
    • Align cast logic for from/to_decimal for variant to cast kernel #9688 [arrow]

    Fixed bugs:

    • parquet-variant build might fail on s390x #10026
    • FixedSizeBinaryArray implements From<Vec<&[u8]>> etc despite conversion being fallible #10018 [parquet] [arrow]
    • string -> decimal cast should not treat empty string as 0 #10009 [arrow]
    • Cast FixedSizeList to List will lost datatype metadata in list #10004 [arrow]
    • Record reader panics with "index out of bounds" when row group num_rows exceeds actual column data #9992 [parquet]
    • parquet predicate-cache: panic / silent row drop on single-leaf nullable struct #9982 [parquet]
    • parquet-variant doesn't build on 32-bit targets #9977
    • Date32 doesn't parse date with large year #9960 [arrow]
    • msrv check failing on main due to [email protected] #9938 [parquet] [arrow] [arrow-flight]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • Bound ArrowWriter peak memory #10071 [parquet]
    • Parquet writer can produce massively oversized data pages for large variable-width values #10061 [parquet]
    • Remove the fused_inline_view_columns field from BatchCoalescer if possible #10055
    • DataType parser permits negative FixedSizeBinary size #10033 [arrow]
    • Parquet: return error for overlong INT96 column metadata statistics #10002 [parquet]
    • Uuid extension type fails to deserialize when ARROW:extension:metadata is an empty string #10000 [arrow]
    • parquet: timeline for removing thrift crate dependency (CVE-2026-43868) #9999
    • Failure in CI: Archery test With other arrows - binary_view Rust producing, .NET consuming #9989 [arrow]
    • Validate FIXED_LEN_BYTE_ARRAY type_length for DECIMAL and INTERVAL in Parquet → Arrow schema conversion #9984 [parquet]
    • IPC reader projection does not handle duplicate projection indices correctly #9950 [arrow]
    • AnyRunArray trait #9909 [arrow]
    • Release arrow-rs / parquet Patch version 57.3.1 (May 2026) #9858 [arrow]
    • Release arrow-rs / parquet Patch version 56.2.1 (May 2026) #9857 [arrow]
    • parquet/arrow: should sync/async readers converge on a shared physical read planner #9764
    • arrow-string has a lot of macro-generated deprecated kernels in like.rs #9675 [arrow]
    • [parquet] Add BloomFilterProperties builder API to make bloom filter configuration explicit #9667 [parquet]

    Merged pull requests:

    * This Changelog was automatically generated by github_changelog_generator

    Open source →
    Release notes

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • Allow casting plain struct to dictionary encoded struct #10038 [arrow]
    • Optimize arrow-flight #10029
    • Align buffers when importing via from_ffi / ArrowArrayStreamReader #10028 [arrow]
    • Switch Parquet LogicalType enum to macro generated version #9995 [parquet]
    • Future proof Parquet Thrift parser #9973 [parquet]
    • Add DatePart 1-indexed variants #9964 [arrow]
    • perf: Rework Parquet Thrift handling of boolean fields #9946 [parquet]
    • Add benchmarks for REE to parquet #9935 [parquet] [arrow]
    • (re) Allow Large FixedSizeBinaryArrays #9906 [arrow]
    • Add a is_normalized flag to DictionaryArray #9841
    • [Variant] Remove BorrowedShreddingState #9790
    • [parquet] Expose whether FileDecryptionProperties uses a KeyRetriever #9721 [parquet]
    • Align cast logic for from/to_decimal for variant to cast kernel #9688 [arrow]

    Fixed bugs:

    • parquet-variant build might fail on s390x #10026
    • FixedSizeBinaryArray implements From<Vec<&[u8]>> etc despite conversion being fallible #10018 [parquet] [arrow]
    • string -> decimal cast should not treat empty string as 0 #10009 [arrow]
    • Cast FixedSizeList to List will lost datatype metadata in list #10004 [arrow]
    • Record reader panics with "index out of bounds" when row group num_rows exceeds actual column data #9992 [parquet]
    • parquet predicate-cache: panic / silent row drop on single-leaf nullable struct #9982 [parquet]
    • parquet-variant doesn't build on 32-bit targets #9977
    • Date32 doesn't parse date with large year #9960 [arrow]
    • msrv check failing on main due to [email protected] #9938 [parquet] [arrow] [arrow-flight]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • Bound ArrowWriter peak memory #10071 [parquet]
    • Parquet writer can produce massively oversized data pages for large variable-width values #10061 [parquet]
    • Remove the fused_inline_view_columns field from BatchCoalescer if possible #10055
    • DataType parser permits negative FixedSizeBinary size #10033 [arrow]
    • Parquet: return error for overlong INT96 column metadata statistics #10002 [parquet]
    • Uuid extension type fails to deserialize when ARROW:extension:metadata is an empty string #10000 [arrow]
    • parquet: timeline for removing thrift crate dependency (CVE-2026-43868) #9999
    • Failure in CI: Archery test With other arrows - binary_view Rust producing, .NET consuming #9989 [arrow]
    • Validate FIXED_LEN_BYTE_ARRAY type_length for DECIMAL and INTERVAL in Parquet → Arrow schema conversion #9984 [parquet]
    • IPC reader projection does not handle duplicate projection indices correctly #9950 [arrow]
    • AnyRunArray trait #9909 [arrow]
    • Release arrow-rs / parquet Patch version 57.3.1 (May 2026) #9858 [arrow]
    • Release arrow-rs / parquet Patch version 56.2.1 (May 2026) #9857 [arrow]
    • parquet/arrow: should sync/async readers converge on a shared physical read planner #9764
    • arrow-string has a lot of macro-generated deprecated kernels in like.rs #9675 [arrow]
    • [parquet] Add BloomFilterProperties builder API to make bloom filter configuration explicit #9667 [parquet]

    Merged pull requests:

    Open source →
  4. 58.4.0 22 Jul 2026
    Release notes

    Changelog

    58.4.0 (2026-07-17)

    Full Changelog

    Merged pull requests:

    * This Changelog was automatically generated by github_changelog_generator

    Open source →
  5. 58.3.0 11 May 2026
    Release notes

    Changelog

    58.3.0 (2026-05-07)

    Full Changelog

    Implemented enhancements:

    • Add DatePart::from_str API #9930 [arrow]
    • should use DictionaryArray::with_values instead of try_new on the dictionary fast path #9889 [arrow]
    • [arrow-string] add concat_elements for BinaryViewArray and FixedSizeBinary #9875 [arrow]
    • Expose eq ignore ascii case from arrow-string #9870 [arrow]
    • Configurable data page v2 compression threshold #9827 [parquet]

    Fixed bugs:

    • [arrow-cast] incorrect Time32 -> Time64 conversion #9851 [arrow]
    • Panic when reading malformed compact-Thrift bool fields in Parquet page metadata #9839 [parquet]
    • Parquet DeltaBitPackDecoder::skip could panic on "non-standard" miniblocks #9793 [parquet]

    Documentation updates:

    • docs: Add guidance for AI assisted submissions to CONTRIBUTING.md #9892 (etseidl)
    • Update release schedule on README #9881 (alamb)
    • Add more documentation for FixedSizeBinary arrays #9866 [arrow] (alamb)
    • Minor: document why FixedSizeBinary offset is always 0 #9861 [arrow] (alamb)
    • docs: Update contributing guidelines with benchmark results #9782 (alamb)

    Closed issues:

    • GenericByteDictionaryBuilder::with_capacity does not pre-size dedup HashTable #9907 [arrow]
    • [arrow-buffer] Integer overflow in repeat_slice_n_times leads to undefined behavior #9904 [arrow]
    • [arrow-buffer] Integer overflow in BitChunks::new leads to undefined behavior #9903 [arrow]
    • [arrow-row] Integer overflow in Rows::row index handling leads to undefined behavior #9901 [arrow]
    • [arrow-data] Integer overflow in ArrayData validation leads to undefined behavior #9900 [arrow]
    • [arrow-data] Integer overflow in ArrayData::slice leads to undefined behavior #9899 [arrow]
    • [arrow-array] Integer overflow in FixedSizeBinaryArray::value leads to undefined behavior #9898 [arrow]
    • [arrow-buffer] Integer overflow in BufferBuilder::reserve leads to undefined behavior #9897 [arrow]
    • arrow-csv: integer overflow panic in Reader::records::flush #9885 [arrow]
    • Make an API to help with the pattern of 'replaces the values of the REE array' #9854 [arrow]
    • Parquet reader rejects canonical UNKNOWN logical type on BOOLEAN physical columns #9844 [parquet]
    • ColumnIndex length mismatch can cause panic during decoding in Parquet #9832 [parquet]
    • Bug converting json to fixed list of zero size #9780 [arrow]

    Merged pull requests:

    * This Changelog was automatically generated by github_changelog_generator

    Open source →
    Release notes

    Full Changelog

    Implemented enhancements:

    • Add DatePart::from_str API #9930 [arrow]
    • should use DictionaryArray::with_values instead of try_new on the dictionary fast path #9889 [arrow]
    • [arrow-string] add concat_elements for BinaryViewArray and FixedSizeBinary #9875 [arrow]
    • Expose eq ignore ascii case from arrow-string #9870 [arrow]
    • Configurable data page v2 compression threshold #9827 [parquet]

    Fixed bugs:

    • [arrow-cast] incorrect Time32 -> Time64 conversion #9851 [arrow]
    • Panic when reading malformed compact-Thrift bool fields in Parquet page metadata #9839 [parquet]
    • Parquet DeltaBitPackDecoder::skip could panic on "non-standard" miniblocks #9793 [parquet]

    Documentation updates:

    • docs: Add guidance for AI assisted submissions to CONTRIBUTING.md #9892 (etseidl)
    • Update release schedule on README #9881 (alamb)
    • Add more documentation for FixedSizeBinary arrays #9866 [arrow] (alamb)
    • Minor: document why FixedSizeBinary offset is always 0 #9861 [arrow] (alamb)
    • docs: Update contributing guidelines with benchmark results #9782 (alamb)

    Closed issues:

    • GenericByteDictionaryBuilder::with_capacity does not pre-size dedup HashTable #9907 [arrow]
    • [arrow-buffer] Integer overflow in repeat_slice_n_times leads to undefined behavior #9904 [arrow]
    • [arrow-buffer] Integer overflow in BitChunks::new leads to undefined behavior #9903 [arrow]
    • [arrow-row] Integer overflow in Rows::row index handling leads to undefined behavior #9901 [arrow]
    • [arrow-data] Integer overflow in ArrayData validation leads to undefined behavior #9900 [arrow]
    • [arrow-data] Integer overflow in ArrayData::slice leads to undefined behavior #9899 [arrow]
    • [arrow-array] Integer overflow in FixedSizeBinaryArray::value leads to undefined behavior #9898 [arrow]
    • [arrow-buffer] Integer overflow in BufferBuilder::reserve leads to undefined behavior #9897 [arrow]
    • arrow-csv: integer overflow panic in Reader::records::flush #9885 [arrow]
    • Make an API to help with the pattern of 'replaces the values of the REE array' #9854 [arrow]
    • Parquet reader rejects canonical UNKNOWN logical type on BOOLEAN physical columns #9844 [parquet]
    • ColumnIndex length mismatch can cause panic during decoding in Parquet #9832 [parquet]
    • Bug converting json to fixed list of zero size #9780 [arrow]

    Merged pull requests:

    Open source →
  6. 58.2.0 02 May 2026
    Release notes

    Full Changelog

    Implemented enhancements:

    • Expose ColumnCloseResult on ArrowColumnChunk #9774 [parquet]
    • Expose FFI data structures fields #9771 [arrow]
    • short-circuit last predicate in RowFilter when with_limit(N) is set #9765 [parquet]
    • vectorise dict-index bounds check #9747 [parquet]
    • Refactor RleEncoder::flush_bit_packed_run #9734 [parquet]
    • Add benchmark for cast from/to decimals #9728 [arrow]
    • Add a security policy for arrow-rs #9727 [parquet] [arrow] [arrow-flight]
    • Support FixedSizeList in arrow-json reader #9714 [arrow]
    • [Variant] Add VariantArrayBuilder::append_nulls API #9684
    • [Json] RunEndEncoded decoder optimization #9645 [arrow]
    • [Variant] variant_get(..., List<_>) non-Struct types support #9615
    • [Variant] Add unshredded Struct fast-path for variant_get(..., Struct) #9596
    • Allow setting custom line terminator for CSV writer #9571 [arrow]
    • [Variant] Align cast logic for variant_get to cast kernel for numeric/bool types #9564 [arrow]
    • ci: use ubuntu-slim where applicable #9536
    • Publicly export arrow_string::Predicate and its methods? #9480
    • Don't create CompressionContext when no compression is selected [IPC] #9463 [arrow]
    • Parquet: Raw level buffering causes unbounded memory growth for sparse columns #9446 [parquet]
    • Parallel Parquet Reading #9381 [parquet]

    Fixed bugs:

    • [Variant] unshred_variant panics on malformed bytes despite returning Result #9740
    • RecordBatch::normalize() does not propagate top level null bitmap into the results #9732 [arrow]
    • Incorrect accounting in DictEncoder::estimated_memory_size #9719 [parquet]
    • arrow-ipc writer does not comply with spec for empty variable-size arrays #9716 [arrow]
    • Panic when reading corrupt parquet file with truncated data instead of ParquetError #9705 [parquet]
    • NOTICE.txt is inaccurate #9703 [arrow]
    • Unnecessary dependency on regex crate #9672
    • [arrow-avro] Avro reader produces incorrect results when reader schema and writer schema differ #9655 [arrow]
    • parquet docs are broken on docs.rs #9649
    • [Parquet] ArrowWriter with CDC panics on nested ListArrays #9637 [parquet] [arrow] [arrow-flight]
    • Use release KEYS file for verification instead of dev KEYS #9603
    • IPC reader: handling of dictionaries with only null values #9595 [arrow]
    • Parquet RleDecoder::get_batch_with_dict panics on oob dictionary indices #9434 [parquet]

    Documentation updates:

    Performance improvements:

    • parquet: avoid decode and heap allocation on terminal skip in DeltaBitPackDecoder #9784 [parquet]
    • parquet: O(1) skip for bw=0 miniblocks in DeltaBitPackDecoder #9783 [parquet]
    • Remove per-message flush overhead in Arrow IPC writer #9762 [arrow]
    • Support GenericListViewArray::new_unchecked and refactor ListView json decoder #9646 [arrow]
    • Support nested REE in arrow-ord partition function #9640 [arrow]
    • [Parquet] Remove the BIT_PACKED encoder #9635 [parquet]
    • Pre-reserve output capacity in ByteView/ByteArray dictionary decoding #9587 [parquet]
    • Fuse RLE decoding and view gathering for StringView dictionary decoding #9582 [parquet]
    • Use branchless index clamping and add get_batch_direct to RleDecoder #9581 [parquet]
    • Reduce per-byte overhead in VLQ integer decoding #9580 [parquet]
    • feat(parquet): batch RLE runs in level encoder via scan-ahead #9830 [parquet] (HippoBaro)
    • fix: lazy-init zstd compression contexts to avoid unnecessary FFI calls #9808 [arrow] (mbutrovich)
    • parquet: O(1) skip for bw=0 miniblocks in DeltaBitPackDecoder #9786 [parquet] (sahuagin)
    • chore: add benchmark for row filters with LIMIT short-circuit #9767 [parquet] (haohuaijin)
    • Push LIMIT / OFFSET into the last RowFilter predicate and skip unused row groups #9766 [parquet] (haohuaijin)
    • feat(ipc): Remove per-message flush in IPC writer hot path #9763 [arrow] (pchintar)
    • perf(parquet): Defer fixed length byte array buffer alloc and skip zero-batch init #9756 [parquet] (lyang24)
    • feat(parquet): batch consecutive null/empty rows in write_list #9752 [parquet] (HippoBaro)
    • Remove len field from buffer builder #9750 [arrow] (cetra3)
    • perf(parquet): Vectorize dict-index bounds check in RleDecoder::get_batch_with_dict (up to -7.9%) #9746 [parquet] (Dandandan)
    • feat(parquet): precompute offset_index_disabled at build-time #9724 [parquet] (HippoBaro)
    • [Parquet] Improve dictionary decoder by unrolling loops #9662 [parquet] (Dandandan)
    • [Json] Use partition and take in RunEndEncoded decoder #9658 [arrow] (liamzwbao)
    • Improve take performance on List arrays #9643 [arrow] (AdamGS)
    • [Json] Replace ArrayData with typed Array construction in json-reader #9497 [arrow] (liamzwbao)
    • feat(parquet): stream-encode definition/repetition levels incrementally #9447 [parquet] (HippoBaro)

    Closed issues:

    • Incorrect buffer skipping for V4 Union types in IPC skip_field #9828 [arrow]
    • Replace wildcard match in skip_field with explicit DataType handling #9821 [arrow]
    • Column projection misalignment for ListView / LargeListView in IPC reader #9805 [arrow]
    • Avoid panic on malformed compressed buffer prefix in IPC #9801 [arrow]
    • DeltaByteArrayDecoder panics on invalid prefix lengths #9796 [parquet]
    • Use NullBufferBuilder when reading json #9781 [arrow]
    • Perfectly shredded arrays with top-level null values loss nullability when typed_value is extracted #9701
    • [Parquet Metadata] API to determine page-index presence separately from page-index load #9693
    • Union cast is incorrect for duplicate field names #9664 [arrow]
    • List and ListView are missing take benchmarks #9627 [arrow]
    • Support RunEndEncoded arrays in comparison kernels (eq, lt, etc.) #9620 [arrow]
    • variant_get should follow JSONpath semantics #9606
    • GenericByteViewArray: support finding total length of all strings #9435 [arrow]

    Merged pull requests:

    Open source →
  7. 58.1.0 24 Mar 2026
    Release notes

    Full Changelog

    Implemented enhancements:

    • Reuse compression dict lz4_block #9566
    • [Variant] Add variant_to_arrow Struct type support #9529
    • [Variant] Add unshred_variant support for Binary and LargeBinary types #9526
    • [Variant] Add shred_variant support for LargeUtf8 and LargeBinary types #9525
    • [Variant] variant_get tests clean up #9517
    • parquet_variant: Support LargeUtf8 typed value in unshred_variant #9513
    • parquet-variant: Support string view typed value in unshred_variant #9512
    • Deprecate ArrowTimestampType::make_value in favor of from_naive_datetime #9490 [arrow]
    • Followup for support ['fieldName'] in VariantPath #9478
    • Speedup DELTA_BINARY_PACKED decoding when bitwidth is 0 #9476 [parquet]
    • Support CSV files encoded with charsets other than UTF-8 #9465 [arrow]
    • Expose Avro writer schema when building the reader #9460 [arrow]
    • Python: avoid importing pyarrow classes ever time #9438
    • Add append_nulls to MapBuilder #9431 [arrow]
    • Add append_non_nulls to StructBuilder #9429 [arrow]
    • Add append_value_n to GenericByteBuilder #9425 [arrow]
    • Optimize from_bitwise_binary_op #9378 [arrow]
    • Configurable Arrow representation of UTC timestamps for Avro reader #9279 [arrow]

    Fixed bugs:

    • MutableArrayData::extend does not copy child values for ListView arrays #9561 [arrow]
    • ListView interleave bug #9559 [arrow]
    • Flight encoding panics with "no dict id for field" with nested dict arrays #9555 [arrow] [arrow-flight]
    • "DeltaBitPackDecoder only supports Int32Type and Int64Type" but unsigned types are supported too #9551 [parquet]
    • Potential overflow when calling util::bit_mask::set_bits (soundness issue) #9543 [arrow]
    • handle Null type in try_merge for Struct, List, LargeList, and Union #9523 [arrow]
    • Invalid offset in sparse column chunk data for multiple predicates #9516 [parquet]
    • debug_assert_eq! in BatchCoalescer panics in debug mode when batch_size < 4 #9506 [arrow]
    • Parquet Statistics::null_count_opt wrongly returns Some(0) when stats are missing #9451 [parquet]
    • Error "Not all children array length are the same!" when decoding rows spanning across page boundaries in parquet file when using RowSelection #9370 [parquet]
    • Avro schema resolution not properly supported for complex types #9336 [arrow]

    Documentation updates:

    • Update planned release schedule in README.md #9466 (alamb)

    Performance improvements:

    • Introduce NullBuffer::try_from_unsliced to simplify array construction #9385 [parquet] [arrow]
    • perf: Coalesce page fetches when RowSelection selects all rows #9578 [parquet] (Dandandan)
    • Use chunks_exact for has_true/has_false to enable compiler unrolling #9570 [arrow] (adriangb)
    • pyarrow: Cache the imported classes to avoid importing them each time #9439 (Tpt)

    Closed issues:

    • Duplicate macro definition: partially_shredded_variant_array_gen #9492
    • Enable LargeList / ListView / LargeListView for VariantArray::try_new #9455
    • Support variables/expressions in record_batch! macro #9245 [arrow]

    Merged pull requests:

    Open source →
  8. 58.0.0 23 Feb 2026
    Release notes

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • Avoid allocating a Vec in StructBuilder #9427
    • Zstd context reuse #9401
    • Optimize from_bitwise_unary_op #9364
    • Support RunEndEncoded in ord comparator #9360
    • Support RunEndEncoded arrays in arrow-json #9359
    • Support BinaryView in bit_length kernel #9351
    • Remove support for List types in bit_length kernel #9349
    • Support roundtrip ListView in parquet arrow writer #9344
    • Support ListView in length kernel #9343
    • Support ListView in sort kernel #9341
    • Add some way to create a Timestamp from a DateTime #9337
    • Introduce DataType::is_list and DataType::IsBinary #9326
    • Performance of creating all null dictionary array can be improved #9321
    • [arrow-avro] Add missing Arrow DataType support with avro_custom_types round-trip + non-custom fallbacks #9290

    Fixed bugs:

    • ArrowArrayStreamReader errors on zero-column record batches #9394
    • Regression on main (58): Parquet argument error: Parquet error: Required field type_ is missing #9315 [parquet]

    Documentation updates:

    • Improve safety documentation of the Array trait #9314 [arrow] (alamb)
    • Improve docs and add build() method to {Null,Boolean,}BufferBuilder #9155 [arrow] (alamb)
    • Improve ArrowReaderBuilder::with_row_filter documentation #9153 [parquet] (alamb)
    • docs: Improve main README.md and highlight community #9119 (alamb)
    • Docs: Add additional documentation and example for make_array #9112 [arrow] (alamb)
    • doc: fix link on FixedSizeListArray doc #9033 [arrow] (Jefffrey)

    Performance improvements:

    • Replace ArrayData with direct Array construction #9338 [arrow] (liamzwbao)
    • Remove some unsafe and allocations when creating PrimitiveArrays from Vec and from_trusted_len_iter #9299 [arrow] (alamb)
    • parquet: rle skip decode loop when batch contains all max levels (aka no nulls) #9258 [parquet] (lyang24)
    • Improve parquet BinaryView / StringView decoder performance (up to -35%) #9236 [parquet] (Dandandan)
    • Avoid a clone when creating BooleanArray from ArrayData #9159 [arrow] (alamb)
    • Avoid overallocating arrays in coalesce primitives / views #9132 [arrow] (Dandandan)
    • perf: Avoid ArrayData allocation in PrimitiveArray::reinterpret_cast #9129 [arrow] (alamb)
    • [Parquet] perf: Create StructArrays directly rather than via ArrayData (1% improvement) #9120 [parquet] [arrow] (alamb)
    • Avoid clones in make_array for StructArray and GenericByteViewArray #9114 [arrow] (alamb)
    • perf: optimize hex decoding in json (1.8x faster in binary-heavy) #9091 [arrow] (Weijun-H)
    • Speed up binary kernels (30% faster and and or), add BooleanBuffer::from_bitwise_binary_op #9090 [arrow] (alamb)
    • perf: improve field indexing in JSON StructArrayDecoder (1.7x speed up) #9086 [arrow] (Weijun-H)
    • bench: added to row_format benchmark conversion of 53 non-nested columns #9081 [arrow] (rluvaton)
    • perf: improve calculating length performance for view byte array in row conversion #9080 [arrow] (rluvaton)
    • perf: improve calculating length performance for nested arrays in row conversion #9079 [arrow] (rluvaton)
    • perf: improve calculating length performance for GenericByteArray in row conversion #9078 [arrow] (rluvaton)

    Closed issues:

    • BatchCoalescer::push_batch panics on schema mismatch instead of returning error #9389
    • Release arrow-rs / parquet Minor version 57.3.0 (January 2026) #9240
    • [Variant] support .. and ['fieldName'] syntax in the VariantPath parser #9050
    • Support Float16 for create_random_array #9028

    Merged pull requests:

    Open source →
  9. 57.3.1 11 May 2026

    Nothing published for this version

  10. 57.3.0 06 Feb 2026
    Release notes

    Full Changelog

    Breaking changes:

    Fixed bugs:

    Open source →
  11. 57.2.0 11 Jan 2026
    Release notes

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • [parquet] further relax LevelInfoBuilder::types_compatible for ArrowWriter #9098
    • Update arrow-row documentation with Union encoding #9084
    • Add code examples for min and max compute functions #9055
    • Add append_n to bytes view builder API #9034 [arrow]
    • Move RunArray::get_physical_indices to RunEndBuffer #9025 [arrow]
    • Allow quote style in csv writer #9003 [arrow]
    • IPC support for ListView #9002 [arrow]
    • Implement BinaryArrayType for &FixedSizeBinaryArrays #8992 [arrow]
    • arrow-buffer: implement num-traits for i256 #8976 [arrow]
    • Support for Arc<str> in ParquetRecordWriter derive macro #8972
    • [arrow-avro] suggest switching from xz to liblzma #8970 [arrow]
    • arrow-buffer: add i256::trailing_zeros #8968 [arrow]
    • arrow-buffer: make i256::leading_zeros public #8965 [arrow]
    • Add spark like ignoreLeadingWhiteSpace and ignoreTrailingWhiteSpace options to the csv writer #8961 [arrow]
    • Add round trip benchmark for Parquet writer/reader #8955 [parquet]
    • Support performant interleave for List/LargeList #8952 [arrow]
    • [Variant] Support array access when parsing VariantPath #8946
    • Some panic!s could be represented as unimplemented!s #8932 [arrow]
    • [Variant] easier way to construct a shredded schema #8922
    • Support DataType::ListView and DataType::LargeListView in ArrayData::new_null #8908 [arrow]
    • Add GenericListViewArray::from_iter_primitive #8906 [arrow]
    • [Variant] Unify the cast option usage in ParquentVariant #8873
    • Blog post about efficient filter representation in Parquet filter pushdown #8843 [parquet]
    • Add comparison support for Union arrays in the cmp kernel #8837 [arrow]
    • [Variant] Support array shredding into List/LargeList/ListView/LargeListView #8830
    • Support Union data types for row format #8828 [arrow]
    • FFI support for ListView #8819 [arrow]
    • [Variant] Support more Arrow Datatypes from Variant primitive types #8805
    • FixedSizeBinaryBuilder supports append_array #8750 [arrow]
    • Implement special case zip with scalar for Utf8View #8724 [arrow]
    • [geometry] Wire up arrow reader/writer for GEOMETRY and GEOGRAPHY #8717 [parquet]

    Fixed bugs:

    • Soundness Bug in try_binary when Array is implemented incorrectly in external crate #9106
    • casting Dict(_, LargeUtf8) to Utf8View (StringViewArray) panics #9101
    • wrong results for null count of nullif kernel #9085 [parquet] [arrow]
    • Empty first line in some code examples #9063
    • GenericByteViewArray::slice is not zero-copy but ought to be #9014
    • Regression in struct casting in 57.2.0 (not yet released) #9005 [arrow]
    • Fix panic when decoding multiple Union columns in RowConverter #8999 [arrow]
    • take_fixed_size_binary Does Not Consider NULL Indices #8947 [arrow]
    • [arrow-avro] RecordEncoder Bugs #8934 [arrow]
    • FixedSizeBinaryArray::try_new(...) Panics with Item Length of Zero #8926 [arrow]
    • cargo test -p arrow-cast fails on main #8910 [arrow]
    • GenericListViewArray::new_null ignores len and returns an empty array #8904 [arrow]
    • FixedSizeBinaryArray::new_null Does Not Properly Set the Length of the Values Buffer #8900 [arrow]
    • Struct casting requires same order of fields #8870 [arrow]
    • Cannot cast string dictionary to binary view #8841 [arrow]

    Documentation updates:

    Performance improvements:

    • [parquet] Avoid a clone while resolving the read strategy #9056 [parquet] (alamb)
    • perf: improve performance of encoding GenericByteArray by 8% #9054 [arrow] (rluvaton)
    • Speed up unary not kernel by 50%, add BooleanBuffer::from_bitwise_unary #8996 [arrow] (alamb)
    • arrow-select: improve dictionary interleave fallback performance #8978 [arrow] (asubiotto)
    • Add special implementation for zip for Utf8View/BinaryView scalars #8963 [arrow] (mkleen)
    • arrow-select: implement specialized interleave_list #8953 [arrow] (asubiotto)

    Closed issues:

    Merged pull requests:

    Open source →
  12. 57.1.0 24 Nov 2025
    Release notes

    Full Changelog

    Implemented enhancements:

    • Eliminate bound checks in filter kernels #8865 [arrow]
    • Respect page index policy option for ParquetObjectReader when it's not skip #8856 [parquet]
    • Speed up collect_bool and remove unsafe #8848 [arrow]
    • Error reading parquet FileMetaData with empty lists encoded as element-type=0 #8826 [parquet]
    • ValueStatistics methods can't be used from generic context in external crate #8823 [parquet]
    • Custom Pretty-Printing Implementation for Column when Formatting Record Batches #8821 [arrow]
    • Parquet-concat: supports bloom filter and page index #8804 [parquet]
    • [Parquet] virtual row number support #7299
    • [Variant] Enforce shredded-type validation in shred_variant #8795 [arrow]
    • Simplify decision logic to call FilterBuilder::optimize or not #8781 [arrow]
    • [Variant] Add variant to arrow for DataType::{Binary, LargeBinary, BinaryView} #8767 [arrow]
    • Provide algorithm that allows zipping arrays whose values are not prealigned #8752 [arrow]
    • [Parquet] ParquetMetadataReader decodes too much metadata under point-get scenerio #8751 [parquet]
    • arrow-json supports encoding binary arrays, but not decoding #8736 [arrow]
    • Allow FilterPredicate instances to be reused for RecordBatches #8692 [arrow]
    • ArrowJsonBatch::from_batch is incomplete #8684 [arrow]
    • parquet-layout: More info about layout including footer size, page index, bloom filter? #8682 [parquet]
    • Rewrite ParquetRecordBatchStream (async API) in terms of the PushDecoder #8677 [parquet]
    • [JSON] Add encoding for binary view #8674 [arrow]
    • Refactor arrow-cast decimal casting to unify the rescale logic used in Parquet variant casts #8670 [arrow]
    • [Variant] Support Uuid/FixedSizeBinary(16) shredding #8665
    • [Parquet]There should be an encoding counter to know how many encodings the repo supports in total #8662 [parquet]
    • Improve parse_data_type for List, ListView, LargeList, LargeListView, FixedSizeList, Union, Map, RunEndCoded. #8648 [arrow]
    • [Variant] Support variant to arrow primitive support null/time/decimal_* #8637
    • Return error from RleDecoder::reset rather than panic #8632 [parquet]
    • Add bitwise ops on BooleanBufferBuilder and MutableBuffer that mutate directly the buffer #8618 [arrow]
    • [Variant] Add variant_to_arrow Utf-8, LargeUtf8, Utf8View types support #8567 [arrow]

    Fixed bugs:

    • Regression: Parsing List(Int64) results in nullable list in 57.0.0 and a non-nullable list in 57.1.0 #8883
    • Regression: FixedSlizeList data type parsing fails on 57.1.0 #8880
    • (dyn ArrayFormatterFactory + 'static) can't be safely shared between threads #8875
    • RowNumber reader has wrong row group ordering #8864 [parquet]
    • ThriftMetadataWriter::write_column_indexes cannot handle a ColumnIndexMetaData::NONE #8815 [parquet]
    • "Archery test With other arrows" Integration test failing on main: #8813 [arrow]
    • [Parquet] Writing in 57.0.0 seems 10% slower than 56.0.0 #8783 [parquet]
    • Parquet reader cannot handle files with unknown logical types #8776 [parquet]
    • zip now treats nulls as false in provided mask regardless of the underlying bit value #8721 [arrow]
    • [avro] Incorrect version in crate.io landing page #8691 [arrow]
    • Array: ViewType gc() has bug when array sum length exceed i32::MAX #8681 [arrow]
    • Parquet 56: encounter error: item_reader def levels are None when reading nested field with row filter #8657 [parquet]
    • Degnerate and non-nullable FixedSizeListArrays are not handled #8623 [arrow]
    • [Parquet]Performance Degradation with RowFilter on Unsorted Columns due to Fragmented ReadPlan #8565 [parquet]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • Variant to NullType conversion ignores strict casting #8810
    • Unify display representation for Field #8784
    • Misleading configuration name: skip_arrow_metadata #8780
    • Inconsistent display for types with Metadata #8761 [arrow]
    • Internal arrow-integration-test crate is linked from arrow docs #8739 [arrow]
    • Add benchmark for RunEndEncoded casting #8709 [arrow]
    • [Varaint] Support VariantArray::value to return a Result<Variant> #8672

    Merged pull requests:

    Open source →
  13. 57.0.0 23 Oct 2025
    Release notes

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • Added Avro support (new arrow-avro crate) #4886
    • parquet-rewrite: supports compression level and write batch size #8639
    • Error not panic when int96 stastistics aren't size 12 #8614 [parquet]
    • [Variant] Make VariantArray iterable #8612
    • [Variant] impl PartialEq for VariantArray #8610
    • [Variant] Remove potential panics when probing VariantArray #8609
    • [Variant] Remove ceremony of going from list of Variant to VariantArray #8606
    • Eliminate redundant validation in RecordBatch::project #8591 [arrow]
    • [PARQUET][BENCH] Arrow writer bench with compression and/or page v2 #8559 [parquet]
    • [Variant] casting functions are confusingly named #8531 [parquet]
    • Support writing GeospatialStatistics in Parquet writer #8523 [parquet]
    • [thrift-remodel] Optimize convert_row_groups #8517 [parquet]
    • [Variant] Add variant to arrow primitive support for boolean/timestamp/time #8515
    • Test thrift-remodel branch with DataFusion #8513 [parquet]
    • Make UnionArray::is_dense Method Public #8503 [arrow]
    • Add append_n method to FixedSizeBinaryDictionaryBuilder #8497 [arrow]
    • [Parquet] Reduce size of ParquetMetadata when encryption feature is enabled #8469 [parquet]
    • [Parquet] Remove useless mut requirements in geting bloom filter function #8461 [parquet]
    • Change serde dependency to serde_core where applicable #8451 [arrow]
    • [Parquet] Split ParquetMetadataReader into IO/decoder state machine and thrift parsing #8439 [parquet]
    • Remove compiler warning for redundant config enablement #8412 [arrow]
    • Add geospatial statistics creation support for GEOMETRY/GEOGRAPHY Parquet logical types #8411 [arrow]
    • arrow_json lacks with_timestamp_format functions like arrow_csv had offered #8398 [arrow]
    • Unify API for writing column chunks / row groups in parallel #8389 [parquet]
    • Reuse zstd context in arrow IPC writer #8386 [arrow] [arrow-flight]
    • [Variant] Support reading/writing Parquet Variant LogicalType #8370 [parquet]
    • [Variant] Implement a shred_variant function #8361
    • [Parquet] Expose ReadPlan and ReadPlanBuilder #8347 [parquet]
    • [Variant] [Shredding] Support typed_access for List #8337 [parquet]
    • [Variant] [Shredding] Support typed_access for Struct #8336 [parquet]
    • [Variant] [Shredding] Support typed_access for Time64(Microsecond) #8334 [parquet]
    • [Variant] [Shredding] Support typed_access for Decimal128 #8332 [parquet]
    • [Variant] [Shredding] Support typed_access for Timestamp(Microsecond, _) and Timestamp(Nanosecond, _) #8331 [parquet]
    • [Variant] [Shredding] Support typed_access for Date32 #8330 [parquet]
    • [Variant] Support strict casting for all data types #8303
    • [Variant] Support typed access for string types in variant_get #8285
    • [Variant]: Implement DataType::FixedSizeList support for cast_to_variant kernel #8281

    Fixed bugs:

    • Fix arrow-avro Writer Documentation related to AvroBinaryFormat #8631 [arrow]
    • Decimal -> Decimal cast wrongly fails for large scale reduction #8579 [arrow]
    • [Parquet] Avoid fetching multiple pages when max_predicate_cache_sizeis 0 #8542 [parquet]
    • DataType parsing no longer works correctly for old formatted timestamps #8539 [parquet] [arrow]
    • [Parquet] ArrowWriter flush does not work #8534 [parquet]
    • arrow::compute::interleave fails with struct arrays with no fields #8533 [arrow]
    • [Parquet] Over memory consumation for writer page v1 compressed #8526 [parquet]
    • Incorrect Behavior of Collecting a filtered iterator to a BooleanArray #8505 [arrow]
    • [Parquet] ProjectionMask::columns name handling is bug prone #8443 [parquet]
    • [Variant] Shredded typed_value columns must have valid variant types #8435 [parquet]
    • cargo test -p parquet fails with default ulimit #8406 [parquet]
    • Column with List(Struct) causes failed to decode level data for struct array #8404 [parquet]
    • Binaryview Utf8 Cast Issue #8403 [arrow]
    • Decimal precision validation displays value without accounting for scale #8382 [arrow]
    • [Variant] VariantArray::data_type returns StructType, causing Array::as_struct to panic #8319 [parquet]
    • [Variant] writing a VariantArray to parquet panics #8296 [parquet]

    Documentation updates:

    Performance improvements:

    • [parquet] Improve encoding mask API (wrap bare i32 in a struct w/ docs) #8588 [parquet]
    • bench: create zip kernel benchmarks #8654 [arrow] (rluvaton)
    • Skip redundant validation checks in RecordBatch#project #8583 [arrow] (pepijnve)
    • [thrift-remodel] Remove conversion functions for row group and column metadata #8574 [parquet] (etseidl)
    • [PARQUET] Improve memory efficency for compressed writer parquet 1.0 #8527 [parquet] (lilianm)
    • perf: improve GenericByteBuilder::append_array to use SIMD for extending the offsets #8388 [arrow] (rluvaton)

    Closed issues:

    • Utf-8, LargeUtf8, Utf8View #8601
    • [Variant] Improve the get type logic for DataType in variant to arrow row builder #8538
    • Add a README.md for arrow-avro #8504 [arrow]
    • Fix UnionArray references to "positive" values #8418 [arrow]
    • [Variant] metadata field should be marked is non-nullable #8410 [parquet]
    • [Avro] Example read_with_utf8view.rs fails to run with error "Error: ParseError("Unexpected EOF while reading Avro header")" #8380 [arrow]
    • [Geospatial]: Add CI checks for parquet-geospatial crate #8377
    • [Geospatial] Create new parquet-geometry crate #8374

    Merged pull requests:

    Open source →
  14. 56.2.1 11 May 2026

    Nothing published for this version

  15. 56.2.0 23 Sep 2025
    Release notes

    Full Changelog

    Documentation updates:

    Closed issues:

    • comfy-table release 7.2.0 breaks MSRV #8243
    • [Variant] Add Variant::as_f16 #8228
    • Support appending raw bytes to variant objects and lists #8217
    • VariantArrayBuilder uses ParentState for simpler rollbacks #8205
    • Make ObjectBuilder::finish signature infallible #8184
    • Improve performance of i256 to f64 #8013

    Merged pull requests:

    Open source →
  16. 56.1.0 25 Aug 2025
    Release notes

    Full Changelog

    Implemented enhancements:

    • Implement cast and other operations on decimal32 and decimal64 #7815 #8204 [arrow]
    • Speed up Parquet filter pushdown with predicate cache #8203 [parquet]
    • Optionally read parquet page indexes #8070 [parquet]
    • Parquet reader: add method for sync reader read bloom filter #8023 [parquet]
    • [parquet] Support writing logically equivalent types to ArrowWriter #8012 [parquet]
    • Improve StringArray(Utf8) sort performance #7847 [arrow]
    • feat: arrow-ipc delta dictionary support #8001 [arrow] (JakeDern)

    Fixed bugs:

    • The Rustdocs are clean CI job is failing #8175
    • [avro] Bug in resolving avro schema with named type #8045 [arrow]
    • Doc test failure (test arrow-avro/src/lib.rs - reader) when verifying avro 56.0.0 RC1 release #8018 [arrow]

    Documentation updates:

    Performance improvements:

    Closed issues:

    • [Variant] Improve fuzz test for Variant #8199
    • [Variant] Improve fuzz test for Variant #8198
    • VariantArrayBuilder tracks starting offsets instead of (offset, len) pairs #8192
    • Rework ValueBuilder API to work with ParentState for reliable nested rollbacks #8188
    • [Variant] Rename ValueBuffer as ValueBuilder #8186
    • [Variant] Refactor ParentState to track and rollback state on behalf of its owning builder #8182
    • [Variant] ObjectBuilder should detect duplicates at insertion time, not at finish #8180
    • [Variant] ObjectBuilder does not reliably check for duplicates #8170
    • [Variant] Support StringView and LargeString in ´batch_json_string_to_variant` #8145 [parquet]
    • [Variant] Rename batch_json_string_to_variant and batch_variant_to_json_string json_to_variant #8144 [parquet]
    • [avro] Use tempfile crate rather than custom temporary file generator in tests #8143 [arrow]
    • [Avro] Use Write rather dyn Write in Decoder #8142 [arrow]
    • [Variant] Nested builder rollback is broken #8136
    • [Variant] Add support the remaing primitive type(timestamp_nanos/timestampntz_nanos/uuid) for parquet variant #8126
    • Meta: Implement missing Arrow 56.0 lint rules - Sequential workflow #8121
    • ARROW-012-015: Add linter rules for remaining Arrow 56.0 breaking changes #8120
    • ARROW-010 & ARROW-011: Add linter rules for Parquet Statistics and Metadata API removals #8119
    • ARROW-009: Add linter rules for IPC Dictionary API removals in Arrow 56.0 #8118
    • ARROW-008: Add linter rule for SerializedPageReaderState usize→u64 breaking change #8117
    • ARROW-007: Add linter rule for Schema.all_fields() removal in Arrow 56.0 #8116
    • [Variant] Implement ShreddingState::AllNull variant #8088 [parquet]
    • [Variant] Support Shredded Objects in variant_get #8083 [parquet]
    • [Variant]: Implement DataType::RunEndEncoded support for cast_to_variant kernel #8064 [parquet]
    • [Variant]: Implement DataType::Dictionary support for cast_to_variant kernel #8062 [parquet]
    • [Variant]: Implement DataType::Struct support for cast_to_variant kernel #8061 [parquet]
    • [Variant]: Implement DataType::Decimal32/Decimal64/Decimal128/Decimal256 support for cast_to_variant kernel #8059 [parquet]
    • [Variant]: Implement DataType::Timestamp(..) support for cast_to_variant kernel #8058 [parquet]
    • [Variant]: Implement DataType::Float16 support for cast_to_variant kernel #8057 [parquet]
    • [Variant]: Implement DataType::Interval support for cast_to_variant kernel #8056 [parquet]
    • [Variant]: Implement DataType::Time32/Time64 support for cast_to_variant kernel #8055 [parquet]
    • [Variant]: Implement DataType::Date32 / DataType::Date64 support for cast_to_variant kernel #8054 [parquet]
    • [Variant]: Implement DataType::Null support for cast_to_variant kernel #8053 [parquet]
    • [Variant]: Implement DataType::Boolean support for cast_to_variant kernel #8052 [parquet]
    • [Variant]: Implement DataType::FixedSizeBinary support for cast_to_variant kernel #8051 [parquet]
    • [Variant]: Implement DataType::Binary/LargeBinary/BinaryView support for cast_to_variant kernel #8050 [parquet]
    • [Variant]: Implement DataType::Utf8/LargeUtf8/Utf8View support for cast_to_variant kernel #8049 [parquet]
    • [Variant] Implement cast_to_variant kernel #8043 [parquet]
    • [Variant] Support variant_get kernel for shredded variants #7941 [parquet]
    • Add test for casting Decimal128 (i128::MIN and i128::MAX) to f64 with overflow handling #7939 [arrow]

    Merged pull requests:

    Open source →
  17. 56.0.0 01 Aug 2025
    Release notes

    Full Changelog

    Breaking changes:

    Implemented enhancements:

    • [parquet] Relax type restriction to allow writing dictionary/native batches for same column #8004
    • Support casting int64 to interval #7988 [arrow]
    • [Variant] Add ListBuilder::with_value for convenience #7951 [parquet]
    • [Variant] Add ObjectBuilder::with_field for convenience #7949 [parquet]
    • [Variant] Impl PartialEq for VariantObject #7943 #7948
    • [Variant] Offer simdutf8 as an optional dependency when validating metadata #7902 [parquet] [arrow]
    • [Variant] Avoid collecting offset iterator #7901 [parquet]
    • [Variant] Remove superfluous check when validating monotonic offsets #7900 [parquet]
    • [Variant] Avoid extra allocation in ObjectBuilder #7899 [parquet]
    • [Variant][Compute] variant_get kernel #7893 [parquet]
    • [Variant][Compute] Add batch processing for Variant-JSON String conversion #7883 [parquet]
    • Support MapArray in lexsort #7881 [arrow]
    • [Variant] Add testing for invalid variants (fuzz testing??) #7842 [parquet]
    • [Variant] VariantMetadata, VariantList and VariantObject are too big for Copy #7831 [parquet]
    • Allow choosing flate2 backend #7826 [parquet]
    • [Variant] Tests for creating "large" VariantObjectss #7821 [parquet]
    • [Variant] Tests for creating "large" VariantLists #7820 [parquet]
    • [Variant] Support VariantBuilder to write to buffers owned by the caller #7805 [parquet]
    • [Variant] Move JSON related functionality to different crate. #7800 [parquet]
    • [Variant] Add flag in ObjectBuilder to control validation behavior on duplicate field write #7777 [parquet]
    • [Variant] make serde_json an optional dependency of parquet-variant #7775 [parquet]
    • [coalesce] Implement specialized BatchCoalescer::push_batch for PrimitiveArray #7763 [arrow]
    • Add sort_kernel benchmark for StringViewArray case #7758 [arrow]
    • [Variant] Improved API for accessing Variant Objects and lists #7756 [parquet]
    • Buildable reproducible release builds #7751
    • Allow per-column parquet dictionary page size limit #7723 [parquet]
    • [Variant] Test and implement efficient building for "large" Arrays #7699 [parquet]
    • [Variant] Improve VariantBuilder when creating field name dictionaries / sorted dictionaries #7698 [parquet]
    • [Variant] Add input validation in VariantBuilder #7697 [parquet]
    • [Variant] Support Nested Data in VariantBuilder #7696 [parquet]
    • Parquet: Incorrect min/max stats for int96 columns #7686 [parquet]
    • Add DictionaryArray::gc method #7683 [arrow]
    • [Variant] Add negative tests for reading invalid primitive variant values #7645 [parquet]

    Fixed bugs:

    • [Variant] Panic when appending nested objects to VariantBuilder #7907 [parquet]
    • Panic when casting large Decimal256 to f64 due to unchecked unwrap() #7886 [arrow]
    • Incorrect inlined string view comparison after " Add prefix compare for inlined" #7874 [parquet] [arrow]
    • [Variant] test_json_to_variant_object_very_large takes over 20s #7872 [parquet]
    • [Variant] If ObjectBuilder::finalize is not called, the resulting Variant object is malformed. #7863 [parquet]
    • CSV error message has values transposed #7848 [arrow]
    • Concating struct arrays with no fields unnecessarily errors #7828 [arrow]
    • Clippy CI is failing on main after Rust 1.88 upgrade #7796 [parquet] [arrow] [arrow-flight]
    • [Variant] Field lookup with out of bounds index causes unwanted behavior #7784 [parquet]
    • Error verifying parquet-variant crate on 55.2.0 with verify-release-candidate.sh #7746
    • test_to_pyarrow tests fail during release verification #7736 [arrow]
    • [parquet_derive] Example for ParquetRecordWriter is broken. #7732
    • [Variant] Variant::Object can contain two fields with the same field name #7730 [parquet]
    • [Variant] Panic when appending Object or List to VariantBuilder #7701 [parquet]
    • Slicing a single-field dense union array creates an array with incorrect logical_nulls length #7647 [arrow]
    • Ensure page encoding statistics are written to Parquet file #7643 [parquet] (etseidl)

    Documentation updates:

    Performance improvements:

    • RowConverter on list should only encode the sliced list values and not the entire data #7993 [arrow]
    • [Variant] Avoid extra allocation in list builder #7977 [parquet]
    • [Variant] Convert JSON to Variant with fewer copies #7964 [parquet]
    • Optimize sort kernels partition_validity method #7936 [arrow]
    • Speedup sorting for inline views #7857 [arrow]
    • Perf: Investigate and improve parquet writing performance #7822 [parquet] [arrow]
    • Perf: optimize sort string_view performance #7790 [arrow]
    • Clickbench microbenchmark spends significant time in memcmp for not_empty predicate #7766 [arrow]
    • Use prefix first for comparisons, resort to data buffer for remaining data on equal values #7744 [arrow]
    • Change use of inline_value to inline it to a u128 #7743 [arrow]
    • Add efficient way to upgrade keys for additional dictionary builders #7654 [arrow]
    • Perf: Make sort string view fast(1.5X ~ 3X faster) #7792 [arrow] (zhuqi-lucas)
    • Add specialized coalesce path for PrimitiveArrays #7772 [arrow] (alamb)

    Closed issues:

    • Implement full-range i256::to_f64 to replace current ±∞ saturation for Decimal256 → Float64 #7985
    • [Variant] impl FromIterator fpr VariantPath #7955
    • validated and is_fully_validated flags doesn't need to be part of PartialEq #7952 [parquet]
    • [Variant] remove VariantMetadata::dictionary_size #7947 [parquet]
    • [Variant] Improve VariantArray performance by storing the index of the metadata and value arrays #7920
    • [Variant] Converting variant to JSON string seems slow #7869 [parquet]
    • [Variant] Present Variant at Iceberg Summit NYC July 10, 2025 #7858
    • [Variant] Avoid second copy of field name in MetadataBuilder #7814 [parquet]
    • Remove APIs deprecated in or before 54.0.0 #7810 [parquet] [arrow] [arrow-flight]
    • [Variant] Make it harder to forget to finish a pending parent i n ObjectBuilder #7798 [parquet]
    • [Variant] Remove explicit ObjectBuilder::finish() and ListBuilder::finish and move to Drop impl #7780 [parquet]
    • Reduce repetition in tests for arrow-row/src/run.rs #7692 [arrow]
    • [Variant] Add tests for invalid variant values (aka verify invalid inputs) #7681 [parquet]
    • [Variant] Introduce structs for Variant::Decimal types #7660 [parquet]

    Merged pull requests:

    Open source →
  18. 55.2.0 26 Jun 2025
    Release notes
    • Add a strong_count method to Buffer #7568 [arrow]
    • Create version of LexicographicalComparator that compares fixed number of columns #7531 [arrow]
    • parquet-show-bloom-filter should work with integer typed columns #7528 [parquet]
    • Allow merging primitive dictionary values in concat and interleave kernels #7518 [arrow]
    • Add efficient concatenation of StructArrays #7516 [arrow]
    • Rename flight-sql-experimental to flight-sql #7498 [arrow] [arrow-flight]
    • Consider moving from ryu to lexical-core for string formatting / casting floats to string. #7496
    • Arithmetic kernels can be safer and faster #7494 [arrow]
    • Speedup filter_bytes by precalculating capacity #7465 [arrow]
    • [Variant]: Rust API to Create Variant Values #7424 [parquet] [arrow]
    • [Variant] Rust API to Read Variant Values #7423 [arrow]
    • Release arrow-rs / parquet Minor version 55.1.0 (May 2025) #7393 [parquet]
    • Support create_random_array for Decimal data types #7343 [arrow]
    • Truncate Parquet page data page statistics #7555 [parquet] (etseidl)

    Fixed bugs:

    • In arrow_json, Decoder::decode can panic if it encounters two high surrogates in a row. #7712
    • FlightSQL "GetDbSchemas" and "GetTables" schemas do not fully match the protocol #7637 [arrow] [arrow-flight]
    • Cannot read encrypted Parquet file if page index reading is enabled #7629 [parquet]
    • encoding_stats not present in Parquet generated by parquet-rewrite #7616 [parquet]
    • When writing parquet plaintext footer files footer_signing_key_metadata is not included, encryption alghoritm is always written in footer #7599 [parquet]
    • new_null_array panics when constructing a struct of a dictionary #7571
    • Parquet derive fails to build when Result is aliased #7547
    • Unable to read Dictionary(u8, FixedSizeBinary(_)) using datafusion. #7545 [parquet]
    • filter_record_batch panics with empty struct array. #7538 [arrow]
    • Panic in pretty_format function when displaying DurationSecondsArray with i64::MIN / i64::MAX #7533 [arrow]
    • Record API unable to parse TIME_MILLIS when encoded as INT32 #7510 [parquet]
    • The read_record_batch func of the RecordBatchDecoder does not respect the skip_validation property #7508 [arrow]
    • arrow-55.1.0 breaks filter_record_batch #7500
    • Files containing binary data with >=8_388_855 bytes per row written with arrow-rs can't be read with pyarrow #7489 [parquet]
    • [Bug] Ingestion with Arrow Flight Sql panic when the input stream is empty or fallible #7329 [arrow] [arrow-flight]
    • Ensure page encoding statistics are written to Parquet file #7643 [parquet] (etseidl)

    Documentation updates:

    Closed issues:

    • [Variant] More efficient determination of String vs ShortString #7700
    • [Variant] Improve API for iterating over values of a VariantList #7685 [parquet]
    • [Variant] Consider validating variants on creation (rather than read) #7684 [parquet]
    • Miri test_native_type_pow test failing #7641 [arrow]
    • Improve performance of coalesce and concat for views #7615 [arrow]
    • Bad min value in row group statistics in some special cases #7593
    • Feature Request: BloomFilter Position Flexibility in parquet-rewrite #7552 [parquet]

    Merged pull requests:

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive