This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/arrow-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new d62659af0b3 Updating built site
d62659af0b3 is described below

commit d62659af0b3baed42efeccea522d355bbd5a957c
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Jan 27 09:40:49 2026 +0000

    Updating built site
---
 blog/2026/01/18/23.0.0-release/index.html | 493 ++++++++++++++++++++++++++++++
 blog/index.html                           |  25 ++
 feed.xml                                  | 448 +++++++++++----------------
 release/index.html                        |   4 +-
 4 files changed, 702 insertions(+), 268 deletions(-)

diff --git a/blog/2026/01/18/23.0.0-release/index.html 
b/blog/2026/01/18/23.0.0-release/index.html
new file mode 100644
index 00000000000..5fa5a88a0e7
--- /dev/null
+++ b/blog/2026/01/18/23.0.0-release/index.html
@@ -0,0 +1,493 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    
+    <title>Apache Arrow 23.0.0 Release | Apache Arrow</title>
+    
+
+    <!-- Begin Jekyll SEO tag v2.8.0 -->
+<meta name="generator" content="Jekyll v4.4.1" />
+<meta property="og:title" content="Apache Arrow 23.0.0 Release" />
+<meta name="author" content="pmc" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="The Apache Arrow team is pleased to announce 
the 23.0.0 release. This release covers over 3 months of development work and 
includes 336 resolved issues on 417 distinct commits from 71 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  [...]
+<meta property="og:description" content="The Apache Arrow team is pleased to 
announce the 23.0.0 release. This release covers over 3 months of development 
work and includes 336 resolved issues on 417 distinct commits from 71 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 co [...]
+<link rel="canonical" 
href="https://arrow.apache.org/blog/2026/01/18/23.0.0-release/"; />
+<meta property="og:url" 
content="https://arrow.apache.org/blog/2026/01/18/23.0.0-release/"; />
+<meta property="og:site_name" content="Apache Arrow" />
+<meta property="og:image" 
content="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png";
 />
+<meta property="og:type" content="article" />
+<meta property="article:published_time" content="2026-01-18T00:00:00-05:00" />
+<meta name="twitter:card" content="summary_large_image" />
+<meta property="twitter:image" 
content="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png";
 />
+<meta property="twitter:title" content="Apache Arrow 23.0.0 Release" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"pmc"},"dateModified":"2026-01-18T00:00:00-05:00","datePublished":"2026-01-18T00:00:00-05:00","description":"The
 Apache Arrow team is pleased to announce the 23.0.0 release. This release 
covers over 3 months of development work and includes 336 resolved issues on 
417 distinct commits from 71 distinct contributors. See the Install Page to 
learn how to get the libraries for your platform. The release n [...]
+<!-- End Jekyll SEO tag -->
+
+
+    <!-- favicons -->
+    <link rel="icon" type="image/png" sizes="16x16" 
href="/img/favicon-16x16.png" id="light1">
+    <link rel="icon" type="image/png" sizes="32x32" 
href="/img/favicon-32x32.png" id="light2">
+    <link rel="apple-touch-icon" type="image/png" sizes="180x180" 
href="/img/apple-touch-icon.png" id="light3">
+    <link rel="apple-touch-icon" type="image/png" sizes="120x120" 
href="/img/apple-touch-icon-120x120.png" id="light4">
+    <link rel="apple-touch-icon" type="image/png" sizes="76x76" 
href="/img/apple-touch-icon-76x76.png" id="light5">
+    <link rel="apple-touch-icon" type="image/png" sizes="60x60" 
href="/img/apple-touch-icon-60x60.png" id="light6">
+    <!-- dark mode favicons -->
+    <link rel="icon" type="image/png" sizes="16x16" 
href="/img/favicon-16x16-dark.png" id="dark1">
+    <link rel="icon" type="image/png" sizes="32x32" 
href="/img/favicon-32x32-dark.png" id="dark2">
+    <link rel="apple-touch-icon" type="image/png" sizes="180x180" 
href="/img/apple-touch-icon-dark.png" id="dark3">
+    <link rel="apple-touch-icon" type="image/png" sizes="120x120" 
href="/img/apple-touch-icon-120x120-dark.png" id="dark4">
+    <link rel="apple-touch-icon" type="image/png" sizes="76x76" 
href="/img/apple-touch-icon-76x76-dark.png" id="dark5">
+    <link rel="apple-touch-icon" type="image/png" sizes="60x60" 
href="/img/apple-touch-icon-60x60-dark.png" id="dark6">
+
+    <script>
+      // Switch to the dark-mode favicons if prefers-color-scheme: dark
+      function onUpdate() {
+        light1 = document.querySelector('link#light1');
+        light2 = document.querySelector('link#light2');
+        light3 = document.querySelector('link#light3');
+        light4 = document.querySelector('link#light4');
+        light5 = document.querySelector('link#light5');
+        light6 = document.querySelector('link#light6');
+
+        dark1 = document.querySelector('link#dark1');
+        dark2 = document.querySelector('link#dark2');
+        dark3 = document.querySelector('link#dark3');
+        dark4 = document.querySelector('link#dark4');
+        dark5 = document.querySelector('link#dark5');
+        dark6 = document.querySelector('link#dark6');
+
+        if (matcher.matches) {
+          light1.remove();
+          light2.remove();
+          light3.remove();
+          light4.remove();
+          light5.remove();
+          light6.remove();
+          document.head.append(dark1);
+          document.head.append(dark2);
+          document.head.append(dark3);
+          document.head.append(dark4);
+          document.head.append(dark5);
+          document.head.append(dark6);
+        } else {
+          dark1.remove();
+          dark2.remove();
+          dark3.remove();
+          dark4.remove();
+          dark5.remove();
+          dark6.remove();
+          document.head.append(light1);
+          document.head.append(light2);
+          document.head.append(light3);
+          document.head.append(light4);
+          document.head.append(light5);
+          document.head.append(light6);
+        }
+      }
+      matcher = window.matchMedia('(prefers-color-scheme: dark)');
+      matcher.addListener(onUpdate);
+      onUpdate();
+    </script>
+
+    <link href="/css/main.css" rel="stylesheet">
+    <link href="/css/syntax.css" rel="stylesheet">
+    <script src="/javascript/main.js"></script>
+    
+    <!-- Matomo -->
+<script>
+  var _paq = window._paq = window._paq || [];
+  /* tracker methods like "setCustomDimension" should be called before 
"trackPageView" */
+  /* We explicitly disable cookie tracking to avoid privacy issues */
+  _paq.push(['disableCookies']);
+  _paq.push(['trackPageView']);
+  _paq.push(['enableLinkTracking']);
+  (function() {
+    var u="https://analytics.apache.org/";;
+    _paq.push(['setTrackerUrl', u+'matomo.php']);
+    _paq.push(['setSiteId', '20']);
+    var d=document, g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0];
+    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+  })();
+</script>
+<!-- End Matomo Code -->
+
+    
+    <link type="application/atom+xml" rel="alternate" 
href="https://arrow.apache.org/feed.xml"; title="Apache Arrow" />
+  </head>
+
+
+<body class="wrap">
+  <header>
+    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+  
+  <a class="navbar-brand no-padding" href="/"><img 
src="/img/arrow-inverse-300px.png" height="40px"></a>
+  
+   <button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" 
data-target="#arrow-navbar" aria-controls="arrow-navbar" aria-expanded="false" 
aria-label="Toggle navigation">
+    <span class="navbar-toggler-icon"></span>
+  </button>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse justify-content-end" 
id="arrow-navbar">
+      <ul class="nav navbar-nav">
+        <li class="nav-item"><a class="nav-link" href="/overview/" 
role="button" aria-haspopup="true" aria-expanded="false">Overview</a></li>
+        <li class="nav-item"><a class="nav-link" href="/faq/" role="button" 
aria-haspopup="true" aria-expanded="false">FAQ</a></li>
+        <li class="nav-item"><a class="nav-link" href="/blog" role="button" 
aria-haspopup="true" aria-expanded="false">Blog</a></li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" 
id="navbarDropdownGetArrow" role="button" data-toggle="dropdown" 
aria-haspopup="true" aria-expanded="false">
+             Get Arrow
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownGetArrow">
+            <a class="dropdown-item" href="/install/">Install</a>
+            <a class="dropdown-item" href="/release/">Releases</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" 
id="navbarDropdownDocumentation" role="button" data-toggle="dropdown" 
aria-haspopup="true" aria-expanded="false">
+             Docs
+          </a>
+          <div class="dropdown-menu" 
aria-labelledby="navbarDropdownDocumentation">
+            <a class="dropdown-item" href="/docs">Project Docs</a>
+            <a class="dropdown-item" 
href="/docs/format/Columnar.html">Format</a>
+            <hr>
+            <a class="dropdown-item" href="/docs/c_glib">C GLib</a>
+            <a class="dropdown-item" href="/docs/cpp">C++</a>
+            <a class="dropdown-item" 
href="https://arrow.apache.org/dotnet/";>.NET</a>
+            <a class="dropdown-item" 
href="https://godoc.org/github.com/apache/arrow/go/arrow"; target="_blank" 
rel="noopener">Go</a>
+            <a class="dropdown-item" href="/java/">Java</a>
+            <a class="dropdown-item" href="/js/">JavaScript</a>
+            <a class="dropdown-item" href="/julia/">Julia</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/blob/main/matlab/README.md"; 
target="_blank" rel="noopener">MATLAB</a>
+            <a class="dropdown-item" href="/docs/python">Python</a>
+            <a class="dropdown-item" href="/docs/r">R</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/blob/main/ruby/README.md"; target="_blank" 
rel="noopener">Ruby</a>
+            <a class="dropdown-item" href="https://docs.rs/arrow/latest"; 
target="_blank" rel="noopener">Rust</a>
+            <a class="dropdown-item" href="/swift">Swift</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" 
id="navbarDropdownSource" role="button" data-toggle="dropdown" 
aria-haspopup="true" aria-expanded="false">
+             Source
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownSource">
+            <a class="dropdown-item" href="https://github.com/apache/arrow"; 
target="_blank" rel="noopener">Main Repo</a>
+            <hr>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/c_glib"; target="_blank" 
rel="noopener">C GLib</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/cpp"; target="_blank" 
rel="noopener">C++</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow-dotnet"; target="_blank" 
rel="noopener">.NET</a>
+            <a class="dropdown-item" href="https://github.com/apache/arrow-go"; 
target="_blank" rel="noopener">Go</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow-java"; target="_blank" 
rel="noopener">Java</a>
+            <a class="dropdown-item" href="https://github.com/apache/arrow-js"; 
target="_blank" rel="noopener">JavaScript</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow-julia"; target="_blank" 
rel="noopener">Julia</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/matlab"; target="_blank" 
rel="noopener">MATLAB</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/python"; target="_blank" 
rel="noopener">Python</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/r"; target="_blank" 
rel="noopener">R</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/tree/main/ruby"; target="_blank" 
rel="noopener">Ruby</a>
+            <a class="dropdown-item" href="https://github.com/apache/arrow-rs"; 
target="_blank" rel="noopener">Rust</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow-swift"; target="_blank" 
rel="noopener">Swift</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" 
id="navbarDropdownSubprojects" role="button" data-toggle="dropdown" 
aria-haspopup="true" aria-expanded="false">
+             Subprojects
+          </a>
+          <div class="dropdown-menu" 
aria-labelledby="navbarDropdownSubprojects">
+            <a class="dropdown-item" href="/adbc">ADBC</a>
+            <a class="dropdown-item" href="/docs/format/Flight.html">Arrow 
Flight</a>
+            <a class="dropdown-item" href="/docs/format/FlightSql.html">Arrow 
Flight SQL</a>
+            <a class="dropdown-item" href="https://datafusion.apache.org"; 
target="_blank" rel="noopener">DataFusion</a>
+            <a class="dropdown-item" href="/nanoarrow">nanoarrow</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" 
id="navbarDropdownCommunity" role="button" data-toggle="dropdown" 
aria-haspopup="true" aria-expanded="false">
+             Community
+          </a>
+          <div class="dropdown-menu" aria-labelledby="navbarDropdownCommunity">
+            <a class="dropdown-item" href="/community/">Communication</a>
+            <a class="dropdown-item" 
href="/docs/developers/index.html">Contributing</a>
+            <a class="dropdown-item" 
href="https://github.com/apache/arrow/issues"; target="_blank" 
rel="noopener">Issue Tracker</a>
+            <a class="dropdown-item" href="/committers/">Governance</a>
+            <a class="dropdown-item" href="/use_cases/">Use Cases</a>
+            <a class="dropdown-item" href="/powered_by/">Powered By</a>
+            <a class="dropdown-item" href="/visual_identity/">Visual 
Identity</a>
+            <a class="dropdown-item" href="/security/">Security</a>
+            <a class="dropdown-item" 
href="https://www.apache.org/foundation/policies/conduct.html"; target="_blank" 
rel="noopener">Code of Conduct</a>
+          </div>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownASF" 
role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+             ASF Links
+          </a>
+          <div class="dropdown-menu dropdown-menu-right" 
aria-labelledby="navbarDropdownASF">
+            <a class="dropdown-item" href="https://www.apache.org/"; 
target="_blank" rel="noopener">ASF Website</a>
+            <a class="dropdown-item" href="https://www.apache.org/licenses/"; 
target="_blank" rel="noopener">License</a>
+            <a class="dropdown-item" 
href="https://www.apache.org/foundation/sponsorship.html"; target="_blank" 
rel="noopener">Donate</a>
+            <a class="dropdown-item" 
href="https://www.apache.org/foundation/thanks.html"; target="_blank" 
rel="noopener">Thanks</a>
+            <a class="dropdown-item" href="https://www.apache.org/security/"; 
target="_blank" rel="noopener">Security</a>
+          </div>
+        </li>
+      </ul>
+    </div>
+<!-- /.navbar-collapse -->
+  </nav>
+
+  </header>
+
+  <div class="container p-4 pt-5">
+    <div class="col-md-8 mx-auto">
+      <main role="main" class="pb-5">
+        
+<h1>
+  Apache Arrow 23.0.0 Release
+</h1>
+<hr class="mt-4 mb-3">
+
+
+
+<p class="mb-4 pb-1">
+  <span class="badge badge-secondary">Published</span>
+  <span class="published mr-3">
+    18 Jan 2026
+  </span>
+  <br>
+  <span class="badge badge-secondary">By</span>
+  
+    <a class="mr-3" href="https://arrow.apache.org";>The Apache Arrow PMC (pmc) 
</a>
+  
+
+  
+</p>
+
+
+        <!--
+
+-->
+<p>The Apache Arrow team is pleased to announce the 23.0.0 release. This 
release
+covers over 3 months of development work and includes <a 
href="https://github.com/apache/arrow/milestone/71?closed=1"; target="_blank" 
rel="noopener"><strong>336 resolved
+issues</strong></a> on <a href="/release/23.0.0.html#contributors"><strong>417 
distinct commits</strong></a> from <a 
href="/release/23.0.0.html#contributors"><strong>71 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/23.0.0.html#changelog">complete changelog</a>.</p>
+<h2>Community</h2>
+<p>As per our newly started tradition of rotating the PMC chair once a year
+Antoine Pitrou was elected as the new PMC chair and VP, succeeding
+Neal Richardson.</p>
+<p>Thanks for your contributions and participation in the project!</p>
+<h2>Arrow Flight RPC Notes</h2>
+<p>An ODBC driver for Apache Arrow Flight SQL has been completed.  Currently 
it is not packaged for release, but <a 
href="https://github.com/apache/arrow/blob/apache-arrow-23.0.0/cpp/src/arrow/flight/sql/odbc/README.md";
 target="_blank" rel="noopener">can be built from source</a>.</p>
