<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://arrow.apache.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://arrow.apache.org/" rel="alternate" type="text/html" /><updated>2026-09-08T18:02:49-04:00</updated><id>https://arrow.apache.org/feed.xml</id><title type="html">Apache Arrow</title><subtitle>Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics. It specifies a standardized language-independent column-oriented memory format for flat and nested data, organized for efficient analytic operations on modern hardware. It also provides computational libraries and zero-copy streaming messaging and interprocess communication. Languages currently supported include C, C++, C#, Go, Java, JavaScript, MATLAB, Python, R, Ruby, and Rust.</subtitle><entry><title type="html">Apache Arrow Go 18.8.0 Release</title><link href="https://arrow.apache.org/blog/2026/09/08/arrow-go-18.8.0/" rel="alternate" type="text/html" title="Apache Arrow Go 18.8.0 Release" /><published>2026-09-08T00:00:00-04:00</published><updated>2026-09-08T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/09/08/arrow-go-18.8.0</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/09/08/arrow-go-18.8.0/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the v18.8.0 release of Apache Arrow Go.
This minor release covers 283 commits from 16 distinct contributors.</p>
<h2>Contributors</h2>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="console"><span class="gp">$</span><span class="w"> </span>git shortlog <span class="nt">-sn</span> v18.7.0..v18.8.0
<span class="go">   251	Minh Vu
    10	Matt Topol
     4	Colton Loftus
     4	Digvijay
     4	Tom Frank
     1	Derek Perkins
     1	Lucas Valente
     1	Madan kumar
     1	Neelesh Salian
     1	Nick Ripley
     1	Pedro Matias
     1	Raúl Cumplido
     1	Ruihao Chen
     1	Tobias Pütz
     1	Tomáš Karela Procházka
     1	Willem Jan
</span></code></pre></div></div>
<h2>Highlights</h2>
<h3>Arrow</h3>
<h4>Features</h4>
<ul>
<li>Added <code>VariantGet</code> for efficient path extraction from variant arrays <a href="https://github.com/apache/arrow-go/pull/1206">#1206</a></li>
<li>Added <code>list_element</code>, <code>cumulative_sum</code>, <code>cumulative_sum_checked</code>, and <code>dictionary_encode</code> compute functions <a href="https://github.com/apache/arrow-go/pull/1138">#1138</a>,
<a href="https://github.com/apache/arrow-go/pull/1139">#1139</a>, <a href="https://github.com/apache/arrow-go/pull/1140">#1140</a></li>
<li>Added <code>ValueAsAny</code> for accessing Arrow array values as native Go values <a href="https://github.com/apache/arrow-go/pull/1170">#1170</a></li>
<li>Strengthened IPC file validation for malformed block framing and lengths <a href="https://github.com/apache/arrow-go/pull/1097">#1097</a></li>
</ul>
<h4>Bug Fixes</h4>
<ul>
<li>Fixed a memory leak when calling <code>Resize(0)</code> on non-empty builders <a href="https://github.com/apache/arrow-go/pull/995">#995</a></li>
<li>Preserved exact precision when casting strings to Decimal128 and Decimal256 scalars <a href="https://github.com/apache/arrow-go/pull/1107">#1107</a></li>
</ul>
<h4>Performance Improvements</h4>
<p>This is a performance-heavy release: 32 of the merged pull requests are dedicated
optimizations. Unless noted otherwise, the figures below are the PR-reported
benchmarks on an Apple M1 Pro, comparing the new path against the scalar
baseline it replaces.</p>
<ul>
<li>Expanded SIMD acceleration for compute arithmetic, comparisons, and filtering on ARM64 and AMD64. Arithmetic kernels run 4.1-4.4x faster on int64 and float64
adds, int64 array/array comparisons drop from 313.6us to 29.3us per op (10.7x), narrow 8- and 16-bit integer comparisons reach 12.8-15.1x, and null-free
32-bit fixed-width filters compress up to 11.8x faster on 1M-element inputs <a href="https://github.com/apache/arrow-go/pull/1265">#1265</a>, <a href="https://github.com/apache/arrow-go/pull/1266">#1266</a>,
<a href="https://github.com/apache/arrow-go/pull/1284">#1284</a>, <a href="https://github.com/apache/arrow-go/pull/1286">#1286</a>, <a href="https://github.com/apache/arrow-go/pull/1287">#1287</a>, <a href="https://github.com/apache/arrow-go/pull/1288">#1288</a></li>
<li>Building take indices from fragmented selection vectors is no longer quadratic. For a 1M-element alternating filter it drops from 4.31s to 515us, and a
serial <code>FilterRecordBatch</code> over the same filter falls from 2.06s to 831us <a href="https://github.com/apache/arrow-go/pull/1287">#1287</a></li>
<li>Added SIMD-accelerated packing of boolean slices and validity data into Arrow bitmaps: <code>BooleanBuilder</code> packing of 65,536 values improves roughly 4-5x
(23.4us to 3.9us), batched validity packing is up to 4.4x faster, and ARM64 NEON bitmap operations gain 2.2-2.9x <a href="https://github.com/apache/arrow-go/pull/1283">#1283</a>,
<a href="https://github.com/apache/arrow-go/pull/1185">#1185</a>, <a href="https://github.com/apache/arrow-go/pull/1264">#1264</a>, <a href="https://github.com/apache/arrow-go/pull/1090">#1090</a></li>
<li>Batched run-end encoded appends turn a millisecond-scale operation into a microsecond-scale one for null and empty-value runs, cutting 1.16MB across 55
allocations per op down to 1.7KB across 19 <a href="https://github.com/apache/arrow-go/pull/1214">#1214</a></li>
<li>Concatenation avoids temporary buffers and copies bitmaps directly: 65,536 int64 values spread over 8,192 chunks go from 571.7us to 214.5us (-62%) with
allocations falling from 8,199 to 6 per op <a href="https://github.com/apache/arrow-go/pull/1194">#1194</a>, <a href="https://github.com/apache/arrow-go/pull/1224">#1224</a></li>
<li>Serial and small-batch execution skips goroutine and span overhead: single-span kernel dispatch nearly halves latency at length 1 (342.0ns to 189.0ns),
serial record filtering over 128 columns goes from 709.8us to 420.9us, and serial <code>Take</code> plus IPC encoder scratch reuse cut per-op allocations across the
board <a href="https://github.com/apache/arrow-go/pull/1233">#1233</a>, <a href="https://github.com/apache/arrow-go/pull/1245">#1245</a>, <a href="https://github.com/apache/arrow-go/pull/1226">#1226</a>, <a href="https://github.com/apache/arrow-go/pull/1221">#1221</a></li>
<li>CSV writing no longer materializes rows first, cutting a 1,000-row by 16-column write from 4.78ms to 0.84ms (-82%) and allocated bytes by 81% <a href="https://github.com/apache/arrow-go/pull/1190">#1190</a></li>
</ul>
<h3>Parquet</h3>
<h4>Features</h4>
<ul>
<li>Added read and write support for GeoArrow extension types using Parquet geometry and geography logical types <a href="https://github.com/apache/arrow-go/pull/960">#960</a>,
<a href="https://github.com/apache/arrow-go/pull/969">#969</a></li>
<li>Added codec-aware dictionary cost fallback and per-column writer controls <a href="https://github.com/apache/arrow-go/pull/1036">#1036</a></li>
</ul>
<h4>Bug Fixes</h4>
<ul>
<li>Correctly populated Bloom filters from dictionary-encoded values <a href="https://github.com/apache/arrow-go/pull/1164">#1164</a></li>
<li>Rejected decimal values that overflow Parquet INT32 or INT64 columns instead of silently narrowing them <a href="https://github.com/apache/arrow-go/pull/1122">#1122</a>,
<a href="https://github.com/apache/arrow-go/pull/1161">#1161</a></li>
<li>Fixed reading fixed-size lists whose parent values are null <a href="https://github.com/apache/arrow-go/pull/1099">#1099</a></li>
</ul>
<h4>Performance Improvements</h4>
<ul>
<li>Added SIMD <code>BYTE_STREAM_SPLIT</code> encoding on ARM64 and AMD64: 16.9x faster for 4-byte values (113,877ns to 6,745ns per op) and 7.6x for 8-byte values <a href="https://github.com/apache/arrow-go/pull/1260">#1260</a></li>
<li>Boolean decoding now targets Arrow bitmaps directly. All-true RLE boolean pages of 1M values decode in 2.45us instead of 2.65ms, and dense boolean column
reads through pqarrow drop 90% in time and 65% in heap use <a href="https://github.com/apache/arrow-go/pull/1246">#1246</a>, <a href="https://github.com/apache/arrow-go/pull/1182">#1182</a></li>
<li>Batched encoding and decoding across the core codecs: plain <code>BYTE_ARRAY</code> encoding is 45-62% faster, RLE level encoding is 79% faster for all-defined
levels, and <code>DELTA_BINARY_PACKED</code> decoding is 34-66% faster <a href="https://github.com/apache/arrow-go/pull/1193">#1193</a>, <a href="https://github.com/apache/arrow-go/pull/1177">#1177</a>, <a href="https://github.com/apache/arrow-go/pull/1169">#1169</a></li>
<li>Dictionary encoding allocates far less: numeric insertion of 65,535 float32 values goes from 64,905 allocations per op to 13, and typed byte-array memo
insertion cuts time 24% and allocations 50% (Apple M3 Max). Fixed-width dictionary materialization is also vectorized on AVX2 systems <a href="https://github.com/apache/arrow-go/pull/1178">#1178</a>,
<a href="https://github.com/apache/arrow-go/pull/1272">#1272</a>, <a href="https://github.com/apache/arrow-go/pull/1269">#1269</a></li>
<li>Reduced copying when writing binary and fixed-size binary Arrow values to Parquet: 16-byte <code>FixedSizeBinary</code> writes are 72% faster for required columns
with statistics disabled, and 64K String writes go from 1.798ms to 1.260ms <a href="https://github.com/apache/arrow-go/pull/1262">#1262</a>, <a href="https://github.com/apache/arrow-go/pull/1263">#1263</a></li>
<li>Compressors are reused across pages: random 64KiB gzip page encoding is 6.1x faster (94.7us to 15.6us) with allocations down from 15 to 1 per op, and
Brotli encoding drops from about 22 allocations per op to 1 <a href="https://github.com/apache/arrow-go/pull/1238">#1238</a>, <a href="https://github.com/apache/arrow-go/pull/1254">#1254</a></li>
<li>Serial reads skip goroutine orchestration, trimming 18% from single-column row-group reads <a href="https://github.com/apache/arrow-go/pull/1235">#1235</a></li>
</ul>
<h2>Changelog</h2>
<h3>Selected Changes</h3>
<p>A selection of the user-facing changes in this release. See the full changelog link
below for all 285 merged pull requests.</p>
<h4>Arrow</h4>
<ul>
<li>fix: remove superfluous struct field index compare by @Willem-J-an in <a href="https://github.com/apache/arrow-go/pull/970">#970</a></li>
<li>fix(ipc): reject truncated message frames by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/991">#991</a></li>
<li>fix: Fix arm64 assembly stack frame manipulation by @nsrip-dd in <a href="https://github.com/apache/arrow-go/pull/984">#984</a></li>
<li>fix(arrow/array): <code>Resize(0)</code> on non-empty builder causes memory leak by @serramatutu in <a href="https://github.com/apache/arrow-go/pull/995">#995</a></li>
<li>fix(arrow/csv): preserve decimal precision by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1022">#1022</a></li>
<li>refactor(arrow/avro): migrate from hamba/avro to twmb/avro by @prochac in <a href="https://github.com/apache/arrow-go/pull/830">#830</a></li>
<li>feat(flightsql): allow configuring the driver memory allocator by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1076">#1076</a></li>
<li>feat(arrow/flight/sql): Add is_update field to ActionCreatePreparedStatementResult by @ennuite in <a href="https://github.com/apache/arrow-go/pull/732">#732</a></li>
<li>feat(arrow/array): roll back JSON builder state after failed rows by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1113">#1113</a></li>
<li>feat(arrow/array): add ValueAsAny for native Go values by @dgvj-work in <a href="https://github.com/apache/arrow-go/pull/1170">#1170</a></li>
<li>feat(extensions): add VariantGet for path extraction from variant arrays by @nssalian in <a href="https://github.com/apache/arrow-go/pull/1206">#1206</a></li>
<li>fix(arrow/extensions): use canonical Variant extension name by @dgvj-work in <a href="https://github.com/apache/arrow-go/pull/1241">#1241</a></li>
<li>fix(arrow/extensions): reject Null Variant typed_value by @dgvj-work in <a href="https://github.com/apache/arrow-go/pull/1243">#1243</a></li>
<li>fix(arrow/ipc): validate file block framing and lengths by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1097">#1097</a></li>
<li>fix(arrow/ipc): avoid deadlock on compression errors by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1142">#1142</a></li>
<li>fix(arrow/scalar): preserve exact decimal string casts by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1107">#1107</a></li>
<li>fix(arrow/scalar): align timestamp timezone parsing by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1109">#1109</a></li>
<li>fix(arrow): validate precision in NewDecimalType by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1162">#1162</a></li>
<li>fix(arrow): reject duplicate union type codes by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1131">#1131</a></li>
<li>fix(arrow/csv): preserve first row during headerless inference by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1145">#1145</a></li>
<li>fix(arrow/csv): append null for later parse failures by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1149">#1149</a></li>
<li>fix(arrow/array): clamp run ends when concatenating a sliced RunEndEncoded array by @winklemad in <a href="https://github.com/apache/arrow-go/pull/1219">#1219</a></li>
<li>fix(arrow/cdata): validate imported schema topology by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1046">#1046</a></li>
</ul>
<h4>Compute</h4>
<ul>
<li>feat(compute): add list_element by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1138">#1138</a></li>
<li>feat(compute): add cumulative_sum and cumulative_sum_checked by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1139">#1139</a></li>
<li>feat(compute): add dictionary_encode by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1140">#1140</a></li>
<li>fix(compute): round negative HalfToOdd ties correctly by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1094">#1094</a></li>
<li>fix(compute): handle odd temporal multiples by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1119">#1119</a></li>
<li>fix(compute): preserve caller context during execution by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1154">#1154</a></li>
<li>fix(compute): discard results after cancellation by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/1278">#1278</a></li>
<li>fix(compute/exprs): avoid empty field reference panic by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1130">#1130</a></li>
</ul>
<h4>Parquet</h4>
<ul>
<li>feat(parquet/schema): Wire up logical type functionality for writing geo types by @C-Loftus in <a href="https://github.com/apache/arrow-go/pull/960">#960</a></li>
<li>feat(parquet/pqarrow): Read support for extension types / geo by @C-Loftus in <a href="https://github.com/apache/arrow-go/pull/969">#969</a></li>
<li>feat(parquet): add WithDictionaryCostFallback writer property by @tom-eon in <a href="https://github.com/apache/arrow-go/pull/1036">#1036</a></li>
<li>fix(parquet): wrap DELTA_BINARY_PACKED deltas at the physical type width by @tom-eon in <a href="https://github.com/apache/arrow-go/pull/1027">#1027</a></li>
<li>fix(parquet/encoding): read ahead in the streaming value buffer by @joechenrh in <a href="https://github.com/apache/arrow-go/pull/937">#937</a></li>
<li>fix(parquet/pqarrow): prefer stored schema extension type on read by @twuebi in <a href="https://github.com/apache/arrow-go/pull/1051">#1051</a></li>
<li>fix(parquet/pqarrow): require Variant value field when writing by @dgvj-work in <a href="https://github.com/apache/arrow-go/pull/1242">#1242</a></li>
<li>fix(parquet): guard byte-stream-split encoder release against never-flushed buffer by @tom-eon in <a href="https://github.com/apache/arrow-go/pull/1273">#1273</a></li>
<li>fix(parquet): stop BYTE_STREAM_SPLIT FLBA spaced decode aliasing output by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/1256">#1256</a></li>
<li>fix(parquet): read null fixed-size-list parents by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1099">#1099</a></li>
<li>fix(parquet/pqarrow): reject decimal overflow in integer columns by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1122">#1122</a></li>
<li>fix(parquet/pqarrow): reject decimal overflow when writing integers by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1161">#1161</a></li>
<li>fix(parquet): build bloom filters from dictionary entries by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1164">#1164</a></li>
<li>fix(parquet): preserve dictionary index types by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1098">#1098</a></li>
<li>fix(parquet): restore Arrow duration units from schema metadata by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1095">#1095</a></li>
<li>fix(parquet/compress): honor LZ4 raw destination contract by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1147">#1147</a></li>
<li>fix(parquet): row-align V1 pages with offset indexes by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1075">#1075</a></li>
<li>fix(parquet/variant): validate metadata offset tables by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1063">#1063</a></li>
</ul>
<h4>Performance</h4>
<ul>
<li>perf(arrow/bitutil): add SetBitSwap/ClearBitSwap, use in builder.SetNull by @tom-eon in <a href="https://github.com/apache/arrow-go/pull/1090">#1090</a></li>
<li>perf(bitutil): add ARM64 NEON bitmap operations by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1264">#1264</a></li>
<li>perf(arrow/array): pack validity values in batches by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1185">#1185</a></li>
<li>perf(arrow/array): SIMD-pack boolean slices into bitmaps by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1283">#1283</a></li>
<li>perf(arrow/array): batch run-end encoded appends by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1214">#1214</a></li>
<li>perf(arrow/array): avoid temporary buffers when concatenating by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1194">#1194</a></li>
<li>perf(arrow/array): concatenate bitmaps directly by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1224">#1224</a></li>
<li>perf(compute): add ARM64 NEON arithmetic kernels by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1265">#1265</a></li>
<li>perf(compute): add ARM64 NEON comparison kernels by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1266">#1266</a></li>
<li>perf(compute): add ARM64 NEON comparisons for 8- and 16-bit integers by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1288">#1288</a></li>
<li>perf(compute): add ARM64 NEON compression for null-free 32-bit fixed-width filters by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1286">#1286</a></li>
<li>perf(compute): vectorize mixed int32 filters with AVX2 by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1284">#1284</a></li>
<li>perf(compute): SIMD-compact fragmented filters into take indices by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1287">#1287</a></li>
<li>perf(compute): fast-path single-span execution by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1233">#1233</a></li>
<li>perf(arrow/compute): avoid goroutines for serial record filtering by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1245">#1245</a></li>
<li>perf(arrow/compute): avoid goroutines for serial take by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1226">#1226</a></li>
<li>perf(parquet): SIMD BYTE_STREAM_SPLIT encoding by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1260">#1260</a></li>
<li>perf(parquet): vectorize fixed-width dictionary materialization by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1269">#1269</a></li>
<li>perf(parquet): optimize numeric dictionary insertion by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1178">#1178</a></li>
<li>perf(parquet): use typed memo insertion for byte-array dictionaries by @derekperkins in <a href="https://github.com/apache/arrow-go/pull/1272">#1272</a></li>
<li>perf(parquet): batch plain BYTE_ARRAY encoding by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1193">#1193</a></li>
<li>perf(parquet): encode RLE levels in batches by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1177">#1177</a></li>
<li>perf(parquet): batch delta binary packed decoding by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1169">#1169</a></li>
<li>perf(parquet): decode RLE booleans into bitmaps by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1246">#1246</a></li>
<li>perf(parquet/pqarrow): decode booleans directly to bitmaps by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1182">#1182</a></li>
<li>perf(parquet/pqarrow): write binary values from Arrow offsets by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1262">#1262</a></li>
<li>perf(parquet/pqarrow): write FixedSizeBinary values directly by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1263">#1263</a></li>
<li>perf(parquet/pqarrow): use synchronous path for serial reads by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1235">#1235</a></li>
<li>perf(parquet/compress): reuse gzip writers by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1238">#1238</a></li>
<li>perf(parquet/compress): reuse Brotli writers across encodes by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1254">#1254</a></li>
<li>perf(arrow/csv): avoid materializing rows before writing by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1190">#1190</a></li>
<li>perf(arrow/ipc): reuse record encoder scratch by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/1221">#1221</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li>@C-Loftus made their first contribution in <a href="https://github.com/apache/arrow-go/pull/960">#960</a></li>
<li>@tom-eon made their first contribution in <a href="https://github.com/apache/arrow-go/pull/1027">#1027</a></li>
<li>@prochac made their first contribution in <a href="https://github.com/apache/arrow-go/pull/830">#830</a></li>
<li>@dgvj-work made their first contribution in <a href="https://github.com/apache/arrow-go/pull/1170">#1170</a></li>
<li>@ennuite made their first contribution in <a href="https://github.com/apache/arrow-go/pull/732">#732</a></li>
<li>@derekperkins made their first contribution in <a href="https://github.com/apache/arrow-go/pull/1272">#1272</a></li>
<li>@winklemad made their first contribution in <a href="https://github.com/apache/arrow-go/pull/1219">#1219</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/apache/arrow-go/compare/v18.7.0...v18.8.0">https://github.com/apache/arrow-go/compare/v18.7.0...v18.8.0</a></p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the v18.8.0 release of Apache Arrow Go. This minor release covers 283 commits from 16 distinct contributors. Contributors $ git shortlog -sn v18.7.0..v18.8.0 251 Minh Vu 10 Matt Topol 4 Colton Loftus 4 Digvijay 4 Tom Frank 1 Derek Perkins 1 Lucas Valente 1 Madan kumar 1 Neelesh Salian 1 Nick Ripley 1 Pedro Matias 1 Raúl Cumplido 1 Ruihao Chen 1 Tobias Pütz 1 Tomáš Karela Procházka 1 Willem Jan Highlights Arrow Features Added VariantGet for efficient path extraction from variant arrays #1206 Added list_element, cumulative_sum, cumulative_sum_checked, and dictionary_encode compute functions #1138, #1139, #1140 Added ValueAsAny for accessing Arrow array values as native Go values #1170 Strengthened IPC file validation for malformed block framing and lengths #1097 Bug Fixes Fixed a memory leak when calling Resize(0) on non-empty builders #995 Preserved exact precision when casting strings to Decimal128 and Decimal256 scalars #1107 Performance Improvements This is a performance-heavy release: 32 of the merged pull requests are dedicated optimizations. Unless noted otherwise, the figures below are the PR-reported benchmarks on an Apple M1 Pro, comparing the new path against the scalar baseline it replaces. Expanded SIMD acceleration for compute arithmetic, comparisons, and filtering on ARM64 and AMD64. Arithmetic kernels run 4.1-4.4x faster on int64 and float64 adds, int64 array/array comparisons drop from 313.6us to 29.3us per op (10.7x), narrow 8- and 16-bit integer comparisons reach 12.8-15.1x, and null-free 32-bit fixed-width filters compress up to 11.8x faster on 1M-element inputs #1265, #1266, #1284, #1286, #1287, #1288 Building take indices from fragmented selection vectors is no longer quadratic. For a 1M-element alternating filter it drops from 4.31s to 515us, and a serial FilterRecordBatch over the same filter falls from 2.06s to 831us #1287 Added SIMD-accelerated packing of boolean slices and validity data into Arrow bitmaps: BooleanBuilder packing of 65,536 values improves roughly 4-5x (23.4us to 3.9us), batched validity packing is up to 4.4x faster, and ARM64 NEON bitmap operations gain 2.2-2.9x #1283, #1185, #1264, #1090 Batched run-end encoded appends turn a millisecond-scale operation into a microsecond-scale one for null and empty-value runs, cutting 1.16MB across 55 allocations per op down to 1.7KB across 19 #1214 Concatenation avoids temporary buffers and copies bitmaps directly: 65,536 int64 values spread over 8,192 chunks go from 571.7us to 214.5us (-62%) with allocations falling from 8,199 to 6 per op #1194, #1224 Serial and small-batch execution skips goroutine and span overhead: single-span kernel dispatch nearly halves latency at length 1 (342.0ns to 189.0ns), serial record filtering over 128 columns goes from 709.8us to 420.9us, and serial Take plus IPC encoder scratch reuse cut per-op allocations across the board #1233, #1245, #1226, #1221 CSV writing no longer materializes rows first, cutting a 1,000-row by 16-column write from 4.78ms to 0.84ms (-82%) and allocated bytes by 81% #1190 Parquet Features Added read and write support for GeoArrow extension types using Parquet geometry and geography logical types #960, #969 Added codec-aware dictionary cost fallback and per-column writer controls #1036 Bug Fixes Correctly populated Bloom filters from dictionary-encoded values #1164 Rejected decimal values that overflow Parquet INT32 or INT64 columns instead of silently narrowing them #1122, #1161 Fixed reading fixed-size lists whose parent values are null #1099 Performance Improvements Added SIMD BYTE_STREAM_SPLIT encoding on ARM64 and AMD64: 16.9x faster for 4-byte values (113,877ns to 6,745ns per op) and 7.6x for 8-byte values #1260 Boolean decoding now targets Arrow bitmaps directly. All-true RLE boolean pages of 1M values decode in 2.45us instead of 2.65ms, and dense boolean column reads through pqarrow drop 90% in time and 65% in heap use #1246, #1182 Batched encoding and decoding across the core codecs: plain BYTE_ARRAY encoding is 45-62% faster, RLE level encoding is 79% faster for all-defined levels, and DELTA_BINARY_PACKED decoding is 34-66% faster #1193, #1177, #1169 Dictionary encoding allocates far less: numeric insertion of 65,535 float32 values goes from 64,905 allocations per op to 13, and typed byte-array memo insertion cuts time 24% and allocations 50% (Apple M3 Max). Fixed-width dictionary materialization is also vectorized on AVX2 systems #1178, #1272, #1269 Reduced copying when writing binary and fixed-size binary Arrow values to Parquet: 16-byte FixedSizeBinary writes are 72% faster for required columns with statistics disabled, and 64K String writes go from 1.798ms to 1.260ms #1262, #1263 Compressors are reused across pages: random 64KiB gzip page encoding is 6.1x faster (94.7us to 15.6us) with allocations down from 15 to 1 per op, and Brotli encoding drops from about 22 allocations per op to 1 #1238, #1254 Serial reads skip goroutine orchestration, trimming 18% from single-column row-group reads #1235 Changelog Selected Changes A selection of the user-facing changes in this release. See the full changelog link below for all 285 merged pull requests. Arrow fix: remove superfluous struct field index compare by @Willem-J-an in #970 fix(ipc): reject truncated message frames by @fallintoplace in #991 fix: Fix arm64 assembly stack frame manipulation by @nsrip-dd in #984 fix(arrow/array): Resize(0) on non-empty builder causes memory leak by @serramatutu in #995 fix(arrow/csv): preserve decimal precision by @fallintoplace in #1022 refactor(arrow/avro): migrate from hamba/avro to twmb/avro by @prochac in #830 feat(flightsql): allow configuring the driver memory allocator by @fallintoplace in #1076 feat(arrow/flight/sql): Add is_update field to ActionCreatePreparedStatementResult by @ennuite in #732 feat(arrow/array): roll back JSON builder state after failed rows by @fallintoplace in #1113 feat(arrow/array): add ValueAsAny for native Go values by @dgvj-work in #1170 feat(extensions): add VariantGet for path extraction from variant arrays by @nssalian in #1206 fix(arrow/extensions): use canonical Variant extension name by @dgvj-work in #1241 fix(arrow/extensions): reject Null Variant typed_value by @dgvj-work in #1243 fix(arrow/ipc): validate file block framing and lengths by @fallintoplace in #1097 fix(arrow/ipc): avoid deadlock on compression errors by @fallintoplace in #1142 fix(arrow/scalar): preserve exact decimal string casts by @fallintoplace in #1107 fix(arrow/scalar): align timestamp timezone parsing by @fallintoplace in #1109 fix(arrow): validate precision in NewDecimalType by @fallintoplace in #1162 fix(arrow): reject duplicate union type codes by @fallintoplace in #1131 fix(arrow/csv): preserve first row during headerless inference by @fallintoplace in #1145 fix(arrow/csv): append null for later parse failures by @fallintoplace in #1149 fix(arrow/array): clamp run ends when concatenating a sliced RunEndEncoded array by @winklemad in #1219 fix(arrow/cdata): validate imported schema topology by @fallintoplace in #1046 Compute feat(compute): add list_element by @fallintoplace in #1138 feat(compute): add cumulative_sum and cumulative_sum_checked by @fallintoplace in #1139 feat(compute): add dictionary_encode by @fallintoplace in #1140 fix(compute): round negative HalfToOdd ties correctly by @fallintoplace in #1094 fix(compute): handle odd temporal multiples by @fallintoplace in #1119 fix(compute): preserve caller context during execution by @fallintoplace in #1154 fix(compute): discard results after cancellation by @zeroshade in #1278 fix(compute/exprs): avoid empty field reference panic by @fallintoplace in #1130 Parquet feat(parquet/schema): Wire up logical type functionality for writing geo types by @C-Loftus in #960 feat(parquet/pqarrow): Read support for extension types / geo by @C-Loftus in #969 feat(parquet): add WithDictionaryCostFallback writer property by @tom-eon in #1036 fix(parquet): wrap DELTA_BINARY_PACKED deltas at the physical type width by @tom-eon in #1027 fix(parquet/encoding): read ahead in the streaming value buffer by @joechenrh in #937 fix(parquet/pqarrow): prefer stored schema extension type on read by @twuebi in #1051 fix(parquet/pqarrow): require Variant value field when writing by @dgvj-work in #1242 fix(parquet): guard byte-stream-split encoder release against never-flushed buffer by @tom-eon in #1273 fix(parquet): stop BYTE_STREAM_SPLIT FLBA spaced decode aliasing output by @zeroshade in #1256 fix(parquet): read null fixed-size-list parents by @fallintoplace in #1099 fix(parquet/pqarrow): reject decimal overflow in integer columns by @fallintoplace in #1122 fix(parquet/pqarrow): reject decimal overflow when writing integers by @fallintoplace in #1161 fix(parquet): build bloom filters from dictionary entries by @fallintoplace in #1164 fix(parquet): preserve dictionary index types by @fallintoplace in #1098 fix(parquet): restore Arrow duration units from schema metadata by @fallintoplace in #1095 fix(parquet/compress): honor LZ4 raw destination contract by @fallintoplace in #1147 fix(parquet): row-align V1 pages with offset indexes by @fallintoplace in #1075 fix(parquet/variant): validate metadata offset tables by @fallintoplace in #1063 Performance perf(arrow/bitutil): add SetBitSwap/ClearBitSwap, use in builder.SetNull by @tom-eon in #1090 perf(bitutil): add ARM64 NEON bitmap operations by @fallintoplace in #1264 perf(arrow/array): pack validity values in batches by @fallintoplace in #1185 perf(arrow/array): SIMD-pack boolean slices into bitmaps by @fallintoplace in #1283 perf(arrow/array): batch run-end encoded appends by @fallintoplace in #1214 perf(arrow/array): avoid temporary buffers when concatenating by @fallintoplace in #1194 perf(arrow/array): concatenate bitmaps directly by @fallintoplace in #1224 perf(compute): add ARM64 NEON arithmetic kernels by @fallintoplace in #1265 perf(compute): add ARM64 NEON comparison kernels by @fallintoplace in #1266 perf(compute): add ARM64 NEON comparisons for 8- and 16-bit integers by @fallintoplace in #1288 perf(compute): add ARM64 NEON compression for null-free 32-bit fixed-width filters by @fallintoplace in #1286 perf(compute): vectorize mixed int32 filters with AVX2 by @fallintoplace in #1284 perf(compute): SIMD-compact fragmented filters into take indices by @fallintoplace in #1287 perf(compute): fast-path single-span execution by @fallintoplace in #1233 perf(arrow/compute): avoid goroutines for serial record filtering by @fallintoplace in #1245 perf(arrow/compute): avoid goroutines for serial take by @fallintoplace in #1226 perf(parquet): SIMD BYTE_STREAM_SPLIT encoding by @fallintoplace in #1260 perf(parquet): vectorize fixed-width dictionary materialization by @fallintoplace in #1269 perf(parquet): optimize numeric dictionary insertion by @fallintoplace in #1178 perf(parquet): use typed memo insertion for byte-array dictionaries by @derekperkins in #1272 perf(parquet): batch plain BYTE_ARRAY encoding by @fallintoplace in #1193 perf(parquet): encode RLE levels in batches by @fallintoplace in #1177 perf(parquet): batch delta binary packed decoding by @fallintoplace in #1169 perf(parquet): decode RLE booleans into bitmaps by @fallintoplace in #1246 perf(parquet/pqarrow): decode booleans directly to bitmaps by @fallintoplace in #1182 perf(parquet/pqarrow): write binary values from Arrow offsets by @fallintoplace in #1262 perf(parquet/pqarrow): write FixedSizeBinary values directly by @fallintoplace in #1263 perf(parquet/pqarrow): use synchronous path for serial reads by @fallintoplace in #1235 perf(parquet/compress): reuse gzip writers by @fallintoplace in #1238 perf(parquet/compress): reuse Brotli writers across encodes by @fallintoplace in #1254 perf(arrow/csv): avoid materializing rows before writing by @fallintoplace in #1190 perf(arrow/ipc): reuse record encoder scratch by @fallintoplace in #1221 New Contributors @C-Loftus made their first contribution in #960 @tom-eon made their first contribution in #1027 @prochac made their first contribution in #830 @dgvj-work made their first contribution in #1170 @ennuite made their first contribution in #732 @derekperkins made their first contribution in #1272 @winklemad made their first contribution in #1219 Full Changelog: https://github.com/apache/arrow-go/compare/v18.7.0...v18.8.0]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow nanoarrow 0.9.0 Release</title><link href="https://arrow.apache.org/blog/2026/08/14/nanoarrow-0.9.0-release/" rel="alternate" type="text/html" title="Apache Arrow nanoarrow 0.9.0 Release" /><published>2026-08-14T00:00:00-04:00</published><updated>2026-08-14T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/08/14/nanoarrow-0.9.0-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/08/14/nanoarrow-0.9.0-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the 0.9.0 release of
Apache Arrow nanoarrow. This release consists of 38 resolved GitHub issues from
5 contributors.</p>
<h2>Release Highlights</h2>
<p>In addition to a number of bugfixes and minor build system improvements, we
added several new features in nanoarrow 0.9.0.</p>
<ul>
<li>Dictionary decoding support in IPC reader</li>
<li>Reference-counted array/buffer support</li>
<li>LZ4 decompression support in R and Python bindings</li>
</ul>
<p>See the
<a href="https://github.com/apache/arrow-nanoarrow/blob/apache-arrow-nanoarrow-0.9.0/CHANGELOG.md">Changelog</a>
for a detailed list of contributions to this release.</p>
<h2>Features</h2>
<h3>Dictionary decode support</h3>
<p>Whereas the nanoarrow IPC reader suppports most Arrow IPC features, dictionary support
was a long requested gap in the reader functionality (mostly requested by users of
the <a href="https://github.com/paleolimbot/duckdb-nanoarrow">DuckDB nanoarrow extension</a>, which uses nanoarrow's reader). Dictionary encoding is used to reduce the size of frequently
repeated values and is the serialized equivalent of the &quot;dictionary&quot; data type that
is exposed in most Arrow implementations.</p>
<p>In nanoarrow 0.9.0 built with the IPC feature enabled, streams that include the most
common forms of dictionary encoding (i.e., dictionary replacement) should now work
out of the box. This includes nested/complex dictionary types and dictionary
replacement but does not include &quot;delta&quot; dictionaries (i.e., dictionaires that
grow larger as more values are encountered in the encoded values).</p>
<p>In R this is accessible via <code>read_nanoarrow()</code>; in Python this is accessible via
<code>nanoarrow.ArrayStream.from_readable()</code>; in C this is available via the
higher level <code>ArrowIpcArrayStreamReader</code> API. Lower level users of the
<code>ArrowIpcDecoder</code> will have to update existing usage to use the
<code>ArrowIpcDecoder...WithDictionaries()</code> variants of some functions
to support input with dictionary schemas or batches.</p>
<h3>Reference-counted array/buffer support</h3>
<p>In previous versions (since the introduction of the IPC reader), the
<code>ArrowIpcSharedBuffer</code> has supported reading IPC streams and sharing an
underlying set of data buffers for a group of arrays; however, this wasn't
quite sufficient for the more complex case of decoding a dictionary and
attaching cheaply-cloned shared &quot;values&quot; arrays for potentially many batches.
Version 0.9.0 moves this functionality to the <code>ArrowSharedBuffer</code> and expands it
to support moving all of an array's buffers into a shared state that can be
more cheaply cloned.</p>
<h3>LZ4 decompression support in R and Python</h3>
<p>While LZ4 decompression support was has long been available via the pluggable decoder
framework (and available since 0.8.0 as a built-in compile time option), reading
IPC streams with LZ4 buffer compression was not possible in the R or Python bindings.
In 0.9.0, the requisite configuration options were added such that the packages are
built with LZ4 when it is available on the system.</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="python"><span class="kn">import</span> <span class="n">io</span>
<span class="kn">import</span> <span class="n">nanoarrow</span> <span class="k">as</span> <span class="n">na</span>
<span class="kn">import</span> <span class="n">pyarrow</span> <span class="k">as</span> <span class="n">pa</span>

<span class="n">buf</span> <span class="o">=</span> <span class="n">io</span><span class="p">.</span><span class="nc">BytesIO</span><span class="p">()</span>
<span class="n">batch</span> <span class="o">=</span> <span class="n">pa</span><span class="p">.</span><span class="nf">record_batch</span><span class="p">({</span><span class="sh">"</span><span class="s">x</span><span class="sh">"</span><span class="p">:</span> <span class="nf">range</span><span class="p">(</span><span class="mi">1000</span><span class="p">)})</span>
<span class="k">with</span> <span class="n">pa</span><span class="p">.</span><span class="n">ipc</span><span class="p">.</span><span class="nf">new_stream</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">batch</span><span class="p">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">pa</span><span class="p">.</span><span class="n">ipc</span><span class="p">.</span><span class="nc">IpcWriteOptions</span><span class="p">(</span><span class="n">compression</span><span class="o">=</span><span class="sh">"</span><span class="s">lz4</span><span class="sh">"</span><span class="p">))</span> <span class="k">as</span> <span class="n">w</span><span class="p">:</span>
    <span class="n">w</span><span class="p">.</span><span class="nf">write_batch</span><span class="p">(</span><span class="n">batch</span><span class="p">)</span>

