apache/arrow
Dependencies
Third-party libraries Arrow uses, organized by how they're consumed: bundled (built from source as part of the Arrow build), system (linked from the host), or vendored (source code copied into the Arrow tree).
Configuration
Each dependency has a *_SOURCE CMake variable that selects how to find or build it. Values are:
BUNDLED— fetch and build from source viaExternalProject.SYSTEM— find viafind_package/pkg_check_modules.AUTO— try system first, fall back to bundled.
Defaults vary; the canonical list is in cpp/cmake_modules/ThirdpartyToolchain.cmake.
Core C++ dependencies
These are needed for the basic libarrow.so:
| Library | Purpose | *_SOURCE flag |
Notes |
|---|---|---|---|
| Boost | Headers (parts of boost::process, boost::filesystem) |
Boost_SOURCE |
Declining footprint; many uses migrated to C++17 |
| FlatBuffers | IPC schema (format/*.fbs) |
FlatBuffers_SOURCE |
Version pinned because Arrow vendors generated headers |
| jemalloc | Memory pool backend | jemalloc_SOURCE |
Optional; falls back to system allocator |
| OpenSSL | TLS for Flight, S3, Parquet encryption | OpenSSL_SOURCE |
System on most platforms |
| zlib | Compression | ZLIB_SOURCE |
Used by gzip codec |
| Snappy | Compression | Snappy_SOURCE |
Used by Parquet, IPC |
| ZSTD | Compression | zstd_SOURCE |
Used by Parquet, IPC |
| LZ4 | Compression | lz4_SOURCE |
Used by Parquet, IPC |
| Brotli | Compression | Brotli_SOURCE |
Optional |
| BZ2 | Compression | BZip2_SOURCE |
Optional |
| RapidJSON | JSON parsing | RapidJSON_SOURCE |
Header-only; vendored |
| utf8proc | UTF-8 case folding/normalization | utf8proc_SOURCE |
Optional but enabled by default |
| re2 | Regex | re2_SOURCE |
Used by Gandiva and string kernels |
| xsimd | Portable SIMD | xsimd_SOURCE |
Header-only; recently introduced |
| google-double-conversion | Float ↔ string | double_conversion_SOURCE |
Vendored |
Optional component dependencies
Pulled in only when the matching ARROW_* toggle is on:
| Component | Library | Purpose |
|---|---|---|
ARROW_PARQUET |
Apache Thrift | parquet.thrift schema |
ARROW_FLIGHT |
gRPC + Protobuf | RPC framework |
ARROW_FLIGHT_SQL |
gRPC + Protobuf | RPC framework + SQL extension |
ARROW_GANDIVA |
LLVM | JIT compiler |
ARROW_S3 |
AWS C++ SDK | S3 filesystem |
ARROW_GCS |
google-cloud-cpp | GCS filesystem |
ARROW_AZURE |
Azure C++ SDK | Azure Blob Storage filesystem |
ARROW_HDFS |
libhdfs (loaded dynamically) | HDFS filesystem |
ARROW_ORC |
Apache ORC C++ | ORC adapter |
ARROW_CUDA |
CUDA toolkit | GPU support |
ARROW_OPENTELEMETRY |
OpenTelemetry C++ | Tracing |
ARROW_WITH_UCX |
UCX | Flight UCX transport |
ARROW_WITH_BACKTRACE |
libbacktrace / libdw | Stack traces in Status |
ARROW_PYTHON |
Python + NumPy | C++ helpers PyArrow links against |
The full list of toggles is in cpp/CMakeLists.txt.
Vendored libraries
Lives in cpp/src/arrow/vendored/:
xxhash/— xxHash 0.8.x.datetime/— Howard Hinnant's date library.fast_float/— Daniel Lemire's fast_float parser.double-conversion/— Google's double-conversion (re-vendored even though there's a dependency, for consistent behavior).pcg/— PCG random number generators.base64/,random/,string_view/— small headers.portable-snippets/,ProducerConsumerQueue/— concurrency helpers.
Vendored code is built as part of libarrow. Each subdirectory has its own LICENSE file.
Conda environment files
Each language has a ci/conda_env_*.txt file listing the conda packages needed for the build:
ci/conda_env_cpp.txt— C++ build deps.ci/conda_env_python.txt— PyArrow build deps.ci/conda_env_r.txt— R build deps.ci/conda_env_gandiva.txt(and_win.txt) — Gandiva build deps includingclangdevandllvmdev.ci/conda_env_archery.txt—archeryCLI deps.ci/conda_env_crossbow.txt— Crossbow dispatcher deps.ci/conda_env_sphinx.txt— Documentation build deps.ci/conda_env_unix.txt— Common Unix tooling.
These are the source of truth for what version of each tool is expected to work.
Python dependencies
python/pyproject.toml lists the build deps. Runtime deps are minimal:
numpy(always required for some converters).pandas(optional; only forto_pandas()/from_pandas()).
Build-time:
Cython,numpy,setuptools,setuptools-scm,cffi(for the CFFI module),meson/scikit-buildfor the extension build.
Test-time deps live in python/requirements-test.txt, requirements-wheel-test.txt.
R dependencies
r/DESCRIPTION declares CRAN deps. The Imports: section pulls in assertthat, bit64, methods, purrr, R6, rlang, stats, tidyselect, vctrs. The Suggests: section pulls in dplyr, dbplyr, duckdb, lubridate, pkgload, reticulate, rmarkdown, stringi, stringr, testthat, tibble, withr.
For the bundled libarrow build, r/tools/nixlibs.R fetches Arrow C++ source and builds it.
Ruby dependencies
ruby/Gemfiles pull in gobject-introspection, pkg-config, test-unit. The actual GLib bindings are loaded at runtime via introspection; ruby/red-arrow/red-arrow.gemspec declares the C-GLib version requirement.
C-GLib dependencies
c_glib/Brewfile and c_glib/vcpkg.json list the system deps. The build needs:
- glib2 (≥2.58)
- gobject-introspection
- meson
- vala (optional, for Vala bindings)
- gtk-doc (optional, for the reference manual)
License compatibility
Arrow is Apache 2.0. All bundled and vendored dependencies use compatible licenses (MIT, BSD-3-Clause, Apache 2.0). The LICENSE.txt and NOTICE.txt at the repo root list the licenses of bundled and vendored components. The cpp/build-support/release/rat_exclude_files.txt lists files that the Apache RAT (Release Audit Tool) is allowed to skip during release verification.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.