+<h2>C++ Notes</h2>
+<p>The C++ standard has been updated to C++ 20 <a 
href="https://github.com/apache/arrow/issues/45885"; target="_blank" 
rel="noopener">GH-45885</a> and the minimum GCC to 8.</p>
+<p>Some improvements to leverage C++ 20 <a 
href="https://github.com/apache/arrow/issues/48592"; target="_blank" 
rel="noopener">GH-48592</a>,</p>
+<h3>Compute</h3>
+<ul>
+<li>Graceful error handling for decimal binary arithmetic and comparison 
instead of firing confusing assertions. <a 
href="https://github.com/apache/arrow/issues/35957"; target="_blank" 
rel="noopener">GH-35957</a>
+</li>
+<li>Fixed an issue where the MinMax kernel was emitting -inf/inf for all-NaN 
input. <a href="https://github.com/apache/arrow/issues/46063"; target="_blank" 
rel="noopener">GH-46063</a>
+</li>
+<li>Avoid ZeroCopyCastExec when casting between Binary offset types to avoid 
high overheads. <a href="https://github.com/apache/arrow/issues/43660"; 
target="_blank" rel="noopener">GH-43660</a>
+</li>
+<li>Enhanced type checking for hash join residual filter in Acero. <a 
href="https://github.com/apache/arrow/issues/48268"; target="_blank" 
rel="noopener">GH-48268</a>
+</li>
+</ul>
+<h3>Format</h3>
+<ul>
+<li>Clarified that empty compressed buffers can omit the length header. <a 
href="https://github.com/apache/arrow/issues/47918"; target="_blank" 
rel="noopener">GH-47918</a>
+</li>
+</ul>
+<h3>Parquet</h3>
+<ul>
+<li>A new setting to limit the number of rows written per page has been added. 
<a href="https://github.com/apache/arrow/issues/47030"; target="_blank" 
rel="noopener">GH-47030</a>
+</li>
+<li>A arrow::Result version of parquet::arrow::FileReader::Make() has been 
added. <a href="https://github.com/apache/arrow/issues/44810"; target="_blank" 
rel="noopener">GH-44810</a>
+</li>
+<li>Support for reading INT-encoded Decimal statistics as Arrow scalars. <a 
href="https://github.com/apache/arrow/issues/47955"; target="_blank" 
rel="noopener">GH-47955</a>
+</li>
+</ul>
+<p>Several bug fixes including:</p>
+<ul>
+<li>Fixed invalid Parquet files written when dictionary encoded pages are 
large. <a href="https://github.com/apache/arrow/issues/47973"; target="_blank" 
rel="noopener">GH-47973</a>
+</li>
+<li>Fixed pre-1970 INT96 timestamps roundtrip. <a 
href="https://github.com/apache/arrow/issues/48246"; target="_blank" 
rel="noopener">GH-48246</a>
+</li>
+<li>Fixed potential crash when reading invalid Parquet data. <a 
href="https://github.com/apache/arrow/issues/48308"; target="_blank" 
rel="noopener">GH-48308</a>
+</li>
+<li>Added compatibility with non-compliant RLE streams. <a 
href="https://github.com/apache/arrow/issues/47981"; target="_blank" 
rel="noopener">GH-47981</a>
+</li>
+<li>Fixed Util &amp; Level Conversion logic on big-endian systems. <a 
href="https://github.com/apache/arrow/issues/48218"; target="_blank" 
rel="noopener">GH-48218</a>
+</li>
+</ul>
+<h4>Encryption</h4>
+<ul>
+<li>Simplified nested field encryption configuration. <a 
href="https://github.com/apache/arrow/issues/41246"; target="_blank" 
rel="noopener">GH-41246</a>
+</li>
+<li>Improved column encryption API. <a 
href="https://github.com/apache/arrow/issues/48337"; target="_blank" 
rel="noopener">GH-48337</a>
+</li>
+<li>Better fuzzing support for encrypted files. <a 
href="https://github.com/apache/arrow/issues/48335"; target="_blank" 
rel="noopener">GH-48335</a>
+</li>
+</ul>
+<h3>Miscellaneous C++ changes</h3>
+<ul>
+<li>Added support for CUDA 13 <a 
href="https://github.com/apache/arrow/issues/47677"; target="_blank" 
rel="noopener">GH-47677</a>
+</li>
+<li>Drop support for gold linker <a 
href="https://github.com/apache/arrow/issues/45484"; target="_blank" 
rel="noopener">GH-45484</a>
+</li>
+<li>Leverage CMake 3.25 upgrade by reducing complexity and maintenance burden 
on our third party dependency management <a 
href="https://github.com/apache/arrow/issues/48317"; target="_blank" 
rel="noopener">GH-48317</a>,
+<a href="https://github.com/apache/arrow/issues/48316"; target="_blank" 
rel="noopener">GH-48316</a>, <a 
href="https://github.com/apache/arrow/issues/48315"; target="_blank" 
rel="noopener">GH-48315</a>, <a 
href="https://github.com/apache/arrow/issues/48248"; target="_blank" 
rel="noopener">GH-48248</a>,
+<a href="https://github.com/apache/arrow/issues/48181"; target="_blank" 
rel="noopener">GH-48181</a>, <a 
href="https://github.com/apache/arrow/issues/48178"; target="_blank" 
rel="noopener">GH-48178</a>, <a 
href="https://github.com/apache/arrow/issues/48091"; target="_blank" 
rel="noopener">GH-48091</a>,
+<a href="https://github.com/apache/arrow/issues/48074"; target="_blank" 
rel="noopener">GH-48074</a>
+</li>
+</ul>
+<h2>Linux Packaging Notes</h2>
+<p>Fixed a bug that the <code>parquet-devel</code> RPM package depends on
+<code>parquet-glib-devel</code>.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48044"; 
target="_blank" rel="noopener">GH-48044</a></p>
+<p>CentOS 7 support has been dropped.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/40735"; 
target="_blank" rel="noopener">GH-40735</a></p>
+<h2>MATLAB Notes</h2>
+<p>Added support for building against MATLAB R2025b <a 
href="https://github.com/apache/arrow/issues/48154"; target="_blank" 
rel="noopener">GH-48154</a>.</p>
+<h2>Python Notes</h2>
+<h3>Compatibility notes</h3>
+<ul>
+<li>Deprecated <code>Array.format</code> is removed <a 
href="https://github.com/apache/arrow/issues/48102"; target="_blank" 
rel="noopener">GH-48102</a>.</li>
+<li>Experimental tag has been removed for Arrow PyCapsule Interface
+<a href="https://github.com/apache/arrow/issues/47975"; target="_blank" 
rel="noopener">GH-47975</a>.</li>
+<li>
+<code>PyWeakref_GetRef</code> has replaced the use of 
<code>PyWeakref_GET_OBJECT</code> to support Python 3.15
+<a href="https://github.com/apache/arrow/issues/47823"; target="_blank" 
rel="noopener">GH-47823</a>.</li>
+</ul>
+<h3>New features</h3>
+<ul>
+<li>Bindings for <code>scatter</code> and <code>inverse_permutation</code>are 
added
+<a href="https://github.com/apache/arrow/issues/48167"; target="_blank" 
rel="noopener">GH-48167</a>.</li>
+<li>
+<code>max_rows_per_page</code> argument is now exposed in 
<code>parquet.WriterProperties</code>
+<a href="https://github.com/apache/arrow/issues/48096"; target="_blank" 
rel="noopener">GH-48096</a>.</li>
+<li>External key material and rotation is enabled for individual Parquet files
+<a href="https://github.com/apache/arrow/issues/31869"; target="_blank" 
rel="noopener">GH-31869</a>.</li>
+</ul>
+<h3>Other improvements</h3>
+<ul>
+<li>Nested field encryption configuration has been simplified <a 
href="https://github.com/apache/arrow/issues/41246"; target="_blank" 
rel="noopener">GH-41246</a>.</li>
+<li>Reading INT-encoded <code>Decimal</code> statistics with 
<code>StatisticsAsScalars</code> is now supported
+<a href="https://github.com/apache/arrow/issues/47955"; target="_blank" 
rel="noopener">GH-47955</a>.</li>
+<li>Unsigned dictionary indices are now supported in pandas conversion
+<a href="https://github.com/apache/arrow/issues/47022"; target="_blank" 
rel="noopener">GH-47022</a>.</li>
+<li>Added code examples for compute functions <code>min</code>, 
<code>max</code> and <code>min_max</code>
+<a href="https://github.com/apache/arrow/issues/48668"; target="_blank" 
rel="noopener">GH-48668</a>.</li>
+<li>Add temporal unit checking in NumPyDtypeUnifier <a 
href="https://github.com/apache/arrow/issues/48625"; target="_blank" 
rel="noopener">GH-48625</a>
+</li>
+<li>Error message is improved when mixing <code>numpy.datetime64</code> values 
with different units
+(e.g., datetime64[s] and datetime64[ms]) in a single array
+<a href="https://github.com/apache/arrow/issues/48463"; target="_blank" 
rel="noopener">GH-48463</a>.</li>
+<li>The source argument is now checked in 
<code>pyarrow.parquet.read_table</code>
+<a href="https://github.com/apache/arrow/issues/47728"; target="_blank" 
rel="noopener">GH-47728</a>.</li>
+</ul>
+<h3>Relevant bug fixes</h3>
+<ul>
+<li>
+<code>ipc.Message __repr__</code> has been corrected to use f-string <a 
href="https://github.com/apache/arrow/issues/48608"; target="_blank" 
rel="noopener">GH-48608</a>.</li>
+<li>Failures when reading parquet files written with non-compliant RLE 
encoders have been fixed
+in C++ with adding compatibility <a 
href="https://github.com/apache/arrow/issues/47981"; target="_blank" 
rel="noopener">GH-47981</a>.</li>
+<li>Memory usage is now reduced when using <code>to_pandas()</code> with many 
extension arrays columns
+<a href="https://github.com/apache/arrow/issues/47861"; target="_blank" 
rel="noopener">GH-47861</a>.</li>
+<li>Missing required argument error in <code>FSSpecHandler</code> 
<code>delete_root_dir_contents</code> has been
+fixed <a href="https://github.com/apache/arrow/issues/47559"; target="_blank" 
rel="noopener">GH-47559</a>.</li>
+<li>Invalid <code>RecordBatch.from_struct_array</code> batch for sliced arrays 
with offset zero has been fixed
+in the C++ <a href="https://github.com/apache/arrow/issues/44318"; 
target="_blank" rel="noopener">GH-44318</a>.</li>
+</ul>
+<h2>R Notes</h2>
+<h3>Compatibility notes</h3>
+<ul>
+<li>GCS have been turned off by default <a 
href="https://github.com/apache/arrow/issues/48342"; target="_blank" 
rel="noopener">GH-48342</a>.</li>
+<li>OpenSSL 1.x builds have been removed <a 
href="https://github.com/apache/arrow/issues/45449"; target="_blank" 
rel="noopener">GH-45449</a>
+</li>
+</ul>
+<h3>Relevant bug fixes</h3>
+<ul>
+<li>Fixed a segfault that could be raised when concatenatig tables <a 
href="https://github.com/apache/arrow/issues/47000"; target="_blank" 
rel="noopener">GH-47000</a>.</li>
+</ul>
+<p>Several Continuous integration fixes and minor bugs have also been added to 
the release for a full list check the release notes.</p>
+<h2>Ruby and C GLib Notes</h2>
+<p>All missing compute function options have been added. So we can use
+all compute functions from Ruby and C GLib. This is done by Sten
+Larsson.</p>
+<p>Fixed size list array support has been added.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48362"; 
target="_blank" rel="noopener">GH-48362</a></p>
+<p>Changing thread pool configuration support in Acero has been
+added. This is done by Sten Larsson.</p>
+<p>Duration support has been added.</p>
+<p>CSV writer support has been added.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48680"; 
target="_blank" rel="noopener">GH-48680</a></p>
+<h3>Ruby</h3>
+<p>Experimental Pure Ruby Apache Arrow reader implementation has been
+added as <code>red-arrow-format</code> gem.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48132"; 
target="_blank" rel="noopener">GH-48132</a></p>
+<p>We'll add experimental writer implementation in the next release.</p>
+<p><code>Arrow::Column#to_arrow{,_array,_chunked_array}</code> have been 
added. They
+are for convenient.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48292"; 
target="_blank" rel="noopener">GH-48292</a></p>
+<p>Auto Apache Arrow type detection in <code>Arrow::Array.new</code> has been
+improved for nested integer list case.</p>
+<p>See also:</p>
+<ul>
+<li><a href="https://github.com/apache/arrow/issues/48478"; target="_blank" 
rel="noopener">GH-48478</a></li>
+<li><a href="https://github.com/apache/arrow/issues/48481"; target="_blank" 
rel="noopener">GH-48481</a></li>
+</ul>
+<p><code>Arrow::FixedSizeListArray.new(data_type, values)</code> support has 
been
+added.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48610"; 
target="_blank" rel="noopener">GH-48610</a></p>
+<h3>C GLib</h3>
+<p>We use <code>Arrow-${MAJOR}.${MINOR}.{gir,typelib}</code> not
+<code>Arrow-1.0.{gir,typelib}</code> for <code>.gir</code> and 
<code>.typelib</code> file names. It's
+for co-existent multiple C GLib versions in the same system.</p>
+<p>See also: <a href="https://github.com/apache/arrow/issues/48616"; 
target="_blank" rel="noopener">GH-48616</a></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"; 
target="_blank" rel="noopener">monorepo</a>.</p>
+<ul>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-java"; target="_blank" rel="noopener">Java
+implementation</a>, see the latest <a 
href="https://github.com/apache/arrow-java/releases"; target="_blank" 
rel="noopener">Arrow
+Java changelog</a>.</li>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-js"; target="_blank" 
rel="noopener">JavaScript
+implementation</a>, see the latest <a 
href="https://github.com/apache/arrow-js/releases"; target="_blank" 
rel="noopener">Arrow
+JavaScript changelog</a>.</li>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-rs"; target="_blank" rel="noopener">Rust
+implementation</a> see the latest <a 
href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md"; 
target="_blank" rel="noopener">Arrow Rust
+changelog</a>.</li>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-go"; target="_blank" rel="noopener">Go
+implementation</a>, see the latest <a 
href="https://github.com/apache/arrow-go/releases"; target="_blank" 
rel="noopener">Arrow Go
+changelog</a>.</li>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-dotnet"; target="_blank" 
rel="noopener">.NET
+implementation</a>, see the latest <a 
href="https://github.com/apache/arrow-dotnet/releases"; target="_blank" 
rel="noopener">Arrow  .NET changelog</a>.</li>
+<li>For notes on the latest release of the <a 
href="https://github.com/apache/arrow-swift"; target="_blank" 
rel="noopener">Swift implementation</a>, see the latest <a 
href="https://github.com/apache/arrow-swift/releases"; target="_blank" 
rel="noopener">Arrow Swift changelog</a>.</li>
+</ul>
+
+      </main>
+    </div>
+
+    <hr>
+<footer class="footer">
+  <div class="row">
+    <div class="col-md-9">
+      <p>Apache Arrow, Arrow, Apache, the Apache logo, and the Apache Arrow 
project logo are either registered trademarks or trademarks of The Apache 
Software Foundation in the United States and other countries.</p>
+      <p>© 2016-2026 The Apache Software Foundation</p>
+    </div>
+    <div class="col-md-3">
+      <a class="d-sm-none d-md-inline pr-2" 
href="https://www.apache.org/events/current-event.html"; target="_blank" 
rel="noopener">
+        <img src="https://www.apache.org/events/current-event-234x60.png";>
+      </a>
+    </div>
+  </div>
+</footer>
+
+  </div>
+</body>
+</html>
diff --git a/blog/index.html b/blog/index.html
index 84ec1d12993..c572914d2b8 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -280,6 +280,31 @@ What's Cha...
   
 
   