<span class="n">buf</span><span class="p">.</span><span class="nf">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">na</span><span class="p">.</span><span class="n">ArrayStream</span><span class="p">.</span><span class="nf">from_readable</span><span class="p">(</span><span class="n">buf</span><span class="p">).</span><span class="nf">read_all</span><span class="p">()</span>
<span class="c1"># nanoarrow.Array&lt;non-nullable struct&lt;x: int64&gt;&gt;[1000]
# {'x': 0}
# {'x': 1}
# {'x': 2}
# {'x': 3}
# {'x': 4}
# {'x': 5}
# {'x': 6}
# {'x': 7}
# {'x': 8}
# {'x': 9}
# ...and 990 more items
</span></code></pre></div></div>
<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="r"><span class="n">library</span><span class="p">(</span><span class="n">nanoarrow</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">reticulate</span><span class="p">)</span><span class="w">

</span><span class="c1"># IPC Write with compression not available in arrow/R</span><span class="w">
</span><span class="n">pa</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">reticulate</span><span class="o">::</span><span class="n">import</span><span class="p">(</span><span class="s2">"pyarrow"</span><span class="p">)</span><span class="w">
</span><span class="n">io</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">reticulate</span><span class="o">::</span><span class="n">import</span><span class="p">(</span><span class="s2">"io"</span><span class="p">)</span><span class="w">

</span><span class="n">buf</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">io</span><span class="o">$</span><span class="n">BytesIO</span><span class="p">()</span><span class="w">
</span><span class="n">batch</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">arrow</span><span class="o">::</span><span class="n">record_batch</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="m">1000</span><span class="p">)</span><span class="w">
</span><span class="n">writer</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">pa</span><span class="o">$</span><span class="n">ipc</span><span class="o">$</span><span class="n">new_stream</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span><span class="w"> </span><span class="n">batch</span><span class="o">$</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pa</span><span class="o">$</span><span class="n">ipc</span><span class="o">$</span><span class="n">IpcWriteOptions</span><span class="p">(</span><span class="n">compression</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"lz4"</span><span class="p">))</span><span class="w">
</span><span class="n">writer</span><span class="o">$</span><span class="n">write_batch</span><span class="p">(</span><span class="n">batch</span><span class="p">)</span><span class="w">
</span><span class="n">writer</span><span class="o">$</span><span class="n">close</span><span class="p">()</span><span class="w">

</span><span class="n">nanoarrow</span><span class="o">::</span><span class="n">read_nanoarrow</span><span class="p">(</span><span class="nf">as.raw</span><span class="p">(</span><span class="n">buf</span><span class="o">$</span><span class="n">getvalue</span><span class="p">()))</span><span class="w"> </span><span class="o">|&gt;</span><span class="w">
  </span><span class="n">tibble</span><span class="o">::</span><span class="n">as_tibble</span><span class="p">()</span><span class="w">
</span><span class="c1">#&gt; # A tibble: 1,000 × 1</span><span class="w">
</span><span class="c1">#&gt;        x</span><span class="w">
</span><span class="c1">#&gt;    &lt;int&gt;</span><span class="w">
</span><span class="c1">#&gt;  1     1</span><span class="w">
</span><span class="c1">#&gt;  2     2</span><span class="w">
</span><span class="c1">#&gt;  3     3</span><span class="w">
</span><span class="c1">#&gt;  4     4</span><span class="w">
</span><span class="c1">#&gt;  5     5</span><span class="w">
</span><span class="c1">#&gt;  6     6</span><span class="w">
</span><span class="c1">#&gt;  7     7</span><span class="w">
</span><span class="c1">#&gt;  8     8</span><span class="w">
</span><span class="c1">#&gt;  9     9</span><span class="w">
</span><span class="c1">#&gt; 10    10</span><span class="w">
</span><span class="c1">#&gt; # ℹ 990 more rows</span><span class="w">
</span></code></pre></div></div>
<h2>Contributors</h2>
<p>This release consists of contributions from 5 contributors in addition
to the invaluable advice and support of the Apache Arrow community.</p>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="console"><span class="gp">$</span><span class="w"> </span>git shortlog <span class="nt">-sn</span> apache-arrow-nanoarrow-0.9.0.dev..apache-arrow-nanoarrow-0.9.0
<span class="go">    36  Dewey Dunnington
     2  Andrew Kane
     2  Bryce Mecum
     1  Michael Osipov
     1  Oliver Borchert
</span></code></pre></div></div>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the 0.9.0 release of Apache Arrow nanoarrow. This release consists of 38 resolved GitHub issues from 5 contributors. Release Highlights In addition to a number of bugfixes and minor build system improvements, we added several new features in nanoarrow 0.9.0. Dictionary decoding support in IPC reader Reference-counted array/buffer support LZ4 decompression support in R and Python bindings See the Changelog for a detailed list of contributions to this release. Features Dictionary decode support Whereas the nanoarrow IPC reader suppports most Arrow IPC features, dictionary support was a long requested gap in the reader functionality (mostly requested by users of the DuckDB nanoarrow extension, which uses nanoarrow's reader). Dictionary encoding is used to reduce the size of frequently repeated values and is the serialized equivalent of the &quot;dictionary&quot; data type that is exposed in most Arrow implementations. In nanoarrow 0.9.0 built with the IPC feature enabled, streams that include the most common forms of dictionary encoding (i.e., dictionary replacement) should now work out of the box. This includes nested/complex dictionary types and dictionary replacement but does not include &quot;delta&quot; dictionaries (i.e., dictionaires that grow larger as more values are encountered in the encoded values). In R this is accessible via read_nanoarrow(); in Python this is accessible via nanoarrow.ArrayStream.from_readable(); in C this is available via the higher level ArrowIpcArrayStreamReader API. Lower level users of the ArrowIpcDecoder will have to update existing usage to use the ArrowIpcDecoder...WithDictionaries() variants of some functions to support input with dictionary schemas or batches. Reference-counted array/buffer support In previous versions (since the introduction of the IPC reader), the ArrowIpcSharedBuffer has supported reading IPC streams and sharing an underlying set of data buffers for a group of arrays; however, this wasn't quite sufficient for the more complex case of decoding a dictionary and attaching cheaply-cloned shared &quot;values&quot; arrays for potentially many batches. Version 0.9.0 moves this functionality to the ArrowSharedBuffer and expands it to support moving all of an array's buffers into a shared state that can be more cheaply cloned. LZ4 decompression support in R and Python While LZ4 decompression support was has long been available via the pluggable decoder framework (and available since 0.8.0 as a built-in compile time option), reading IPC streams with LZ4 buffer compression was not possible in the R or Python bindings. In 0.9.0, the requisite configuration options were added such that the packages are built with LZ4 when it is available on the system. import io import nanoarrow as na import pyarrow as pa buf = io.BytesIO() batch = pa.record_batch({"x": range(1000)}) with pa.ipc.new_stream(buf, batch.schema, options=pa.ipc.IpcWriteOptions(compression="lz4")) as w: w.write_batch(batch) buf.seek(0) na.ArrayStream.from_readable(buf).read_all() # nanoarrow.Array&lt;non-nullable struct&lt;x: int64&gt;&gt;[1000] # {'x': 0} # {'x': 1} # {'x': 2} # {'x': 3} # {'x': 4} # {'x': 5} # {'x': 6} # {'x': 7} # {'x': 8} # {'x': 9} # ...and 990 more items library(nanoarrow) library(reticulate) # IPC Write with compression not available in arrow/R pa &lt;- reticulate::import("pyarrow") io &lt;- reticulate::import("io") buf &lt;- io$BytesIO() batch &lt;- arrow::record_batch(x = 1:1000) writer &lt;- pa$ipc$new_stream(buf, batch$schema, options = pa$ipc$IpcWriteOptions(compression = "lz4")) writer$write_batch(batch) writer$close() nanoarrow::read_nanoarrow(as.raw(buf$getvalue())) |&gt; tibble::as_tibble() #&gt; # A tibble: 1,000 × 1 #&gt; x #&gt; &lt;int&gt; #&gt; 1 1 #&gt; 2 2 #&gt; 3 3 #&gt; 4 4 #&gt; 5 5 #&gt; 6 6 #&gt; 7 7 #&gt; 8 8 #&gt; 9 9 #&gt; 10 10 #&gt; # ℹ 990 more rows Contributors This release consists of contributions from 5 contributors in addition to the invaluable advice and support of the Apache Arrow community. $ git shortlog -sn apache-arrow-nanoarrow-0.9.0.dev..apache-arrow-nanoarrow-0.9.0 36 Dewey Dunnington 2 Andrew Kane 2 Bryce Mecum 1 Michael Osipov 1 Oliver Borchert]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow 25.0.1 Release</title><link href="https://arrow.apache.org/blog/2026/08/10/25.0.1-release/" rel="alternate" type="text/html" title="Apache Arrow 25.0.1 Release" /><published>2026-08-10T00:00:00-04:00</published><updated>2026-08-10T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/08/10/25.0.1-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/08/10/25.0.1-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the 25.0.1 release.
The 25.0.1 release is mostly a bugfix release that includes <a href="https://github.com/apache/arrow/milestone/76?closed=1"><strong>9 resolved issues</strong></a>
on <a href="/release/25.0.1.html#contributors"><strong>10 distinct commits</strong></a> from <a href="/release/25.0.1.html#contributors"><strong>6 distinct contributors</strong></a>.</p>
<p>See the <a href="https://arrow.apache.org/install/">Install Page</a> to
learn how to get the libraries for your platform.</p>
<p>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 <a href="/release/25.0.1.html#changelog">complete changelog</a>.</p>
<h2>C++ notes</h2>
<ul>
<li>Fix possible Segfault on SVE128 unpack (<a href="https://github.com/apache/arrow/issues/50503">GH-50503</a>),
(<a href="https://github.com/apache/arrow/issues/50605">GH-50605</a>).</li>
<li>Bump bundled mimalloc to fix possible Segfault with bundled mimalloc (<a href="https://github.com/apache/arrow/issues/50471">GH-50471</a>),
(<a href="https://github.com/apache/arrow/issues/50428">GH-50428</a>).</li>
</ul>
<h2>Python notes</h2>
<ul>
<li>Add performance improvement in order to solve Apache Spark's
performance regression on their switch from regular Python UDFs to
Arrow serialization by default (<a href="https://github.com/apache/arrow/issues/50326">GH-50326</a>).</li>
<li>Narrow the Feather deprecation added in 25.0.0 to legacy V1 only.
<code>pyarrow.feather</code> V2 reads and writes no longer warn, while V1 reads and
writes emit <code>DeprecationWarning</code> instead of <code>FutureWarning</code> (<a href="https://github.com/apache/arrow/issues/50808">GH-50808</a>).</li>
</ul>
<h2>Other modules and languages</h2>
<p>No general changes were made to the other libraries or languages.</p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the 25.0.1 release. The 25.0.1 release is mostly a bugfix release that includes 9 resolved issues on 10 distinct commits from 6 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. C++ notes Fix possible Segfault on SVE128 unpack (GH-50503), (GH-50605). Bump bundled mimalloc to fix possible Segfault with bundled mimalloc (GH-50471), (GH-50428). Python notes Add performance improvement in order to solve Apache Spark's performance regression on their switch from regular Python UDFs to Arrow serialization by default (GH-50326). Narrow the Feather deprecation added in 25.0.0 to legacy V1 only. pyarrow.feather V2 reads and writes no longer warn, while V1 reads and writes emit DeprecationWarning instead of FutureWarning (GH-50808). Other modules and languages No general changes were made to the other libraries or languages.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow ADBC 24 (Libraries) Release</title><link href="https://arrow.apache.org/blog/2026/07/28/adbc-24-release/" rel="alternate" type="text/html" title="Apache Arrow ADBC 24 (Libraries) Release" /><published>2026-07-28T00:00:00-04:00</published><updated>2026-07-28T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/07/28/adbc-24-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/07/28/adbc-24-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the version 24 release of
the Apache Arrow ADBC libraries. This release includes <a href="https://github.com/apache/arrow-adbc/issues?q=is%3Aissue%20state%3Aclosed%20milestone%3A%22ADBC%20Libraries%2024%22"><strong>57
resolved issues</strong></a> and <a href="https://github.com/apache/arrow-adbc/pulls?q=is%3Apr%20state%3Aclosed%20milestone%3A%22ADBC%20Libraries%2024%22%20-author%3Aapp%2Fdependabot"><strong>142 merged pull requests</strong></a> from
<a href="#contributors"><strong>28 distinct contributors</strong></a>.</p>
<p>This is a release of the <strong>libraries</strong>, which are at version 24.  The
<a href="https://arrow.apache.org/adbc/24/format/specification.html"><strong>API specification</strong></a> is versioned separately and is at
version 1.1.0.</p>
<p>The subcomponents are versioned independently:</p>
<ul>
<li>C/C++/GLib/Go/Python/Ruby: 1.12.0</li>
<li>C#: 0.24.0</li>
<li>Java: 0.24.0</li>
<li>JavaScript: 0.24.0</li>
<li>R: 0.24.0</li>
<li>Rust: 0.24.0</li>
</ul>
<p>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 <a href="https://github.com/apache/arrow-adbc/blob/apache-arrow-adbc-24/CHANGELOG.md">complete changelog</a>.</p>
<h2>Release Highlights</h2>
<p>Note: we are planning to require C++20 starting from the next release. Also,
we will drop support for Python 3.10 no earlier than the release after next
i.e. no earlier than release 26. Release 26 is expected in about 3-4 months
(October~November 2026), and the EOL for Python 3.10 is October 2026.</p>
<h3>Breaking Changes and Deprecations</h3>
<p>Development of the ADBC drivers for Apache DataFusion, BigQuery, Databricks,
and Snowflake has moved to the <a href="https://adbc-drivers.org/">ADBC Driver
Foundry</a>, an independent, community-maintained
project separate from Apache Arrow. The drivers remain available and continue
to be developed there. No further releases of those drivers will come from
this project, but existing packages will remain available, possibly as
archived listings. For background, see <a href="https://arrow.apache.org/adbc/24/driver/authoring.html#why-the-driver-foundry-not-this-repository">the ADBC documentation on driver
development</a>.
Current driver locations and maintainer information are listed under
<a href="https://arrow.apache.org/adbc/24/driver/index.html">Drivers</a>.</p>
<p>Similarly, the experimental, incomplete support for Amazon Redshift in the
PostgreSQL driver has been removed. A dedicated <a href="https://adbc-drivers.org/drivers/redshift/">ADBC driver for Amazon
Redshift</a> is available from the
ADBC Driver Foundry.</p>
<p>The ADBC drivers for Apache Arrow Flight SQL, PostgreSQL, and SQLite continue
to be maintained and released by this project.</p>
<p>Java API definitions were narrowed so that <code>close</code> is only declared to throw
<code>AdbcException</code> as a checked
exception. (<a href="https://github.com/apache/arrow-adbc/pull/4451">#4451</a>)</p>
<p>The PostgreSQL driver now lazily initializes transactions to make it work
better with connection
pools. (<a href="https://github.com/apache/arrow-adbc/pull/4424">#4424</a>)</p>
<h3>Documentation</h3>
<p>The documentation has been overhauled and is now organized around three common
tasks: <a href="https://arrow.apache.org/adbc/24/driver/index.html">finding and installing
drivers</a>, <a href="https://arrow.apache.org/adbc/24/client_libraries.html">connecting
through a client
library</a>, and
<a href="https://arrow.apache.org/adbc/24/driver/authoring.html">developing a
driver</a>.
(<a href="https://github.com/apache/arrow-adbc/pull/4525">#4525</a>)</p>
<p>The revised docs emphasize ADBC's cross-language driver model: drivers are
typically distributed as shared libraries that can be used from any supported
language or client.</p>
<p>A new <a href="https://arrow.apache.org/adbc/24/integrations.html">Tools &amp;
Integrations</a> page
highlights tools and frameworks that integrate with ADBC. We welcome
contributions to add more integrations.</p>
<p>A new <a href="https://arrow.apache.org/adbc/24/connection_profiles.html">Connection
Profiles</a> page shows
how to use reusable profiles to configure ADBC connections.</p>
<p>The docs also describe how most drivers now recognize URIs with schemes
matching their names, and how <a href="https://arrow.apache.org/adbc/24/format/driver_manifests.html#resolving-a-driver-from-a-connection-uri">driver managers can use the scheme to resolve
the
driver</a>
when it is not otherwise specified.</p>
<h3>Core APIs &amp; Client Libraries</h3>
<p>C# now has a native driver manager, allowing it to load drivers, manifests,
and profiles (<a href="https://github.com/apache/arrow-adbc/pull/4075">#4075</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4340">#4340</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4341">#4341</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4330">#4330</a>). The core libraries
are now compatible with AOT compilation, enabling drivers to be built as
standalone shared libaries
(<a href="https://github.com/apache/arrow-adbc/pull/4243">#4243</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4318">#4318</a>).</p>
<p>The Go <code>database/sql</code> adapter now supports converting more Arrow types to Go
types (<a href="https://github.com/apache/arrow-adbc/pull/4416">#4416</a>).</p>
<p>The Java core APIs now support a &quot;fluent&quot; style ingest API (#4466). Also,
support for dynamically loading drivers for use in Java has been greatly
expanded and should now support all of the ADBC APIs and features expected of
a client library (<a href="https://github.com/apache/arrow-adbc/pull/4452">#4452</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4211">#4211</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4411">#4411</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4202">#4202</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4359">#4359</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4212">#4212</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4263">#4263</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4229">#4229</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4203">#4203</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4361">#4361</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4362">#4362</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4249">#4249</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4250">#4250</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4398">#4398</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4397">#4397</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4423">#4423</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4395">#4395</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4396">#4396</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4391">#4391</a>).</p>
<p>The JavaScript client library no longer requires the <code>driver</code> parameter and
can infer the driver to load based on the URI, or can accept a profile
(<a href="https://github.com/apache/arrow-adbc/pull/4357">#4357</a>).</p>
<p>The R client library no longer requires the <code>driver</code> parameter and can infer
the driver to load based on the URI, or can accept a profile
(<a href="https://github.com/apache/arrow-adbc/pull/4535">#4535</a>).</p>
<p>Some tweaks have been made to the Rust core APIs to better support interop
with dynamically loaded drivers and make certain conventions clearer
(<a href="https://github.com/apache/arrow-adbc/pull/4427">#4427</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4510">#4510</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4350">#4350</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4141">#4141</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4181">#4181</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4473">#4473</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4469">#4469</a>).</p>
<h3>Drivers</h3>
<p>This project continues to maintain and release the ADBC drivers for Apache
Arrow Flight SQL, PostgreSQL, and SQLite. As mentioned above, the DataFusion,
BigQuery, Databricks, and Snowflake drivers are now maintained in the <a href="https://adbc-drivers.org/">ADBC
Driver Foundry</a>, alongside many others.</p>
<p>The Flight SQL driver now recognizes URIs with the <code>flightsql://</code> scheme
(<a href="https://github.com/apache/arrow-adbc/pull/4488">#4488</a>). It also has more
support for logging and OpenTelemetry tracing
(<a href="https://github.com/apache/arrow-adbc/pull/4322">#4322</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4486">#4486</a>).</p>
<p>The PostgreSQL driver now uses libpq version 18.4 (up from 16.9)
(<a href="https://github.com/apache/arrow-adbc/pull/4566">#4566</a>). Several bugs have
been fixed around handling of the NUMERIC type, and it has been optimized on
platforms where int128 is available (generally, platforms other than Windows)
(<a href="https://github.com/apache/arrow-adbc/pull/4536">#4536</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4499">#4499</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4523">#4523</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4498">#4498</a>). GetObjects now
populates the <code>xdbc_type_name</code> field
(<a href="https://github.com/apache/arrow-adbc/pull/4457">#4457</a>). JSON columns are
now returned with the <code>arrow.json</code> extension type
(<a href="https://github.com/apache/arrow-adbc/pull/4415">#4415</a>), and ingesting into
JSONB columns is now supported
(<a href="https://github.com/apache/arrow-adbc/pull/4505">#4505</a>).</p>
<p>The SQLite driver now uses SQLite version 3.53.1 (up from 3.51.2)
(<a href="https://github.com/apache/arrow-adbc/pull/4566">#4566</a>). It now recognizes
URIs with the <code>sqlite://</code> scheme
(<a href="https://github.com/apache/arrow-adbc/pull/4463">#4463</a>).</p>
<p><a id="contributors"></a></p>
<h2>Contributors</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git shortlog --perl-regexp --author='^((?!dependabot\[bot\]).*)$' -sn apache-arrow-adbc-23..apache-arrow-adbc-24
    58	David Li
    16	Bryce Mecum
    11	Fredrik Fornwall
     7	Curt Hagenlocher
     7	eitsupi
     6	Mandukhai Alimaa
     5	davidhcoe
     4	Matt Topol
     4	takuya kodama
     3	Ian Cook
     3	복준수
     2	Artur Rakhmatulin
     2	Austin Bonander
     2	Bruce Irschick
     2	Daniel_McBride
     2	Emil Sadek
     1	Arnold Wakim
     1	Aurélien Pupier
     1	Dan Liu
     1	Felipe Oliveira Carvalho
     1	Kent Wu
     1	Neal Richardson
     1	Nir Portal
     1	Pavel Agafonov
     1	Rishav Rungta
     1	Shubham Pandey
     1	mete
     1	xinyu.lin
</code></pre></div></div>
<h2>Roadmap</h2>
<p>We are working on the next revision of the API standard, focusing on missing
features (primarily metadata/catalog data). We welcome anyone interested in
contributing. Current progress can be found in the <a href="https://github.com/apache/arrow-adbc/milestone/9">1.2.0 specification
milestone</a>.</p>
<h2>Getting Involved</h2>
<p>We welcome questions and contributions from all interested.  Issues
can be filed on <a href="https://github.com/apache/arrow-adbc/issues">GitHub</a>, and questions can be directed to GitHub
or the <a href="/community/">Arrow mailing lists</a>.</p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the version 24 release of the Apache Arrow ADBC libraries. This release includes 57 resolved issues and 142 merged pull requests from 28 distinct contributors. This is a release of the libraries, which are at version 24. The API specification is versioned separately and is at version 1.1.0. The subcomponents are versioned independently: C/C++/GLib/Go/Python/Ruby: 1.12.0 C#: 0.24.0 Java: 0.24.0 JavaScript: 0.24.0 R: 0.24.0 Rust: 0.24.0 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. Release Highlights Note: we are planning to require C++20 starting from the next release. Also, we will drop support for Python 3.10 no earlier than the release after next i.e. no earlier than release 26. Release 26 is expected in about 3-4 months (October~November 2026), and the EOL for Python 3.10 is October 2026. Breaking Changes and Deprecations Development of the ADBC drivers for Apache DataFusion, BigQuery, Databricks, and Snowflake has moved to the ADBC Driver Foundry, an independent, community-maintained project separate from Apache Arrow. The drivers remain available and continue to be developed there. No further releases of those drivers will come from this project, but existing packages will remain available, possibly as archived listings. For background, see the ADBC documentation on driver development. Current driver locations and maintainer information are listed under Drivers. Similarly, the experimental, incomplete support for Amazon Redshift in the PostgreSQL driver has been removed. A dedicated ADBC driver for Amazon Redshift is available from the ADBC Driver Foundry. The ADBC drivers for Apache Arrow Flight SQL, PostgreSQL, and SQLite continue to be maintained and released by this project. Java API definitions were narrowed so that close is only declared to throw AdbcException as a checked exception. (#4451) The PostgreSQL driver now lazily initializes transactions to make it work better with connection pools. (#4424) Documentation The documentation has been overhauled and is now organized around three common tasks: finding and installing drivers, connecting through a client library, and developing a driver. (#4525) The revised docs emphasize ADBC's cross-language driver model: drivers are typically distributed as shared libraries that can be used from any supported language or client. A new Tools &amp; Integrations page highlights tools and frameworks that integrate with ADBC. We welcome contributions to add more integrations. A new Connection Profiles page shows how to use reusable profiles to configure ADBC connections. The docs also describe how most drivers now recognize URIs with schemes matching their names, and how driver managers can use the scheme to resolve the driver when it is not otherwise specified. Core APIs &amp; Client Libraries C# now has a native driver manager, allowing it to load drivers, manifests, and profiles (#4075, #4340, #4341, #4330). The core libraries are now compatible with AOT compilation, enabling drivers to be built as standalone shared libaries (#4243, #4318). The Go database/sql adapter now supports converting more Arrow types to Go types (#4416). The Java core APIs now support a &quot;fluent&quot; style ingest API (#4466). Also, support for dynamically loading drivers for use in Java has been greatly expanded and should now support all of the ADBC APIs and features expected of a client library (#4452, #4211, #4411, #4202, #4359, #4212, #4263, #4229, #4203, #4361, #4362, #4249, #4250, #4398, #4397, #4423, #4395, #4396, #4391). The JavaScript client library no longer requires the driver parameter and can infer the driver to load based on the URI, or can accept a profile (#4357). The R client library no longer requires the driver parameter and can infer the driver to load based on the URI, or can accept a profile (#4535). Some tweaks have been made to the Rust core APIs to better support interop with dynamically loaded drivers and make certain conventions clearer (#4427, #4510, #4350, #4141, #4181, #4473, #4469). Drivers This project continues to maintain and release the ADBC drivers for Apache Arrow Flight SQL, PostgreSQL, and SQLite. As mentioned above, the DataFusion, BigQuery, Databricks, and Snowflake drivers are now maintained in the ADBC Driver Foundry, alongside many others. The Flight SQL driver now recognizes URIs with the flightsql:// scheme (#4488). It also has more support for logging and OpenTelemetry tracing (#4322, #4486). The PostgreSQL driver now uses libpq version 18.4 (up from 16.9) (#4566). Several bugs have been fixed around handling of the NUMERIC type, and it has been optimized on platforms where int128 is available (generally, platforms other than Windows) (#4536, #4499, #4523, #4498). GetObjects now populates the xdbc_type_name field (#4457). JSON columns are now returned with the arrow.json extension type (#4415), and ingesting into JSONB columns is now supported (#4505). The SQLite driver now uses SQLite version 3.53.1 (up from 3.51.2) (#4566). It now recognizes URIs with the sqlite:// scheme (#4463). Contributors $ git shortlog --perl-regexp --author='^((?!dependabot\[bot\]).*)$' -sn apache-arrow-adbc-23..apache-arrow-adbc-24 58 David Li 16 Bryce Mecum 11 Fredrik Fornwall 7 Curt Hagenlocher 7 eitsupi 6 Mandukhai Alimaa 5 davidhcoe 4 Matt Topol 4 takuya kodama 3 Ian Cook 3 복준수 2 Artur Rakhmatulin 2 Austin Bonander 2 Bruce Irschick 2 Daniel_McBride 2 Emil Sadek 1 Arnold Wakim 1 Aurélien Pupier 1 Dan Liu 1 Felipe Oliveira Carvalho 1 Kent Wu 1 Neal Richardson 1 Nir Portal 1 Pavel Agafonov 1 Rishav Rungta 1 Shubham Pandey 1 mete 1 xinyu.lin Roadmap We are working on the next revision of the API standard, focusing on missing features (primarily metadata/catalog data). We welcome anyone interested in contributing. Current progress can be found in the 1.2.0 specification milestone. Getting Involved We welcome questions and contributions from all interested. Issues can be filed on GitHub, and questions can be directed to GitHub or the Arrow mailing lists.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow Go 18.7.0 Release</title><link href="https://arrow.apache.org/blog/2026/07/21/arrow-go-18.7.0/" rel="alternate" type="text/html" title="Apache Arrow Go 18.7.0 Release" /><published>2026-07-21T00:00:00-04:00</published><updated>2026-07-21T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/07/21/arrow-go-18.7.0</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/07/21/arrow-go-18.7.0/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the v18.7.0 release of Apache Arrow Go.
This minor release covers 101 commits from 23 distinct contributors.</p>
<h2>Contributors</h2>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="console"><span class="gp">$</span><span class="w"> </span>git shortlog <span class="nt">-sn</span> v18.6.0..v18.7.0
<span class="go">    52	Minh Vu
    21	Matt Topol
     3	Fredrik Fornwall
     3	Sai Asish Y
     2	Jared Yu (余启正)
     2	Neelesh Salian
     2	Ondřej Pavela
     2	abir
     1	Alex Dubov
     1	Bryce Mecum
     1	David Li
     1	David Zhao
     1	Dima Kuznetsov
     1	Lucas Valente
     1	Mahdi Dibaiee
     1	Matan Rosenberg
     1	Patzifist
     1	Ruihao Chen
     1	Samuel Arnold
     1	Tobias Pütz
     1	Truffle
     1	Varun Venkatesh
     1	daniel-adam-tfs
</span></code></pre></div></div>
<h2>Highlights</h2>
<h3>Arrow</h3>
<h4>Features</h4>
<ul>
<li>Support casts between binary/utf8 and binary_view/utf8_view <a href="https://github.com/apache/arrow-go/pull/802">#802</a></li>
<li>Added a Resize method to RecordBuilder <a href="https://github.com/apache/arrow-go/pull/805">#805</a></li>
<li>Support dictionary arrays for Filter and Take <a href="https://github.com/apache/arrow-go/pull/716">#716</a></li>
<li>Add an UnshredVariant method for collapsing a shredded variant array <a href="https://github.com/apache/arrow-go/pull/859">#859</a></li>
<li>Add implementation of <code>TimestampWithOffset</code> canonical extension type <a href="https://github.com/apache/arrow-go/pull/558">#558</a></li>
</ul>
<h4>Bug Fixes</h4>
<ul>
<li>Made C Data interface stream memory release deterministic <a href="https://github.com/apache/arrow-go/pull/793">#793</a></li>
<li>Preserve large integer precision in JSON decoding <a href="https://github.com/apache/arrow-go/pull/816">#816</a></li>
</ul>
<h3>Parquet</h3>
<h4>Features</h4>
<ul>
<li>Support writing LARGE_LIST arrays <a href="https://github.com/apache/arrow-go/pull/838">#838</a></li>
<li>Opt-in streaming reads for large data pages <a href="https://github.com/apache/arrow-go/pull/880">#880</a></li>
</ul>
<h4>Bug Fixes</h4>
<ul>
<li>Corrected a couple variant bugs <a href="https://github.com/apache/arrow-go/pull/841">#841</a>, <a href="https://github.com/apache/arrow-go/pull/840">#840</a>, <a href="https://github.com/apache/arrow-go/pull/939">#939</a></li>
<li>Properly align DataPageV2 pages to row boundaries in spaced writes <a href="https://github.com/apache/arrow-go/pull/883">#883</a></li>
</ul>
<h4>Performance Improvements</h4>
<ul>
<li>Added SIMD-accelerated byte-stream-split decoding <a href="https://github.com/apache/arrow-go/pull/654">#654</a></li>
<li>Avoid constructing ColunChunkMetaData in page index range determination <a href="https://github.com/apache/arrow-go/pull/831">#831</a></li>
<li>Improve BloomFilter memory recycling and pooling <a href="https://github.com/apache/arrow-go/pull/864">#864</a></li>
</ul>
<h2>Changelog</h2>
<h3>What's Changed</h3>
<ul>
<li>fix(release): keys download by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/781">#781</a></li>
<li>parquet/compress: enable WithAllLitEntropyCompression(true) for zstd by @varun0630 in <a href="https://github.com/apache/arrow-go/pull/779">#779</a></li>
<li>release: fix syntax error in verify_rc.sh by @amoeba in <a href="https://github.com/apache/arrow-go/pull/782">#782</a></li>
<li>fix(parquet): align dictionary fallback with parquet-mr by @twuebi in <a href="https://github.com/apache/arrow-go/pull/786">#786</a></li>
<li>fix(arrow/cdata): make nativeCRecordBatchReader deterministic by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/793">#793</a></li>
<li>fix(compute/kernels): map FSB byte-width to numeric memo type for is_in by @SAY-5 in <a href="https://github.com/apache/arrow-go/pull/797">#797</a></li>
<li>fix(arrow/flight): deliver response headers eagerly in streaming client middleware by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/801">#801</a></li>
<li>fix(ipc): preserve map child field metadata by @dimakuz in <a href="https://github.com/apache/arrow-go/pull/809">#809</a></li>
<li>fix(avro): error on complex (non-nullable) unions instead of silently dropping (#777) by @SAY-5 in <a href="https://github.com/apache/arrow-go/pull/808">#808</a></li>
<li>fix(parquet/metadata): do not pre-set hasDistinctCount in stat factories by @SAY-5 in <a href="https://github.com/apache/arrow-go/pull/807">#807</a></li>
<li>feat(compute): support casts between binary/string and binary_view/string_view by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/802">#802</a></li>
<li>fix(arrow/array): preserve large integer precision in JSON decoding by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/816">#816</a></li>
<li>feat(arrow/array): add Resize method to RecordBuilder by @oakad in <a href="https://github.com/apache/arrow-go/pull/805">#805</a></li>
<li>perf(parquet/pqarrow): cap RecordReader batch size to actual row count by @paveon in <a href="https://github.com/apache/arrow-go/pull/817">#817</a></li>
<li>docs(parquet): correct DefaultDataPageSize comment from 1K to 1M by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/822">#822</a></li>
<li>fix(arrow/array): silence copylocks warning in numeric_generic.go by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/823">#823</a></li>
<li>feat(arrow/compute/exprs): support expr.IntervalYearToMonthLiteral in literalToDatum by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/825">#825</a></li>
<li>fix(parquet): return error instead of panicking on first-write failure by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/824">#824</a></li>
<li>[Parquet] Add SIMD-accelerated byte-stream-split decoding by @daniel-adam-tfs in <a href="https://github.com/apache/arrow-go/pull/654">#654</a></li>
<li>perf(parquet/metadata): avoid constructing ColumnChunkMetaData in page index range determination by @paveon in <a href="https://github.com/apache/arrow-go/pull/831">#831</a></li>
<li>feat: filter and take for dictionary arrays by @lesam in <a href="https://github.com/apache/arrow-go/pull/716">#716</a></li>
<li>fix(arrow/array): adding string boundary checking for (*String).Value by @happydave1 in <a href="https://github.com/apache/arrow-go/pull/844">#844</a></li>
<li>fix(parquet/variant): correct binary search bounds in ObjectValue.ValueByKey by @qzyu999 in <a href="https://github.com/apache/arrow-go/pull/841">#841</a></li>
<li>fix(parquet/variant): correct is_large bit position in valueSize for arrays by @qzyu999 in <a href="https://github.com/apache/arrow-go/pull/840">#840</a></li>
<li>feat(avro): support local-timestamp logical types by @abir-eon in <a href="https://github.com/apache/arrow-go/pull/832">#832</a></li>
<li>fix(avro): append raw bytes by @matan129 in <a href="https://github.com/apache/arrow-go/pull/850">#850</a></li>
<li>fix(arrow/array): use scale-aware ValueStr in decimal array String() by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/849">#849</a></li>
<li>feat(parquet/pqarrow): support writing LARGE_LIST types by @lidavidm in <a href="https://github.com/apache/arrow-go/pull/838">#838</a></li>
<li>fix(arrow/scalar): implement Release()/Retain() on *scalar.Extension by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/851">#851</a></li>
<li>docs(arrow/ipc): document that Writer and FileWriter are not concurrency safe by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/856">#856</a></li>
<li>fix(parquet): add WriteBatchSpacedWithError to surface spaced-write failures by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/852">#852</a></li>
<li>ci: pin Go to go.mod in RC verify so the matching toolchain is used by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/857">#857</a></li>
<li>feat(arrow/extensions): add UnshredVariant to collapse a shredded variant array by @nssalian in <a href="https://github.com/apache/arrow-go/pull/859">#859</a></li>
<li>fix(arrow/compute): accept type max value in safe decimal-to-int cast by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/862">#862</a></li>
<li>fix(array): validate negative bounds in NewSliceData by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/870">#870</a></li>
<li>fix(array): dictionary null index zeroing by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/871">#871</a></li>
<li>fix(array): struct stringer required child mask by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/873">#873</a></li>
<li>fix(array): empty chunked approximate equality by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/874">#874</a></li>
<li>fix(array): validate dense union offset lengths by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/875">#875</a></li>
<li>Use semantic type equality in AddColumn by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/878">#878</a></li>
<li>fix(array): clear dictionary data on reset by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/876">#876</a></li>
<li>Reject negative chunked slice bounds by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/879">#879</a></li>
<li>fix(array): array data hashing coverage by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/872">#872</a></li>
<li>Support dense union slice offsets by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/877">#877</a></li>
<li>Support sparse union sliced type ids by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/881">#881</a></li>
<li>fix(build): correct phony target declaration by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/890">#890</a></li>
<li>fix(parquet/compress): Gzip CompressBound by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/886">#886</a></li>
<li>fix(parquet): free excluded stats bytes in ApplyStatSizeLimits by @mdibaiee in <a href="https://github.com/apache/arrow-go/pull/885">#885</a></li>
<li>fix(tmpl): preserve escaped JSON string bytes by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/889">#889</a></li>
<li>fix(parquet/compress): Brotli CompressBound by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/884">#884</a></li>
<li>fix(parquet): align DataPageV2 pages to row boundaries in spaced writes by @truffle-dev in <a href="https://github.com/apache/arrow-go/pull/883">#883</a></li>
<li>fix(array): guard BinaryViewBuilder size checks by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/888">#888</a></li>
<li>fix: clarify StringViewBuilder UnmarshalJSON error message by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/894">#894</a></li>
<li>fix: clarify StringViewBuilder.UnmarshalOne expected type by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/897">#897</a></li>
<li>fix: guard multiBufferBuilder UnsafeAppend against short copy by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/896">#896</a></li>
<li>fix(array): make SetNull idempotent and track null count by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/905">#905</a></li>
<li>fix(ci): accept --json and pin gobenchdata by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/906">#906</a></li>
<li>build: verify Apache RAT jar checksum before execution by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/908">#908</a></li>
<li>fix(parquet): read full bloom filter buffers by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/892">#892</a></li>
<li>fix(docs): fix CPU markdown link in README by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/907">#907</a></li>
<li>fix(parquet): validate DataPageV2 decoded length by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/911">#911</a></li>
<li>fix(arreflect): validate primitive conversion assignment overflow checks by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/903">#903</a></li>
<li>fix(parquet): clamp repLevels in byte-array DataPageV2 row-boundary alignment by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/919">#919</a></li>
<li>fix(parquet/metadata): fix BloomFilter memory recycling, doc contract, and benchmark by @Patzifist in <a href="https://github.com/apache/arrow-go/pull/864">#864</a></li>
<li>fix(flight/flightsql): recover real error when prepared DoPut stream closes early by @fornwall in <a href="https://github.com/apache/arrow-go/pull/920">#920</a></li>
<li>fix: guard protobuf oneof/union reflection on nil oneof values by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/910">#910</a></li>
<li>fix(parquet): copy ByteArray statistics min/max to prevent use-after-free by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/917">#917</a></li>
<li>fix(array): bounds check FixedSizeBinary.Value by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/923">#923</a></li>
<li>fix(array): reject unsupported type IDs by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/925">#925</a></li>
<li>fix(array): validate JSON start offsets by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/929">#929</a></li>
<li>fix(scalar): validate dictionary indices before conversion by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/927">#927</a></li>
<li>fix(array): retain dictionary before replacement by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/926">#926</a></li>
<li>feat(parquet): opt-in streaming reads for large data pages by @joechenrh in <a href="https://github.com/apache/arrow-go/pull/880">#880</a></li>
<li>fix(parquet): propagate row-group and page-index write errors by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/921">#921</a></li>
<li>fix(array): honor struct offsets in constructors and validity masks by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/922">#922</a></li>
<li>fix(parquet): make column reader cleanup idempotent by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/924">#924</a></li>
<li>fix(scalar): hash list values logically by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/928">#928</a></li>
<li>fix(array): recursively validate nested arrays by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/930">#930</a></li>
<li>feat(parquet/variant): add Metadata.SizeBytes to split a concatenated variant by @nssalian in <a href="https://github.com/apache/arrow-go/pull/939">#939</a></li>
<li>fix(cdata): validate imported array sizes by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/931">#931</a></li>
<li>fix(avro): decode nullable logical timestamps by @abir-eon in <a href="https://github.com/apache/arrow-go/pull/935">#935</a></li>
<li>fix(flight/flightsql/example): support dictionary-encoded parameter columns by @fornwall in <a href="https://github.com/apache/arrow-go/pull/936">#936</a></li>
<li>fix(arrow/scalar): reject negative indices in GetScalar by @fornwall in <a href="https://github.com/apache/arrow-go/pull/940">#940</a></li>
<li>fix(flight): reject malformed unary bearer headers by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/941">#941</a></li>
<li>fix(flight): reject Basic credentials without a separator by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/942">#942</a></li>
<li>fix(memory): keep allocator ownership across Buffer.Reset by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/947">#947</a></li>
<li>fix(parquet): limit page allocations by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/953">#953</a></li>
<li>fix(parquet): return decompression errors by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/954">#954</a></li>
<li>fix(parquet): return errors for malformed encrypted payloads by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/945">#945</a></li>
<li>fix: repair failing benchmarks and stop bench.sh masking failures by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/938">#938</a></li>
<li>fix(parquet): handle short input in GetBatchBools by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/946">#946</a></li>
<li>fix(arrow): validate timestamp timezones by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/952">#952</a></li>
<li>fix(ipc): validate message framing bounds by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/955">#955</a></li>
<li>fix(parquet): reject truncated bit-packed batches by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/943">#943</a></li>
<li>fix(compute): handle comparison output offsets by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/956">#956</a></li>
<li>fix(arrow/array): avoid allocating for ReserveData(0) by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/895">#895</a></li>
<li>fix(compute): release temporary arrays in binary view casts by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/898">#898</a></li>
<li>fix(arrow/array): validate map builder entry lengths by @fallintoplace in <a href="https://github.com/apache/arrow-go/pull/957">#957</a></li>
<li>Add <code>TimestampWithOffset</code> canonical extension type by @serramatutu in <a href="https://github.com/apache/arrow-go/pull/558">#558</a></li>
<li>chore: bump version number by @zeroshade in <a href="https://github.com/apache/arrow-go/pull/959">#959</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li>@varun0630 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/779">#779</a></li>
<li>@twuebi made their first contribution in <a href="https://github.com/apache/arrow-go/pull/786">#786</a></li>
<li>@SAY-5 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/797">#797</a></li>
<li>@oakad made their first contribution in <a href="https://github.com/apache/arrow-go/pull/805">#805</a></li>
<li>@paveon made their first contribution in <a href="https://github.com/apache/arrow-go/pull/817">#817</a></li>
<li>@lesam made their first contribution in <a href="https://github.com/apache/arrow-go/pull/716">#716</a></li>
<li>@happydave1 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/844">#844</a></li>
<li>@qzyu999 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/841">#841</a></li>
<li>@abir-eon made their first contribution in <a href="https://github.com/apache/arrow-go/pull/832">#832</a></li>
<li>@matan129 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/850">#850</a></li>
<li>@nssalian made their first contribution in <a href="https://github.com/apache/arrow-go/pull/859">#859</a></li>
<li>@fallintoplace made their first contribution in <a href="https://github.com/apache/arrow-go/pull/870">#870</a></li>
<li>@mdibaiee made their first contribution in <a href="https://github.com/apache/arrow-go/pull/885">#885</a></li>
<li>@truffle-dev made their first contribution in <a href="https://github.com/apache/arrow-go/pull/883">#883</a></li>
<li>@Patzifist made their first contribution in <a href="https://github.com/apache/arrow-go/pull/864">#864</a></li>
<li>@fornwall made their first contribution in <a href="https://github.com/apache/arrow-go/pull/920">#920</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/apache/arrow-go/compare/v18.6.0...v18.7.0">https://github.com/apache/arrow-go/compare/v18.6.0...v18.7.0</a></p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the v18.7.0 release of Apache Arrow Go. This minor release covers 101 commits from 23 distinct contributors. Contributors $ git shortlog -sn v18.6.0..v18.7.0 52 Minh Vu 21 Matt Topol 3 Fredrik Fornwall 3 Sai Asish Y 2 Jared Yu (余启正) 2 Neelesh Salian 2 Ondřej Pavela 2 abir 1 Alex Dubov 1 Bryce Mecum 1 David Li 1 David Zhao 1 Dima Kuznetsov 1 Lucas Valente 1 Mahdi Dibaiee 1 Matan Rosenberg 1 Patzifist 1 Ruihao Chen 1 Samuel Arnold 1 Tobias Pütz 1 Truffle 1 Varun Venkatesh 1 daniel-adam-tfs Highlights Arrow Features Support casts between binary/utf8 and binary_view/utf8_view #802 Added a Resize method to RecordBuilder #805 Support dictionary arrays for Filter and Take #716 Add an UnshredVariant method for collapsing a shredded variant array #859 Add implementation of TimestampWithOffset canonical extension type #558 Bug Fixes Made C Data interface stream memory release deterministic #793 Preserve large integer precision in JSON decoding #816 Parquet Features Support writing LARGE_LIST arrays #838 Opt-in streaming reads for large data pages #880 Bug Fixes Corrected a couple variant bugs #841, #840, #939 Properly align DataPageV2 pages to row boundaries in spaced writes #883 Performance Improvements Added SIMD-accelerated byte-stream-split decoding #654 Avoid constructing ColunChunkMetaData in page index range determination #831 Improve BloomFilter memory recycling and pooling #864 Changelog What's Changed fix(release): keys download by @zeroshade in #781 parquet/compress: enable WithAllLitEntropyCompression(true) for zstd by @varun0630 in #779 release: fix syntax error in verify_rc.sh by @amoeba in #782 fix(parquet): align dictionary fallback with parquet-mr by @twuebi in #786 fix(arrow/cdata): make nativeCRecordBatchReader deterministic by @zeroshade in #793 fix(compute/kernels): map FSB byte-width to numeric memo type for is_in by @SAY-5 in #797 fix(arrow/flight): deliver response headers eagerly in streaming client middleware by @zeroshade in #801 fix(ipc): preserve map child field metadata by @dimakuz in #809 fix(avro): error on complex (non-nullable) unions instead of silently dropping (#777) by @SAY-5 in #808 fix(parquet/metadata): do not pre-set hasDistinctCount in stat factories by @SAY-5 in #807 feat(compute): support casts between binary/string and binary_view/string_view by @zeroshade in #802 fix(arrow/array): preserve large integer precision in JSON decoding by @zeroshade in #816 feat(arrow/array): add Resize method to RecordBuilder by @oakad in #805 perf(parquet/pqarrow): cap RecordReader batch size to actual row count by @paveon in #817 docs(parquet): correct DefaultDataPageSize comment from 1K to 1M by @zeroshade in #822 fix(arrow/array): silence copylocks warning in numeric_generic.go by @zeroshade in #823 feat(arrow/compute/exprs): support expr.IntervalYearToMonthLiteral in literalToDatum by @zeroshade in #825 fix(parquet): return error instead of panicking on first-write failure by @zeroshade in #824 [Parquet] Add SIMD-accelerated byte-stream-split decoding by @daniel-adam-tfs in #654 perf(parquet/metadata): avoid constructing ColumnChunkMetaData in page index range determination by @paveon in #831 feat: filter and take for dictionary arrays by @lesam in #716 fix(arrow/array): adding string boundary checking for (*String).Value by @happydave1 in #844 fix(parquet/variant): correct binary search bounds in ObjectValue.ValueByKey by @qzyu999 in #841 fix(parquet/variant): correct is_large bit position in valueSize for arrays by @qzyu999 in #840 feat(avro): support local-timestamp logical types by @abir-eon in #832 fix(avro): append raw bytes by @matan129 in #850 fix(arrow/array): use scale-aware ValueStr in decimal array String() by @zeroshade in #849 feat(parquet/pqarrow): support writing LARGE_LIST types by @lidavidm in #838 fix(arrow/scalar): implement Release()/Retain() on *scalar.Extension by @zeroshade in #851 docs(arrow/ipc): document that Writer and FileWriter are not concurrency safe by @zeroshade in #856 fix(parquet): add WriteBatchSpacedWithError to surface spaced-write failures by @zeroshade in #852 ci: pin Go to go.mod in RC verify so the matching toolchain is used by @zeroshade in #857 feat(arrow/extensions): add UnshredVariant to collapse a shredded variant array by @nssalian in #859 fix(arrow/compute): accept type max value in safe decimal-to-int cast by @zeroshade in #862 fix(array): validate negative bounds in NewSliceData by @fallintoplace in #870 fix(array): dictionary null index zeroing by @fallintoplace in #871 fix(array): struct stringer required child mask by @fallintoplace in #873 fix(array): empty chunked approximate equality by @fallintoplace in #874 fix(array): validate dense union offset lengths by @fallintoplace in #875 Use semantic type equality in AddColumn by @fallintoplace in #878 fix(array): clear dictionary data on reset by @fallintoplace in #876 Reject negative chunked slice bounds by @fallintoplace in #879 fix(array): array data hashing coverage by @fallintoplace in #872 Support dense union slice offsets by @fallintoplace in #877 Support sparse union sliced type ids by @fallintoplace in #881 fix(build): correct phony target declaration by @fallintoplace in #890 fix(parquet/compress): Gzip CompressBound by @fallintoplace in #886 fix(parquet): free excluded stats bytes in ApplyStatSizeLimits by @mdibaiee in #885 fix(tmpl): preserve escaped JSON string bytes by @fallintoplace in #889 fix(parquet/compress): Brotli CompressBound by @fallintoplace in #884 fix(parquet): align DataPageV2 pages to row boundaries in spaced writes by @truffle-dev in #883 fix(array): guard BinaryViewBuilder size checks by @fallintoplace in #888 fix: clarify StringViewBuilder UnmarshalJSON error message by @fallintoplace in #894 fix: clarify StringViewBuilder.UnmarshalOne expected type by @fallintoplace in #897 fix: guard multiBufferBuilder UnsafeAppend against short copy by @fallintoplace in #896 fix(array): make SetNull idempotent and track null count by @fallintoplace in #905 fix(ci): accept --json and pin gobenchdata by @fallintoplace in #906 build: verify Apache RAT jar checksum before execution by @fallintoplace in #908 fix(parquet): read full bloom filter buffers by @fallintoplace in #892 fix(docs): fix CPU markdown link in README by @fallintoplace in #907 fix(parquet): validate DataPageV2 decoded length by @fallintoplace in #911 fix(arreflect): validate primitive conversion assignment overflow checks by @fallintoplace in #903 fix(parquet): clamp repLevels in byte-array DataPageV2 row-boundary alignment by @zeroshade in #919 fix(parquet/metadata): fix BloomFilter memory recycling, doc contract, and benchmark by @Patzifist in #864 fix(flight/flightsql): recover real error when prepared DoPut stream closes early by @fornwall in #920 fix: guard protobuf oneof/union reflection on nil oneof values by @fallintoplace in #910 fix(parquet): copy ByteArray statistics min/max to prevent use-after-free by @zeroshade in #917 fix(array): bounds check FixedSizeBinary.Value by @fallintoplace in #923 fix(array): reject unsupported type IDs by @fallintoplace in #925 fix(array): validate JSON start offsets by @fallintoplace in #929 fix(scalar): validate dictionary indices before conversion by @fallintoplace in #927 fix(array): retain dictionary before replacement by @fallintoplace in #926 feat(parquet): opt-in streaming reads for large data pages by @joechenrh in #880 fix(parquet): propagate row-group and page-index write errors by @fallintoplace in #921 fix(array): honor struct offsets in constructors and validity masks by @fallintoplace in #922 fix(parquet): make column reader cleanup idempotent by @fallintoplace in #924 fix(scalar): hash list values logically by @fallintoplace in #928 fix(array): recursively validate nested arrays by @fallintoplace in #930 feat(parquet/variant): add Metadata.SizeBytes to split a concatenated variant by @nssalian in #939 fix(cdata): validate imported array sizes by @fallintoplace in #931 fix(avro): decode nullable logical timestamps by @abir-eon in #935 fix(flight/flightsql/example): support dictionary-encoded parameter columns by @fornwall in #936 fix(arrow/scalar): reject negative indices in GetScalar by @fornwall in #940 fix(flight): reject malformed unary bearer headers by @fallintoplace in #941 fix(flight): reject Basic credentials without a separator by @fallintoplace in #942 fix(memory): keep allocator ownership across Buffer.Reset by @fallintoplace in #947 fix(parquet): limit page allocations by @fallintoplace in #953 fix(parquet): return decompression errors by @fallintoplace in #954 fix(parquet): return errors for malformed encrypted payloads by @fallintoplace in #945 fix: repair failing benchmarks and stop bench.sh masking failures by @zeroshade in #938 fix(parquet): handle short input in GetBatchBools by @fallintoplace in #946 fix(arrow): validate timestamp timezones by @fallintoplace in #952 fix(ipc): validate message framing bounds by @fallintoplace in #955 fix(parquet): reject truncated bit-packed batches by @fallintoplace in #943 fix(compute): handle comparison output offsets by @fallintoplace in #956 fix(arrow/array): avoid allocating for ReserveData(0) by @fallintoplace in #895 fix(compute): release temporary arrays in binary view casts by @fallintoplace in #898 fix(arrow/array): validate map builder entry lengths by @fallintoplace in #957 Add TimestampWithOffset canonical extension type by @serramatutu in #558 chore: bump version number by @zeroshade in #959 New Contributors @varun0630 made their first contribution in #779 @twuebi made their first contribution in #786 @SAY-5 made their first contribution in #797 @oakad made their first contribution in #805 @paveon made their first contribution in #817 @lesam made their first contribution in #716 @happydave1 made their first contribution in #844 @qzyu999 made their first contribution in #841 @abir-eon made their first contribution in #832 @matan129 made their first contribution in #850 @nssalian made their first contribution in #859 @fallintoplace made their first contribution in #870 @mdibaiee made their first contribution in #885 @truffle-dev made their first contribution in #883 @Patzifist made their first contribution in #864 @fornwall made their first contribution in #920 Full Changelog: https://github.com/apache/arrow-go/compare/v18.6.0...v18.7.0]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow 25.0.0 Release</title><link href="https://arrow.apache.org/blog/2026/07/10/25.0.0-release/" rel="alternate" type="text/html" title="Apache Arrow 25.0.0 Release" /><published>2026-07-10T00:00:00-04:00</published><updated>2026-07-10T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/07/10/25.0.0-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/07/10/25.0.0-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the 25.0.0 release. This release
covers over 3 months of development work and includes <a href="https://github.com/apache/arrow/milestone/74?closed=1"><strong>222 resolved
issues</strong></a> on <a href="/release/25.0.0.html#contributors"><strong>268 distinct commits</strong></a> from <a href="/release/25.0.0.html#contributors"><strong>66 distinct
contributors</strong></a>. See the <a href="https://arrow.apache.org/install/">Install Page</a> to
learn how to get the libraries for your platform.</p>
<p>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 <a href="/release/25.0.0.html#changelog">complete changelog</a>.</p>
<h2>Format Notes</h2>
<p>We clarified that variadic buffers exported over the C Data Interface could be
null (<a href="https://github.com/apache/arrow/pull/50255">GH-50255</a>). Consumers of the C Data Interface must be ready to handle them.</p>
<h2>Arrow Flight RPC Notes</h2>
<p>The Flight SQL protocol was amended to let servers explicitly inform clients whether a prepared statement contains a result set or not (<a href="https://github.com/apache/arrow/issues/49497">GH-49497</a>).</p>
<p>Progress was made on the ODBC driver for Flight SQL, but we are not yet distributing packages for end users at this time.</p>
<h2>C++ Notes</h2>
<h3>CSV</h3>
<p>A new option <code>default_column_type</code> disables type inference for all columns, including
those not listed in the <code>column_types</code> mapping (<a href="https://github.com/apache/arrow/pull/47663">GH-47663</a>).</p>
<h3>Compute</h3>
<p>A new <code>hypot</code> compute function calculates Euclidean norms without the avoidable
overflow of a naive implementation
(<a href="https://github.com/apache/arrow/pull/50198">GH-50198</a>).</p>
<p>Comparison functions have been upgraded to support StringView and BinaryView inputs
(<a href="https://github.com/apache/arrow/pull/49964">GH-49964</a>).</p>
<p>Sort functions and their siblings (rank, select-k) now allow configuring per-key
null placement, so as to emulate SQL constructs such as
<code>ORDER BY i NULLS FIRST, j NULLS LAST</code> (<a href="https://github.com/apache/arrow/pull/46926">GH-46926</a>).</p>
<p>Rank functions now correctly distinguish NaNs from null values in floating-point
arrays (<a href="https://github.com/apache/arrow/pull/45193">GH-45193</a>).</p>
<p>The <code>count</code> function now accounts for logical nulls in run-end-encoded arrays (<a href="https://github.com/apache/arrow/pull/49908">GH-49908</a>).</p>
<h3>File Systems</h3>
<p>The <code>FileSystemFactory</code> 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 (<a href="https://github.com/apache/arrow/pull/50044">GH-50044</a>).</p>
<h3>IPC</h3>
<p>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).</p>
<h3>Parquet</h3>
<p>When writing a Parquet file with bloom filters enabled, bloom filters are
automatically &quot;folded&quot; 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 (<a href="https://github.com/apache/arrow/pull/50008">GH-50008</a>).</p>
<p>Bloom filters can be faster on some platforms thanks to vectorization (<a href="https://github.com/apache/arrow/pull/50030">GH-50030</a>).</p>
<p>It is now possible to read and write ListView data from/to Parquet (<a href="https://github.com/apache/arrow/pull/50160">GH-50160</a>).</p>
<h3>Miscellaneous C++ changes</h3>
<p>On ARM64 platforms, Arrow C++ now supports dynamically dispatching to SVE-optimized
routines on compatible CPUs (<a href="https://github.com/apache/arrow/pull/49756">GH-49756</a>). Previously, dynamic dispatch was only supported
on x86 platforms.</p>
<p>Runtime CPU detection now uses xsimd instead of home-grown detection functions
(<a href="https://github.com/apache/arrow/pull/49940">GH-49940</a>).</p>
<p>The <code>ChunkedArray</code> class has a new method <code>ComputeLogicalNullCount</code>, mirroring
the existing methods of the same name on <code>Array</code> and <code>ArrayData</code> classes (<a href="https://github.com/apache/arrow/pull/50261">GH-50261</a>).</p>
<p>The <code>Table</code> class has a new method <code>ToTensor</code> complementing the existing method
of the same on the <code>RecordBatch</code> class (<a href="https://github.com/apache/arrow/pull/41870">GH-41870</a>). Both methods convert from the
columnar format to a contiguous two-dimensional array.</p>
<h2>Linux Packaging Notes</h2>
<p>The release dropped support for Debian bookworm <a href="https://github.com/apache/arrow/issues/50200">GH-50200</a> due to
the distribution reaching End Of Life.</p>
<p>We added Reproducible Builds support for the Debian Linux Packages <a href="https://github.com/apache/arrow/issues/49988">GH-49988</a>.</p>
<h2>Python Notes</h2>
<h3>Compatibility notes</h3>
<ul>
<li>Feather reader and writer is deprecated in favour of the Arrow IPC API
<a href="https://github.com/apache/arrow/issues/49232">GH-49232</a>.</li>
</ul>
<h3>New features</h3>
<ul>
<li><code>hypot</code> compute kernel is added to Arrow compute module and accessible
in PyArrow <a href="https://github.com/apache/arrow/issues/50197">GH-50197</a>.</li>
<li><code>pa.OSFile</code> now accepts open file descriptor (<code>int</code> parameter) besides
the <code>str</code> path <a href="https://github.com/apache/arrow/issues/49751">GH-49751</a>.</li>
<li>Conversion from a list of individual <code>numpy.ndarrays</code> to a <code>FixedShapeTensor</code>
is added <a href="https://github.com/apache/arrow/issues/49644">GH-49644</a>.</li>
<li><code>create_encryption_properties</code> and <code>create_decryption_properties</code> methods
are added to the parquet API using Arrow C++ <code>FileEncryptionPropertiesBuilder</code>
and <code>FileDecryptionPropertiesBuilder</code> <a href="https://github.com/apache/arrow/issues/47435">GH-47435</a>.</li>
<li>Conversion of Table to Tensor has been implemented in Arrow C++ and can also
be used in Python bindings <a href="https://github.com/apache/arrow/issues/40062">GH-40062</a>.</li>
<li><code>default_column_type</code> option is added to <code>csv.ConvertOptions</code> which sets a
default column type for all columns and can be combined with <code>column_types</code>
<a href="https://github.com/apache/arrow/issues/22232">GH-22232</a>.</li>
</ul>
<h3>Other improvements</h3>
<ul>
<li>Extension types are supported in <code>pyarrow.parquet.read_schema</code>
<a href="https://github.com/apache/arrow/issues/48254">GH-48254</a></li>
<li>Default values for Parquet <code>pre_buffer</code> are made consistent
<a href="https://github.com/apache/arrow/issues/49923">GH-49923</a>.</li>
</ul>
<h3>Relevant bug fixes</h3>
<ul>
<li><code>count</code> compute kernel bug for sliced union arrays is fixed
<a href="https://github.com/apache/arrow/issues/50113">GH-50113</a>.</li>
<li><code>hash_any/hash_all</code> compute kernel bug is fixed for sliced
boolean arrays <a href="https://github.com/apache/arrow/issues/50043">GH-50043</a>.</li>
<li><code>Table.from_pylist</code> on <code>ExtensionType</code> column with <code>list_</code> storage
crash when values exceed int32 offsets is fixed <a href="https://github.com/apache/arrow/issues/50012">GH-50012</a>.</li>
<li>Bug causing Use-After-Free on <code>PyList_SetItem</code> in <code>SparseCSFTensorToNdarray</code>
is fixed <a href="https://github.com/apache/arrow/issues/49917">GH-49917</a>.</li>
<li>Timezone drop when converting tz-aware pandas Categorical is fixed
<a href="https://github.com/apache/arrow/issues/49875">GH-49875</a>.</li>
<li><code>_export_to_c</code> segmentation fault for <code>binary_view</code> array is fixed by
fixing cast kernels so all-inline view arrays do not keep a null variadic
buffer slot <a href="https://github.com/apache/arrow/issues/49740">GH-49740</a>.</li>
<li><code>replace_with_mask</code> crash when null type inputs are used is
fixed <a href="https://github.com/apache/arrow/issues/47447">GH-47447</a>.</li>
<li>Segmentation fault when using <code>sort_indices</code> for temporal types
is fixed <a href="https://github.com/apache/arrow/issues/47252">GH-47252</a></li>
<li>Index level is bumped if pandas dataframe already contains <code>__index_level_i__</code>
column <a href="https://github.com/apache/arrow/issues/46179">GH-46179</a>.</li>
<li>Special handling for single-file paths passed to <code>ParquetDataset</code>
constructor is restored, fixing merge error in <code>pyarrow.parquet.read_table</code>
<a href="https://github.com/apache/arrow/issues/43574">GH-43574</a>.</li>
</ul>
<h3>Other</h3>
<ul>
<li>Annotations are withhold from Python wheels until they are complete
<a href="https://github.com/apache/arrow/issues/49831">GH-49831</a>.</li>
<li>PyBuffer and NumPyBuffer destructors are protected against interpreter
finalization <a href="https://github.com/apache/arrow/issues/49942">GH-49942</a>.</li>
<li>Documentation updates in <a href="https://github.com/apache/arrow/issues/50227">GH-50227</a>
and <a href="https://github.com/apache/arrow/issues/20403">GH-20403</a>.</li>
<li>Tests for regular <code>replace_with_mask</code> kernel usage are added
<a href="https://github.com/apache/arrow/issues/50072">GH-50072</a>.</li>
<li>Hypothesis timezones test strategy now includes fixed offsets <a href="https://github.com/apache/arrow/issues/31318">GH-31318</a>.</li>
</ul>
<h2>R Notes</h2>
<h3>Breaking changes</h3>
<ul>
<li>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).</li>
</ul>
<h3>New features</h3>
<ul>
<li>Field objects now support field-level metadata via $metadata and $with_metadata() (@max-romagnoli, #33390).</li>
<li>Parquet files now support list-columns of ordered factors (ordered dictionaries) (#49689).</li>
</ul>
<h3>Minor improvements and fixes</h3>
<ul>
<li>Array$create() now gives a clearer error message when given a POSIXct object with an invalid timezone (#40886).</li>
<li>Dictionary arrays with large_string value types now convert correctly to R factors (#39603).</li>
<li>open_dataset() now gives a clearer error message when providing a mix of readr and Arrow options (@Rich-T-kid, #33420).</li>
<li>read_parquet() no longer triggers a C++ alignment warning from the Acero source node (#46178).</li>
<li>Schema metadata partial matching on $metadata$r no longer errors when other metadata keys start with “r” (#50163).</li>
<li>to_arrow() now preserves group_by() when converting from a dbplyr lazy table (#40640).</li>
<li>write_parquet() now correctly validates that max_rows_per_group is a positive number (#40742).</li>
<li>Stale S3 connections no longer cause a segfault during garbage collection (#50009).</li>
<li>Spurious “Invalid metadata$r” warnings are no longer emitted when reading files with custom schema metadata (#48712).</li>
</ul>
<h3>Installation</h3>
<ul>
<li>The R package now builds under r-universe/r-wasm (#49981).</li>
</ul>
<h2>Ruby and C GLib Notes</h2>
<ul>
<li>Added fallback data type for unknown extension type: <a href="https://github.com/apache/arrow/pull/49969">GH-49969</a></li>
</ul>
<h3>Ruby</h3>
<ul>
<li>Added <code>RecordBatch#merge</code>: <a href="https://github.com/apache/arrow/pull/50175">GH-50175</a></li>
<li>Ensuring zero-initializing all <code>rb_memory_view_t</code> members for <code>rb_memory_view_get()</code>: <a href="https://github.com/apache/arrow/pull/50234">GH-50234</a></li>
</ul>
<h3>C GLib</h3>
<p>No C GLib only notes.</p>
<h2>Java, JavaScript, Go, .NET, Swift and Rust Notes</h2>
<p>The Java, JavaScript, Go, .NET, Swift and Rust projects have moved to separate
repositories outside the main Arrow <a href="https://github.com/apache/arrow">monorepo</a>.</p>
<ul>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-java">Java
implementation</a>, see the latest <a href="https://github.com/apache/arrow-java/releases">Arrow
Java changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-js">JavaScript
implementation</a>, see the latest <a href="https://github.com/apache/arrow-js/releases">Arrow
JavaScript changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-rs">Rust
implementation</a> see the latest <a href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">Arrow Rust
changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-go">Go
implementation</a>, see the latest <a href="https://github.com/apache/arrow-go/releases">Arrow Go
changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-dotnet">.NET
implementation</a>, see the latest <a href="https://github.com/apache/arrow-dotnet/releases">Arrow  .NET changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-swift">Swift implementation</a>, see the latest <a href="https://github.com/apache/arrow-swift/releases">Arrow Swift changelog</a>.</li>
</ul>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[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 &quot;folded&quot; 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 hypot compute kernel is added to Arrow compute module and accessible in PyArrow GH-50197. pa.OSFile now accepts open file descriptor (int parameter) besides the str path GH-49751. Conversion from a list of individual numpy.ndarrays to a FixedShapeTensor is added GH-49644. create_encryption_properties and create_decryption_properties methods are added to the parquet API using Arrow C++ FileEncryptionPropertiesBuilder and FileDecryptionPropertiesBuilder GH-47435. Conversion of Table to Tensor has been implemented in Arrow C++ and can also be used in Python bindings GH-40062. default_column_type option is added to csv.ConvertOptions which sets a default column type for all columns and can be combined with column_types GH-22232. Other improvements Extension types are supported in pyarrow.parquet.read_schema GH-48254 Default values for Parquet pre_buffer are made consistent GH-49923. Relevant bug fixes count compute kernel bug for sliced union arrays is fixed GH-50113. hash_any/hash_all compute kernel bug is fixed for sliced boolean arrays GH-50043. Table.from_pylist on ExtensionType column with list_ storage crash when values exceed int32 offsets is fixed GH-50012. Bug causing Use-After-Free on PyList_SetItem in SparseCSFTensorToNdarray is fixed GH-49917. Timezone drop when converting tz-aware pandas Categorical is fixed GH-49875. _export_to_c segmentation fault for binary_view array is fixed by fixing cast kernels so all-inline view arrays do not keep a null variadic buffer slot GH-49740. replace_with_mask crash when null type inputs are used is fixed GH-47447. Segmentation fault when using sort_indices for 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 ParquetDataset constructor is restored, fixing merge error in pyarrow.parquet.read_table GH-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_mask kernel 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_t members for rb_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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow Go 18.6.0 Release</title><link href="https://arrow.apache.org/blog/2026/04/28/arrow-go-18.6.0/" rel="alternate" type="text/html" title="Apache Arrow Go 18.6.0 Release" /><published>2026-04-28T00:00:00-04:00</published><updated>2026-04-28T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/04/28/arrow-go-18.6.0</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/04/28/arrow-go-18.6.0/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the v18.6.0 release of Apache Arrow Go.
This minor release covers 46 commits from 16 distinct contributors.</p>
<h2>Contributors</h2>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code data-lang="console"><span class="gp">$</span><span class="w"> </span>git shortlog <span class="nt">-sn</span> v18.5.2..v18.6.0
<span class="go">    25	Matt Topol
     6	Sebastiaan van Stijn
     2	Dima Kuznetsov
     2	Willem Jan
     1	Alex
     1	Alex Normand
     1	Andrei Tserakhau
     1	Ben Bellick
     1	David Li
     1	Harrison Crosse
     1	Karen Li
     1	Lucas Valente
     1	junyan-ling
     1	starpact
     1	wjywbs
     1	wwarner-inf
</span></code></pre></div></div>
<h2>Highlights</h2>
<h3>Arrow</h3>
<h4>Features</h4>
<ul>
<li>compute package now has Sorting functions <a href="https://github.com/apache/arrow-go/pull/749">#749</a></li>
<li>Brand new <code>array/arreflect</code> package for round-trip reflection between Arrow and Go types/structs <a href="https://github.com/apache/arrow-go/pull/771">#771</a></li>
</ul>
<h4>Bug Fixes</h4>
<ul>
<li>Route QueryContext for flightsql through active transactions <a href="https://github.com/apache/arrow-go/pull/692">#692</a></li>
<li>Correctly set nullbility for Avro list type <a href="https://github.com/apache/arrow-go/pull/709">#709</a></li>
<li>Fix data race and memory leak in is_in kernel <a href="https://github.com/apache/arrow-go/pull/712">#712</a></li>
<li>Fix cdata handling colons in values <a href="https://github.com/apache/arrow-go/pull/761">#761</a></li>
</ul>
<h4>Performance Improvements</h4>
<ul>
<li>Improved take kernel performance (20-30% gains for 99% of cases) <a href="https://github.com/apache/arrow-go/pull/702">#702</a></li>
<li>Optimize the ARM64 NEON min/max assembly <a href="https://github.com/apache/arrow-go/pull/748">#748</a></li>
</ul>
<h3>Parquet</h3>
<h4>Bug Fixes</h4>
<ul>
<li>Fixed Decimal256 sign extension <a href="https://github.com/apache/arrow-go/pull/711">#711</a></li>
<li>Strip the repetition_type from the root SchemaElement during serialization <a href="https://github.com/apache/arrow-go/pull/723">#723</a></li>
<li>Normalized the element name in stored ARROW:schema <a href="https://github.com/apache/arrow-go/pull/746">#746</a></li>
</ul>
<h4>Performance Improvements</h4>
<ul>
<li>Avoid double bool bitmap conversion <a href="https://github.com/apache/arrow-go/pull/707">#707</a></li>
<li>Improve zstd pool memory usage (14x less memory!) <a href="https://github.com/apache/arrow-go/pull/717">#717</a></li>
<li>Optimized stats and bloom filters for boolean columns (76% less memory, more than twice as fast) <a href="https://github.com/apache/arrow-go/pull/715">#715</a></li>
<li>Vectorized bool unpack (~4x throughput) <a href="https://github.com/apache/arrow-go/pull/735">#735</a>, <a href="https://github.com/apache/arrow-go/pull/731">#731</a></li>
<li>Eliminated per-value allocation in delta bit-pack decoder (&gt;4x faster decoding) <a href="https://github.com/apache/arrow-go/pull/730">#730</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li>@junyan-ling made their first contribution in <a href="https://github.com/apache/arrow-go/pull/689">#689</a></li>
<li>@wjywbs made their first contribution in <a href="https://github.com/apache/arrow-go/pull/692">#692</a></li>
<li>@dimakuz made their first contribution in <a href="https://github.com/apache/arrow-go/pull/711">#711</a></li>
<li>@starpact made their first contribution in <a href="https://github.com/apache/arrow-go/pull/708">#708</a></li>
<li>@laskoviymishka made their first contribution in <a href="https://github.com/apache/arrow-go/pull/712">#712</a></li>
<li>@hcrosse made their first contribution in <a href="https://github.com/apache/arrow-go/pull/723">#723</a></li>
<li>@wwarner-inf made their first contribution in <a href="https://github.com/apache/arrow-go/pull/726">#726</a></li>
<li>@alexandre-normand made their first contribution in <a href="https://github.com/apache/arrow-go/pull/728">#728</a></li>
<li>@benbellick made their first contribution in <a href="https://github.com/apache/arrow-go/pull/754">#754</a></li>
<li>@thaJeztah made their first contribution in <a href="https://github.com/apache/arrow-go/pull/762">#762</a></li>
<li>@kli19 made their first contribution in <a href="https://github.com/apache/arrow-go/pull/757">#757</a></li>
<li>@serramatutu made their first contribution in <a href="https://github.com/apache/arrow-go/pull/758">#758</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/apache/arrow-go/compare/v18.5.2...v18.6.0">https://github.com/apache/arrow-go/compare/v18.5.2...v18.6.0</a></p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the v18.6.0 release of Apache Arrow Go. This minor release covers 46 commits from 16 distinct contributors. Contributors $ git shortlog -sn v18.5.2..v18.6.0 25 Matt Topol 6 Sebastiaan van Stijn 2 Dima Kuznetsov 2 Willem Jan 1 Alex 1 Alex Normand 1 Andrei Tserakhau 1 Ben Bellick 1 David Li 1 Harrison Crosse 1 Karen Li 1 Lucas Valente 1 junyan-ling 1 starpact 1 wjywbs 1 wwarner-inf Highlights Arrow Features compute package now has Sorting functions #749 Brand new array/arreflect package for round-trip reflection between Arrow and Go types/structs #771 Bug Fixes Route QueryContext for flightsql through active transactions #692 Correctly set nullbility for Avro list type #709 Fix data race and memory leak in is_in kernel #712 Fix cdata handling colons in values #761 Performance Improvements Improved take kernel performance (20-30% gains for 99% of cases) #702 Optimize the ARM64 NEON min/max assembly #748 Parquet Bug Fixes Fixed Decimal256 sign extension #711 Strip the repetition_type from the root SchemaElement during serialization #723 Normalized the element name in stored ARROW:schema #746 Performance Improvements Avoid double bool bitmap conversion #707 Improve zstd pool memory usage (14x less memory!) #717 Optimized stats and bloom filters for boolean columns (76% less memory, more than twice as fast) #715 Vectorized bool unpack (~4x throughput) #735, #731 Eliminated per-value allocation in delta bit-pack decoder (&gt;4x faster decoding) #730 New Contributors @junyan-ling made their first contribution in #689 @wjywbs made their first contribution in #692 @dimakuz made their first contribution in #711 @starpact made their first contribution in #708 @laskoviymishka made their first contribution in #712 @hcrosse made their first contribution in #723 @wwarner-inf made their first contribution in #726 @alexandre-normand made their first contribution in #728 @benbellick made their first contribution in #754 @thaJeztah made their first contribution in #762 @kli19 made their first contribution in #757 @serramatutu made their first contribution in #758 Full Changelog: https://github.com/apache/arrow-go/compare/v18.5.2...v18.6.0]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow 24.0.0 Release</title><link href="https://arrow.apache.org/blog/2026/04/21/24.0.0-release/" rel="alternate" type="text/html" title="Apache Arrow 24.0.0 Release" /><published>2026-04-21T00:00:00-04:00</published><updated>2026-04-21T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/04/21/24.0.0-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/04/21/24.0.0-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the 24.0.0 release. This release
covers over 3 months of development work and includes <a href="https://github.com/apache/arrow/milestone/72?closed=1"><strong>259 resolved
issues</strong></a> on <a href="/release/24.0.0.html#contributors"><strong>325 distinct commits</strong></a> from <a href="/release/24.0.0.html#contributors"><strong>57 distinct
contributors</strong></a>. See the <a href="https://arrow.apache.org/install/">Install Page</a> to
learn how to get the libraries for your platform.</p>
<p>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 <a href="/release/24.0.0.html#changelog">complete changelog</a>.</p>
<h2>Community</h2>
<p>We recently published our <a href="https://arrow.apache.org/blog/2026/03/19/arrow-2025-highlights/">Community Highlights for 2025</a>, check those out.</p>
<p>Thanks everyone for your contributions and participation in the project!</p>
<h2>Format Notes</h2>
<p>We have written a project-wide <a href="https://arrow.apache.org/docs/dev/format/Security.html">Security Model</a>
outlining what users should expect when dealing with Arrow data, especially coming
from untrusted sources <a href="https://github.com/apache/arrow/issues/48868">GH-48868</a>.</p>
<h2>Arrow Flight RPC Notes</h2>
<p>The ODBC driver is still a work-in-progress. The driver now builds on Linux, but currently no builds are distributed (for any platform) (<a href="https://github.com/apache/arrow/issues/49463">GH-49463</a>).</p>
<p>In C++, we have refactored serialization/deserialization to make low-level functionality accessible for advanced usage (<a href="https://github.com/apache/arrow/issues/49548">GH-49548</a>).</p>
<h2>C++ Notes</h2>
<p>In addition to the aforementioned project-wide Security Model, we have written
a specific <a href="https://arrow.apache.org/docs/dev/cpp/security.html">Security Model for Arrow C++</a>
covering more concrete topics such as API usage and parameter validity <a href="https://github.com/apache/arrow/issues/49274">GH-49274</a>.</p>
<h3>Compute</h3>
<h3>Extension Types</h3>
<p>The canonical type <a href="https://arrow.apache.org/docs/format/CanonicalExtensions.html#variable-shape-tensor">VariableShapeTensor</a>
was finally implemented <a href="https://github.com/apache/arrow/issues/38007">GH-38007</a>.</p>
<h3>Parquet</h3>
<p><strong>Breaking change:</strong> The Arrow extension type name for Parquet Variant columns
used to be <code>parquet.variant</code> but has been changed to <code>arrow.parquet.variant</code> <a href="https://github.com/apache/arrow/issues/49081">GH-49081</a>.</p>
<p>While Parquet C++ could only read unencrypted bloom filters, it now supports
reading encrypted bloom filters as well <a href="https://github.com/apache/arrow/issues/48334">GH-48334</a>. In addition, it can also
write bloom filters, though only unencrypted <a href="https://github.com/apache/arrow/issues/34785">GH-34785</a>.</p>
<p>An ambitious rewrite of the bit-unpacking utilities and optimizations has led to
significant performance improvements on reading some Parquet columns, up to 50%
faster in some cases <a href="https://github.com/apache/arrow/issues/48277">GH-48277</a>. This rewrite is described in more detail
in an <a href="https://medium.com/@AntoineProuvost/faster-reads-for-apache-parquet-improving-integer-unpacking-f6e21ce49a85">accompanying blog post</a>.</p>
<p>The performance of reading DELTA_BINARY_PACKED-encoded integers has been improved
in some favorable cases <a href="https://github.com/apache/arrow/issues/49266">GH-49266</a>.</p>
<h3>Miscellaneous C++ changes</h3>
<p>We have migrated to C++20 <code>std::span</code>, removing our home-grown implementation
in <code>arrow::util::span</code> <a href="https://github.com/apache/arrow/issues/48588">GH-48588</a>.</p>
<p>A bunch of previously deprecated APIs have been removed <a href="https://github.com/apache/arrow/issues/49356">GH-49356</a>.</p>
<h2>Linux Packaging Notes</h2>
<p>Added support for Ubuntu 26.04, the next LTS <a href="https://github.com/apache/arrow/issues/49341">GH-49341</a></p>
<h2>MATLAB Notes</h2>
<p>No major notes for this release on MATLAB.</p>
<h2>Python Notes</h2>
<h2>Compatibility notes</h2>
<ul>
<li><code>pyarrow.gandiva</code> is deprecated and will be removed in a future version <a href="https://github.com/apache/arrow/issues/49227">GH-49227</a></li>
</ul>
<h2>New features</h2>
<ul>
<li>Type annotations work is starting to be included (<a href="https://github.com/apache/arrow/issues/49102">GH-49102</a> and
<a href="https://github.com/apache/arrow/issues/49452">GH-49452</a>)</li>
<li>Basic arithmetic on arrays and scalars is now supported <a href="https://github.com/apache/arrow/issues/32007">GH-32007</a></li>
<li>Options to control writing of Parquet Bloom filters are added to <code>parquet.write_table</code> <a href="https://github.com/apache/arrow/issues/49376">GH-49376</a></li>
<li>OpenTelemetry is enabled in PyArrow wheels <a href="https://github.com/apache/arrow/issues/49382">GH-49382</a></li>
<li>AzureFileSystem is now included in the Windows wheels <a href="https://github.com/apache/arrow/issues/44655">GH-44655</a></li>
</ul>
<h2>Other improvements</h2>
<ul>
<li>Scikit-build-core is now used as the PyArrow build system <a href="https://github.com/apache/arrow/issues/36411">GH-36411</a></li>
<li><code>UUID</code> objects are now inferred automatically in <code>pa.scalar()</code> and <code>pa.array()</code> without the need to
specify the type explicitly <a href="https://github.com/apache/arrow/issues/48241">GH-48241</a></li>
<li>Constructing an extension array via <code>pa.array()</code> from a list of extension-type scalars is now supported
<a href="https://github.com/apache/arrow/issues/48470">GH-48470</a></li>
<li>There have been some improvements in the documentation (<a href="https://github.com/apache/arrow/issues/49278">GH-49278</a>,
<a href="https://github.com/apache/arrow/issues/49269">GH-49269</a> and <a href="https://github.com/apache/arrow/issues/28859">GH-28859</a>)</li>
<li>CSV and JSON options have improved repr/str methods <a href="https://github.com/apache/arrow/issues/47389">GH-47389</a></li>
</ul>
<h2>Relevant bug fixes</h2>
<ul>
<li><code>SparseCOOTensor.__repr__</code> missing f-string prefix is now fixed <a href="https://github.com/apache/arrow/issues/49108">GH-49108</a></li>
<li>Pickling <code>SubTreeFileSystem(base_path, AzureFileSystem(...))</code> is fixed <a href="https://github.com/apache/arrow/issues/49078">GH-49078</a></li>
<li>Casting from <code>StringArray</code> to pandas 3.* when element is <code>None</code> is fixed <a href="https://github.com/apache/arrow/issues/49002">GH-49002</a></li>
<li>Dictionary key order is now preserved when inferring struct type <a href="https://github.com/apache/arrow/issues/40053">GH-40053</a></li>
<li>Duplicate csv header when table batches start with empty is now fixed <a href="https://github.com/apache/arrow/issues/36889">GH-36889</a></li>
</ul>
<h2>R Notes</h2>
<h3>New Features</h3>
<ul>
<li>A number of new <code>dplyr</code> bindings <a href="https://github.com/apache/arrow/issues/49533">GH-49533</a>, <a href="https://github.com/apache/arrow/issues/49256">GH-49256</a>, <a href="https://github.com/apache/arrow/issues/49535">GH-49535</a> and <a href="https://github.com/apache/arrow/issues/49534">GH-49534</a></li>
</ul>
<h3>Compatibility notes</h3>
<ul>
<li>Arrow no longer builds with GCS enabled on CRAN to avoid failures in their build systems. If you would like a full-featured build of Arrow, we recommend installing from R-universe; see <a href="https://arrow.apache.org/docs/r/articles/fs.html">the Using cloud storage article in the docs</a> for more information. <a href="https://github.com/apache/arrow/issues/49067">GH-49067</a></li>
</ul>
<h3>Relevant bug fixes</h3>
<ul>
<li><code>to_arrow()</code> now retains grouping <a href="https://github.com/apache/arrow/issues/40640">GH-40640</a></li>
</ul>
<h2>Ruby and C GLib Notes</h2>
<ul>
<li>Fixed GC related problems.</li>
<li><code>GArrowListArray</code>: Added support for returning offset buffer.</li>
<li><code>GArrowLargeListArray</code>: Added support for returning offset buffer.</li>
<li><code>GArrowUnionArray</code>: Added support for returning fields.</li>
<li>Deprecated Feather features.</li>
</ul>
<h3>Ruby</h3>
<p>We've added pure Ruby Apache Arrow writer implementation to the
<code>red-arrow-format</code> gem.</p>
<p>We've marked pure Ruby Apache Arrow reader implementation in the
<code>red-arrow-format</code>gem as stable because it passes integration tests
with other implementations. But it still has some missing features.</p>
<p>The <code>red-arrow</code> gem:</p>
<ul>
<li>Add support for converting to raw Ruby objects of the following arrays:
<ul>
<li><code>Arrow::LargeBinaryArray</code></li>
<li><code>Arrow::LargeUTF8Array</code></li>
<li><code>Arrow::LargeListArray</code></li>
<li><code>Arrow::FixedSizeListArray</code></li>
<li><code>Arrow::DurationArray</code></li>
<li><code>Arrow::DictionaryArray</code> with <code>Arrow::LargeBinaryArray</code> or
<code>Arrow::LargeUTF8Array</code></li>
</ul>
</li>
</ul>
<h3>C GLib</h3>
<p>No C GLib only notes.</p>
<h2>Java, JavaScript, Go, .NET, Swift and Rust Notes</h2>
<p>The Java, JavaScript, Go, .NET, Swift and Rust projects have moved to separate
repositories outside the main Arrow <a href="https://github.com/apache/arrow">monorepo</a>.</p>
<ul>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-java">Java
implementation</a>, see the latest <a href="https://github.com/apache/arrow-java/releases">Arrow
Java changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-js">JavaScript
implementation</a>, see the latest <a href="https://github.com/apache/arrow-js/releases">Arrow
JavaScript changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-rs">Rust
implementation</a> see the latest <a href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">Arrow Rust
changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-go">Go
implementation</a>, see the latest <a href="https://github.com/apache/arrow-go/releases">Arrow Go
changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-dotnet">.NET
implementation</a>, see the latest <a href="https://github.com/apache/arrow-dotnet/releases">Arrow  .NET changelog</a>.</li>
<li>For notes on the latest release of the <a href="https://github.com/apache/arrow-swift">Swift implementation</a>, see the latest <a href="https://github.com/apache/arrow-swift/releases">Arrow Swift changelog</a>.</li>
</ul>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the 24.0.0 release. This release covers over 3 months of development work and includes 259 resolved issues on 325 distinct commits from 57 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. Community We recently published our Community Highlights for 2025, check those out. Thanks everyone for your contributions and participation in the project! Format Notes We have written a project-wide Security Model outlining what users should expect when dealing with Arrow data, especially coming from untrusted sources GH-48868. Arrow Flight RPC Notes The ODBC driver is still a work-in-progress. The driver now builds on Linux, but currently no builds are distributed (for any platform) (GH-49463). In C++, we have refactored serialization/deserialization to make low-level functionality accessible for advanced usage (GH-49548). C++ Notes In addition to the aforementioned project-wide Security Model, we have written a specific Security Model for Arrow C++ covering more concrete topics such as API usage and parameter validity GH-49274. Compute Extension Types The canonical type VariableShapeTensor was finally implemented GH-38007. Parquet Breaking change: The Arrow extension type name for Parquet Variant columns used to be parquet.variant but has been changed to arrow.parquet.variant GH-49081. While Parquet C++ could only read unencrypted bloom filters, it now supports reading encrypted bloom filters as well GH-48334. In addition, it can also write bloom filters, though only unencrypted GH-34785. An ambitious rewrite of the bit-unpacking utilities and optimizations has led to significant performance improvements on reading some Parquet columns, up to 50% faster in some cases GH-48277. This rewrite is described in more detail in an accompanying blog post. The performance of reading DELTA_BINARY_PACKED-encoded integers has been improved in some favorable cases GH-49266. Miscellaneous C++ changes We have migrated to C++20 std::span, removing our home-grown implementation in arrow::util::span GH-48588. A bunch of previously deprecated APIs have been removed GH-49356. Linux Packaging Notes Added support for Ubuntu 26.04, the next LTS GH-49341 MATLAB Notes No major notes for this release on MATLAB. Python Notes Compatibility notes pyarrow.gandiva is deprecated and will be removed in a future version GH-49227 New features Type annotations work is starting to be included (GH-49102 and GH-49452) Basic arithmetic on arrays and scalars is now supported GH-32007 Options to control writing of Parquet Bloom filters are added to parquet.write_table GH-49376 OpenTelemetry is enabled in PyArrow wheels GH-49382 AzureFileSystem is now included in the Windows wheels GH-44655 Other improvements Scikit-build-core is now used as the PyArrow build system GH-36411 UUID objects are now inferred automatically in pa.scalar() and pa.array() without the need to specify the type explicitly GH-48241 Constructing an extension array via pa.array() from a list of extension-type scalars is now supported GH-48470 There have been some improvements in the documentation (GH-49278, GH-49269 and GH-28859) CSV and JSON options have improved repr/str methods GH-47389 Relevant bug fixes SparseCOOTensor.__repr__ missing f-string prefix is now fixed GH-49108 Pickling SubTreeFileSystem(base_path, AzureFileSystem(...)) is fixed GH-49078 Casting from StringArray to pandas 3.* when element is None is fixed GH-49002 Dictionary key order is now preserved when inferring struct type GH-40053 Duplicate csv header when table batches start with empty is now fixed GH-36889 R Notes New Features A number of new dplyr bindings GH-49533, GH-49256, GH-49535 and GH-49534 Compatibility notes Arrow no longer builds with GCS enabled on CRAN to avoid failures in their build systems. If you would like a full-featured build of Arrow, we recommend installing from R-universe; see the Using cloud storage article in the docs for more information. GH-49067 Relevant bug fixes to_arrow() now retains grouping GH-40640 Ruby and C GLib Notes Fixed GC related problems. GArrowListArray: Added support for returning offset buffer. GArrowLargeListArray: Added support for returning offset buffer. GArrowUnionArray: Added support for returning fields. Deprecated Feather features. Ruby We've added pure Ruby Apache Arrow writer implementation to the red-arrow-format gem. We've marked pure Ruby Apache Arrow reader implementation in the red-arrow-formatgem as stable because it passes integration tests with other implementations. But it still has some missing features. The red-arrow gem: Add support for converting to raw Ruby objects of the following arrays: Arrow::LargeBinaryArray Arrow::LargeUTF8Array Arrow::LargeListArray Arrow::FixedSizeListArray Arrow::DurationArray Arrow::DictionaryArray with Arrow::LargeBinaryArray or Arrow::LargeUTF8Array 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.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Apache Arrow ADBC 23 (Libraries) Release</title><link href="https://arrow.apache.org/blog/2026/04/07/adbc-23-release/" rel="alternate" type="text/html" title="Apache Arrow ADBC 23 (Libraries) Release" /><published>2026-04-07T00:00:00-04:00</published><updated>2026-04-07T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/04/07/adbc-23-release</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/04/07/adbc-23-release/"><![CDATA[<!--

-->
<p>The Apache Arrow team is pleased to announce the version 23 release of
the Apache Arrow ADBC libraries. This release includes <a href="https://github.com/apache/arrow-adbc/milestone/27"><strong>41
resolved issues</strong></a> from <a href="#contributors"><strong>20 distinct contributors</strong></a>.</p>
<p>This is a release of the <strong>libraries</strong>, which are at version 23.  The
<a href="https://arrow.apache.org/adbc/23/format/specification.html"><strong>API specification</strong></a> is versioned separately and is at
version 1.1.0.</p>
<p>The subcomponents are versioned independently:</p>
<ul>
<li>C/C++/GLib/Go/Python/Ruby: 1.11.0</li>
<li>C#: 0.23.0</li>
<li>Java: 0.23.0</li>
<li>R: 0.23.0</li>
<li>Rust: 0.23.0</li>
</ul>
<p>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 <a href="https://github.com/apache/arrow-adbc/blob/apache-arrow-adbc-23/CHANGELOG.md">complete changelog</a>.</p>
<h2>Release Highlights</h2>
<p>A breaking change has been made to the Rust APIs (pre-1.0): returned
<code>RecordBatchReader</code>s are now type-erased and boxed for caller flexibility;
this also fixes the returned reader lifetime accidentally being tied to input
argument lifetimes (<a href="https://github.com/apache/arrow-adbc/pull/3904">#3904</a>).</p>
<p>A driver manager for Node.js is now available from NPM
(<a href="https://github.com/apache/arrow-adbc/pull/4046">#4046</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4091">#4091</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4116">#4116</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4125">#4125</a>, etc.).</p>
<p>The C++ and Rust driver managers now support <a href="https://arrow.apache.org/adbc/current/format/connection_profiles.html">connection
profiles</a>
(<a href="https://github.com/apache/arrow-adbc/pull/3876">#3876</a>,
<a href="https://github.com/apache/arrow-adbc/pull/3973">#3973</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4080">#4080</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4083">#4083</a> etc.). (Note that
other bindings that use the C++ driver manager, including GLib/Ruby, Go, Java,
Python, R, and so on, inherit this support.)</p>
<p>The Go APIs have added interfaces that always take a <code>context.Context</code> for
consistency, and to make sure context like telemetry traces propagate properly
(<a href="https://github.com/apache/arrow-adbc/pull/4009">#4009</a>).</p>
<p>The Python driver manager has added specific parameters for using <a href="https://arrow.apache.org/adbc/current/format/connection_profiles.html">connection
profiles</a>
as well (<a href="https://github.com/apache/arrow-adbc/pull/4078">#4078</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4118">#4118</a>). Also, non-string
option values are directly accepted for convenience
(<a href="https://github.com/apache/arrow-adbc/pull/4088">#4088</a>). <code>adbc_get_statistics</code>
has been added (<a href="https://github.com/apache/arrow-adbc/pull/4129">#4129</a>).</p>
<p>The JNI bindings (allowing use of C/C++/Go/Rust/etc. drivers from Java) now
support more functions (GetObjects, GetInfo, ExecuteSchema, etc.)
(<a href="https://github.com/apache/arrow-adbc/pull/3966">#3966</a>,
<a href="https://github.com/apache/arrow-adbc/pull/3972">#3972</a>,
<a href="https://github.com/apache/arrow-adbc/pull/4056">#4056</a>).</p>
<p>Packages are now being uploaded to
<a href="https://formulae.brew.sh/formula/apache-arrow-adbc">Homebrew</a>
(<a href="https://github.com/apache/arrow-adbc/pull/4131">#4131</a>).</p>
<p>Python wheels now require <code>manylinux_2_28</code>, up from <code>manylinux2010</code>, following
PyArrow (<a href="https://github.com/apache/arrow-adbc/pull/4146">#4146</a>).  On macOS,
macOS 12 is now the minimum version due to upgrading to Go 1.25+ (including on
conda-forge, where the packages previously pinned Go 1.24 to avoid this).</p>
<p>The PostgreSQL driver tries to reconcile Arrow NA arrays with PostgreSQL types
when binding (<a href="https://github.com/apache/arrow-adbc/pull/4098">#4098</a>). Also,
a bug in conversion from Arrow decimals to PostgreSQL numerics has been fixed
(<a href="https://github.com/apache/arrow-adbc/pull/3787">#3787</a>).</p>
<p>The SQLite driver now enables various optional features, like math functions
(<a href="https://github.com/apache/arrow-adbc/pull/4147">#4147</a>).</p>
<h2>Contributors</h2>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git shortlog --perl-regexp --author='^((?!dependabot\[bot\]).*)$' -sn apache-arrow-adbc-22..apache-arrow-adbc-23
    35	David Li
    12	Kent Wu
    10	Matt Topol
     8	eitsupi
     6	Bryce Mecum
     5	Bruce Irschick
     4	Mandukhai Alimaa
     3	Emil Sadek
     3	Tornike Gurgenidze
     2	Dewey Dunnington
     2	Felipe Oliveira Carvalho
     2	eric-wang-1990
     1	Curt Hagenlocher
     1	Ian Cook
     1	Madhavendra Rathore
     1	Mila Page
     1	Pavel Agafonov
     1	Roshan Banisetti
     1	davidhcoe
     1	oglego
</code></pre></div></div>
<h2>Roadmap</h2>
<p>We are working on the next revision of the API standard, focusing on missing
features (primarily metadata/catalog data). We welcome anyone interested in
contributing. Current progress can be found in the <a href="https://github.com/apache/arrow-adbc/milestone/9">1.2.0 specification
milestone</a>.</p>
<h2>Getting Involved</h2>
<p>We welcome questions and contributions from all interested.  Issues
can be filed on <a href="https://github.com/apache/arrow-adbc/issues">GitHub</a>, and questions can be directed to GitHub
or the <a href="/community/">Arrow mailing lists</a>.</p>]]></content><author><name>pmc</name></author><category term="release" /><summary type="html"><![CDATA[The Apache Arrow team is pleased to announce the version 23 release of the Apache Arrow ADBC libraries. This release includes 41 resolved issues from 20 distinct contributors. This is a release of the libraries, which are at version 23. The API specification is versioned separately and is at version 1.1.0. The subcomponents are versioned independently: C/C++/GLib/Go/Python/Ruby: 1.11.0 C#: 0.23.0 Java: 0.23.0 R: 0.23.0 Rust: 0.23.0 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. Release Highlights A breaking change has been made to the Rust APIs (pre-1.0): returned RecordBatchReaders are now type-erased and boxed for caller flexibility; this also fixes the returned reader lifetime accidentally being tied to input argument lifetimes (#3904). A driver manager for Node.js is now available from NPM (#4046, #4091, #4116, #4125, etc.). The C++ and Rust driver managers now support connection profiles (#3876, #3973, #4080, #4083 etc.). (Note that other bindings that use the C++ driver manager, including GLib/Ruby, Go, Java, Python, R, and so on, inherit this support.) The Go APIs have added interfaces that always take a context.Context for consistency, and to make sure context like telemetry traces propagate properly (#4009). The Python driver manager has added specific parameters for using connection profiles as well (#4078, #4118). Also, non-string option values are directly accepted for convenience (#4088). adbc_get_statistics has been added (#4129). The JNI bindings (allowing use of C/C++/Go/Rust/etc. drivers from Java) now support more functions (GetObjects, GetInfo, ExecuteSchema, etc.) (#3966, #3972, #4056). Packages are now being uploaded to Homebrew (#4131). Python wheels now require manylinux_2_28, up from manylinux2010, following PyArrow (#4146). On macOS, macOS 12 is now the minimum version due to upgrading to Go 1.25+ (including on conda-forge, where the packages previously pinned Go 1.24 to avoid this). The PostgreSQL driver tries to reconcile Arrow NA arrays with PostgreSQL types when binding (#4098). Also, a bug in conversion from Arrow decimals to PostgreSQL numerics has been fixed (#3787). The SQLite driver now enables various optional features, like math functions (#4147). Contributors $ git shortlog --perl-regexp --author='^((?!dependabot\[bot\]).*)$' -sn apache-arrow-adbc-22..apache-arrow-adbc-23 35 David Li 12 Kent Wu 10 Matt Topol 8 eitsupi 6 Bryce Mecum 5 Bruce Irschick 4 Mandukhai Alimaa 3 Emil Sadek 3 Tornike Gurgenidze 2 Dewey Dunnington 2 Felipe Oliveira Carvalho 2 eric-wang-1990 1 Curt Hagenlocher 1 Ian Cook 1 Madhavendra Rathore 1 Mila Page 1 Pavel Agafonov 1 Roshan Banisetti 1 davidhcoe 1 oglego Roadmap We are working on the next revision of the API standard, focusing on missing features (primarily metadata/catalog data). We welcome anyone interested in contributing. Current progress can be found in the 1.2.0 specification milestone. Getting Involved We welcome questions and contributions from all interested. Issues can be filed on GitHub, and questions can be directed to GitHub or the Arrow mailing lists.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Community Highlights 2025</title><link href="https://arrow.apache.org/blog/2026/03/19/arrow-2025-highlights/" rel="alternate" type="text/html" title="Community Highlights 2025" /><published>2026-03-19T00:00:00-04:00</published><updated>2026-03-19T00:00:00-04:00</updated><id>https://arrow.apache.org/blog/2026/03/19/arrow-2025-highlights</id><content type="html" xml:base="https://arrow.apache.org/blog/2026/03/19/arrow-2025-highlights/"><![CDATA[<!--

-->
<p>As you may have read in a previous blog post <sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup>, the Apache Arrow project
recently turned 10 years old. We are grateful to everyone who helped us
achieve this milestone, and we wanted to celebrate the community's
accomplishments, by publishing our community highlights from 2025.</p>
<p>We were inspired by the research by Dr Cat Hicks et al <sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup>, who found
that concrete evidence of progress and accomplishments is instrumental
to motivation and collaboration in developer teams. We think the same
should hold for open source.</p>
<hr />
<h2>New contributors</h2>
<p>It has been great to see many new contributors joining the project
in the past year, with over 300 such individuals observed across the main
Apache Arrow language implementations.</p>
<table class="table">
  <caption>Number of new contributors per repository.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Repository/Implementation</th>
      <th>Number of new contributors</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>arrow</td>
      <td>125</td>
    </tr>
    <tr>
      <td>arrow-rs</td>
      <td>132</td>
    </tr>
    <tr>
      <td>arrow-java</td>
      <td>28</td>
    </tr>
    <tr>
      <td>arrow-go</td>
      <td>35</td>
    </tr>
  </tbody>
</table>
<p>Worth highlighting is <a href="https://github.com/alinaliBQ">alinaliBQ</a> who
has been very active on the C++ Flight SQL ODBC Driver work together
with <a href="https://github.com/justing-bq">justing-bq</a>.</p>
<p><a href="https://github.com/AntoinePrv">AntoinePrv</a> has done a huge amount of
work on the C++ Parquet implementation and <a href="https://github.com/andishgar">andishgar</a>
in the C++ Statistics area.</p>
<p><a href="https://github.com/rmnskb">rmnskb</a> got involved with PyArrow in
EuroPython sprints and has contributed multiple PRs since then. On the
same event <a href="https://github.com/paddyroddy">paddyroddy</a> also started with
his first contribution and helped on the Python packaging side further on.</p>
<p><a href="https://github.com/sdf-jkl">sdf-jkl</a>, <a href="https://github.com/liamzwbao">liamzwbao</a>,
<a href="https://github.com/friendlymatthew">friendlymatthew</a>, and
<a href="https://github.com/klion26">klion26</a> helped drive early Variant
functionality in the Rust Parquet implementation and contributed a number
of follow-up improvements.</p>
<p><a href="https://github.com/jecsand838">jecsand838</a> drove major improvements to the
Rust <code>arrow-avro</code> crate, work highlighted in the
<a href="https://arrow.apache.org/blog/2025/10/23/introducing-arrow-avro/">Introducing Arrow Avro</a>
blog post.</p>
<table class="table">
  <caption>Notable New Contributors in apache/arrow for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Author</th>
      <th>Number of prs</th>
      <th>Number of line changes (+ and -)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>alinaliBQ</td>
      <td>36</td>
      <td>15754</td>
    </tr>
    <tr>
      <td>andishgar</td>
      <td>19</td>
      <td>2926</td>
    </tr>
    <tr>
      <td>AntoinePrv</td>
      <td>8</td>
      <td>79257</td>
    </tr>
    <tr>
      <td>rmnskb</td>
      <td>7</td>
      <td>550</td>
    </tr>
    <tr>
      <td>justing-bq</td>
      <td>4</td>
      <td>12607</td>
    </tr>
  </tbody>
</table>
<table class="table">
  <caption>Notable New Contributors in apache/arrow-rs for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Author</th>
      <th>Number of prs</th>
      <th>Number of line changes (+ and -)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>scovich</td>
      <td>50</td>
      <td>21006</td>
    </tr>
    <tr>
      <td>jecsand838</td>
      <td>38</td>
      <td>26753</td>
    </tr>
    <tr>
      <td>friendlymatthew</td>
      <td>33</td>
      <td>7203</td>
    </tr>
    <tr>
      <td>sdf-jkl</td>
      <td>4</td>
      <td>388</td>
    </tr>
    <tr>
      <td>rambleraptor</td>
      <td>4</td>
      <td>333</td>
    </tr>
  </tbody>
</table>
<table class="table">
  <caption>Notable New Contributors in apache/arrow-go for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Author</th>
      <th>Number of prs</th>
      <th>Number of line changes (+ and -)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Mandukhai-Alimaa</td>
      <td>6</td>
      <td>1392</td>
    </tr>
    <tr>
      <td>hamilton-earthscope</td>
      <td>5</td>
      <td>2998</td>
    </tr>
  </tbody>
</table>
<h2>Release, Packaging and CI</h2>
<p>A lot of work has been done around the Continuous Integration and
Developer Tools area. Ensuring a project with the reach of Arrow is properly working
requires validation on a huge matrix of operating systems, architectures, libraries,
versions. Needless to say that maintenance work has tremendous importance for the
health of the project and the positive contributor experience.</p>
<p>The most active contributors in the main repository are the ones contributing
heavily on those areas while also providing the most review capacity. Shout out
to <a href="https://github.com/kou">kou</a> and <a href="https://github.com/raulcd">raulcd</a> for
taking such good care of the project and devoting countless hours so that everything
runs smoothly.</p>
<p>Notable contributions worth mentioning are enhanced release automation and
reproducible builds for sources, migrating remaining AppVeyor and Azure jobs
to GitHub actions, improving dev experience with more pre-commit checks instead
of custom made linting tools.</p>
<p>Moving some implementations out of the main repository (apache/arrow on GitHub)
helped with easier releases and maintenance of the main repository and also of
separate language implementations. The current apache/arrow repo now holds the format
specification, C++ implementation together with all the bindings to it (Python, R, Ruby
and C GLib). Other languages now live in their own apache/ repos namely
<a href="https://github.com/apache/arrow-java">apache/arrow-java</a>,
<a href="https://github.com/apache/arrow-js">apache/arrow-js</a>,
<a href="https://github.com/apache/arrow-rs">apache/arrow-rs</a>,
<a href="https://github.com/apache/arrow-go">apache/arrow-go</a>,
<a href="https://github.com/apache/arrow-nanoarrow">apache/arrow-nanoarrow</a>,
<a href="https://github.com/apache/arrow-dotnet">apache/arrow-dotnet</a> and
<a href="https://github.com/apache/arrow-swift">apache/arrow-swift</a>.</p>
<table class="table">
  <caption>Notable Contributors in apache/arrow for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Author</th>
      <th>Number of prs</th>
      <th>Number of line changes (+ and -)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>kou</td>
      <td>221</td>
      <td>141015</td>
    </tr>
    <tr>
      <td>AntoinePrv</td>
      <td>8</td>
      <td>79257</td>
    </tr>
    <tr>
      <td>raulcd</td>
      <td>110</td>
      <td>46645</td>
    </tr>
    <tr>
      <td>pitrou</td>
      <td>101</td>
      <td>36585</td>
    </tr>
    <tr>
      <td>jbonofre</td>
      <td>1</td>
      <td>20061</td>
    </tr>
  </tbody>
</table>
<table class="table">
  <caption>Notable Components in apache/arrow for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>Component label</th>
      <th>Number of merged prs</th>
      <th>Number of line changes (+ and -)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Parquet</td>
      <td>100</td>
      <td>103828</td>
    </tr>
    <tr>
      <td>C++</td>
      <td>387</td>
      <td>82744</td>
    </tr>
    <tr>
      <td>FlightRPC</td>
      <td>43</td>
      <td>52659</td>
    </tr>
    <tr>
      <td>CI</td>
      <td>237</td>
      <td>42249</td>
    </tr>
    <tr>
      <td>Ruby</td>
      <td>74</td>
      <td>20676</td>
    </tr>
  </tbody>
</table>
<h2>Migration of infrastructure from Voltron Data</h2>
<p>As Voltron Data has wound down its operations in 2025, the Arrow project
had to migrate benchmarking infrastructure and nightly report from
Voltron-managed services to an Arrow-managed AWS account. This work has been
driven by <a href="https://github.com/rok">rok</a>.</p>
<h2>Closing of Stale issues</h2>
<p><a href="https://github.com/thisisnic">thisisnic</a> was working on closing of stale
issues in the apache/arrow repository which helped surfacing important
issues that were overlooked or forgotten.</p>
<h2>Code contributions</h2>
<h3>C++ implementation</h3>
<p>Community support for maintenance and development of the Acero C++
is continuing with multiple bigger contributions in 2025 done by
<a href="https://github.com/pitrou">pitrou</a> and <a href="https://github.com/zanmato1984">zanmato1984</a>.</p>
<p>Many kernels have been moved from the integrated compute module into
a separate, optional package for improvement of modularity and distribution
size when optional compute functionality is not being used. The work has
been done by <a href="https://github.com/raulcd">raulcd</a>.</p>
<h3>Arrow C++ Parquet implementation</h3>
<p>There have been multiple contributions to fix and improve fuzzing
support for Parquet. Fuzzing work is led by <a href="https://github.com/pitrou">pitrou</a>
who is also one of the most active members of the community guiding other
developers and supporting us with abundant review capacity.</p>
<p>Multiple newer types have also been supported in the last year,
namely: VARIANT, UUID, GEOMETRY and GEOGRAPHY contributed
by <a href="https://github.com/neilechao">neilechao</a> and
<a href="https://github.com/paleolimbot">paleolimbot</a>.</p>
<p>An important feature added has also been Content-Defined Chunking
which improves deduplication of Parquet files with mostly identical
contents, by choosing data page boundaries based on actual contents
rather than a number of values <sup class="footnote-ref"><a href="#fn3" id="fnref3">3</a></sup>. This work has been done by
<a href="https://github.com/kszucs">kszucs</a>.</p>
<p>There have been improvements in the Parquet encryption support for
most of the releases in the last year. These efforts have been
driven mostly by <a href="https://github.com/EnricoMi">EnricoMi</a>,
<a href="https://github.com/pitrou">pitrou</a>, <a href="https://github.com/adamreeve">adamreeve</a>
and <a href="https://github.com/kapoisu">kapoisu</a>.</p>
<h3>PyArrow</h3>
<p>A lot of work has been put into adding type annotations. It all
started in July at EuroPython sprints and the code is now ready to be
reviewed and merged. Some more review capacity will be needed to get
this over the finish line. The work has been championed by
<a href="https://github.com/rok">rok</a>.</p>
<h3>Rust</h3>
<p>Arrow Rust community invested heavily in the Rust parquet reader for
which they created several blog posts <sup class="footnote-ref"><a href="#fn4" id="fnref4">4</a></sup>, <sup class="footnote-ref"><a href="#fn5" id="fnref5">5</a></sup>. The work has been
championed by <a href="https://github.com/alamb">alamb</a> and
<a href="https://github.com/etseidl">etseidl</a>.</p>
<table class="table">
  <caption>Notable Components in apache/arrow-rs for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>component</th>
      <th>merged_prs</th>
      <th>line_changes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>parquet</td>
      <td>333</td>
      <td>140958</td>
    </tr>
    <tr>
      <td>arrow</td>
      <td>436</td>
      <td>76590</td>
    </tr>
    <tr>
      <td>parquet-variant</td>
      <td>125</td>
      <td>41832</td>
    </tr>
    <tr>
      <td>api-change</td>
      <td>59</td>
      <td>33938</td>
    </tr>
    <tr>
      <td>arrow-avro</td>
      <td>48</td>
      <td>29487</td>
    </tr>
  </tbody>
</table>
<h3>Java</h3>
<p>The biggest changes in apache/arrow-java for 2025 have been connected
to Flight and Avro components plus Sphinx support due to the Java
implementation being moved into a separate Apache repository.
Contributors involved in the above are <a href="https://github.com/lidavidm">lidavidm</a>
and <a href="https://github.com/martin-traverse">martin-traverse</a>.</p>
<h3>Go</h3>
<p>There has been a lot of work related to new variant type in the
Parquet implementation done in apache/arrow-go all by
<a href="https://github.com/zeroshade">zeroshade</a>.</p>
<p>Noticeable emphasis was also visible on performance-focused PRs leading to
the addition of row seeking, bloom filter reading/writing, and reduction of
allocations in the Parquet library along with significant optimization work
in the <code>compute.Take</code> kernels. Shout out to <a href="https://github.com/pixelherodev">pixelherodev</a>
and <a href="https://github.com/hamilton-earthscope">hamilton-earthscope</a> for the
emphasis they placed on improving performance.</p>
<table class="table">
  <caption>Notable Components in apache/arrow-go for 2025.</caption>
  <thead style="background-color: #e9ecef">
    <tr>
      <th>component</th>
      <th>merged_prs</th>
      <th>line_changes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>parquet</td>
      <td>34</td>
      <td>27056</td>
    </tr>
    <tr>
      <td>arrow</td>
      <td>33</td>
      <td>14235</td>
    </tr>
  </tbody>
</table>
<h3>Nanoarrow</h3>
<p>Bigger work in nanoarrow include Decimal32/64 and ListView/LargeListView support,
LZ4 and ZSTD decompression in the IPC reader, and broader packaging via Conan, Homebrew,
and vcpkg. Contributors driving most above are <a href="https://github.com/paleolimbot">paleolimbot</a>
and <a href="https://github.com/WillAyd">WillAyd</a>.</p>
<hr />
<h2>Arrow Summit 25</h2>
<p>One last thing to highlight would be our first Arrow Summit 25 that
was held in Paris in October 2025. The event was a great success and
it brought users, contributors and maintainers together. It
definitely was a highlight of the year for many of us. Thanks to
<a href="https://github.com/raulcd">raulcd</a> and <a href="https://github.com/pitrou">pitrou</a>
for organizing the event.</p>
<img src="/img/arrow_summit.jpeg" alt="Arrow Summit 25 group picture" width="100%">
<hr />
<h2>Thank you!</h2>
<p>We would like to thank every single contributor to Apache Arrow for
being a part of this great community and project! Hope this blog
post helps to validate all the work you have done and motivates us
to continue collaborating and growing together!</p>
<hr />
<br>
<p>The Notebooks with the analysis for this blog post can be found
in <sup class="footnote-ref"><a href="#fn6" id="fnref6">6</a></sup>.</p>
<p>Note not all language implementations are mentioned. Some due to being
moved into a separate repository in 2025 resulting in missing information
for large amount of merged pull requests. Others due to having lower
number of bigger contributions in the past year.</p>
<hr />
<section class="footnotes">
<ol>
<li id="fn1">
<p><a href="https://arrow.apache.org/blog/2026/02/12/arrow-anniversary/">Apache Arrow is 10 years old 🎉</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
</li>
<li id="fn2">
<p><a href="https://ieeexplore.ieee.org/abstract/document/10491133">Developer Thriving: Four Sociocognitive Factors That Create Resilient Productivity on Software Teams</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
</li>
<li id="fn3">
<p><a href="https://huggingface.co/blog/parquet-cdc">Parquet Content-Defined Chunking</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
</li>
<li id="fn4">
<p><a href="https://arrow.apache.org/blog/2025/12/11/parquet-late-materialization-deep-dive/">A Practical Dive Into Late Materialization in arrow-rs Parquet Reads</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
</li>
<li id="fn5">
<p><a href="https://arrow.apache.org/blog/2025/10/23/rust-parquet-metadata/">3x-9x Faster Apache Parquet Footer Metadata Using a Custom Thrift Parser in Rust</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
</li>
<li id="fn6">
<p><a href="https://github.com/arrow-maintenance/explorations/tree/main/yearly_highlights">arrow-maintenance/explorations</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content><author><name>pmc</name></author><category term="arrow" /><summary type="html"><![CDATA[As you may have read in a previous blog post 1, the Apache Arrow project recently turned 10 years old. We are grateful to everyone who helped us achieve this milestone, and we wanted to celebrate the community's accomplishments, by publishing our community highlights from 2025. We were inspired by the research by Dr Cat Hicks et al 2, who found that concrete evidence of progress and accomplishments is instrumental to motivation and collaboration in developer teams. We think the same should hold for open source. New contributors It has been great to see many new contributors joining the project in the past year, with over 300 such individuals observed across the main Apache Arrow language implementations. Number of new contributors per repository. Repository/Implementation Number of new contributors arrow 125 arrow-rs 132 arrow-java 28 arrow-go 35 Worth highlighting is alinaliBQ who has been very active on the C++ Flight SQL ODBC Driver work together with justing-bq. AntoinePrv has done a huge amount of work on the C++ Parquet implementation and andishgar in the C++ Statistics area. rmnskb got involved with PyArrow in EuroPython sprints and has contributed multiple PRs since then. On the same event paddyroddy also started with his first contribution and helped on the Python packaging side further on. sdf-jkl, liamzwbao, friendlymatthew, and klion26 helped drive early Variant functionality in the Rust Parquet implementation and contributed a number of follow-up improvements. jecsand838 drove major improvements to the Rust arrow-avro crate, work highlighted in the Introducing Arrow Avro blog post. Notable New Contributors in apache/arrow for 2025. Author Number of prs Number of line changes (+ and -) alinaliBQ 36 15754 andishgar 19 2926 AntoinePrv 8 79257 rmnskb 7 550 justing-bq 4 12607 Notable New Contributors in apache/arrow-rs for 2025. Author Number of prs Number of line changes (+ and -) scovich 50 21006 jecsand838 38 26753 friendlymatthew 33 7203 sdf-jkl 4 388 rambleraptor 4 333 Notable New Contributors in apache/arrow-go for 2025. Author Number of prs Number of line changes (+ and -) Mandukhai-Alimaa 6 1392 hamilton-earthscope 5 2998 Release, Packaging and CI A lot of work has been done around the Continuous Integration and Developer Tools area. Ensuring a project with the reach of Arrow is properly working requires validation on a huge matrix of operating systems, architectures, libraries, versions. Needless to say that maintenance work has tremendous importance for the health of the project and the positive contributor experience. The most active contributors in the main repository are the ones contributing heavily on those areas while also providing the most review capacity. Shout out to kou and raulcd for taking such good care of the project and devoting countless hours so that everything runs smoothly. Notable contributions worth mentioning are enhanced release automation and reproducible builds for sources, migrating remaining AppVeyor and Azure jobs to GitHub actions, improving dev experience with more pre-commit checks instead of custom made linting tools. Moving some implementations out of the main repository (apache/arrow on GitHub) helped with easier releases and maintenance of the main repository and also of separate language implementations. The current apache/arrow repo now holds the format specification, C++ implementation together with all the bindings to it (Python, R, Ruby and C GLib). Other languages now live in their own apache/ repos namely apache/arrow-java, apache/arrow-js, apache/arrow-rs, apache/arrow-go, apache/arrow-nanoarrow, apache/arrow-dotnet and apache/arrow-swift. Notable Contributors in apache/arrow for 2025. Author Number of prs Number of line changes (+ and -) kou 221 141015 AntoinePrv 8 79257 raulcd 110 46645 pitrou 101 36585 jbonofre 1 20061 Notable Components in apache/arrow for 2025. Component label Number of merged prs Number of line changes (+ and -) Parquet 100 103828 C++ 387 82744 FlightRPC 43 52659 CI 237 42249 Ruby 74 20676 Migration of infrastructure from Voltron Data As Voltron Data has wound down its operations in 2025, the Arrow project had to migrate benchmarking infrastructure and nightly report from Voltron-managed services to an Arrow-managed AWS account. This work has been driven by rok. Closing of Stale issues thisisnic was working on closing of stale issues in the apache/arrow repository which helped surfacing important issues that were overlooked or forgotten. Code contributions C++ implementation Community support for maintenance and development of the Acero C++ is continuing with multiple bigger contributions in 2025 done by pitrou and zanmato1984. Many kernels have been moved from the integrated compute module into a separate, optional package for improvement of modularity and distribution size when optional compute functionality is not being used. The work has been done by raulcd. Arrow C++ Parquet implementation There have been multiple contributions to fix and improve fuzzing support for Parquet. Fuzzing work is led by pitrou who is also one of the most active members of the community guiding other developers and supporting us with abundant review capacity. Multiple newer types have also been supported in the last year, namely: VARIANT, UUID, GEOMETRY and GEOGRAPHY contributed by neilechao and paleolimbot. An important feature added has also been Content-Defined Chunking which improves deduplication of Parquet files with mostly identical contents, by choosing data page boundaries based on actual contents rather than a number of values 3. This work has been done by kszucs. There have been improvements in the Parquet encryption support for most of the releases in the last year. These efforts have been driven mostly by EnricoMi, pitrou, adamreeve and kapoisu. PyArrow A lot of work has been put into adding type annotations. It all started in July at EuroPython sprints and the code is now ready to be reviewed and merged. Some more review capacity will be needed to get this over the finish line. The work has been championed by rok. Rust Arrow Rust community invested heavily in the Rust parquet reader for which they created several blog posts 4, 5. The work has been championed by alamb and etseidl. Notable Components in apache/arrow-rs for 2025. component merged_prs line_changes parquet 333 140958 arrow 436 76590 parquet-variant 125 41832 api-change 59 33938 arrow-avro 48 29487 Java The biggest changes in apache/arrow-java for 2025 have been connected to Flight and Avro components plus Sphinx support due to the Java implementation being moved into a separate Apache repository. Contributors involved in the above are lidavidm and martin-traverse. Go There has been a lot of work related to new variant type in the Parquet implementation done in apache/arrow-go all by zeroshade. Noticeable emphasis was also visible on performance-focused PRs leading to the addition of row seeking, bloom filter reading/writing, and reduction of allocations in the Parquet library along with significant optimization work in the compute.Take kernels. Shout out to pixelherodev and hamilton-earthscope for the emphasis they placed on improving performance. Notable Components in apache/arrow-go for 2025. component merged_prs line_changes parquet 34 27056 arrow 33 14235 Nanoarrow Bigger work in nanoarrow include Decimal32/64 and ListView/LargeListView support, LZ4 and ZSTD decompression in the IPC reader, and broader packaging via Conan, Homebrew, and vcpkg. Contributors driving most above are paleolimbot and WillAyd. Arrow Summit 25 One last thing to highlight would be our first Arrow Summit 25 that was held in Paris in October 2025. The event was a great success and it brought users, contributors and maintainers together. It definitely was a highlight of the year for many of us. Thanks to raulcd and pitrou for organizing the event. Thank you! We would like to thank every single contributor to Apache Arrow for being a part of this great community and project! Hope this blog post helps to validate all the work you have done and motivates us to continue collaborating and growing together! The Notebooks with the analysis for this blog post can be found in 6. Note not all language implementations are mentioned. Some due to being moved into a separate repository in 2025 resulting in missing information for large amount of merged pull requests. Others due to having lower number of bigger contributions in the past year. Apache Arrow is 10 years old 🎉 ↩ Developer Thriving: Four Sociocognitive Factors That Create Resilient Productivity on Software Teams ↩ Parquet Content-Defined Chunking ↩ A Practical Dive Into Late Materialization in arrow-rs Parquet Reads ↩ 3x-9x Faster Apache Parquet Footer Metadata Using a Custom Thrift Parser in Rust ↩ arrow-maintenance/explorations ↩]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" /><media:content medium="image" url="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>