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