+  <p>
+    </p>
+<h3>
+      <a href="/blog/2026/01/18/23.0.0-release/">Apache Arrow 23.0.0 
Release</a>
+    </h3>
+    
+    <p>
+    <span class="blog-list-date">
+      18 January 2026
+    </span>
+    </p>
+    
+The Apache Arrow team is pleased to announce the 23.0.0 release. This release
+covers over 3 months of development work and includes 336 resolved
+issues on 417 distinct commits from 71 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 select...
+     
+    <a href="/blog/2026/01/18/23.0.0-release/">Read More →</a>
+
+  
+  
+
+  
   <p>
     </p>
 <h3>
diff --git a/feed.xml b/feed.xml
index 9a67574bd5d..ef5fc407f0b 100644
--- a/feed.xml
+++ b/feed.xml
@@ -1,4 +1,4 @@
-<?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-01-26T15:51:12-05:00</updated><id>https://arrow.apache.org/feed.xml</id><title
 type="html">Apache Arrow</title><subtitle>Apache Arrow is the universal 
columnar fo [...]
+<?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-01-27T04:36:01-05:00</updated><id>https://arrow.apache.org/feed.xml</id><title
 type="html">Apache Arrow</title><subtitle>Apache Arrow is the universal 
columnar fo [...]
 
 -->
 <p>The Apache Arrow team is pleased to announce the v18.5.1 release of Apache 
Arrow Go.
@@ -30,7 +30,186 @@ This patch release covers 10 commits from 6 distinct 
contributors.</p>
 <li>@asubiotto made their first contribution in <a 
href="https://github.com/apache/arrow-go/pull/631";>#631</a></li>
 <li>@xiaocai2333 made their first contribution in <a 
href="https://github.com/apache/arrow-go/pull/614";>#614</a></li>
 </ul>
-<p><strong>Full Changelog</strong>: <a 
href="https://github.com/apache/arrow-go/compare/v18.5.0...v18.5.1";>https://github.com/apache/arrow-go/compare/v18.5.0...v18.5.1</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.5.1 release of Apache Arrow Go. This patch release 
covers 10 commits from 6 distinct contributors. Contributors $ git shortlog -sn 
v18.5.0..v18.5.1 6 Matt Topol  [...]
+<p><strong>Full Changelog</strong>: <a 
href="https://github.com/apache/arrow-go/compare/v18.5.0...v18.5.1";>https://github.com/apache/arrow-go/compare/v18.5.0...v18.5.1</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.5.1 release of Apache Arrow Go. This patch release 
covers 10 commits from 6 distinct contributors. Contributors $ git shortlog -sn 
v18.5.0..v18.5.1 6 Matt Topol  [...]
+
+-->
+<p>The Apache Arrow team is pleased to announce the 23.0.0 release. This 
release
+covers over 3 months of development work and includes <a 
href="https://github.com/apache/arrow/milestone/71?closed=1";><strong>336 
resolved
+issues</strong></a> on <a href="/release/23.0.0.html#contributors"><strong>417 
distinct commits</strong></a> from <a 
href="/release/23.0.0.html#contributors"><strong>71 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/23.0.0.html#changelog">complete changelog</a>.</p>
+<h2>Community</h2>
+<p>As per our newly started tradition of rotating the PMC chair once a year
+Antoine Pitrou was elected as the new PMC chair and VP, succeeding
+Neal Richardson.</p>
+<p>Thanks for your contributions and participation in the project!</p>
+<h2>Arrow Flight RPC Notes</h2>
+<p>An ODBC driver for Apache Arrow Flight SQL has been completed.  Currently 
it is not packaged for release, but <a 
href="https://github.com/apache/arrow/blob/apache-arrow-23.0.0/cpp/src/arrow/flight/sql/odbc/README.md";>can
 be built from source</a>.</p>
+<h2>C++ Notes</h2>
+<p>The C++ standard has been updated to C++ 20 <a 
href="https://github.com/apache/arrow/issues/45885";>GH-45885</a> and the 
minimum GCC to 8.</p>
+<p>Some improvements to leverage C++ 20 <a 
href="https://github.com/apache/arrow/issues/48592";>GH-48592</a>,</p>
+<h3>Compute</h3>
+<ul>
+<li>Graceful error handling for decimal binary arithmetic and comparison 
instead of firing confusing assertions. <a 
href="https://github.com/apache/arrow/issues/35957";>GH-35957</a></li>
+<li>Fixed an issue where the MinMax kernel was emitting -inf/inf for all-NaN 
input. <a href="https://github.com/apache/arrow/issues/46063";>GH-46063</a></li>
+<li>Avoid ZeroCopyCastExec when casting between Binary offset types to avoid 
high overheads. <a 
href="https://github.com/apache/arrow/issues/43660";>GH-43660</a></li>
+<li>Enhanced type checking for hash join residual filter in Acero. <a 
href="https://github.com/apache/arrow/issues/48268";>GH-48268</a></li>
+</ul>
+<h3>Format</h3>
+<ul>
+<li>Clarified that empty compressed buffers can omit the length header. <a 
href="https://github.com/apache/arrow/issues/47918";>GH-47918</a></li>
+</ul>
+<h3>Parquet</h3>
+<ul>
+<li>A new setting to limit the number of rows written per page has been added. 
<a href="https://github.com/apache/arrow/issues/47030";>GH-47030</a></li>
+<li>A arrow::Result version of parquet::arrow::FileReader::Make() has been 
added. <a href="https://github.com/apache/arrow/issues/44810";>GH-44810</a></li>
+<li>Support for reading INT-encoded Decimal statistics as Arrow scalars. <a 
href="https://github.com/apache/arrow/issues/47955";>GH-47955</a></li>
+</ul>
+<p>Several bug fixes including:</p>
+<ul>
+<li>Fixed invalid Parquet files written when dictionary encoded pages are 
large. <a href="https://github.com/apache/arrow/issues/47973";>GH-47973</a></li>
+<li>Fixed pre-1970 INT96 timestamps roundtrip. <a 
href="https://github.com/apache/arrow/issues/48246";>GH-48246</a></li>
+<li>Fixed potential crash when reading invalid Parquet data. <a 
href="https://github.com/apache/arrow/issues/48308";>GH-48308</a></li>
+<li>Added compatibility with non-compliant RLE streams. <a 
href="https://github.com/apache/arrow/issues/47981";>GH-47981</a></li>
+<li>Fixed Util &amp; Level Conversion logic on big-endian systems. <a 
href="https://github.com/apache/arrow/issues/48218";>GH-48218</a></li>
+</ul>
+<h4>Encryption</h4>
+<ul>
+<li>Simplified nested field encryption configuration. <a 
href="https://github.com/apache/arrow/issues/41246";>GH-41246</a></li>
+<li>Improved column encryption API. <a 
href="https://github.com/apache/arrow/issues/48337";>GH-48337</a></li>
+<li>Better fuzzing support for encrypted files. <a 
href="https://github.com/apache/arrow/issues/48335";>GH-48335</a></li>
+</ul>
+<h3>Miscellaneous C++ changes</h3>
+<ul>
+<li>Added support for CUDA 13 <a 
href="https://github.com/apache/arrow/issues/47677";>GH-47677</a></li>
+<li>Drop support for gold linker <a 
href="https://github.com/apache/arrow/issues/45484";>GH-45484</a></li>
+<li>Leverage CMake 3.25 upgrade by reducing complexity and maintenance burden 
on our third party dependency management <a 
href="https://github.com/apache/arrow/issues/48317";>GH-48317</a>,
+<a href="https://github.com/apache/arrow/issues/48316";>GH-48316</a>, <a 
href="https://github.com/apache/arrow/issues/48315";>GH-48315</a>, <a 
href="https://github.com/apache/arrow/issues/48248";>GH-48248</a>,
+<a href="https://github.com/apache/arrow/issues/48181";>GH-48181</a>, <a 
href="https://github.com/apache/arrow/issues/48178";>GH-48178</a>, <a 
href="https://github.com/apache/arrow/issues/48091";>GH-48091</a>,
+<a href="https://github.com/apache/arrow/issues/48074";>GH-48074</a></li>
+</ul>
+<h2>Linux Packaging Notes</h2>
+<p>Fixed a bug that the <code>parquet-devel</code> RPM package depends on
+<code>parquet-glib-devel</code>.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48044";>GH-48044</a></p>
+<p>CentOS 7 support has been dropped.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/40735";>GH-40735</a></p>
+<h2>MATLAB Notes</h2>
+<p>Added support for building against MATLAB R2025b <a 
href="https://github.com/apache/arrow/issues/48154";>GH-48154</a>.</p>
+<h2>Python Notes</h2>
+<h3>Compatibility notes</h3>
+<ul>
+<li>Deprecated <code>Array.format</code> is removed <a 
href="https://github.com/apache/arrow/issues/48102";>GH-48102</a>.</li>
+<li>Experimental tag has been removed for Arrow PyCapsule Interface
+<a href="https://github.com/apache/arrow/issues/47975";>GH-47975</a>.</li>
+<li><code>PyWeakref_GetRef</code> has replaced the use of 
<code>PyWeakref_GET_OBJECT</code> to support Python 3.15
+<a href="https://github.com/apache/arrow/issues/47823";>GH-47823</a>.</li>
+</ul>
+<h3>New features</h3>
+<ul>
+<li>Bindings for <code>scatter</code> and <code>inverse_permutation</code>are 
added
+<a href="https://github.com/apache/arrow/issues/48167";>GH-48167</a>.</li>
+<li><code>max_rows_per_page</code> argument is now exposed in 
<code>parquet.WriterProperties</code>
+<a href="https://github.com/apache/arrow/issues/48096";>GH-48096</a>.</li>
+<li>External key material and rotation is enabled for individual Parquet files
+<a href="https://github.com/apache/arrow/issues/31869";>GH-31869</a>.</li>
+</ul>
+<h3>Other improvements</h3>
+<ul>
+<li>Nested field encryption configuration has been simplified <a 
href="https://github.com/apache/arrow/issues/41246";>GH-41246</a>.</li>
+<li>Reading INT-encoded <code>Decimal</code> statistics with 
<code>StatisticsAsScalars</code> is now supported
+<a href="https://github.com/apache/arrow/issues/47955";>GH-47955</a>.</li>
+<li>Unsigned dictionary indices are now supported in pandas conversion
+<a href="https://github.com/apache/arrow/issues/47022";>GH-47022</a>.</li>
+<li>Added code examples for compute functions <code>min</code>, 
<code>max</code> and <code>min_max</code>
+<a href="https://github.com/apache/arrow/issues/48668";>GH-48668</a>.</li>
+<li>Add temporal unit checking in NumPyDtypeUnifier <a 
href="https://github.com/apache/arrow/issues/48625";>GH-48625</a></li>
+<li>Error message is improved when mixing <code>numpy.datetime64</code> values 
with different units
+(e.g., datetime64[s] and datetime64[ms]) in a single array
+<a href="https://github.com/apache/arrow/issues/48463";>GH-48463</a>.</li>
+<li>The source argument is now checked in 
<code>pyarrow.parquet.read_table</code>
+<a href="https://github.com/apache/arrow/issues/47728";>GH-47728</a>.</li>
+</ul>
+<h3>Relevant bug fixes</h3>
+<ul>
+<li><code>ipc.Message __repr__</code> has been corrected to use f-string <a 
href="https://github.com/apache/arrow/issues/48608";>GH-48608</a>.</li>
+<li>Failures when reading parquet files written with non-compliant RLE 
encoders have been fixed
+in C++ with adding compatibility <a 
href="https://github.com/apache/arrow/issues/47981";>GH-47981</a>.</li>
+<li>Memory usage is now reduced when using <code>to_pandas()</code> with many 
extension arrays columns
+<a href="https://github.com/apache/arrow/issues/47861";>GH-47861</a>.</li>
+<li>Missing required argument error in <code>FSSpecHandler</code> 
<code>delete_root_dir_contents</code> has been
+fixed <a href="https://github.com/apache/arrow/issues/47559";>GH-47559</a>.</li>
+<li>Invalid <code>RecordBatch.from_struct_array</code> batch for sliced arrays 
with offset zero has been fixed
+in the C++ <a 
href="https://github.com/apache/arrow/issues/44318";>GH-44318</a>.</li>
+</ul>
+<h2>R Notes</h2>
+<h3>Compatibility notes</h3>
+<ul>
+<li>GCS have been turned off by default <a 
href="https://github.com/apache/arrow/issues/48342";>GH-48342</a>.</li>
+<li>OpenSSL 1.x builds have been removed <a 
href="https://github.com/apache/arrow/issues/45449";>GH-45449</a></li>
+</ul>
+<h3>Relevant bug fixes</h3>
+<ul>
+<li>Fixed a segfault that could be raised when concatenatig tables <a 
href="https://github.com/apache/arrow/issues/47000";>GH-47000</a>.</li>
+</ul>
+<p>Several Continuous integration fixes and minor bugs have also been added to 
the release for a full list check the release notes.</p>
+<h2>Ruby and C GLib Notes</h2>
+<p>All missing compute function options have been added. So we can use
+all compute functions from Ruby and C GLib. This is done by Sten
+Larsson.</p>
+<p>Fixed size list array support has been added.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48362";>GH-48362</a></p>
+<p>Changing thread pool configuration support in Acero has been
+added. This is done by Sten Larsson.</p>
+<p>Duration support has been added.</p>
+<p>CSV writer support has been added.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48680";>GH-48680</a></p>
+<h3>Ruby</h3>
+<p>Experimental Pure Ruby Apache Arrow reader implementation has been
+added as <code>red-arrow-format</code> gem.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48132";>GH-48132</a></p>
+<p>We'll add experimental writer implementation in the next release.</p>
+<p><code>Arrow::Column#to_arrow{,_array,_chunked_array}</code> have been 
added. They
+are for convenient.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48292";>GH-48292</a></p>
+<p>Auto Apache Arrow type detection in <code>Arrow::Array.new</code> has been
+improved for nested integer list case.</p>
+<p>See also:</p>
+<ul>
+<li><a href="https://github.com/apache/arrow/issues/48478";>GH-48478</a></li>
+<li><a href="https://github.com/apache/arrow/issues/48481";>GH-48481</a></li>
+</ul>
+<p><code>Arrow::FixedSizeListArray.new(data_type, values)</code> support has 
been
+added.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48610";>GH-48610</a></p>
+<h3>C GLib</h3>
+<p>We use <code>Arrow-${MAJOR}.${MINOR}.{gir,typelib}</code> not
+<code>Arrow-1.0.{gir,typelib}</code> for <code>.gir</code> and 
<code>.typelib</code> file names. It's
+for co-existent multiple C GLib versions in the same system.</p>
+<p>See also: <a 
href="https://github.com/apache/arrow/issues/48616";>GH-48616</a></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 23.0.0 release. This release covers over 3 months of development work and 
includes 336 resolved issues on 417 distinct commits from 71 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 oth [...]
 
 -->
 <p>The Apache Arrow team is pleased to announce the version 22 release of
@@ -1204,267 +1383,4 @@ Both readers decode the full record (all four columns), 
materialize all arrays,
 <li><a href="https://github.com/kumarlokesh";>kumarlokesh</a> for contributing 
<code>Utf8View</code> support.</li>
 <li><a href="https://github.com/alamb";>alamb</a>, <a 
href="https://github.com/scovich";>scovich</a>, <a 
href="https://github.com/mbrobbel";>mbrobbel</a>, and <a 
href="https://github.com/klion26";>klion26</a> for their thoughtful reviews, 
detailed feedback, and support throughout the development of 
<code>arrow-avro</code>.</li>
 </ul>
-<p>If you have any questions about this blog post, please feel free to contact 
the author, <a href="mailto:[email protected]";>Connor 
Sanders</a>.</p>]]></content><author><name>jecsand838</name></author><category 
term="application" /><summary type="html"><![CDATA[A new native Rust vectorized 
reader/writer for Avro to Arrow, with OCF, Single‑Object, and Confluent wire 
format support.]]></summary><media:thumbnail 
xmlns:media="http://search.yahoo.com/mrss/"; url="https://arrow.apache.org/img/ 
[...]
-
--->
-<p><em>Editor’s Note: While <a href="https://arrow.apache.org/";>Apache 
Arrow</a> and <a href="https://parquet.apache.org/";>Apache Parquet</a> are 
separate projects,
-the Arrow <a href="https://github.com/apache/arrow-rs";>arrow-rs</a> repository 
hosts the development of the <a 
href="https://crates.io/crates/parquet";>parquet</a> Rust
-crate, a widely used and high-performance Parquet implementation.</em></p>
-<h2>Summary</h2>
-<p>Version <a href="https://crates.io/crates/parquet/57.0.0";>57.0.0</a> of the 
<a href="https://crates.io/crates/parquet";>parquet</a> Rust crate decodes 
metadata more than three times
-faster than previous versions thanks to a new custom <a 
href="https://thrift.apache.org/";>Apache Thrift</a> parser. The new
-parser is both faster in all cases and enables further performance 
improvements not
-possible with generated parsers, such as skipping unnecessary fields and 
selective parsing.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/results.png" width="100%" 
class="img-responsive" alt="" aria-hidden="true">
-</div>
-<p><em>Figure 1:</em> Performance comparison of <a 
href="https://parquet.apache.org/";>Apache Parquet</a> metadata parsing using a 
generated
-Thrift parser (versions <code>56.2.0</code> and earlier) and the new
-<a href="https://github.com/apache/arrow-rs/issues/5854";>custom Thrift 
parser</a> in <a href="https://github.com/apache/arrow-rs";>arrow-rs</a> version 
<a href="https://crates.io/crates/parquet/57.0.0";>57.0.0</a>. No
-changes are needed to the Parquet format itself.
-See the <a href="https://github.com/alamb/parquet_footer_parsing";>benchmark 
page</a> for more details.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/scaling.png" width="100%" 
class="img-responsive" alt="Scaling behavior of custom Thrift parser" 
aria-hidden="true">
-</div>
-<p><em>Figure 2:</em> Speedup of the [custom Thrift decoder] for string and 
floating-point data types,
-for <code>100</code>, <code>1000</code>, <code>10,000</code>, and 
<code>100,000</code> columns. The new parser is faster in all cases,
-and the speedup is similar regardless of the number of columns. See the <a 
href="https://github.com/alamb/parquet_footer_parsing";>benchmark page</a> for 
more details.</p>
-<h2>Introduction: Parquet and the Importance of Metadata Parsing</h2>
-<p><a href="https://parquet.apache.org/";>Apache Parquet</a> is a popular 
columnar storage format
-designed to be efficient for both storage and query processing. Parquet
-files consist of a series of data pages, and a footer, as shown in Figure 3. 
The footer
-contains metadata about the file, including schema, statistics, and other
-information needed to decode the data pages.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/parquet.png" width="100%" 
class="img-responsive" alt="Physical File Structure of Parquet" 
aria-hidden="true">
-</div>
-<p><em>Figure 3:</em> Structure of a Parquet file showing the header, data 
pages, and footer metadata.</p>
-<p>Getting information stored in the footer is typically the first step in 
reading
-a Parquet file, as it is required to interpret the data pages. 
<em>Parsing</em> the
-footer is often performance critical:</p>
-<ul>
-<li>When reading from fast local storage, such as modern NVMe SSDs, footer 
parsing
-must be completed to know what data pages to read, placing it directly on the 
critical
-I/O path.</li>
-<li>Footer parsing scales linearly with the number of columns and row groups 
in a
-Parquet file and thus can be a bottleneck for tables with many columns or files
-with many row groups.</li>
-<li>Even in systems that cache the parsed footer in memory (see <a 
href="https://datafusion.apache.org/blog/2025/08/15/external-parquet-indexes/";>Using
-External Indexes, Metadata Stores, Catalogs and Caches to Accelerate Queries
-on Apache Parquet</a>), the footer must still be parsed on cache miss.</li>
-</ul>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/flow.png" width="100%" 
class="img-responsive" alt="Typical Parquet processing flow" aria-hidden="true">
-</div>
-<p><em>Figure 4:</em> Typical processing flow for Parquet files for stateless 
and stateful
-systems. Stateless engines read the footer on every query, so the time taken to
-parse the footer directly adds to query latency. Stateful systems cache some or
-all of the parsed footer in advance of queries.</p>
-<p>The speed of parsing metadata has grown even more important as Parquet 
spreads
-throughout the data ecosystem and is used for more latency-sensitive workloads 
such
-as observability, interactive analytics, and single-point
-lookups for Retrieval-Augmented Generation (RAG) applications feeding LLMs.
-As overall query times decrease, the proportion spent on footer parsing 
increases.</p>
-<h2>Background: Apache Thrift</h2>
-<p>Parquet stores metadata using <a href="https://thrift.apache.org/";>Apache 
Thrift</a>, a framework for
-network data types and service interfaces. It includes a <a 
href="https://thrift.apache.org/docs/idl";>data definition
-language</a> similar to <a 
href="https://developers.google.com/protocol-buffers";>Protocol Buffers</a>. 
Thrift definition files describe data
-types in a language-neutral way, and systems typically use code generators to
-automatically create code for a specific programming language to read and write
-those data types.</p>
-<p>The <a 
href="https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift";>parquet.thrift</a>
 file defines the format of the metadata
-serialized at the end of each Parquet file in the <a 
href="https://github.com/apache/thrift/blob/master/doc/specs/thrift-compact-protocol.md";>Thrift
 Compact
-protocol</a>, as shown below in Figure 5. The binary encoding is 
&quot;variable-length&quot;,
-meaning that the length of each element depends on its content, not
-just its type. Smaller-valued primitive types are encoded in fewer bytes than
-larger values, and strings and lists are stored inline, prefixed with their
-length.</p>
-<p>This encoding is space-efficient but, due to being variable-length, does not
-support random access: it is not possible to locate a particular field without
-scanning all previous fields. Other formats such as <a 
href="https://google.github.io/flatbuffers/";>FlatBuffers</a> provide
-random-access parsing and have been <a 
href="https://lists.apache.org/thread/j9qv5vyg0r4jk6tbm6sqthltly4oztd3";>proposed
 as alternatives</a> given their
-theoretical performance advantages. However, changing the Parquet format is a
-significant undertaking, requires buy-in from the community and ecosystem,
-and would likely take years to be adopted.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/thrift-compact-encoding.png" 
width="100%" class="img-responsive" alt="Thrift Compact Encoding Illustration" 
aria-hidden="true">
-</div>
-<p><em>Figure 5:</em> Parquet metadata is serialized using the <a 
href="https://github.com/apache/thrift/blob/master/doc/specs/thrift-compact-protocol.md";>Thrift
 Compact protocol</a>.
-Each field is stored using a variable number of bytes that depends on its 
value.
-Primitive types use a variable-length encoding and strings and lists are
-prefixed with their lengths.</p>
-<p>Despite Thrift's very real disadvantage due to lack of random access, 
software
-optimizations are much easier to deploy than format changes. <a 
href="https://xiangpeng.systems/";>Xiangpeng Hao</a>'s
-previous analysis theorized significant (2x–4x) potential performance
-improvements simply by optimizing the implementation of Parquet footer parsing
-(see <a 
href="https://www.influxdata.com/blog/how-good-parquet-wide-tables/";>How Good 
is Parquet for Wide Tables (Machine Learning
-Workloads) Really?</a> for more details).</p>
-<h2>Processing Thrift Using Generated Parsers</h2>
-<p><em>Parsing</em> Parquet metadata is the process of decoding the 
Thrift-encoded bytes
-into in-memory structures that can be used for computation. Most Parquet
-implementations use one of the existing <a 
href="https://thrift.apache.org/lib/";>Thrift compilers</a> to generate a parser
-that converts Thrift binary data into generated code structures, and then copy
-relevant portions of those generated structures into API-level structures.
-For example, the <a 
href="https://github.com/apache/arrow/blob/e1f727cbb447d2385949a54d8f4be2fdc6cefe29/cpp/src/parquet";>C/C++
 Parquet implementation</a> includes a <a 
