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
-
hypotcompute kernel is added to Arrow compute module and accessible in PyArrow GH-50197. -
pa.OSFilenow accepts open file descriptor (intparameter) besides thestrpath GH-49751. - Conversion from a list of individual
numpy.ndarraysto aFixedShapeTensoris added GH-49644. -
create_encryption_propertiesandcreate_decryption_propertiesmethods are added to the parquet API using Arrow C++FileEncryptionPropertiesBuilderandFileDecryptionPropertiesBuilderGH-47435. - Conversion of Table to Tensor has been implemented in Arrow C++ and can also be used in Python bindings GH-40062.
-
default_column_typeoption is added tocsv.ConvertOptionswhich sets a default column type for all columns and can be combined withcolumn_typesGH-22232.
Other improvements
- Extension types are supported in
pyarrow.parquet.read_schemaGH-48254 - Default values for Parquet
pre_bufferare made consistent GH-49923.
Relevant bug fixes
-
countcompute kernel bug for sliced union arrays is fixed GH-50113. -
hash_any/hash_allcompute kernel bug is fixed for sliced boolean arrays GH-50043. -
Table.from_pylistonExtensionTypecolumn withlist_storage crash when values exceed int32 offsets is fixed GH-50012. - Bug causing Use-After-Free on
PyList_SetIteminSparseCSFTensorToNdarrayis fixed GH-49917. - Timezone drop when converting tz-aware pandas Categorical is fixed GH-49875.
-
_export_to_csegmentation fault forbinary_viewarray is fixed by fixing cast kernels so all-inline view arrays do not keep a null variadic buffer slot GH-49740. -
replace_with_maskcrash when null type inputs are used is fixed GH-47447. - Segmentation fault when using
sort_indicesfor 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
ParquetDatasetconstructor is restored, fixing merge error inpyarrow.parquet.read_tableGH-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_maskkernel 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_tmembers forrb_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.
- For notes on the latest release of the Java implementation, see the latest Arrow Java changelog.
- For notes on the latest release of the JavaScript implementation, see the latest Arrow JavaScript changelog.
- For notes on the latest release of the Rust implementation see the latest Arrow Rust changelog.
- For notes on the latest release of the Go implementation, see the latest Arrow Go changelog.
- For notes on the latest release of the .NET implementation, see the latest Arrow .NET changelog.
- For notes on the latest release of the Swift implementation, see the latest Arrow Swift changelog.