MCPcopy Index your code
hub / github.com/apache/arrow-rs

github.com/apache/arrow-rs @59.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 59.0.0 ↗ · + Follow
16,149 symbols 76,529 edges 644 files 4,553 documented · 28%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Native Rust implementation of Apache Arrow and Apache Parquet

Welcome to the Rust implementation of Apache Arrow, a popular in-memory columnar format and Apache Parquet, a popular columnar file format.

Community

We welcome participation from everyone and encourage you to join us, ask questions, help others, and get involved. All participation in the Apache Arrow project is governed by the Apache Software Foundation's code of conduct.

We use GitHub issues and pull requests for all technical discussions, reviews, new features, bug fixes and release coordination. This ensures that all communication is public and archived for future reference.

The dev@arrow.apache.org mailing list is the communication channel for the overall Apache Arrow community. Instructions for signing up and links to the archives can be found on the Arrow Community page.

Some community members also use the Arrow Rust Discord Server and the official ASF Slack server for informal discussions and coordination. This is a great place to meet other contributors and get guidance on where to contribute. However, all technical designs should also be recorded and formalized in GitHub issues, so that they are accessible to everyone. In Slack, find us in the #arrow-rust channel and feel free to ask for an invite via Discord, GitHub issues, or other means.

There is more information in the contributing guide and the security policy.

Repository Structure

This repository contains the following crates:

Crate Description Latest API Docs README
[arrow] Core functionality (memory layout, arrays, low level computations) docs.rs (README)
[arrow-flight] Support for Arrow-Flight IPC protocol docs.rs (README)
[parquet] Support for the Apache Parquet columnar file format docs.rs (README)
[parquet_derive] A crate for deriving RecordWriter/RecordReader for arbitrary, simple structs docs.rs (README)

The current development version the API documentation can be found here.

Note: previously the [object_store] crate was also part of this repository, but it has been moved to the arrow-rs-object-store repository

Release Versioning and Schedule

The Arrow Rust project releases approximately monthly and follows Semantic Versioning.

Due to available maintainer and testing bandwidth, [arrow] crates ([arrow], [arrow-flight], etc.) are released on the same schedule with the same versions as the [parquet] and [parquet_derive] crates.

This crate releases every month. We release new major versions (with potentially breaking API changes) at most once a quarter, and release incremental minor versions in the intervening months. See ticket #5368 for more details.

To keep our maintenance burden down, we do regularly scheduled releases (major and minor) from the main branch. How we handle PRs with breaking API changes is described in the contributing guide.

Planned Release Schedule

Approximate Date Version Notes
May 2026 [58.3.0] Minor, NO breaking API changes
May 2026 [57.3.1] Patch, NO breaking API changes
May 2026 [56.2.1] Patch, NO breaking API changes
May 2026 [59.0.0] Major, potentially breaking API changes
June 2026 [59.1.0] Minor, NO breaking API changes
July 2026 [59.2.0] Minor, NO breaking API changes
August 2026 [60.0.0] Major, potentially breaking API changes

Rust Version Compatibility Policy

arrow-rs and parquet are built and tested with stable Rust, and will keep a rolling MSRV (minimum supported Rust version) that can only be updated in major releases on an as needed basis (e.g. project dependencies bump their MSRV or a particular Rust feature is useful for us etc.). The new MSRV if selected will be at least 6 months old. The minor releases are guaranteed to have the same MSRV.

Note: If a Rust hotfix is released for the current MSRV, the MSRV will be updated to the specific minor version that includes all applicable hotfixes preceding other policies.

Guidelines for panic vs Result

In general, use panics for bad states that are unreachable, unrecoverable or harmful. For those caused by invalid user input, however, we prefer to report that invalidity gracefully as an error result instead of panicking. In general, invalid input should result in an Error as soon as possible. It is ok for code paths after validation to assume validation has already occurred and panic if not. See ticket #6737 for more nuances.

Deprecation Guidelines

Minor releases may deprecate, but not remove APIs. Deprecating APIs allows downstream Rust programs to still compile, but generate compiler warnings. This gives downstream crates time to migrate prior to API removal.

To deprecate an API:

  • Mark the API as deprecated using #[deprecated] and specify the exact arrow-rs version in which it was deprecated
  • Concisely describe the preferred API to help the user transition

