From 3c794ce50ee463a93d201e77e529224f9b1c8b16 Mon Sep 17 00:00:00 2001 From: RIchard Baah Date: Sun, 20 Sep 2026 14:09:06 -0400 Subject: [PATCH 1/7] first draft of arrow-60 blog post --- _posts/2026-09-10-arrow-rs-60.0.0.md | 352 +++++++++++++++++++++++++++ 1 file changed, 352 insertions(+) create mode 100644 _posts/2026-09-10-arrow-rs-60.0.0.md diff --git a/_posts/2026-09-10-arrow-rs-60.0.0.md b/_posts/2026-09-10-arrow-rs-60.0.0.md new file mode 100644 index 00000000000..cc1d3393fa2 --- /dev/null +++ b/_posts/2026-09-10-arrow-rs-60.0.0.md @@ -0,0 +1,352 @@ +--- +layout: post +title: "Apache Arrow Rust 60.0.0 Release" +date: "2026-09-10 00:00:00" +author: pmc +categories: [release] +--- + + +The Apache Arrow team is pleased to announce that the v60.0.0 release of Apache Arrow +Rust is now available on crates.io ([arrow] and [parquet]) and as [source download]. + +[arrow]: https://crates.io/crates/arrow +[parquet]: https://crates.io/crates/parquet +[source download]: https://dist.apache.org/repos/dist/release/arrow/arrow-rs-60.0.0 + +See the [60.0.0 changelog] for a full list of changes. + +[60.0.0 changelog]: https://github.com/apache/arrow-rs/blob/60.0.0/CHANGELOG.md + +## Highlights + +This release includes new Parquet encoding support, a sustained effort to remove +panics from the codebase, a large number of kernel performance improvements, and +many bug fixes across decimals, take/filter, and FFI. + +MSRV is bumped to 1.88, +`rand` upgraded to 0.10, `object_store` to 0.14.1, and several long-deprecated +items have been removed. See the [60.0.0 changelog] for the full breaking +changes list. + +## New Features + +### Parquet ALP Encoder/Decoder Support + +[@sdf-jkl] added support for the [Adaptive Lossless floating-Point (ALP)] +encoding in Parquet ([#9372]). ALP is a high-performance encoding for +floating-point columns that improves both compression ratios and read throughput. +This makes arrow-rs one of the first Rust implementations to support ALP, +keeping the [parquet] crate aligned with the latest Parquet specification. + +[Adaptive Lossless floating-Point (ALP)]: https://github.com/cwida/ALP +[@sdf-jkl]: https://github.com/sdf-jkl +[#9372]: https://github.com/apache/arrow-rs/pull/9372 + +### Parquet Page Index Improvements + +[@etseidl] made several improvements to Parquet page index handling: a new +`PageIndex` struct encapsulating column and offset indexes ([#10719]), new +`PageIndexBuilder` and `PageIndexProvider` types ([#10842]), and page index +decoders are now public ([#10899]). + +[@etseidl]: https://github.com/etseidl +[#10719]: https://github.com/apache/arrow-rs/pull/10719 +[#10842]: https://github.com/apache/arrow-rs/pull/10842 +[#10899]: https://github.com/apache/arrow-rs/pull/10899 + +### Parquet NDV Statistics, FILE Logical Type, and IEEE 754 Total Order + +[@Rich-T-kid] implemented writing num distinct values (NDV) statistics in the +Parquet writer ([#10654]) and added row-group-level distinct counts to +`StatisticsConverter` ([#10652]). Query engines use these to make better +planning decisions such as join strategy selection and filter selectivity +estimates. + +[@brkyvz] added support for the `FILE` logical type ([#10109]). [@etseidl] +implemented [PARQUET-2249] IEEE 754 total order for floating-point comparisons +([#9619]) and the corresponding `INT96` timestamp `ColumnOrder` ([#10106]). +[@etseidl] also removed the previous limit of 32,768 row groups per file +([#10149]). + +[@Rich-T-kid]: https://github.com/Rich-T-kid +[@brkyvz]: https://github.com/brkyvz +[PARQUET-2249]: https://issues.apache.org/jira/browse/PARQUET-2249 +[#10654]: https://github.com/apache/arrow-rs/pull/10654 +[#10652]: https://github.com/apache/arrow-rs/pull/10652 +[#10109]: https://github.com/apache/arrow-rs/pull/10109 +[#9619]: https://github.com/apache/arrow-rs/pull/9619 +[#10106]: https://github.com/apache/arrow-rs/pull/10106 +[#10149]: https://github.com/apache/arrow-rs/pull/10149 + +### New `arrow-cmp` Crate + +[@Rich-T-kid] introduced the [`arrow-cmp`] crate ([#10325]), splitting +comparison kernel logic into its own focused crate. This makes it possible to +depend on Arrow comparison operations without pulling in the full `arrow` crate. + +[`arrow-cmp`]: https://crates.io/crates/arrow-cmp +[#10325]: https://github.com/apache/arrow-rs/pull/10325 + +## Panic Elimination + +A lot of work went into converting panics into proper `Result` returns this +release. [@emilk] fixed `try_` functions still panicking in edge cases ([#10730], +[#10755]) and removed panics from `GenericByteArray::from_iter_values` ([#10729]). +[@bit2swaz] replaced panics with errors in IPC schema and footer parsing +([#10647], [#10744]) and closed an FFI `Drop` soundness hole ([#10431]). +[@Rich-T-kid] fixed a potential use-after-free in `Buffer::shrink_to_fit` ([#10932]) +and converted `MutableBuffer` panicking callsites to fallible methods ([#10641], +[#10317]). [@okhsunrog] made `interleave`/`concat` return errors on dictionary key +overflow ([#10675]). [@ranflarion] converted a Parquet buffer push panic into an +error ([#10564]) and [@dhruvxvaishnav] did the same for invalid dictionary index +bit widths ([#10725]). + +[@emilk]: https://github.com/emilk +[@bit2swaz]: https://github.com/bit2swaz +[@okhsunrog]: https://github.com/okhsunrog +[@ranflarion]: https://github.com/ranflarion +[@dhruvxvaishnav]: https://github.com/dhruvxvaishnav +[#10730]: https://github.com/apache/arrow-rs/pull/10730 +[#10755]: https://github.com/apache/arrow-rs/pull/10755 +[#10729]: https://github.com/apache/arrow-rs/pull/10729 +[#10647]: https://github.com/apache/arrow-rs/pull/10647 +[#10744]: https://github.com/apache/arrow-rs/pull/10744 +[#10431]: https://github.com/apache/arrow-rs/pull/10431 +[#10932]: https://github.com/apache/arrow-rs/pull/10932 +[#10641]: https://github.com/apache/arrow-rs/pull/10641 +[#10317]: https://github.com/apache/arrow-rs/pull/10317 +[#10675]: https://github.com/apache/arrow-rs/pull/10675 +[#10564]: https://github.com/apache/arrow-rs/pull/10564 +[#10725]: https://github.com/apache/arrow-rs/pull/10725 + +## Performance Improvements + +This release has a large number of performance improvements across kernels, +casting, and Parquet I/O. + +[@Rich-T-kid] made several take/filter kernel improvements: faster `take` on +`List` by avoiding bounds checks ([#10812]), `FixedSizeList` ([#10441]), +run-end encoded arrays ([#10325]), boolean and null buffers ([#10813]), and faster +`filter` on `FixedSizeBinary` ([#10993]). [@Rich-T-kid] also optimized +`NullBuffer::expand` for aligned and non-aligned counts ([#10976], [#10980]) +and sped up plain Parquet string column reads into dictionary arrays ([#10614]). + +[@neilconway] contributed a series of decimal speedups: scanning integer and +fractional digits in separate loops ([#10974]), counting digits to skip +precision checks ([#10998]), general decimal-from-string optimizations ([#10668]), +and formatting `i256` without `num-bigint` ([#11000]). + +[@alamb] reduced binary size by about 2% by monomorphizing `PrimitiveArray to +ArrayData` conversion and `Debug` formatting helpers ([#10893], [#10890]). +[@adriangb] sped up `DELTA_BYTE_ARRAY` shared prefix scanning a block at a +time ([#10549]) and removed redundant copies in Parquet mask-backed +intersection/union ([#10446]). + +[@YUZHEthefool] improved `rank` performance for +byte-view arrays via prefix key caching ([#10605]). [@giladkl] sped up +equality/inequality comparisons of byte-view arrays against short scalars +([#10689]). [@cakeni] replaced multiple `BufferBuilder` usages with `Vec` +across `concat_elements`, `take_run`, `substring`, and other kernels ([#10629]-[#10634]). +[@kowanietz] did the same for primitive unary operations ([#10783]) and +fixed-size binary take ([#10773]). [@haohuaijin] fixed in-place bitwise ops +corrupting bits outside the requested range ([#10444]) and cached Mask reads +crossing unloaded sparse pages ([#10735]). + +[@neilconway]: https://github.com/neilconway +[@haohuaijin]: https://github.com/haohuaijin +[@alamb]: https://github.com/alamb +[@adriangb]: https://github.com/adriangb +[@YUZHEthefool]: https://github.com/YUZHEthefool +[@giladkl]: https://github.com/giladkl +[@cakeni]: https://github.com/cakeni +[@kowanietz]: https://github.com/kowanietz +[#10812]: https://github.com/apache/arrow-rs/pull/10812 +[#10441]: https://github.com/apache/arrow-rs/pull/10441 +[#10813]: https://github.com/apache/arrow-rs/pull/10813 +[#10993]: https://github.com/apache/arrow-rs/pull/10993 +[#10976]: https://github.com/apache/arrow-rs/pull/10976 +[#10980]: https://github.com/apache/arrow-rs/pull/10980 +[#10614]: https://github.com/apache/arrow-rs/pull/10614 +[#10974]: https://github.com/apache/arrow-rs/pull/10974 +[#10998]: https://github.com/apache/arrow-rs/pull/10998 +[#10668]: https://github.com/apache/arrow-rs/pull/10668 +[#11000]: https://github.com/apache/arrow-rs/pull/11000 +[#10893]: https://github.com/apache/arrow-rs/pull/10893 +[#10890]: https://github.com/apache/arrow-rs/pull/10890 +[#10549]: https://github.com/apache/arrow-rs/pull/10549 +[#10446]: https://github.com/apache/arrow-rs/pull/10446 +[#10605]: https://github.com/apache/arrow-rs/pull/10605 +[#10689]: https://github.com/apache/arrow-rs/pull/10689 +[#10629]: https://github.com/apache/arrow-rs/pull/10629 +[#10634]: https://github.com/apache/arrow-rs/pull/10634 +[#10783]: https://github.com/apache/arrow-rs/pull/10783 +[#10773]: https://github.com/apache/arrow-rs/pull/10773 + +## Bug Fixes + +[@neilconway] fixed a cluster of decimal bugs including incorrect `Decimal256` +casting to signed integers ([#10857]), wrong min/max statistics for `BYTE_ARRAY` +decimals ([#10861]), mismatched scales in `make_comparator` ([#10864]), +formatting bugs ([#10869]), and a spurious assert when `scale == precision` +([#10875]). + +[@yongster] fixed `take` for null indices in dense union and run-end encoded +arrays ([#10909]). + +[@1fanwang] and [@tpoterba] fixed `take` and `interleave` on zero-width +`FixedSizeListArray` ([#10915], [#11026]). + +[@jaideeppyne] fixed struct `ArrayData` slicing double-counting the offset +([#10835], [#10934]). [@linhongyu510] fixed struct null validation not +accounting for parent offsets ([#10970]). + +[@PlenoraETL] made the IPC reader return an error for a `DictionaryBatch` +missing its data instead of silently producing wrong results ([#11020]). +[@bit2swaz] made `FFI_ArrowSchema::with_metadata` `unsafe` to close a +soundness gap ([#10764]). + +[@adriangb] fixed `DELTA_BYTE_ARRAY` deduplication for values larger than +the page size limit ([#10505]). + +[@yongster]: https://github.com/yongster +[@1fanwang]: https://github.com/1fanwang +[@tpoterba]: https://github.com/tpoterba +[@jaideeppyne]: https://github.com/jaideeppyne +[@linhongyu510]: https://github.com/linhongyu510 +[@PlenoraETL]: https://github.com/PlenoraETL +[#10444]: https://github.com/apache/arrow-rs/pull/10444 +[#10735]: https://github.com/apache/arrow-rs/pull/10735 + +[#10857]: https://github.com/apache/arrow-rs/pull/10857 +[#10861]: https://github.com/apache/arrow-rs/pull/10861 +[#10864]: https://github.com/apache/arrow-rs/pull/10864 +[#10869]: https://github.com/apache/arrow-rs/pull/10869 +[#10875]: https://github.com/apache/arrow-rs/pull/10875 +[#10909]: https://github.com/apache/arrow-rs/pull/10909 +[#10915]: https://github.com/apache/arrow-rs/pull/10915 +[#11026]: https://github.com/apache/arrow-rs/pull/11026 +[#10835]: https://github.com/apache/arrow-rs/pull/10835 +[#10934]: https://github.com/apache/arrow-rs/pull/10934 +[#10970]: https://github.com/apache/arrow-rs/pull/10970 +[#11020]: https://github.com/apache/arrow-rs/pull/11020 +[#10764]: https://github.com/apache/arrow-rs/pull/10764 +[#10505]: https://github.com/apache/arrow-rs/pull/10505 + +## Other Notable Changes + +- [@adamreeve] added round-trip support for `Dictionary(_, Utf8View/BinaryView)` + columns in Parquet ([#10831]) +- [@ranflarion] improved Parquet bloom filters: populate from the dictionary + while a column is dictionary encoded ([#10966]) and added a writer option to + skip bloom filters for all-dictionary column chunks ([#10963]) +- [@haohuaijin] added row-group-local `RowSelection` support to the push + decoder ([#10702]) +- [@1fanwang] added `Utf8View` and `BinaryView` support to `substring` ([#10672]) + +[@adamreeve]: https://github.com/adamreeve +[#10831]: https://github.com/apache/arrow-rs/pull/10831 +[#10966]: https://github.com/apache/arrow-rs/pull/10966 +[#10963]: https://github.com/apache/arrow-rs/pull/10963 +[#10702]: https://github.com/apache/arrow-rs/pull/10702 +[#10672]: https://github.com/apache/arrow-rs/pull/10672 + +## Thanks to Our Contributors + +```console +$ git shortlog -sn 59.2.0..60.0.0 + 38 Richard Baah + 22 Jeffrey Vo + 19 Andrew Lamb + 17 Emil Ernerfeldt + 16 Neil Conway + 12 Adrian Garcia Badaracco + 11 WaterWhisperer + 11 cakeni + 10 Ed Seidl + 8 Kosta Tarasov + 6 Huaijin + 6 ranflarion + 5 Aditya Mishra + 5 yongster + 4 Stefan Wang + 3 Abhishek + 3 Dhruv Vaishnav + 3 Thefool + 3 WissssleyL + 2 Andrea Bozzo + 2 Bharadwaj Pendyala + 2 Emily Matheys + 2 Ethan Tang + 2 Giladi + 2 Jaideep Pyne + 2 Oleks V + 2 Peter L + 2 Peter Lee + 2 Xinyao Zhang + 2 Yiming Qiao + 2 hylin + 2 pawan + 1 AarryaSaraf + 1 Adam Reeve + 1 Adam Reichold + 1 Alexander Rafferty + 1 Ali Asghar + 1 Ben Kowanietz + 1 Burak Yavuz + 1 Chao Sun + 1 Congxian Qiu + 1 Connor Tsui + 1 Danila Gornushko + 1 Fredrik Fornwall + 1 Han You + 1 Haresh Khanna + 1 Harshal Joshi + 1 Huang Qiwei + 1 Johan Vaz + 1 Jonas Dedden + 1 Jordan Epstein + 1 Langning Zhang + 1 Liam Bao + 1 Marcelo Tesla + 1 Marco Bonamente + 1 Michal Piatkowski + 1 MsfPablo + 1 Narendran K T + 1 Nuno Faria + 1 Phoenix + 1 Qi Zhu + 1 Raghvendra Singh + 1 Raz Luvaton + 1 Seowoo Jang + 1 Thor + 1 Tim Poterba + 1 Yin Li + 1 anchor + 1 kowanietz + 1 linfeng + 1 subotac + 1 wterrr + 1 yanglongwei + 1 张跃哲 +``` + +Thanks to everyone who contributed bug reports, reviews, and pull requests for +this release! From b1b0be4df066f2dff8cc1be54cf23d4f59867cee Mon Sep 17 00:00:00 2001 From: RIchard Baah Date: Sun, 20 Sep 2026 14:18:15 -0400 Subject: [PATCH 2/7] trigger ci bot From e04f6897f79207b386a5c223bea7bd22b648e545 Mon Sep 17 00:00:00 2001 From: RIchard Baah Date: Fri, 25 Sep 2026 09:57:15 -0400 Subject: [PATCH 3/7] revised draft --- _posts/2026-09-10-arrow-rs-60.0.0.md | 88 ++++++++++++++++++---------- 1 file changed, 56 insertions(+), 32 deletions(-) diff --git a/_posts/2026-09-10-arrow-rs-60.0.0.md b/_posts/2026-09-10-arrow-rs-60.0.0.md index cc1d3393fa2..9d9fbb8cc84 100644 --- a/_posts/2026-09-10-arrow-rs-60.0.0.md +++ b/_posts/2026-09-10-arrow-rs-60.0.0.md @@ -2,7 +2,7 @@ layout: post title: "Apache Arrow Rust 60.0.0 Release" date: "2026-09-10 00:00:00" -author: pmc +author: Richard Baah & pmc categories: [release] ---