Apache Arrow 25.0.0 (10 July 2026)
This is a major release covering more than 2 months of development.
Download
- Source Artifacts
- Binary Artifacts
- Git tag
Contributors
This release includes 268 commits from 66 distinct contributors.
$ git shortlog -sn apache-arrow-24.0.0..apache-arrow-25.0.0
36 Raúl Cumplido
29 Nic Crane
28 Antoine Pitrou
14 tadeja
12 Bryce Mecum
12 Sutou Kouhei
10 Aaditya Srinivasan
9 dependabot[bot]
9 metsw24-max
8 Antoine Prouvost
6 Rok Mihevc
5 Alenka Frim
5 AnkitAhlawat
5 Zehua Zou
5 fenfeng9
5 justing-bq
4 Alina (Xi) Li
4 jmestwa-coder
3 Arnav Balyan
3 Logan Riggs
2 Adrián Feito Blázquez
2 Alexandros Anastasiou
2 Andrew Lamb
2 Arash Andishgar
2 Hyukjin Kwon
2 Joris Van den Bossche
2 Kevin Gurney
2 Michael Chirico
2 Shally Katariya
2 egolearner
1 Abel Thomas
1 Abhishek Bansal
1 Adam Reeve
1 Alexander Taepper
1 Alfredo Tupone
1 Arpit Jain
1 Chungmin Lee
1 Curt Hagenlocher
1 Dan Mattheiss
1 Dewey Dunnington
1 Emil Sadek
1 Fangchen Li
1 Fedor Osetrov
1 Gang Wu
1 Haziq Hakimi Mazlisham
1 Hrishikesh Shinde
1 Jonathan Keane
1 Kristofer Gaudel
1 Kuinox
1 Kumar Vanshaj
1 Kyle Edwards
1 Max Romagnoli
1 Pedro Matias
1 RIchard Baah
1 Rahul Goel
1 Roman Kvasnytskyi
1 Samuel Aboderin
1 Shrivas Shankar
1 Sreesh Maheshwar
1 Tom "spot" Callaway
1 Vlad Borovtsov
1 Wang Rui
1 bkurtz
1 nfrmtk
1 piyushka-ally
1 Ádám Lippai
Patch Committers
The following Apache committers merged contributed patches to the repository.
$ git shortlog -sn --group=trailer:signed-off-by apache-arrow-24.0.0..apache-arrow-25.0.0
75 Sutou Kouhei
58 Antoine Pitrou
43 Raúl Cumplido
25 Nic Crane
13 Bryce Mecum
13 Rok Mihevc
11 AlenkaF
5 Gang Wu
4 David Li
3 Jonathan Keane
3 Kevin Gurney
2 Rossi Sun
1 Adam Reeve
Changelog
Bug Fixes
- GH-17081 - [C++] arrow::stl::TupleRangeFromTable docs incorrect (#50095)
- GH-20403 - [Doc] pyarrow.Array.diff Examples is wrongly rendered (#50096)
- GH-32994 - [Dev][Archery] Fix multi-arch Docker configuration (#50125)
- GH-36503 - [C++] Make DictionaryArray::dictionary() thread-safe (#48905)
- GH-38558 - [C++] Add support for null sort option per sort key (#46926)
- GH-39603 - [R] Error: Cannot convert Dictionary Array of type dictionary<values=large_string, indices=uint32, ordered=0> to R (#49710)
- GH-39754 - [R] Docs are not clear on expected behaviour of date parsing functions (e.g. dmy()) on Windows vs. Linux/MacOS (#49708)
- GH-39784 - [C++][Gandiva] Fix decimal in_expr crash with cached object code (#49951)
- GH-40410 - [C++] Skip only s3fs-tests and s3fs-module-tests that require MinIO if MinIO is not available (#50215)
- GH-40640 - [R] to_arrow() loses group_by() (#49713)
- GH-40742 - [R] fix max_rows_per_group must be a positive number (#49709)
- GH-40886 - [R] Cryptic error when creating Arrow array from POSIXct with invalid time zones (#49714)
- GH-43574 - [Python][Parquet] do not add partition columns from file path when reading single file (#49853)
- GH-45193 - [C++][Compute] Treat NaNs and nulls as distinct values in rank tie-breaking (#49304)
- GH-46179 - [Python] Bump index level once if pandas df already contains index_level_i column (#46884)
- GH-47100 - [Docs] Correct the Statistics schema specification (#50092)
- GH-47252 - [C++][Compute] Fix sort_indices for temporal types in arrow::Table (#50270)
- GH-47447 - [C++] Fix replace_with_mask for null type arrays (#49950)
-
GH-47481 - [C++][Acero] record_batch_reader_source specify Ordering::Implicit to support
select * limit k(#47482) - GH-47642 - [C++] Catch exceptions from initial_task in AsyncTaskScheduler (#49860)
- GH-47657 - [C++][Parquet] Check for integer overflow when coercing timestamps (#49615)
- GH-48094 - [C++] Restrict SecureString capacity tail check to Linux (#49906)
- GH-48254 - [Python][Parquet] Support extension types in read_schema (#48255)
- GH-48712 - [R] "Invalid metadata$r" warning (#49608)
- GH-48801 - [C++] Set CMAKE_POLICY_VERSION_MINIMUM for RapidJSON (#49993)
- GH-48926 - [C++] Upgrade Abseil/Protobuf/GRPC/Google-Cloud-CPP bundled versions (#48964)
- GH-49272 - [C++][CI] Fix intermittent segfault in arrow-json-test with MinGW (#49462)
- GH-49327 - [Python][Packaging] Use ARROW_SIMD_LEVEL=NEON for macOS arm64 (#50181)
- GH-49433 - [C++] Buffer ARROW_LOG output to prevent thread interleaving (#49663)
- GH-49465 - [CI][C++] Fix Abseil hang in arrow-flight-test on ODBC Windows (#50085)
- GH-49522 - [CI] Update chrome_version for emscripten job to latest stable (v148) (#49523)
- GH-49614 - [C++] Report an error instead of silent truncation in base64_decode on invalid input (#49660)
- GH-49689 - [R][C++] Parquets do not support list-columns of ordered factors (ordered dictionaries) (#49937)
- GH-49719 - [C++] Rename vendored date header guards (#49778)
- GH-49740 - [C++][Python] Fix casts to view types leaving null variadic buffers (#50166)
- GH-49743 - [Release] Split the vote thread preparation into its own shell script (#49770)
- GH-49745 - [Docs][Python] Fix doctests failure in substrait.rst (#49754)
- GH-49752 - [C++][Gandiva] Fix potential buffer overrun in Gandiva SSL function (#49780)
- GH-49753 - [C++][Gandiva] Fix overflow in string functions (#49813)
- GH-49757 - [Release][CI] export SSL_CERT_FILE to bypass incompatibility with OpenSSL on RHEL-8 (#49769)
- GH-49759 - [C++][Integration] Harden BinaryView JSON parsing with runtime validation (#49758)
- GH-49764 - [C++][Python] Avoid building bundled Abseil outside resolve_dependency (#49936)
- GH-49767 - [CI][C++] Disable mold on Ubuntu 24.04 to work around mold#1247 (#50033)
- GH-49803 - [C++][CI] Avoid aborting when fuzz-mutated IPC file has less batches (#49804)
- GH-49823 - [CI] Add missing contents: read permission to Package Linux workflow (#49825)
- GH-49831 - [Python] Withhold annotations from Python wheel until they are complete (#50168)
- GH-49834 - [C++] Avoid building re2 unit tests (#50152)
- GH-49837 - [C++][Parquet] Avoid unbounded temporary std::vector in DELTA_(LENGTH_)BYTE_ARRAY decoder (#49838)
- GH-49846 - [CI][Python] fix test-conda-python-3.11-hypothesis (#49847)
- GH-49861 - [R] Missing R libarrow binary for linux-arm64 (#49893)
- GH-49866 - [R][Release] Restore using tzdb on Windows for tzdata (#49867)
- GH-49872 - [C++] Remove deprecated std::is_trivial (#49871)
- GH-49875 - [Python] Fix timezone dropped when converting tz-aware Categorical to Arrow array (#49878)
- GH-49888 - [C++][Compute] Fix count for run-end encoded arrays with nulls (#49908)
- GH-49896 - [C++] Reject short buffer reads in IPC reader (#49897)
- GH-49905 - [Archery] Fix archery benchmark diff with pandas 3 (#49912)
-
GH-49917 - [Python] Remove Py_XDECREF to avoid Use-After-Free on
PyList_SetIteminSparseCSFTensorToNdarray(#49916) - GH-49923 - [Parquet][Python] Inconsistent default values for Parquet pre_buffer (#49924)
- GH-49927 - [Python][Parquet] Expose bloom_filter_offset and bloom_filter_length to Python in column chunk metadata (#49926)
- GH-49930 - [CI][C++] Pin MinGW MSYS2 packages to unblock CI (#49931)
- GH-49933 - [Python] Fix test_table_column_subset_metadata to set freq on correct object (#49944)
- GH-49942 - [Python] Protect PyBuffer and NumPyBuffer destructors against interpreter finalization (#49943)
- GH-49948 - [CI][C++] Revert PR 49931 (Pin MinGW MSYS2 packages) but keep bumped minIO version (#49945)
- GH-49956 - [GLib] Add fallback data type for unknown extension data type (#49969)
- GH-49966 - [C++] Detect different endianness between IPC file and stream in IPC file fuzzer (#49968)
-
GH-49974 - [C++][CMake] Add missing result variable initialization for
validate_apple_libtool()(#49975) - GH-49991 - [C++][FlightRPC] Fix unity build ordering issue (#49990)
-
GH-49994 - [CI] Remove
brew uninstall pkg-configworkarounds (#49997) - GH-49998 - [CI][Python] Pin to an older release of miniforge to fix mamba hang (#49999)
- GH-50000 - [C++][FlightRPC] Use grpcpp/grpcpp.h not grpcpp/version_info.h for old gRPC (#50001)
- GH-50009 - [R] FinalizeS3 segfaults for stale connection (#50081)
- GH-50010 - [C++][Parquet] Fix undefined behavior in TypedColumnWriterImpl::UpdateLevelHistogram (#50011)
- GH-50012 - [Python] Fix list_ storage crashes when values exceed int32 offsets (#50016)
- GH-50017 - [CI][Release] Remove deprecated -f (force) flag from conda create on Windows verification job (#50018)
- GH-50037 - [Python] test_table_uses_memory_pool flaky on macOS 14 job (#50045)
- GH-50041 - [CI][Python] Make test_string_to_tzinfo_pytz_fallback more robust for platforms supporting lower case tz names (#50042)
- GH-50043 - [C++][Python] Fix hash_any/hash_all on sliced boolean arrays (#50094)
- GH-50051 - [C++][Parquet] Avoid size overflow in WKBBuffer::ReadCoords (#50036)
- GH-50065 - [Packaging][CI][C++] Drop unused libboost-system-dev (#50066)
- GH-50090 - [Packaging] Avoid building CUDA for Debian forky due to missing nvidia-cuda-toolkit (#50279)
- GH-50098 - [C++][Parquet] Enable filesystem support when building Parquet utilities (#50099)
- GH-50103 - [C++] Missing iosfwd include in cpp/src/arrow/util/string_util.h (#50101)
- GH-50105 - [C++][Python] Fix sliced sparse union null checks (#50108)
- GH-50109 - [C++][Gandiva] Fix incorrect error messages (#50110)
-
GH-50113 - [C++][Python] Fix
countfor sliced union arrays (#50114) -
GH-50129 - [C++][Parquet] Enable
ARROW_JSONautomatically withPARQUET_REQUIRE_ENCRYPTION(#50130) - GH-50133 - [CI] Make extra labels entirely manual on PRs (#50256)
- GH-50149 - [C++][Parquet] Avoid process abort when encoding fuzzer encounters OOM (#50150)
- GH-50156 - [C++][Parquet] Ignore min/max for unknown column order (#50157)
- GH-50163 - [R] Bug: Partial matching on $metadata$r causes errors with schema metadata keys starting with "r" (#50178)
- GH-50171 - [CI][R] Build libarrow is failing for Linux arm64 (#50179)
- GH-50173 - [C++][Gandiva] Install tzdata-legacy to fix failing TestTime.TestCastTimestampWithTZ from gandiva/precompiled/time_test.cc (#50211)
- GH-50174 - [CI][Python] Fix debug Python job (#50207)
- GH-50176 - [Python] Explicitly pass exc_type=ImportError to importorskip pyarrow.* (#50177)
- GH-50204 - [C++] Fix S3FileSystem::MakeUri dropping the bucket on Windows MinGW (#50205)
- GH-50210 - [C++][Gandiva] Replace precompiled std::string to fix _Unwind_Resume JIT failure on JNI builds (#50214)
- GH-50212 - [C++][Parquet] Add PrintTo to fix failure in parquet-internals-test on test-conda-cpp-valgrind (#50213)
- GH-50218 - [C++][FlightRPC] Add missing sudo to fix ODBC Linux job (#50307)
- GH-50227 - [Docs][Python][Parquet] Update parquet default version text in parquet.rst (#50228)
- GH-50240 - [C++] Make IPC message decoding stricter (#50235)
- GH-50242 - [CI][Release] Fix flaky dylib load failure in macOS verify-rc build (#50243)
- GH-50253 - [CI] Manually install aws-sdk-cpp with brew in order to avoid lock (#50254)
- GH-50257 - [CI][Docs] Fix doxygen failing due to double backticks (#50259)
- GH-50277 - [CI][Python] Avoid using generators for test parametrization on newer Pytest (#50278)
- GH-50291 - [Python][Packaging] Stop using nightly build dependencies for building free-threaded wheels (#50315)
- GH-50293 - [CI] Run check-labels for all triggers to avoid cancelling further steps and add tag to set_enabled (#50340)
- GH-50294 - [C++][R] Missing typename in ulp_distance.cc breaks clang-15 builds (#50296)
-
GH-50295 - [C++][R] #include
in vector_select_k.cc breaks macOS CRAN and wasm builds (#50297) - GH-50300 - [C++][CI] Update include to generated/Message_generated.h so Meson is able to find (#50301)
- GH-50318 - [R][CI] Install missing libpng-dev for test-r-linux-as-cran (#50328)
- GH-50330 - [C++][R][Parquet] Add missing typename in RleBitPackedDecoderGetRunDecode (#50332)
- GH-50336 - [Release][Archery] Fix archery GitHub integration for release scripts (#50337)
New Features and Improvements
- GH-14796 - [Dev][COMPONENT] " to issue title automatically (#49892)
- GH-19667 - [C++][Gandiva] Use arrow::Resultstd::string for RegexUtil::SqlLikePatternToPcre (#49879)
- GH-22232 - [C++][Python] Introduce optional default_column_type parameter (#47663)
- GH-31318 - [Python] Add fixed-offset timezones to Hypothesis test strategy (#49844)
- GH-32381 - [C++] Improve error handling for hash table merges (#49512)
- GH-33241 - [Archery] Replace github3 with pygithub (#48886)
- GH-33390 - [R] Field-level metadata (#49631)
- GH-33420 - [R] Improve error message when providing a mix of readr and Arrow options (#50048)
- GH-38849 - [C++][Parquet] Add support for list view and large list view (#50160)
- GH-40062 - [C++][Python] Conversion of Table to Arrow Tensor (#41870)
- GH-45187 - [Ruby] Ensure initializing all rb_memory_view_t members (#50234)
- GH-45331 - [C++] Use xsimd for CPU feature detection (#49940)
- GH-45819 - [C++] Add OptionalBitmapAnd utility (#49848)
- GH-46178 - [R] source_node alignment warning (#50120)
- GH-46369 - [C++] Add key-value pairs to the FileSystemFactory interface and to S3Options (#50044)
- GH-46914 - [C++][FlightSQL] Remove boost/algorithm/string.h dependency (#50241)
- GH-46956 - [Docs][CI] Enable version switcher in local and PR preview build (#46957)
- GH-47435 - [Python][Parquet] Add direct key encryption/decryption API (#49667)
- GH-47769 - [C++] SVE dynamic dispatch (#49756)
-
GH-47876 - [C++][FlightRPC] ODBC: macOS
.PKGinstaller for Intel and ARM (#49766) - GH-48028 - [Python][Packaging] Update quay.io base manylinux and musllinux images for Python wheels and remove cp313t (#50082)
- GH-48068 - [C++][FlightRPC] Linux ODBC: Configure Dremio instance to allow remote testing (#49695)
- GH-48294 - [Ruby] Add RecordBatch#merge (#50175)
- GH-48408 - [C++] Enable ULP-based float comparison (#49290)
- GH-49232 - [Python] deprecate feather python (#49590)
- GH-49275 - [Doc] Update docs to specify disclosure of AI on mailing list messages (#49277)
- GH-49497 - [FlightRPC] Add is_update field to ActionCreatePreparedStatementResult (#49498)
- GH-49534 - [R] Implement dplyr recode_values(), replace_values(), and replace_when() (#49536)
- GH-49537 - [C++][FlightRPC] Windows CI to Support ODBC DLL & MSI Signing (#49603)
- GH-49552 - [C++][FlightRPC][ODBC] Enable ODBC test build on Linux (#49668)
- GH-49644 - [Python] Support converting list of multi-dimensional arrays to FixedShapeTensor (#50203)
- GH-49651 - [C++][FlightRPC] Fix ODBC Linux test segmentation fault (#49688)
- GH-49675 - [Docs] Make "stale issues" more visible to potential contributors and document stale issue policy (#49703)
-
GH-49684 - [MATLAB] Introduce deprecation warnings for "legacy" Feather V1 functions
featherreadandfeatherwrite(#49705) - GH-49686 - [C++][FlightRPC][ODBC][Release] Create signing script for Windows FlightSQL ODBC build (#49788)
- GH-49700 - [R][CI][Dev] Use air precommit hook (#49701)
- GH-49720 - [C++] Optimize base64_decode validation using lookup table (#49748)
- GH-49723 - [C++][FlightRPC][ODBC] Update ODBC Documentation (#49851)
- GH-49725 - [CI] Use environment variables instead of template expressions in workflow run blocks (#49733)
- GH-49728 - [CI] Set persist-credentials: false in checkout actions (#49734)
- GH-49729 - [CI] Scope workflow permissions and secret inheritance (#49773)
- GH-49737 - [R][CI] Disable Rhub GCC 12 and GCC 13 with LTO jobs - images no longer match CRAN (#49739)
- GH-49738 - [R][CI] Re-enable GCC+LTO job once rhub has a GCC 15 image (#49795)
- GH-49751 - [Python] Add raw fd support to pa.OSFile (#49750)
- GH-49772 - [C++] Bump bundled mimalloc version (#49801)
- GH-49776 - [CI][C++] Install libc6-dbg in apt-based Linux C++ images (#50034)
- GH-49783 - [C++][FlightRPC][ODBC] Reuse connections across test suite (#49784)
- GH-49785 - [C++][FlightRPC][ODBC] Get ODBC tests passing on Linux (#49786)
-
GH-49789 - [C++] Use
CMAKE_INSTALL_DOCDIRinstead of staticshare/doc/${PROJECT_NAME}(#49790) - GH-49793 - [R] Update NEWS.md for 24.0.0 (#49794)
- GH-49805 - [C++][Parquet] Avoid unbounded temporary allocation in DeltaBitPackDecoder::DecodeArrow (#49806)
- GH-49807 - [CI] Remove obsolete test-ubuntu-22.04-cpp-20 job (#49827)
- GH-49835 - [C++] A constexpr dynamic dispatch with static dispatch when possible (#49840)
-
GH-49890 - [Dev] Group files under component comment headers in
.github/CODEOWNERS(#49891) - GH-49898 - [C++][CI] Use mold in more builds (#49899)
- GH-49901 - [R] Bump minimum supported R version to 4.2 now that 4.6 is out (#49929)
- GH-49913 - [Archery] Add preserve-dir and improve directory layout (#50056)
- GH-49918 - [C++][Parquet] Catch std::vector allocation errors in encoding fuzzer (#49919)
- GH-49921 - [C++] Bump xsimd to 14.2.0 (#49922)
- GH-49938 - [C++] Bump bundled c-ares to 1.34.6 (#49939)
- GH-49946 - [Format] Better document equivalence between IPC file and streams (#49947)
- GH-49952 - [C++][Gandiva] Use timegm in date_time_test utilities (#49953)
- GH-49959 - [C++][Parquet] Avoid unbounded temp alloc in BYTE_STREAM_SPLIT decoder (#49960)
- GH-49967 - [Python][CI] Raise oldest NumPy wheel-test requirement to a patched release (#49965)
- GH-49981 - [R][Packaging] Support building R package under r-universe/r-wasm (#49982)
- GH-49988 - [CI][Packaging] Enable reproducible builds on host for APT based Linux packages (#48148)
- GH-50005 - [C++] Use FetchContent for RapidJSON (#50006)
- GH-50007 - [C++][Parquet] Add bloom filter folding to automatically size SBBF filters (#50008)
- GH-50014 - [R] Replace imported symbol from bit64 (#50015)
- GH-50022 - [Dev] Enable auto GitHub Copilot review (#50023)
- GH-50026 - [C++][Parquet] SIMD-accelerate SBBF probe via branchless autovec (#50030)
- GH-50046 - [CI][C++] Improve caching with apache/infrastructure-actions/stash and more general cache keys (#50047)
- GH-50052 - [CI][C++] Bump vcpkg to newest version (#50053)
- GH-50054 - [C++][IPC] Validate indices buffer size in ReadSparseCOOIndex (#50055)
- GH-50057 - [C++] Avoid signed overflow in Decimal FromString exponent (#50058)
- GH-50063 - [C++] Validate buffer size for row-major tensors (#50064)
- GH-50072 - [Python] Add tests for replace_with_mask kernel (#50102)
- GH-50075 - [C++][Gandiva] fix buffer overrun in to_hex int32/int64 (#50076)
- GH-50077 - [C++][IPC] Avoid int64 overflow in ReadSparseCSXIndex (#50038)
- GH-50078 - [C++][ORC] Avoid signed overflow when converting timestamps (#50035)
- GH-50083 - [C++] Access mimalloc through dynamically-resolved symbols (#41128)
- GH-50111 - [C++][Gandiva] Improve function error messages (#50112)
- GH-50115 - [Dev] Adjust GitHub Copilot configuration for preliminary reviews (#50117)
- GH-50139 - [Dev][Gandiva] Add Gandiva code owners (#50144)
- GH-50161 - [C++][IPC] Validate CSF sparse index buffer counts (#50070)
- GH-50162 - [C++][Parquet] Avoid int32 overflow in BitPackedRunDecoder::GetBatch offset (#50089)
- GH-50170 - [CI][Packaging][Linux] Fix cache (#50185)
- GH-50172 - [Doc][Format] Clarify that variadic buffers can also be null (#50255)
- GH-50182 - [C++][Parquet] Fix truncated min/max statistics for all-infinity floating-point columns (#50183)
- GH-50184 - [C++][Parquet] Avoid reading past truncated statistics values in FormatStatValue (#50025)
- GH-50189 - [C++][CI] Remove Ceph install step (#50190)
- GH-50191 - [CI][Python] Switch caching to apache/infrastructure-actions/stash (#50192)
- GH-50197 - [C++][Python] Add "hypot" compute kernel (#50198)
- GH-50200 - [Packaging][Debian] Drop support for bookworm (#50201)
-
GH-50208 - [CI][C++][Python] Disable ccache
hash_dir(#50209) - GH-50216 - [C++][Parquet] Add RleBitPackedToBitmapDecoder (#50217)
- GH-50219 - [R] Fix duckdb test for dbplyr 2.6.0 (#50220)
- GH-50225 - [Ruby] Move merge implementation to ColumnContainable (#50226)
- GH-50231 - [C++] Handle unset Substrait extension mapping type (#50263)
- GH-50236 - Remove obsolete OpenSUSE 15.5 workarounds (#50258)
-
GH-50237 - [C++] Migrate arrow/ipc/metadata_internal.h to Result
(#50245) - GH-50260 - [C++] Add ComputeLogicalNullCount to ChunkedArray (#50261)
- GH-50265 - [C++][Parquet] Update parquet.thrift to sync with 2.13.0 (#50266)
- GH-50267 - [C++][Parquet] Upgrade thrift compiler from 0.21.0 to 0.23.0 (#50268)
- GH-50275 - [C++][CSV] avoid int32 overflow in block parser value counts (#50074)
- GH-50283 - [CI][Ruby] Switch caching to apache/infrastructure-actions/stash (#50284)
- GH-50292 - [C++][Parquet] Avoid int64 overflow in CheckReadRangeOrThrow (#50060)
- GH-50304 - [C++][IPC] Reject negative sparse tensor shape and non-zero length (#50305)