The deprecated version is the next version which will be released (please consult the list above). To mark the API as deprecated, use the #[deprecated(since = "...", note = "...")] attribute.

For example

#[deprecated(since = "51.0.0", note = "Use `date_part` instead")]

In general, deprecated APIs will remain in the codebase for at least two major releases after they were deprecated (typically between 6 - 9 months later). For example, an API deprecated in 51.3.0 can be removed in 54.0.0 (or later). Deprecated APIs may be removed earlier or later than these guidelines at the discretion of the maintainers.

Related Projects

There are several related crates in different repositories

Crate Description Documentation
[object_store] Object Storage (aws, azure, gcp, local, in-memory) interface (README)
[datafusion] In-memory query engine with SQL support (README)
[ballista] Distributed query execution (README)
[parquet_opendal] Use [opendal] for [parquet] Arrow IO (README)

Collectively, these crates support a wider array of functionality for analytic computations in Rust.

For example, you can write SQL queries or a DataFrame (using the [datafusion] crate) to read a parquet file (using the [parquet] crate), evaluate it in-memory using Arrow's columnar format (using the [arrow] crate), and send to another process (using the [arrow-flight] crate).

Generally speaking, the [arrow] crate offers functionality for using Arrow arrays, and [datafusion] offers most operations typically found in SQL, including joins and window functions.

You can find more details about each crate in their respective READMEs.

Extension points exported contracts — how you extend this code

ExtensionType (Interface)
Extension types. User-defined “extension” types can be defined setting certain key value pairs in the [`Field`] metadat [13 …
arrow-schema/src/extension/mod.rs
RandomTemporalValue (Interface)
Useful for testing. The range of values are not likely to be representative of the actual bounds. [10 implementers]
arrow/src/util/data_gen.rs
BitIteratorOp (Interface)
Trait representing an operation on a BitIterator that can be compared against a slice iterator [8 implementers]
arrow-buffer/src/util/bit_iterator.rs
Parser (Interface)
Specialized parsing implementations to convert strings to Arrow types. This is used by csv and json reader and can be u [13 …
arrow-cast/src/parse.rs
FixedLengthEncoding (Interface)
Encodes a value of a particular fixed width type into bytes according to the rules described on [`super::RowConverter`] [6 …
arrow-row/src/fixed.rs
Codec (Interface)
Parquet compression codec interface. [7 implementers]
parquet/src/compression.rs
Encoder (Interface)
A trait to format array values as JSON values Nullability is handled by the caller to allow encoding nulls implicitly, [18 …
arrow-json/src/writer/encoder.rs
ExtractDatePartExt (Interface)
Implement the specialized functions for extracting date part from temporal arrays. [17 implementers]
arrow-arith/src/temporal.rs

Core symbols most depended-on inside this repo

clone
called by 2537
arrow-flight/src/sql/client.rs
collect
called by 1403
arrow-select/src/filter.rs
iter
called by 988
arrow-row/src/lib.rs
clone
called by 756
arrow-array/src/array/run_array.rs
values
called by 659
arrow-buffer/src/buffer/run.rs
as_any
called by 657
arrow-array/src/array/mod.rs
as_ref
called by 563
arrow-ipc/src/convert.rs
iter
called by 551
parquet/src/arrow/arrow_reader/selection.rs

Shape

Function 8,734
Method 5,838
Class 1,146
Enum 268
Interface 163

Languages

Rust100%
Python1%

Modules by API surface

arrow-cast/src/cast/mod.rs379 symbols
arrow-ipc/src/gen/Schema.rs237 symbols
parquet/src/arrow/arrow_writer/mod.rs214 symbols
parquet/src/column/writer/mod.rs206 symbols
parquet/src/arrow/arrow_reader/mod.rs166 symbols
arrow-avro/src/reader/mod.rs163 symbols
arrow-row/src/lib.rs156 symbols
parquet/src/file/metadata/mod.rs155 symbols
arrow-avro/src/writer/encoder.rs152 symbols
arrow-avro/src/schema.rs152 symbols
arrow-avro/src/reader/record.rs152 symbols
parquet/src/file/properties.rs142 symbols

For agents

$ claude mcp add arrow-rs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact