Apache Arrow 25.0.0 Release


Published 10 Jul 2026
By The Apache Arrow PMC (pmc)

The Apache Arrow team is pleased to announce the 25.0.0 release. This release covers over 3 months of development work and includes 222 resolved issues on 268 distinct commits from 66 distinct contributors. See the Install Page to learn how to get the libraries for your platform.

The release notes below are not exhaustive and only expose selected highlights of the release. Many other bugfixes and improvements have been made: we refer you to the complete changelog.

Format Notes

We clarified that variadic buffers exported over the C Data Interface could be null (GH-50255). Consumers of the C Data Interface must be ready to handle them.

Arrow Flight RPC Notes

The Flight SQL protocol was amended to let servers explicitly inform clients whether a prepared statement contains a result set or not (GH-49497).

Progress was made on the ODBC driver for Flight SQL, but we are not yet distributing packages for end users at this time.

C++ Notes

CSV

A new option default_column_type disables type inference for all columns, including those not listed in the column_types mapping (GH-47663).

Compute

A new hypot compute function calculates Euclidean norms without the avoidable overflow of a naive implementation (GH-50198).

Comparison functions have been upgraded to support StringView and BinaryView inputs (GH-49964).

Sort functions and their siblings (rank, select-k) now allow configuring per-key null placement, so as to emulate SQL constructs such as ORDER BY i NULLS FIRST, j NULLS LAST (GH-46926).

Rank functions now correctly distinguish NaNs from null values in floating-point arrays (GH-45193).

The count function now accounts for logical nulls in run-end-encoded arrays (GH-49908).

File Systems

The FileSystemFactory interface, used for dynamically-initialized filesystem implementations, now allows passing a set of key-value pairs in addition to a URI. This allows to pass sensitive initialization data, such as credentials, without leaking them in the URI (GH-50044).

IPC

We made the IPC reader stricter in a number of places, which could reject invalid IPC streams or files that would previously appear to read successfully (#49897, #50235).

Parquet

When writing a Parquet file with bloom filters enabled, bloom filters are automatically "folded" so as to match the configured fpp (the max false positive rate) according to the actual cardinality of the data used for the filter. This can provide size savings, especially with the conservative default cardinality estimate (GH-50008).

Bloom filters can be faster on some platforms thanks to vectorization (GH-50030).

It is now possible to read and write ListView data from/to Parquet (GH-50160).

Miscellaneous C++ changes

On ARM64 platforms, Arrow C++ now supports dynamically dispatching to SVE-optimized routines on compatible CPUs (GH-49756). Previously, dynamic dispatch was only supported on x86 platforms.

Runtime CPU detection now uses xsimd instead of home-grown detection functions (GH-49940).

The ChunkedArray class has a new method ComputeLogicalNullCount, mirroring the existing methods of the same name on Array and ArrayData classes (GH-50261).

The Table class has a new method ToTensor complementing the existing method of the same on the RecordBatch class (GH-41870). Both methods convert from the columnar format to a contiguous two-dimensional array.

Linux Packaging Notes

The release dropped support for Debian bookworm GH-50200 due to the distribution reaching End Of Life.

We added Reproducible Builds support for the Debian Linux Packages GH-49988.

Python Notes

Compatibility notes

  • Feather reader and writer is deprecated in favour of the Arrow IPC API GH-49232.

New features

  • hypot compute kernel is added to Arrow compute module and accessible in PyArrow GH-50197.
  • pa.OSFile now accepts open file descriptor (int parameter) besides the str path GH-49751.
  • Conversion from a list of individual numpy.ndarrays to a FixedShapeTensor is added GH-49644.
  • create_encryption_properties and create_decryption_properties methods are added to the parquet API using Arrow C++ FileEncryptionPropertiesBuilder and FileDecryptionPropertiesBuilder GH-47435.
  • Conversion of Table to Tensor has been implemented in Arrow C++ and can also be used in Python bindings GH-40062.
  • default_column_type option is added to csv.ConvertOptions which sets a default column type for all columns and can be combined with column_types GH-22232.

Other improvements

  • Extension types are supported in pyarrow.parquet.read_schema GH-48254
  • Default values for Parquet pre_buffer are made consistent GH-49923.

Relevant bug fixes

  • count compute kernel bug for sliced union arrays is fixed GH-50113.
  • hash_any/hash_all compute kernel bug is fixed for sliced boolean arrays GH-50043.
  • Table.from_pylist on ExtensionType column with list_ storage crash when values exceed int32 offsets is fixed GH-50012.
  • Bug causing Use-After-Free on PyList_SetItem in SparseCSFTensorToNdarray is fixed GH-49917.
  • Timezone drop when converting tz-aware pandas Categorical is fixed GH-49875.
  • _export_to_c segmentation fault for binary_view array is fixed by fixing cast kernels so all-inline view arrays do not keep a null variadic buffer slot GH-49740.
  • replace_with_mask crash when null type inputs are used is fixed GH-47447.
  • Segmentation fault when using sort_indices for temporal types is fixed GH-47252
  • Index level is bumped if pandas dataframe already contains __index_level_i__ column GH-46179.
  • Special handling for single-file paths passed to ParquetDataset constructor is restored, fixing merge error in pyarrow.parquet.read_table GH-43574.

Other

  • Annotations are withhold from Python wheels until they are complete GH-49831.
  • PyBuffer and NumPyBuffer destructors are protected against interpreter finalization GH-49942.
  • Documentation updates in GH-50227 and GH-20403.
  • Tests for regular replace_with_mask kernel usage are added GH-50072.
  • Hypothesis timezones test strategy now includes fixed offsets GH-31318.

R Notes

Breaking changes

  • Arrow uint64 types are now always converted to R double (numeric) vectors, regardless of the values. Previously, small uint64 values were converted to R integer, which could cause inconsistent types within list columns when different list elements had different value ranges (#50339).

New features

  • Field objects now support field-level metadata via $metadata and $with_metadata() (@max-romagnoli, #33390).
  • Parquet files now support list-columns of ordered factors (ordered dictionaries) (#49689).

Minor improvements and fixes

  • Array$create() now gives a clearer error message when given a POSIXct object with an invalid timezone (#40886).
  • Dictionary arrays with large_string value types now convert correctly to R factors (#39603).
  • open_dataset() now gives a clearer error message when providing a mix of readr and Arrow options (@Rich-T-kid, #33420).
  • read_parquet() no longer triggers a C++ alignment warning from the Acero source node (#46178).
  • Schema metadata partial matching on $metadata$r no longer errors when other metadata keys start with “r” (#50163).
  • to_arrow() now preserves group_by() when converting from a dbplyr lazy table (#40640).
  • write_parquet() now correctly validates that max_rows_per_group is a positive number (#40742).
  • Stale S3 connections no longer cause a segfault during garbage collection (#50009).
  • Spurious “Invalid metadata$r” warnings are no longer emitted when reading files with custom schema metadata (#48712).

Installation

  • The R package now builds under r-universe/r-wasm (#49981).

Ruby and C GLib Notes

  • Added fallback data type for unknown extension type: GH-49969

Ruby

  • Added RecordBatch#merge: GH-50175
  • Ensuring zero-initializing all rb_memory_view_t members for rb_memory_view_get(): GH-50234

C GLib

No C GLib only notes.

Java, JavaScript, Go, .NET, Swift and Rust Notes

The Java, JavaScript, Go, .NET, Swift and Rust projects have moved to separate repositories outside the main Arrow monorepo.