Apache Arrow nanoarrow 0.7.0 Release
Published
02 Jul 2025
By
The Apache Arrow PMC (pmc)
The Apache Arrow team is pleased to announce the 0.7.0 release of Apache Arrow nanoarrow. This release covers 117 resolved issues from 12 contributors.
Release Highlights
- Migrate Python bindings to Meson Python
- Better support for shared linkage
- ZSTD Decompression support in IPC reader
- Decimal32, Decimal64, ListView and LargeListView support
- Support for vcpkg
See the Changelog for a detailed list of contributions to this release.
Features
Meson Python
The Python bindings now use Meson Python as the build backend. The main benefit is that adding C or C++ library dependencies like ZSTD is much simpler than with setuptools which was needed to add the new decompression support to the Python bindings.
Thanks to @WillAyd for this contribution and continued maintenance of the Python build infrastructure!
Shared Linkage
The nanoarrow C library is generally designed to be statically linked into an
application or library; however, there were some applications that did want
shared linkage and on Windows some extra work was needed to ensure this worked
as intended. Version 0.7.0 includes the appropriate DLL import/export attributes
and adds dedicated nanoarrow_shared
and nanoarrow_static
targets to the CMake
configuration to explicitly choose a strategy (linking to nanoarrow
will continue
to use the CMake default as it did in previous versions).
Thanks to @m-kuhn for authoring the initial vcpkg configuration that brought this to our attention!
ZSTD Decompression Support
The Arrow IPC reader included in the nanoarrow C library supports most features of the Arrow IPC format; however, decompression support was missing which made the library and its bindings unusable for some common use cases. In 0.7.0, decompression support was added to the C library and R and Python bindings.
library(nanoarrow)
url <- "https://github.com/geoarrow/geoarrow-data/releases/download/v0.2.0/ns-water_water-point.arrows"
read_nanoarrow(url) |>
tibble::as_tibble()
#> # A tibble: 44,690 × 8
#> OBJECTID FEAT_CODE ZVALUE PT_CLASS NAMEID_1 NAME_1 HID geometry$x
#> <dbl> <chr> <dbl> <int> <chr> <chr> <chr> <dbl>
#> 1 1055 WARK60 -0.5 4 <NA> <NA> 252C345D59374D… 258976.
#> 2 1023 WARK60 0.6 4 <NA> <NA> 1DAB1D800FB84E… 258341.
#> 3 1021 WARK60 0.5 4 <NA> <NA> 838438F1BBE745… 258338.
#> 4 985 WARK60 0 4 <NA> <NA> 0A4BE2AB03D845… 258527.
#> 5 994 WARK60 1.9 4 <NA> <NA> 6ACD71128B6B49… 258499.
#> 6 995 WARK60 1.4 4 <NA> <NA> B10B26FA32FB44… 258502.
#> 7 997 WARK60 1.1 4 <NA> <NA> 28E47E22D71549… 258498.
#> 8 993 WARK60 1.9 4 <NA> <NA> FC9A29123BEF4A… 258499.
#> 9 1003 WARK60 0.7 4 <NA> <NA> 3C7CA3CD0E8840… 258528.
#> 10 1001 WARK60 0.7 4 <NA> <NA> A6F508B066DC4A… 258511.
#> # ℹ 44,680 more rows
#> # ℹ 2 more variables: geometry$y <dbl>, $z <dbl>
Users of the C library will need to configure CMake with -DNANOARROW_IPC_WITH_ZSTD=ON
and -DNANOARROW_IPC=ON
to use CMake-resolved ZSTD; however, client libraries
can also use an existing ZSTD or LZ4 implementation using callbacks.
New Type Support
While the nanoarrow C library is a minimal library, we do strive to support the full specification and several new types were not supported by the C library. Version 0.7.0 includes support in the C library for Decimal32, Decimal64, ListView, and LargeListView and improved support for support for decimal types in the nanoarrow R bindings.
Thanks to @zeroshade for contributing Decimal32/Decimal64 support and @WillAyd for contributing
nanoarrow on vcpkg
The nanoarrow C library can now be installed using vcpkg!
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg && ./bootstrap-vcpkg.sh
./vcpkg install nanoarrow
CMake projects can then use find_package(nanoarrow)
when using the vcpkg
toolchain (i.e., -DCMAKE_TOOLCHAIN_FILE=path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
).
This also allows other vcpkg ports to use nanoarrow as a dependency in addition
to a convenience for projects already using vcpkg.
Thanks to @m-kuhn for contributing the nanoarrow port to vcpkg!
Contributors
This release consists of contributions from 12 contributors in addition to the invaluable advice and support of the Apache Arrow community.
$ git shortlog -sn apache-arrow-nanoarrow-0.7.0.dev..apache-arrow-nanoarrow-0.7.0-rc1
53 Dewey Dunnington
27 William Ayd
3 Michael Chirico
2 Sutou Kouhei
1 Bryce Mecum
1 David Li
1 Gang Wu
1 Ilya Verbin
1 Jacob Wujciak-Jens
1 Matt Topol
1 Matthias Kuhn
1 eitsupi