href="https://github.com/apache/arrow/blob/e1f727cbb447d2385949a54d8f4be2fdc6cefe29/cpp/build-support/update-thrift.sh#L23";>two</a>-<a
 
href="https://github.com/apache/arrow/blob/e1f727cbb447d2385949a54d8f4be2fdc6cefe29/cpp/src/parquet/thrift_internal.h#L56";>step</a>
 process,
-as does <a 
href="https://github.com/apache/parquet-java/blob/0fea3e1e22fffb0a25193e3efb9a5d090899458a/parquet-format-structures/pom.xml#L69-L88";>parquet-java</a>.
 <a 
href="https://github.com/duckdb/duckdb/blob/8f512187537c65d36ce6d6f562b75a37e8d4ee54/third_party/parquet/parquet_types.h#L1-L6";>DuckDB</a>
 also contains a Thrift compiler–generated
-parser.</p>
-<p>In versions <code>56.2.0</code> and earlier, the Apache Arrow Rust 
implementation used the
-same pattern. The <a 
href="https://docs.rs/parquet/56.2.0/parquet/format/index.html";>format</a> 
module contains a parser generated by the <a 
href="https://crates.io/crates/thrift";>thrift
-crate</a> and the <a 
href="https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift";>parquet.thrift</a>
 definition. Parsing metadata involves:</p>
-<ol>
-<li>Invoke the generated parser on the Thrift binary data, producing
-generated in-memory structures (e.g., <a 
href="https://docs.rs/parquet/56.2.0/parquet/format/struct.FileMetaData.html";><code>struct
 FileMetaData</code></a>), then</li>
-<li>Copy the relevant fields into a more user-friendly representation,
-<a 
href="https://docs.rs/parquet/56.2.0/parquet/file/metadata/struct.ParquetMetaData.html";><code>ParquetMetadata</code></a>.</li>
-</ol>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/original-pipeline.png" width="100%" 
class="img-responsive" alt="Original Parquet Parsing Pipeline" 
aria-hidden="true">
-</div>
-<p><em>Figure 6:</em> Two-step process to read Parquet metadata: A parser 
created with the
-<code>thrift</code> crate and <code>parquet.thrift</code> parses the metadata 
bytes
-into generated in-memory structures. These structures are then converted into
-API objects.</p>
-<p>The parsers generated by standard Thrift compilers typically parse 
<em>all</em> fields
-in a single pass over the Thrift-encoded bytes, copying data into in-memory,
-heap-allocated structures (e.g., Rust <a 
href="https://doc.rust-lang.org/std/vec/struct.Vec.html";><code>Vec</code></a>, 
or C++ <a 
href="https://en.cppreference.com/w/cpp/container/vector.html";><code>std::vector</code></a>)
 as shown
-in Figure 7 below.</p>
-<p>Parsing all fields is straightforward and a good default
-choice given Thrift's original design goal of encoding network messages.
-Network messages typically don't contain extra information irrelevant for 
receivers;
-however, Parquet metadata often <em>does</em> contain information
-that is not needed for a particular query. In such cases, parsing the entire
-metadata into in-memory structures is wasteful.</p>
-<p>For example, a query on a file with 1,000 columns that reads
-only 10 columns and has a single column predicate
-(e.g., <code>time &gt; now() - '1 minute'</code>) only needs</p>
-<ol>
-<li><a 
href="https://github.com/apache/parquet-format/blob/9fd57b59e0ce1a82a69237dcf8977d3e72a2965d/src/main/thrift/parquet.thrift#L912";><code>Statistics</code></a>
 (or <a 
href="https://github.com/apache/parquet-format/blob/9fd57b59e0ce1a82a69237dcf8977d3e72a2965d/src/main/thrift/parquet.thrift#L1163";><code>ColumnIndex</code></a>)
 for the <code>time</code> column</li>
-<li><a 
href="https://github.com/apache/parquet-format/blob/9fd57b59e0ce1a82a69237dcf8977d3e72a2965d/src/main/thrift/parquet.thrift#L958";><code>ColumnChunk</code></a>
 information for the 10 selected columns</li>
-</ol>
-<p>The default strategy to parse (allocating and copying) all statistics and 
all
-<code>ColumnChunks</code> results in creating 999 more statistics and 990 more 
<code>ColumnChunks</code>
-than necessary. As discussed above, given the
-variable encoding used for the metadata, all metadata bytes must still be
-fetched and scanned; however, CPUs are (very) fast at scanning data, and
-skipping <em>parsing</em> of unneeded fields speeds up overall metadata 
performance
-significantly.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/thrift-parsing-allocations.png" 
width="100%" class="img-responsive" alt="Thrift Parsing Allocations" 
aria-hidden="true">
-</div>
-<p><em>Figure 7:</em> Generated Thrift parsers typically parse encoded bytes 
into
-structures requiring many small heap allocations, which are expensive.</p>
-<h2>New Design: Custom Thrift Parser</h2>
-<p>As is typical of generated code, opportunities for specializing
-the behavior of generated Thrift parsers is limited:</p>
-<ol>
-<li>It is not easy to modify (it is re-generated from the
-Thrift definitions when they change and carries the warning
-<code>/* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING 
*/</code>).</li>
-<li>It typically maps one-to-one with Thrift definitions, limiting
-additional optimizations such as zero-copy parsing, field
-skipping, and amortized memory allocation strategies.</li>
-<li>Its API is very stable (hard to change), which is important for easy 
maintenance when a large number
-of projects are built using the <a 
href="https://crates.io/crates/thrift";>thrift crate</a>. For example, the
-<a href="https://crates.io/crates/thrift/0.17.0";>last release of the Rust 
<code>thrift</code> crate</a> was almost three years ago at
-the time of this writing.</li>
-</ol>
-<p>These limitations are a consequence of the Thrift project's design goals: 
general purpose
-code that is easy to embed in a wide variety of other projects, rather than
-any fundamental limitation of the Thrift format.
-Given our goal of fast Parquet metadata parsing, we needed
-a custom, easier to optimize parser, to convert Thrift binary directly into 
the needed
-structures (Figure 8). Since arrow-rs already did some postprocessing on the 
generated code
-and included a custom implementation of the compact protocol api, this change
-to a completely custom parser was a natural next step.</p>
-<!-- Image source: 
https://docs.google.com/presentation/d/1WjX4t7YVj2kY14SqCpenGqNl_swjdHvPg86UeBT3IcY
 -->
-<div style="display: flex; gap: 16px; justify-content: center; align-items: 
flex-start;">
-  <img src="/img/rust-parquet-metadata/new-pipeline.png" width="100%" 
class="img-responsive" alt="New Parquet Parsing Pipeline" aria-hidden="true">
-</div>
-<p><em>Figure 8:</em> One-step Parquet metadata parsing using a custom Thrift 
parser. The
-Thrift binary is parsed directly into the desired in-memory representation with
-highly optimized code.</p>
-<p>Our new custom parser is optimized for the specific subset of Thrift used by
-Parquet and contains various performance optimizations, such as careful
-memory allocation. The largest initial speedup came from removing
-intermediate structures and directly creating the needed in-memory 
representation.
-We also carefully hand-optimized several performance-critical code paths (see 
<a href="https://github.com/apache/arrow-rs/pull/8574";>#8574</a>,
-<a href="https://github.com/apache/arrow-rs/pull/8587";>#8587</a>, and <a 
href="https://github.com/apache/arrow-rs/pull/8599";>#8599</a>).</p>
-<h3>Maintainability</h3>
-<p>The largest concern with a custom parser is that it is more difficult
-to maintain than generated parsers because the custom parser must be updated to
-reflect any changes to <a 
href="https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift";>parquet.thrift</a>.
 This is a growing concern given the
-resurgent interest in Parquet and the recent addition of new features such as
-<a 
href="https://github.com/apache/parquet-format/blob/master/Geospatial.md";>Geospatial</a>
 and <a 
href="https://github.com/apache/parquet-format/blob/master/VariantEncoding.md";>Variant</a>
 types.</p>
-<p>Thankfully, after discussions with the community, <a 
href="https://github.com/jhorstmann";>Jörn Horstmann</a> developed
-a <a href="https://github.com/jhorstmann/compact-thrift";>Rust macro based 
approach</a> for generating code with annotated Rust structs
-that closely resemble the Thrift definitions while permitting additional hand
-optimization where necessary. This approach is similar to the <a 
href="https://serde.rs/";>serde</a> crate
-where generic implementations can be generated with <code>#[derive]</code> 
annotations and
-specialized serialization is written by hand where needed. <a 
href="https://github.com/etseidl";>Ed Seidl</a> then
-rewrote the metadata parsing code in the <a 
href="https://crates.io/crates/parquet";>parquet</a> crate using these macros.
-Please see the <a href="https://github.com/apache/arrow-rs/pull/8530";>final 
PR</a> for details of the level of effort involved.</p>
-<p>For example, here is the original Thrift definition of the <a 
href="https://github.com/apache/parquet-format/blob/9fd57b59e0ce1a82a69237dcf8977d3e72a2965d/src/main/thrift/parquet.thrift#L1254C1-L1314C2";><code>FileMetaData</code></a>
 structure (comments omitted for brevity):</p>
-<div class="language-thrift highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code data-lang="thrift">struct FileMetaData {
-  1: required i32 version
-  2: required list&lt;SchemaElement&gt; schema;
-  3: required i64 num_rows
-  4: required list&lt;RowGroup&gt; row_groups
-  5: optional list&lt;KeyValue&gt; key_value_metadata
-  6: optional string created_by
-  7: optional list&lt;ColumnOrder&gt; column_orders;
-  8: optional EncryptionAlgorithm encryption_algorithm
-  9: optional binary footer_signing_key_metadata
-}
-</code></pre></div></div>
-<p>And here (<a 
href="https://github.com/apache/arrow-rs/blob/02fa779a9cb122c5218293be3afb980832701683/parquet/src/file/metadata/thrift_gen.rs#L146-L158";>source</a>)
 is the corresponding Rust structure using the Thrift macros (before Ed wrote a 
custom version in <a 
href="https://github.com/apache/arrow-rs/pull/8574";>#8574</a>):</p>
-<div class="language-rust highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code data-lang="rust"><span 
class="nd">thrift_struct!</span><span class="p">(</span>
-<span class="k">struct</span> <span class="n">FileMetaData</span><span 
class="o">&lt;</span><span class="nv">'a</span><span class="o">&gt;</span> 
<span class="p">{</span>
-<span class="mi">1</span><span class="p">:</span> <span 
class="n">required</span> <span class="nb">i32</span> <span 
class="n">version</span>
-<span class="mi">2</span><span class="p">:</span> <span 
class="n">required</span> <span class="n">list</span><span 
class="o">&lt;</span><span class="nv">'a</span><span 
class="o">&gt;&lt;</span><span class="n">SchemaElement</span><span 
class="o">&gt;</span> <span class="n">schema</span><span class="p">;</span>
-<span class="mi">3</span><span class="p">:</span> <span 
class="n">required</span> <span class="nb">i64</span> <span 
class="n">num_rows</span>
-<span class="mi">4</span><span class="p">:</span> <span 
class="n">required</span> <span class="n">list</span><span 
class="o">&lt;</span><span class="nv">'a</span><span 
class="o">&gt;&lt;</span><span class="n">RowGroup</span><span 
class="o">&gt;</span> <span class="n">row_groups</span>
-<span class="mi">5</span><span class="p">:</span> <span 
class="n">optional</span> <span class="n">list</span><span 
class="o">&lt;</span><span class="n">KeyValue</span><span class="o">&gt;</span> 
<span class="n">key_value_metadata</span>
-<span class="mi">6</span><span class="p">:</span> <span 
class="n">optional</span> <span class="n">string</span><span 
class="o">&lt;</span><span class="nv">'a</span><span class="o">&gt;</span> 
<span class="n">created_by</span>
-<span class="mi">7</span><span class="p">:</span> <span 
class="n">optional</span> <span class="n">list</span><span 
class="o">&lt;</span><span class="n">ColumnOrder</span><span 
class="o">&gt;</span> <span class="n">column_orders</span><span 
class="p">;</span>
-<span class="mi">8</span><span class="p">:</span> <span 
class="n">optional</span> <span class="n">EncryptionAlgorithm</span> <span 
class="n">encryption_algorithm</span>
-<span class="mi">9</span><span class="p">:</span> <span 
class="n">optional</span> <span class="n">binary</span><span 
class="o">&lt;</span><span class="nv">'a</span><span class="o">&gt;</span> 
<span class="n">footer_signing_key_metadata</span>
-<span class="p">}</span>
-<span class="p">);</span>
-</code></pre></div></div>
-<p>This system makes it easy to see the correspondence between the Thrift
-definition and the Rust structure, and it is straightforward to support newly 
added
-features such as <code>GeospatialStatistics</code>. The carefully hand-
-optimized parsers for the most performance-critical structures, such as
-<code>RowGroupMetaData</code> and <code>ColumnChunkMetaData</code>, are 
harder—though still
-straightforward—to update (see <a 
href="https://github.com/apache/arrow-rs/pull/8587";>#8587</a>). However, those 
structures are also less
-likely to change frequently.</p>
-<h3>Future Improvements</h3>
-<p>With the custom parser in place, we are working on additional 
improvements:</p>
-<ul>
-<li>Implementing special &quot;skip&quot; indexes to skip directly to the 
parts of the metadata
-that are needed for a particular query, such as the row group offsets.</li>
-<li>Selectively decoding only the statistics for columns that are needed for a 
particular query.</li>
-<li>Potentially contributing the macros back to the thrift crate.</li>
-</ul>
-<h3>Conclusion</h3>
-<p>We believe metadata parsing in many open source Parquet
-readers is slow primarily because they use parsers automatically generated by 
Thrift
-compilers, which are not optimized for Parquet metadata parsing. By writing a
-custom parser, we significantly sped up metadata parsing in the
-<a href="https://crates.io/crates/parquet";>parquet</a> Rust crate, which is 
widely used in the <a href="https://arrow.apache.org/";>Apache Arrow</a> 
ecosystem.</p>
-<p>While this is not the first open source custom Thrift parser for Parquet
-metadata (<a 
href="https://github.com/rapidsai/cudf/blob/branch-25.12/cpp/src/io/parquet/compact_protocol_reader.hpp";>CUDF
 has had one</a> for many years), we hope that our results will
-encourage additional Parquet implementations to consider similar optimizations.
-The approach and optimizations we describe in this post are likely applicable 
to
-Parquet implementations in other languages, such as C++ and Java.</p>
-<p>Previously, efforts like this were only possible at well-financed commercial
-enterprises. On behalf of the arrow-rs and Parquet contributors, we are excited
-to share this technology with the community in the upcoming <a 
href="https://crates.io/crates/parquet/57.0.0";>57.0.0</a> release and
-invite you to <a 
href="https://github.com/apache/arrow-rs/blob/main/CONTRIBUTING.md";>come join 
us</a> and help make it even 
better!</p>]]></content><author><name>alamb</name></author><category 
term="release" /><summary type="html"><![CDATA[Editor’s Note: While Apache 
Arrow and Apache Parquet are separate projects, the Arrow arrow-rs repository 
hosts the development of the parquet Rust crate, a widely used and 
high-performance Parquet implementation. Summary Version 57.0.0 of the parquet  
[...]
\ No newline at end of file
+<p>If you have any questions about this blog post, please feel free to contact 
the author, <a href="mailto:[email protected]";>Connor 
Sanders</a>.</p>]]></content><author><name>jecsand838</name></author><category 
term="application" /><summary type="html"><![CDATA[A new native Rust vectorized 
reader/writer for Avro to Arrow, with OCF, Single‑Object, and Confluent wire 
format support.]]></summary><media:thumbnail 
xmlns:media="http://search.yahoo.com/mrss/"; url="https://arrow.apache.org/img/ 
[...]
\ No newline at end of file
diff --git a/release/index.html b/release/index.html
index 40c235befc9..8d084f2c0f8 100644
--- a/release/index.html
+++ b/release/index.html
@@ -20,12 +20,12 @@
 <meta property="og:site_name" content="Apache Arrow" />
 <meta property="og:image" 
content="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png";
 />
 <meta property="og:type" content="article" />
-<meta property="article:published_time" content="2026-01-26T15:51:12-05:00" />
+<meta property="article:published_time" content="2026-01-27T04:36:01-05:00" />
 <meta name="twitter:card" content="summary_large_image" />
 <meta property="twitter:image" 
content="https://arrow.apache.org/img/arrow-logo_horizontal_black-txt_white-bg.png";
 />
 <meta property="twitter:title" content="Releases" />
 <script type="application/ld+json">
-{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2026-01-26T15:51:12-05:00","datePublished":"2026-01-26T15:51:12-05:00","description":"Apache
 Arrow Releases Navigate to the release page for downloads and the changelog. 
23.0.0 (18 January 2026) 22.0.0 (24 October 2025) 21.0.0 (17 July 2025) 20.0.0 
(27 April 2025) 19.0.1 (16 February 2025) 19.0.0 (16 January 2025) 18.1.0 (24 
November 2024) 18.0.0 (28 October 2024) 17.0.0 (16 July 2024) 16.1.0 (14 May 
2024) 16.0.0 (20  [...]
+{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2026-01-27T04:36:01-05:00","datePublished":"2026-01-27T04:36:01-05:00","description":"Apache
 Arrow Releases Navigate to the release page for downloads and the changelog. 
23.0.0 (18 January 2026) 22.0.0 (24 October 2025) 21.0.0 (17 July 2025) 20.0.0 
(27 April 2025) 19.0.1 (16 February 2025) 19.0.0 (16 January 2025) 18.1.0 (24 
November 2024) 18.0.0 (28 October 2024) 17.0.0 (16 July 2024) 16.1.0 (14 May 
2024) 16.0.0 (20  [...]
 <!-- End Jekyll SEO tag -->
 
 

Reply via email to