<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Spice.ai OSS Blog</title>
        <link>https://spiceai.org/releases</link>
        <description>Keep up to date with Spice.ai OSS releases by following our feed!</description>
        <lastBuildDate>Thu, 10 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2025-2026 Spice AI, Inc.</copyright>
        <item>
            <title><![CDATA[Spice v2.3.0 (Sep 10, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.3.0</link>
            <guid>https://spiceai.org/releases/v2.3.0</guid>
            <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.3.0 brings performance improvements, broader query federation, and expanded data connector capabilities. The release improves cache reuse and reduces memory use for cached SQL results. It also extends BigQuery support and adds GitHub review, release, and repository data for SQL analysis. Google models now use Vertex AI, so deployments with credentials for Google AI Studio require migration.]]></description>
            <content:encoded><![CDATA[<p>Spice v2.3.0 brings performance improvements, broader query federation, and expanded data connector capabilities. The release improves cache reuse and reduces memory use for cached SQL results. It also extends BigQuery support and adds GitHub review, release, and repository data for SQL analysis. Google models now use Vertex AI, so deployments with credentials for Google AI Studio require migration.</p>
<p>Highlights in v2.3.0 include:</p>
<ul>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#sql-federation-improvements" class=""><strong>SQL Federation Improvements</strong></a> — bug fixes for function translation, NULL handling, and timezone declarations</li>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#bigquery-federation" class=""><strong>BigQuery Federation</strong></a> — temporal expressions, recursive CTEs, correlated subqueries, and window aggregates now run as one BigQuery job</li>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#the-caching-accelerator-accepts-explicit-limits" class=""><strong>Caching Accelerator Limits</strong></a> — <code>caching_max_size</code> and <code>caching_max_items</code> bound what a <code>refresh_mode: caching</code> accelerator holds</li>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#sql-results-cache-improvements" class=""><strong>Stale-While-Revalidate Across a Refresh</strong></a> — configured stale-while-revalidate windows retain cached results across acceleration refreshes</li>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#github-data-connector-review-release-and-repository-tables" class=""><strong>GitHub Review Data</strong></a> — eight new tables, 17 new <code>pulls</code> columns, and a <code>repo</code> / <code>owner</code> column on every row</li>
<li class=""><a href="https://spiceai.org/releases/v2.3.0#google-models-move-to-vertex-ai" class=""><strong>Google Models on Vertex AI</strong></a> — a <code>from: google</code> model authenticates as a GCP service account</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v230">What's New in v2.3.0<a href="https://spiceai.org/releases/v2.3.0#whats-new-in-v230" class="hash-link" aria-label="Direct link to What's New in v2.3.0" title="Direct link to What's New in v2.3.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql-federation-improvements">SQL Federation Improvements<a href="https://spiceai.org/releases/v2.3.0#sql-federation-improvements" class="hash-link" aria-label="Direct link to SQL Federation Improvements" title="Direct link to SQL Federation Improvements" translate="no">​</a></h3>
<p>This release improves SQL translation and function handling for accelerated and federated datasets. The following bug fixes cover string functions, NULL handling, correlated subqueries, and timezone declarations.</p>
<ul>
<li class="">A <code>trim</code> call failed on DuckDB, SQLite, and MySQL because DataFusion emitted its canonical name, <code>btrim</code>. DuckDB now receives <code>trim</code>, with an explicit space argument for the one-argument form. The native SQLite and MySQL paths evaluate <code>btrim</code> locally.</li>
<li class="">DuckDB federation now lower-cases <code>to_hex</code> output to match local evaluation.</li>
<li class="">DuckDB federation now decodes <code>sha256</code> output into a 32-byte digest instead of a hexadecimal string.</li>
<li class=""><code>concat</code> uses <code>||</code> on DuckDB to consistently propagate NULL arguments.</li>
<li class=""><code>inner_product</code> now returns NULL for an undefined dot product on DuckDB for consistency.</li>
<li class="">Operations that DuckDB cannot handle (such as regex with <code>U</code> or <code>R</code> flags) are executed locally.</li>
<li class="">User-defined functions registered after startup now execute locally.</li>
<li class="">Catalog connectors now use the same list of local Spice-only functions as the data connectors.</li>
<li class="">Two <code>EXISTS</code> shapes emitted SQL which evaluated the correlation over the whole relation, so the bound selected nothing. A semi or mark join then reported a match on a row the plan never read. Both shapes now refuse pushdown and run locally.</li>
<li class="">DuckDB labels a <code>TIMESTAMPTZ</code> column with the connection's own timezone. The connector built its pool and never pinned that setting. A dataset's schema therefore carried the host timezone, and the same query returned different rows on different machines. A connector session is now pinned to UTC.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="bigquery-federation">BigQuery Federation<a href="https://spiceai.org/releases/v2.3.0#bigquery-federation" class="hash-link" aria-label="Direct link to BigQuery Federation" title="Direct link to BigQuery Federation" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/adbc" target="_blank" rel="noopener noreferrer" class="">BigQuery</a> federation runs more query shapes as one remote job.</p>
<ul>
<li class="">Temporal expressions, recursive CTEs, and integer division now keep their results and stay in one federated statement. These shapes previously failed remotely, split into several queries, or produced wrong cohort boundaries.</li>
<li class="">Three more statement shapes now run. The first is a grouped query that projects a wrapped form of its grouping expression. The second is a query whose federated tables all sit inside a correlated subquery. The third is any aggregate window function.</li>
<li class="">A query that reads BigQuery tables from several datasets of one project now runs as one BigQuery query. It also no longer returns rows from the wrong dataset when two datasets hold a table of the same name.</li>
<li class="">A dataset that stores JSON in a <code>STRING</code> column now pushes down scalar <code>json_as_text</code> expressions and <code>json_get(...) IS NULL</code> checks.</li>
<li class="">The built-in <code>date_trunc</code> is preserved, and the dialect and the federation policy now agree on which aggregate and window calls are eligible.</li>
<li class=""><code>regexp_match</code> null checks federate safely.</li>
<li class="">A distinct union now renders as <code>UNION DISTINCT</code>. BigQuery rejects a bare <code>UNION</code>, so such a query failed outright. <code>UNION ALL</code> is unchanged.</li>
<li class="">A numbering function such as <code>ROW_NUMBER</code> no longer carries a window frame, which BigQuery rejects. An aggregate window function keeps its frame.</li>
<li class="">Percentile functions and grouping keys now render in the form BigQuery accepts. A reported 29-statement workload that failed on these shapes now runs in full.</li>
<li class=""><code>array_element</code> translates a non-negative integer literal index that fits in <code>Int64</code> as <code>SAFE_ORDINAL</code>. Other indexes evaluate locally. This preserves DataFusion's end-relative semantics for negative indexes.</li>
</ul>
<p><strong>Cancellation</strong>: A BigQuery query whose client goes away now stops. The BigQuery job ends as cancelled, and the pooled connection returns immediately. Before this release the query ran to completion, and the connection stayed busy for its whole duration. Enough cancellations left an application unable to query at all.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-caching-accelerator-accepts-explicit-limits">The Caching Accelerator Accepts Explicit Limits<a href="https://spiceai.org/releases/v2.3.0#the-caching-accelerator-accepts-explicit-limits" class="hash-link" aria-label="Direct link to The Caching Accelerator Accepts Explicit Limits" title="Direct link to The Caching Accelerator Accepts Explicit Limits" translate="no">​</a></h3>
<p>A <code>refresh_mode: caching</code> accelerator had nothing bounding what it held. Retention was derived from <code>caching_ttl</code> plus <code>caching_stale_while_revalidate_ttl</code>, and only when <code>caching_stale_if_error</code> was disabled. A dataset that set <code>caching_stale_if_error</code> therefore got no policy at all, and nothing was ever evicted. Nothing capped the acceleration by size or by count either.</p>
<p>Two settings now bound the acceleration. Each one refuses an unparseable value rather than falling back to a default:</p>
<ul>
<li class=""><code>caching_max_size</code> — a byte budget, such as <code>512MiB</code>.</li>
<li class=""><code>caching_max_items</code> — a row budget.</li>
</ul>
<p><code>caching_ttl</code> is also accepted as <code>caching_item_ttl</code>, which is the spelling the SQL results, search results, and embeddings caches use. Eviction is entry-granular. A cached response can span several rows, so the runtime ranks entries by their oldest page and removes all of an entry's rows together. The storage schema is unchanged, and no existing acceleration needs a rebuild.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//api.example.com/v1/items</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> items</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> caching</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">primary_key</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'(request_query, request_path)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">caching_ttl</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 5m</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">caching_max_size</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 512MiB</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">caching_max_items</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">50000</span><br></div></code></pre></div></div>
<p><code>caching_stale_if_error</code> now fires on the failure it exists for. It keyed off a fetch that returned an error. The HTTP connector reports a failing origin as a successful fetch whose rows carry a 429 or 5xx status once it exhausts <code>max_retries</code>. An operator who enabled the setting received the origin's error body instead of the cached response.</p>
<p>A caching accelerator that has nothing bounding it now says so at startup.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql-results-cache-improvements">SQL Results Cache Improvements<a href="https://spiceai.org/releases/v2.3.0#sql-results-cache-improvements" class="hash-link" aria-label="Direct link to SQL Results Cache Improvements" title="Direct link to SQL Results Cache Improvements" translate="no">​</a></h3>
<p><strong>Stale results remain available across a refresh when configured.</strong> An acceleration refresh evicted every dependent <a href="https://spiceai.org/docs/features/caching" target="_blank" rel="noopener noreferrer" class="">SQL results cache</a> entry, and any successful refresh counted as a change. A <code>refresh_mode: full</code> update still flushed the whole per-table cache. For a workload with consistently high QPS, each refresh turned a population of cached results into simultaneous synchronous misses.</p>
<p>When <code>stale_while_revalidate_ttl</code> is configured, an invalidation now marks dependent entries stale as of the refresh instead of evicting them. Inside the stale window the runtime serves the previous result with <code>Results-Cache-Status: STALE</code> and starts one background revalidation per key. Past the stale window the request is a miss, exactly as before. With no stale window configured, invalidation stays hard.</p>
<p><strong>Cache accounting covers more retained memory.</strong> A cache with a million empty results reported 0.09 GiB against 1.85 GiB of retained memory. Its <code>max_size</code> accounting omitted parts of each entry. The cache now shares schemas and input-table sets, copies foreign buffers, and accounts for per-buffer allocation overhead.</p>
<p>In the <a href="https://github.com/spiceai/spiceai/pull/13908" target="_blank" rel="noopener noreferrer" class="">reported benchmark</a>, each entry retained 1%–80% less memory across 20 combinations of result shape and source. The benchmark ran on macOS/arm64 with snmalloc. Reported size ranged from 0.65x to 1.73x of retained memory after the change. The lowest ratio before the change was 0.31x. These figures compare the fix with its merge base, not v2.2.1, and are not guarantees for every workload.</p>
<p>This release also corrects memory accounting for the search results and embeddings caches.</p>
<p><strong>Pingora cache engine</strong>: Table invalidation read every entry with a destructive <code>get</code>, so an invalidation promoted every key in the cache. Scan order replaced recency, and each visited key became a momentary miss to concurrent readers. A read also served a hit destructively, so a second reader reported a miss for a key the cache holds. Both reads are now non-destructive.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="github-data-connector-review-release-and-repository-tables">GitHub Data Connector: Review, Release, and Repository Tables<a href="https://spiceai.org/releases/v2.3.0#github-data-connector-review-release-and-repository-tables" class="hash-link" aria-label="Direct link to GitHub Data Connector: Review, Release, and Repository Tables" title="Direct link to GitHub Data Connector: Review, Release, and Repository Tables" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-connectors/github" target="_blank" rel="noopener noreferrer" class="">GitHub Data Connector</a> adds eight tables, 17 columns on <code>pulls</code>, and repository identity on every row. An application can now answer a code-review question in SQL. Before this release, <code>pulls.reviews_count</code> was a bare integer with no state and no reviewer, and <code>pulls.review_comments</code> recorded only inline comments.</p>
<table><thead><tr><th>Path</th><th>Rows</th></tr></thead><tbody><tr><td><code>github.com/{owner}/{repo}/reviews</code></td><td>One per pull request review, with <code>state</code>, <code>author</code>, <code>submitted_at</code>, and <code>commit_sha</code></td></tr><tr><td><code>github.com/{owner}/{repo}/review_threads</code></td><td>One per resolvable thread, with <code>is_resolved</code>, <code>is_outdated</code>, <code>path</code>, and <code>resolved_by</code></td></tr><tr><td><code>github.com/{owner}/{repo}/releases</code></td><td>One per release, with <code>total_download_count</code> and <code>assets_count</code></td></tr><tr><td><code>github.com/{owner}/{repo}/release_assets</code></td><td>One per asset, with <code>download_count</code>, <code>size</code>, and <code>content_type</code></td></tr><tr><td><code>github.com/{owner}/{repo}/milestones</code></td><td>One per milestone, with <code>due_on</code> and <code>progress_percentage</code></td></tr><tr><td><code>github.com/{owner}/{repo}/repo</code></td><td>One row of repository metadata</td></tr><tr><td><code>github.com/{owner}/repos</code></td><td>Every repository an owner has</td></tr><tr><td><code>github.com/{login}/user</code></td><td>The public profile of one login</td></tr></tbody></table>
<p><code>pulls</code> adds <code>is_draft</code>, <code>mergeable</code>, <code>merge_state_status</code>, <code>review_decision</code>, <code>status_check_rollup</code>, <code>merge_queue_state</code>, <code>merge_queue_position</code>, <code>merged_by</code>, <code>closed_by</code>, <code>base_ref</code>, <code>head_ref</code>, <code>head_sha</code>, <code>milestone_id</code>, <code>milestone_title</code>, <code>closing_issues_references</code>, <code>closing_issues_count</code>, and <code>reactions_count</code>. <code>issues</code> adds <code>state_reason</code>, <code>closed_by</code>, <code>reactions_count</code>, <code>type</code>, and <code>type_color</code>. Every table returns a <code>repo</code> and an <code>owner</code> column, so a multi-repository <code>UNION ALL</code> keeps its rows apart.</p>
<p>The connector also asks GitHub for a narrower pull request page. A 100-node page now exceeds GitHub's per-request compute budget on a large repository. GitHub rejects that page with <code>Resource limits for this query exceeded</code> and returns every node as null, so the dataset never loaded.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="google-models-move-to-vertex-ai">Google Models Move to Vertex AI<a href="https://spiceai.org/releases/v2.3.0#google-models-move-to-vertex-ai" class="hash-link" aria-label="Direct link to Google Models Move to Vertex AI" title="Direct link to Google Models Move to Vertex AI" translate="no">​</a></h3>
<p>A <code>from: google</code> chat or embedding model now authenticates as a GCP service account against <a href="https://cloud.google.com/vertex-ai" target="_blank" rel="noopener noreferrer" class="">Vertex AI</a>. Spice no longer accepts a Google AI Studio API key. See <a href="https://spiceai.org/releases/v2.3.0#breaking-changes" class="">Breaking Changes</a> for the migration.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">models</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> google</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">gemini</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">2.5</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">pro</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> gemini</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_project</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">project</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_location</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">central1</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_service_account_path</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/gcp</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">sa.json</span><br></div></code></pre></div></div>
<p>Other AI model fixes in this release:</p>
<ul>
<li class="">An <a href="https://spiceai.org/docs/components/models/anthropic" target="_blank" rel="noopener noreferrer" class="">Anthropic</a> model configured without an explicit model id now resolves. The default named <code>claude-3-5-sonnet-latest</code>, which Anthropic has retired, so every such request failed.</li>
<li class="">An Anthropic model now refuses an OpenAI <code>top_logprobs</code> request instead of translating it to <code>top_k</code>. The two fields are unrelated. <code>top_logprobs</code> reports log probabilities and <code>top_k</code> narrows sampling, so the translation silently changed the model's output.</li>
<li class="">Anthropic streaming failures and provider refusals from <code>openai</code>, <code>xai</code>, and <code>spiceai</code> are now classified from the provider's typed error fields. Each path searched the rendered error text for <code>401</code>, <code>429</code>, or <code>rate</code>, and then replaced the provider's own detail with a fixed string.</li>
<li class="">A <code>from: huggingface:</code> chat model reads <code>hf_token</code> again. The parameter moved to the prefix <code>huggingface</code>, so <code>hf_token</code> was warned about as unknown and a gated repository was downloaded anonymously.</li>
<li class="">An <a href="https://spiceai.org/docs/components/models/bedrock" target="_blank" rel="noopener noreferrer" class="">Amazon Bedrock</a> model now names the credential AWS rejected instead of reporting <code>unhandled error</code>.</li>
<li class="">The <a href="https://spiceai.org/docs/components/embeddings/huggingface" target="_blank" rel="noopener noreferrer" class="">text-embeddings-inference</a> model-load path runs its filesystem and tokenizer work on a blocking thread. That work ran on a Tokio worker thread during model registration, so it could starve <code>/health</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="search-improvements-and-bug-fixes">Search Improvements and Bug Fixes<a href="https://spiceai.org/releases/v2.3.0#search-improvements-and-bug-fixes" class="hash-link" aria-label="Direct link to Search Improvements and Bug Fixes" title="Direct link to Search Improvements and Bug Fixes" translate="no">​</a></h3>
<p>This release fixes bugs in <a href="https://spiceai.org/docs/features/search" target="_blank" rel="noopener noreferrer" class="">search</a> result limits, index updates, and deletes.</p>
<ul>
<li class=""><strong>A result set larger than the requested limit</strong>: <code>vector_search(tbl, 'query', 10)</code> against an Elasticsearch-backed index now respects the requested limit.</li>
<li class=""><strong>Index writes and deletes kept in sync with the table</strong>: Previously, writes for rows with repeated primary keys, no chunks, or non-embeddable chunks could leave the previous index entry. These outdated index entries are now deleted.</li>
<li class=""><strong>A chunked Elasticsearch delete</strong>: The delete filtered on the key columns, and a string key was left to Elasticsearch dynamic mapping as an analyzed <code>text</code> field. The delete now filters on a field that can match the key exactly.</li>
<li class=""><strong>A partial Elasticsearch delete</strong>: <code>_delete_by_query</code> returns 2xx when the request ran, and it reports per-document failures and version conflicts in the body. Spice discarded that body, so a delete could leave documents behind and still report success.</li>
<li class=""><strong>Full-text index encoding</strong>: A full-text upsert is a delete followed by an insert, so both halves must encode the primary key the same way. They disagreed for <code>Float32</code>, <code>Float16</code>, and <code>Binary</code> keys, and both the old and the new row stayed in the index.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="acceleration-and-refresh">Acceleration and Refresh<a href="https://spiceai.org/releases/v2.3.0#acceleration-and-refresh" class="hash-link" aria-label="Direct link to Acceleration and Refresh" title="Direct link to Acceleration and Refresh" translate="no">​</a></h3>
<ul>
<li class=""><strong><code>LIMIT</code> on a partitioned scan</strong>: <code>PartitionTableProvider::scan</code> passed the scan limit as the skip argument rather than the fetch argument. <code>LIMIT 10</code> over a three-row partitioned dataset returned zero rows.</li>
<li class=""><strong><code>acceleration.enabled: false</code></strong>: A dataset or a view can set <code>enabled: false</code> and leave the rest of the block in place. The runtime read every other setting, accepted it, and then ignored it. The component reported healthy and served federated queries. The runtime now names the settings it discards.</li>
<li class=""><strong><code>ready_state</code> on a view</strong>: A view's <code>acceleration.ready_state</code> was accepted by the schema and by the parser, and then never applied. The identical key on a dataset was honoured. A view now resolves the key the way a dataset does.</li>
<li class=""><strong>A retention policy that cannot start</strong>: A dataset that set <code>retention_check_enabled: true</code>, a <code>retention_period</code>, and a <code>time_column</code> but no <code>retention_check_interval</code> got no retention task and no diagnostic. The builder now reports the refusal.</li>
<li class=""><strong>A refresh completion that arrives early</strong>: A completion published before a caller registered its wait was dropped with no record, and the caller waited for a refresh that had already happened. The signal is now level-triggered.</li>
<li class=""><strong>A refresh completion from the wrong refresh</strong>: A waiter was satisfied by the next completion recorded on the table, whichever refresh produced it. A refresh that was already running could therefore release a caller. Completions are now correlated with the refresh that a caller triggered.</li>
<li class=""><strong>A table replaced during a refresh</strong>: Two callers acted on a completion for a table that had since been removed or rebuilt. The runtime now re-resolves the table after the refresh lands and before it acts on the completion.</li>
<li class=""><strong>A schema repair on a checkpoint</strong>: Writing a checkpoint's schema also wrote its refresh timestamp, so a schema repair told the scheduler the data was fresh. An overdue dataset then waited a full <code>refresh_check_interval</code>. A schema repair now leaves the freshness clock alone.</li>
<li class=""><strong>A recorded snapshot schema</strong>: A snapshot's recorded schema is a foreign declaration, and a <code>Map</code> that declares its <code>entries</code> field nullable is a declaration no accelerator can hold. The restore path now conforms that declaration to the Arrow map layout.</li>
<li class=""><strong>A source row durable write-back could not confirm</strong>: The delivery worker read a missing point-scan row as a deletion. A short visibility gap in the accelerator therefore deleted that row from the source of record. The worker now withholds a key it cannot read and retries it on a later pass. A delivery cursor advances only after the pass succeeds. Write-back also refuses a configuration it cannot uphold, which is a behavior change. See <a href="https://spiceai.org/releases/v2.3.0#breaking-changes" class="">Breaking Changes</a>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="arrow-and-storage-bug-fixes">Arrow and Storage Bug Fixes<a href="https://spiceai.org/releases/v2.3.0#arrow-and-storage-bug-fixes" class="hash-link" aria-label="Direct link to Arrow and Storage Bug Fixes" title="Direct link to Arrow and Storage Bug Fixes" translate="no">​</a></h3>
<ul>
<li class="">
<p><strong>Decimal128 on write paths</strong>: Three conversions could produce a plausible wrong number instead of an error. The sum of two in-range halves wrapped to a large negative decimal at scale 38. A float-to-int cast saturated to <code>i128::MAX</code>, and <code>NaN</code> became <code>0</code>. The declared precision was never checked, so a value needing more digits than the column declares was appended anyway. All three were reachable from Debezium decimal ingestion, where the input is source-controlled. The runtime now validates the destination precision once, where every input form converges.</p>
</li>
<li class="">
<p><strong>An Iceberg <code>DELETE</code> an equality key cannot express</strong>: An Iceberg delete writes an equality delete file, which removes rows whose key columns equal the given values. That statement matches the user's <code>WHERE</code> only when the condition reads key columns alone. A condition on a float or a nested column removed rows that did not match. Spice now refuses the statement and names the offending column.</p>
</li>
<li class="">
<p><strong>A Parquet object overwritten mid-scan</strong>: A listing-table Parquet scan decoded two object generations as one file. The scan now pins one generation through a version id or an <code>If-Match</code> header. <code>dataset_acceleration_refresh_errors</code> carries <code>reason=object_generation_changed|parquet_decode|other</code>, so an expected overwrite is distinguishable from corruption.</p>
</li>
<li class="">
<p><strong>An Arrow relabel</strong>: <code>relabel_array_data</code> carries an array's values across a type change untouched, and only field names and nested nullability flags may differ. Nothing enforced that contract. It now refuses three kinds of target:</p>
<ul>
<li class="">a target that changes what the buffers mean</li>
<li class="">a target that declares away nulls the array still holds</li>
<li class="">a target whose same-typed sibling fields are reordered</li>
</ul>
<p>The third kind produced silent column-value transposition on the Delta Lake column-mapping path.</p>
</li>
<li class="">
<p><strong>Arrow <code>MAP</code> columns</strong>: The Arrow map layout forbids a nullable <code>entries</code> field, and <code>MapArray::try_new</code> refuses one. Nothing enforced it at decode. A producer that declared it that way handed over a column that decoded cleanly and then failed in the first kernel that rebuilt it. The runtime now normalizes <code>entries</code> nullability at every Arrow decode point. A Databricks SQL Warehouse <code>MAP</code> column, which declares <code>entries</code> nullable, no longer panics the runtime. A Cayenne accelerator that has already persisted the non-conforming declaration is now repaired.</p>
</li>
<li class="">
<p><strong>A nested nullability difference</strong>: <code>try_cast_to</code> decided its fast paths with <code>Schema::contains</code>, which permits a nested field's nullability to differ. <code>RecordBatch</code> requires the two types to be identical. The shared entry point now aligns the difference instead of publishing it.</p>
</li>
<li class="">
<p><strong>A retired Vortex file</strong>: Retiring a Cayenne file released its Vortex segments and left its footer in DataFusion's file-metadata cache, which has no TTL. A file opened during retirement could also repopulate the path that retirement had just cleared. The retirement drain had no ceiling. A stalled put therefore held every caller of the invalidation, and the delete sink is one of them. All three faults are fixed.</p>
</li>
<li class="">
<p><strong>A Cayenne teardown that deleted a shared metastore</strong>: Recreation of a Cayenne dataset could delete a shared metastore and leave other datasets unavailable after restart. The guard checked only the metastore named by that dataset's settings, not catalogs inside its data directory. Open file handles hid the loss until restart. The runtime now scans that directory before catalog changes and again before deletion. It refuses recreation if it finds a Cayenne metastore or cannot safely resolve the configured paths.</p>
</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="observability-and-operations">Observability and Operations<a href="https://spiceai.org/releases/v2.3.0#observability-and-operations" class="hash-link" aria-label="Direct link to Observability and Operations" title="Direct link to Observability and Operations" translate="no">​</a></h3>
<ul>
<li class=""><strong>OpenTelemetry resource attributes</strong>: The <a href="https://spiceai.org/docs/features/observability" target="_blank" rel="noopener noreferrer" class="">OTLP ingest</a> path parsed resource attributes such as <code>service.name</code> and <code>service.instance.id</code> and then dropped them. Data points from two processes were therefore indistinguishable once written. Resource attributes now reach the metric data points. The same change closes four ingest races that dropped data with no error. One of those races let a write publish through a table provider that a schema evolution had already replaced.</li>
<li class=""><strong>A panicking query</strong>: A query whose execution panicked was sometimes returned as an empty HTTP 200 success, which no client can tell apart from "no rows matched". This happened in 20 of 60 identical runs on <code>trunk</code>. A panicking query is now always an error.</li>
<li class=""><strong><code>runtime.cpu.cores</code> above the container's ceiling</strong>: <code>runtime.cpu.cores</code> was the one CPU entitlement setting taken raw rather than clamped. A pod configured with <code>runtime.cpu.cores: 6</code> under <code>resources.limits.cpu: 2</code> sized every derived pool for six cores and was then throttled. The runtime now warns and names both readings. It does not clamp, because an operator may size the runtime for a node the pod has not reached yet.</li>
<li class=""><strong>HTTP latency</strong>: The HTTP server sets <code>TCP_NODELAY</code>, which lowers the latency of a small response body. The Flight SQL server already set it.</li>
<li class=""><strong>MCP tools in <code>runtime.task_history</code></strong>: A proxied MCP tool call was recorded under two different <code>task</code> values depending on the entry point, so one logical tool split across two rows. Grouping by <code>task</code> gave wrong per-tool counts. Both entry points now use the encoded name.</li>
<li class=""><strong>A discarded Flight batch</strong>: The runtime reported a <code>data_loss</code> count that counted a message by its body length. A batch whose body is empty still carries rows, so the count was wrong. The runtime now reads the IPC header.</li>
<li class=""><strong>A hot reload that changes functions or catalogs</strong>: A cached logical plan embeds the <code>ScalarUDF</code> and the <code>TableSource</code> it was planned against. A hot reload that redefined a SQL function or replaced a catalog left those plans in place. The same SQL then kept answering from the replaced component. The plan cache is installed unconditionally with a one-hour TTL, so no caching configuration was needed to hit this. Both handlers now discard the affected plans.</li>
<li class=""><strong>Cloud Connect metrics cadence</strong>: A <a href="https://spiceai.org/docs/deployment/cloud/cloud-connect" target="_blank" rel="noopener noreferrer" class="">Cloud Connect</a> instance exports metrics every 10 seconds rather than every 30, so a chart drawn from the control stream resolves at 10 seconds. The payload is a snapshot of cumulative totals, so this changes chart resolution and not what is recorded.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-improvements-and-bug-fixes">Other Improvements and Bug Fixes<a href="https://spiceai.org/releases/v2.3.0#other-improvements-and-bug-fixes" class="hash-link" aria-label="Direct link to Other Improvements and Bug Fixes" title="Direct link to Other Improvements and Bug Fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Glue catalog</strong>: A discovered Glue table that Spice cannot read, such as an ORC or Avro table, was absent from the catalog with nothing said about it. The catalog connector now reports each such table and the reason.</li>
<li class=""><strong>Databricks</strong>: The connector accepts Unity Catalog streaming tables and views. It also forwards the runtime's <code>spark</code> feature.</li>
<li class=""><strong>DuckDB index materialization</strong>: The DuckDB intermediate index materialization rule reads a table's index list before it rewrites a scan into a materialized CTE. That list had been empty, so the rule never fired and an indexed column never narrowed a scan.</li>
<li class=""><strong>Vortex <code>list_length</code> pushdown</strong>: DataFusion <code>array_length(expr)</code> and <code>array_length(expr, 1)</code> now convert to Vortex <code>list_length</code> and push into the scan. A list length is computed from offsets, and element values are not materialized.</li>
<li class=""><strong>ScyllaDB</strong>: The <a href="https://spiceai.org/docs/components/data-connectors/scylladb" target="_blank" rel="noopener noreferrer" class="">ScyllaDB Data Connector</a> is out of the default build, alongside ODBC. <code>make install-scylladb</code> or <code>--features scylladb</code> builds it. A Spicepod that names <code>scylladb:</code> on a build without it now says the build lacks the connector rather than offering the closest registered name. The connector also declines a physical sort that CQL cannot serve.</li>
<li class=""><strong>Turso</strong>: The accelerator refuses a stored list whose encoding predates the version marker rather than reading it under the current encoding.</li>
<li class=""><strong>CLI</strong>: <code>spice run</code> resolves <code>spiced</code> beside the CLI before it reaches for the managed install, and never from <code>PATH</code>. A Spice Cloud project listing is attributed to the organization it was requested for. <code>spice query</code> and <code>spice nsql analyze</code> keep the API key on its origin across a redirect. A Cloud Connect managed instance no longer warns about the default pods watcher on every <code>spice run</code>.</li>
<li class=""><strong>MCP tools</strong>: A renamed tool forwards <code>strict()</code> and <code>as_mcp_proxy()</code> to the tool it wraps. <code>runtime-tools</code> declares what its <code>mcp</code> feature needs.</li>
<li class=""><strong>Connector registries on shutdown</strong>: The runtime no longer clears stateless connector registries on shutdown.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.3.0#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<p>Compared with v2.2.1, this release changes the following versions:</p>
<table><thead><tr><th>Dependency / Component</th><th>v2.2.1</th><th>v2.3.0</th></tr></thead><tbody><tr><td><strong>iceberg-rust</strong></td><td>v0.10.0</td><td>v0.10.1</td></tr><tr><td><strong>Rust toolchain</strong></td><td>v1.96.1</td><td>v1.97.1</td></tr></tbody></table>
<p>DataFusion remains at v54.1.0 and Arrow remains at v58.3.0. Spice updates their fork revisions for the federation, Parquet scan, and cache fixes described above.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.3.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/vatsalp2008" target="_blank" rel="noopener noreferrer" class="">@vatsalp2008</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.3.0#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p><strong>Google models authenticate against Vertex AI.</strong> A <code>from: google</code> chat or embedding model no longer accepts <code>google_api_key</code>. Every such model now authenticates as a GCP service account.</p>
<p>Update each <code>from: google</code> model and embedding to set <code>google_project</code>, <code>google_location</code>, and exactly one credential setting.</p>
<p>Before:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">models</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> google</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">gemini</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">2.5</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">pro</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> gemini</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_api_key</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">google_api_key</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></div></code></pre></div></div>
<p>After:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">models</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> google</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">gemini</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">2.5</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">pro</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> gemini</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_project</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">project</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_location</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">central1</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">google_service_account_path</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/gcp</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">sa.json</span><br></div></code></pre></div></div>
<table><thead><tr><th>Setting</th><th>Description</th></tr></thead><tbody><tr><td><code>google_project</code></td><td>The GCP project id. Required.</td></tr><tr><td><code>google_location</code></td><td>The GCP region, such as <code>us-central1</code>, or <code>global</code>. Required.</td></tr><tr><td><code>google_service_account_path</code></td><td>The path to a GCP service account JSON key file.</td></tr><tr><td><code>google_service_account_key</code></td><td>A GCP service account JSON key as a string.</td></tr><tr><td><code>google_application_default_credentials</code></td><td>Read the key path from the <code>GOOGLE_APPLICATION_CREDENTIALS</code> environment variable.</td></tr></tbody></table>
<p>Set exactly one of the three credential settings.</p>
<p>Two behavior changes to note before you upgrade:</p>
<ul>
<li class=""><strong>Durable write-back rejects unsafe settings and operations.</strong> Before you upgrade, set <code>mode: file</code>, remove retention settings, and declare a single-column <code>primary_key</code> for each durable write-back dataset. The runtime rejects unsupported settings at load time. Submit writes inside a transaction as one <code>BEGIN; ...; COMMIT;</code> request. Write-back datasets reject <code>DELETE</code> and <code>TRUNCATE</code> when you issue those statements.</li>
<li class=""><strong>The ScyllaDB Data Connector is out of the default build.</strong> Build with <code>--features scylladb</code>, or run <code>make install-scylladb</code>, to keep it. ODBC already worked this way.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.3.0#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 104 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.3.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.3.0, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.3.0</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.3.0</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.3.0</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.3.0#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.3.0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(search): surface an Elasticsearch delete that only partially applied (fixes #12364) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12720" target="_blank" rel="noopener noreferrer" class="">#12720</a></li>
<li class="">fix(ci): bound every integration job, so a wedged one cannot hold the queue (refs #12718) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12721" target="_blank" rel="noopener noreferrer" class="">#12721</a></li>
<li class="">feat(tools): add pdf-parse tool to compare liteparse and pdf-inspector by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12807" target="_blank" rel="noopener noreferrer" class="">#12807</a></li>
<li class="">fix(turso): refuse a stored list whose encoding predates the version marker (fixes #12632) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12837" target="_blank" rel="noopener noreferrer" class="">#12837</a></li>
<li class="">Use TypedParams for reranker parameters by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13046" target="_blank" rel="noopener noreferrer" class="">#13046</a></li>
<li class="">fix(search): correctness, async-safety, and performance fixes across the search subsystem by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13065" target="_blank" rel="noopener noreferrer" class="">#13065</a></li>
<li class="">Decide full-text CDC-attachment at construction, not after by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13075" target="_blank" rel="noopener noreferrer" class="">#13075</a></li>
<li class="">fix(scylladb): decline the physical sort pushdown CQL cannot serve (fixes #10775) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13107" target="_blank" rel="noopener noreferrer" class="">#13107</a></li>
<li class="">fix(cache): stop Pingora table invalidation from promoting every key it reads (fixes #12674) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13117" target="_blank" rel="noopener noreferrer" class="">#13117</a></li>
<li class="">fix(cayenne): stop a failed statistics read publishing a partial count as exact (fixes #13010) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13125" target="_blank" rel="noopener noreferrer" class="">#13125</a></li>
<li class="">fix(cayenne): refuse a widened CDC batch a partitioned acceleration cannot apply (fixes #13051) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13133" target="_blank" rel="noopener noreferrer" class="">#13133</a></li>
<li class="">fix(catalogs): report the Glue tables Spice cannot read instead of dropping them silently (fixes #13102) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13149" target="_blank" rel="noopener noreferrer" class="">#13149</a></li>
<li class="">fix(ci): gate every tracked Rust source tree in the merge queue's change filter (fixes #13120) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13151" target="_blank" rel="noopener noreferrer" class="">#13151</a></li>
<li class="">fix(cache): bound max_size on the memory an entry holds, not its array bytes (fixes #12931) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13154" target="_blank" rel="noopener noreferrer" class="">#13154</a></li>
<li class="">fix(cayenne): honour the sort-merge row floor on the memory-gated path (fixes #12958) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13157" target="_blank" rel="noopener noreferrer" class="">#13157</a></li>
<li class="">fix(cache): serve a Pingora hit without hiding it from a concurrent reader (fixes #12987) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13158" target="_blank" rel="noopener noreferrer" class="">#13158</a></li>
<li class="">fix(vortex): stop a file opened mid-retirement from repopulating the cleared path (fixes #12963) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13161" target="_blank" rel="noopener noreferrer" class="">#13161</a></li>
<li class="">fix(vortex): evict a retired file's footer with its segments (fixes #12953) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13162" target="_blank" rel="noopener noreferrer" class="">#13162</a></li>
<li class="">feat(google): switch from Google AI Studio to Vertex AI by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13210" target="_blank" rel="noopener noreferrer" class="">#13210</a></li>
<li class="">Run TEI candle model-load filesystem and tokenizer work on a blocking thread by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13223" target="_blank" rel="noopener noreferrer" class="">#13223</a></li>
<li class="">fix(correctness): validate Decimal128 precision and overflow on write paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13224" target="_blank" rel="noopener noreferrer" class="">#13224</a></li>
<li class="">fix(runtime): stop clearing stateless connector registries on shutdown by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13225" target="_blank" rel="noopener noreferrer" class="">#13225</a></li>
<li class="">fix(search): use one encoding path for full-text index writes and deletes by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13226" target="_blank" rel="noopener noreferrer" class="">#13226</a></li>
<li class="">fix(docker): install ARM64 linker toolchain by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13266" target="_blank" rel="noopener noreferrer" class="">#13266</a></li>
<li class="">ci: build the runtime integration archives with one feature set by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13270" target="_blank" rel="noopener noreferrer" class="">#13270</a></li>
<li class="">ci: archive every integration test target in one invocation by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13273" target="_blank" rel="noopener noreferrer" class="">#13273</a></li>
<li class="">fix(sql): bump the datafusion pin so a bounded EXISTS refuses instead of returning wrong rows (fixes #13277) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13280" target="_blank" rel="noopener noreferrer" class="">#13280</a></li>
<li class="">ci: have the compiler-cache action own its credentials by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13282" target="_blank" rel="noopener noreferrer" class="">#13282</a></li>
<li class="">fix(cpu-budget): warn when a configured cores value exceeds the container's real CPU ceiling (fixes #13275) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13284" target="_blank" rel="noopener noreferrer" class="">#13284</a></li>
<li class="">fix(databricks): publish a MAP column with the non-nullable entries field Arrow requires (fixes #7307) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13288" target="_blank" rel="noopener noreferrer" class="">#13288</a></li>
<li class="">fix(search): bound a search result set by the requested limit, not just the index read (fixes #13274) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13290" target="_blank" rel="noopener noreferrer" class="">#13290</a></li>
<li class="">fix(vortex): bound the segment-cache retirement drain so a stuck put cannot hold a delete open (fixes #12964) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13300" target="_blank" rel="noopener noreferrer" class="">#13300</a></li>
<li class="">Reach the accelerator contract without going through the runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13304" target="_blank" rel="noopener noreferrer" class="">#13304</a></li>
<li class="">fix(postgres): rebuild the datasets already streaming when a join replaces their replication slot (fixes #13229) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13313" target="_blank" rel="noopener noreferrer" class="">#13313</a></li>
<li class="">fix(cli): resolve spiced beside the CLI before the managed install, and never from PATH by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13317" target="_blank" rel="noopener noreferrer" class="">#13317</a></li>
<li class="">fix(iceberg): refuse a delete an equality key cannot express by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13322" target="_blank" rel="noopener noreferrer" class="">#13322</a></li>
<li class="">Stop the accelerator engines reaching up into the runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13324" target="_blank" rel="noopener noreferrer" class="">#13324</a></li>
<li class="">fix(benchmarks): open snapshot-update PRs against the dispatch branch, not always trunk by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13335" target="_blank" rel="noopener noreferrer" class="">#13335</a></li>
<li class="">chore(deps): bump datafusion-table-providers for NUMERIC scale fidelity by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13349" target="_blank" rel="noopener noreferrer" class="">#13349</a></li>
<li class="">feat(cloud-connect): export metrics every 10s by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13353" target="_blank" rel="noopener noreferrer" class="">#13353</a></li>
<li class="">Move the accelerator engines into their own crates by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13354" target="_blank" rel="noopener noreferrer" class="">#13354</a></li>
<li class="">perf(cayenne): shard the encode by what the write is, not by what the table declares by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13356" target="_blank" rel="noopener noreferrer" class="">#13356</a></li>
<li class="">fix(cli): attribute a project listing to the org it was requested for by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13357" target="_blank" rel="noopener noreferrer" class="">#13357</a></li>
<li class="">Enable Oracle TPC-H result validation, fix the loader that trimmed leading spaces by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13360" target="_blank" rel="noopener noreferrer" class="">#13360</a></li>
<li class="">Readme: Change PG catalog status from Alpha to Beta by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13361" target="_blank" rel="noopener noreferrer" class="">#13361</a></li>
<li class="">Upgrade iceberg-rust to v0.10.1 by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13365" target="_blank" rel="noopener noreferrer" class="">#13365</a></li>
<li class="">perf(cayenne): cut a rewrite's shards at equal row mass, not equal width by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13373" target="_blank" rel="noopener noreferrer" class="">#13373</a></li>
<li class="">fix(deps): bump datafusion-table-providers for AVG/division NUMERIC scale rounding by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13387" target="_blank" rel="noopener noreferrer" class="">#13387</a></li>
<li class="">fix(databricks): forward runtime's spark feature to the databricks connector by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13389" target="_blank" rel="noopener noreferrer" class="">#13389</a></li>
<li class="">Move the Cayenne accelerator into its own crate by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13391" target="_blank" rel="noopener noreferrer" class="">#13391</a></li>
<li class="">fix(testoperator): compare exact decimals on their mantissas, not through f64 by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13407" target="_blank" rel="noopener noreferrer" class="">#13407</a></li>
<li class="">Configure an accelerator engine through its constructor instead of a published global by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13409" target="_blank" rel="noopener noreferrer" class="">#13409</a></li>
<li class="">fix(opentelemetry): merge resource attributes into metric data points and close OTLP-to-sink ingest races by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13412" target="_blank" rel="noopener noreferrer" class="">#13412</a></li>
<li class="">fix(arrow): refuse a relabel that changes what the array's buffers mean (fixes #13423) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13435" target="_blank" rel="noopener noreferrer" class="">#13435</a></li>
<li class="">fix(tools): record one task_history task per proxied MCP tool (fixes #13338) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13437" target="_blank" rel="noopener noreferrer" class="">#13437</a></li>
<li class="">fix(release): read release notes from a file and trim them to GitHub's body limit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13457" target="_blank" rel="noopener noreferrer" class="">#13457</a></li>
<li class="">fix(ci): probe the cc toolchain before reaching for brew in setup-cc by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13466" target="_blank" rel="noopener noreferrer" class="">#13466</a></li>
<li class="">fix(cayenne): refuse a teardown that would delete a metastore no parameter names (fixes #13436) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13471" target="_blank" rel="noopener noreferrer" class="">#13471</a></li>
<li class="">fix(spiced): stop warning about the default pods watcher by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13494" target="_blank" rel="noopener noreferrer" class="">#13494</a></li>
<li class="">fix(arrow): align a nested nullability difference instead of advertising it (fixes #13285) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13496" target="_blank" rel="noopener noreferrer" class="">#13496</a></li>
<li class="">fix(acceleration): make the refresh-completion signal level-triggered (fixes #13086) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13505" target="_blank" rel="noopener noreferrer" class="">#13505</a></li>
<li class="">fix(acceleration): apply a partitioned scan's LIMIT as a fetch, not a skip by <a href="https://github.com/vatsalp2008" target="_blank" rel="noopener noreferrer" class="">@vatsalp2008</a> in <a href="https://github.com/spiceai/spiceai/pull/13507" target="_blank" rel="noopener noreferrer" class="">#13507</a></li>
<li class="">fix(ci): stage the retention OOM test binary without its debug info by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13511" target="_blank" rel="noopener noreferrer" class="">#13511</a></li>
<li class="">fix(ci): let sign-off run from a worktree nested inside the checkout, and add --skip-targeted by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13520" target="_blank" rel="noopener noreferrer" class="">#13520</a></li>
<li class="">Authenticate the stargazers dataset with a PAT and drop qa_analytics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13529" target="_blank" rel="noopener noreferrer" class="">#13529</a></li>
<li class="">fix(ci): isolate sccache per job on shared self-hosted Macs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13531" target="_blank" rel="noopener noreferrer" class="">#13531</a></li>
<li class="">chore(scylladb): take the ScyllaDB connector out of the default build by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13532" target="_blank" rel="noopener noreferrer" class="">#13532</a></li>
<li class="">feat(github): add review, release, milestone, user and repo tables, plus repo/owner columns by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13545" target="_blank" rel="noopener noreferrer" class="">#13545</a></li>
<li class="">fix(ci): match the allowed refresh-task warning at its current module path by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13547" target="_blank" rel="noopener noreferrer" class="">#13547</a></li>
<li class="">fix(flight): normalize MAP entries nullability at every Arrow decode point (fixes #13495) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13550" target="_blank" rel="noopener noreferrer" class="">#13550</a></li>
<li class="">fix(anthropic): default to a model Anthropic still serves (fixes #13557) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13563" target="_blank" rel="noopener noreferrer" class="">#13563</a></li>
<li class="">fix(postgres): rebuild an emptied CDC acceleration rather than resume its surviving position (refs #13546) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13566" target="_blank" rel="noopener noreferrer" class="">#13566</a></li>
<li class="">chore(spicepod): accelerate GitHub datasets with Cayenne instead of DuckDB by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13571" target="_blank" rel="noopener noreferrer" class="">#13571</a></li>
<li class="">fix(arrow): refuse a relabel that declares away nulls the array still holds (fixes #13433) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13585" target="_blank" rel="noopener noreferrer" class="">#13585</a></li>
<li class="">fix(cayenne): refuse a catalog whose data directory would hold its metastore (fixes #13105) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13593" target="_blank" rel="noopener noreferrer" class="">#13593</a></li>
<li class="">fix(ci): exempt every App account from the assignee gate, not just Dependabot (fixes #13115) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13594" target="_blank" rel="noopener noreferrer" class="">#13594</a></li>
<li class="">fix(mysql): assign the binlog dump session's net_write_timeout floor as an integer literal (fixes #13307) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13595" target="_blank" rel="noopener noreferrer" class="">#13595</a></li>
<li class="">fix(ci): let the E2E macOS build share the fleet's Cargo home (fixes #13299) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13596" target="_blank" rel="noopener noreferrer" class="">#13596</a></li>
<li class="">fix(ci): call a test binary the runner cannot load an infrastructure failure (fixes #13518) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13597" target="_blank" rel="noopener noreferrer" class="">#13597</a></li>
<li class="">fix(spicepod): say which acceleration settings enabled: false discards (fixes #13514) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13602" target="_blank" rel="noopener noreferrer" class="">#13602</a></li>
<li class="">feat(caching): bound a caching accelerator by size, count and entry lifetime (closes #13525) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13604" target="_blank" rel="noopener noreferrer" class="">#13604</a></li>
<li class="">fix(ci): catch a stale Cargo.lock before the merge queue, not after a 55-minute build (fixes #13598) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13606" target="_blank" rel="noopener noreferrer" class="">#13606</a></li>
<li class="">fix(bedrock): say which credential AWS rejected instead of "unhandled error" (refs #12396) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13616" target="_blank" rel="noopener noreferrer" class="">#13616</a></li>
<li class="">feat(caching): serve results stale after an acceleration refresh instead of evicting them by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13618" target="_blank" rel="noopener noreferrer" class="">#13618</a></li>
<li class="">fix(write-back): never delete a source row for a key the accelerator did not return by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13638" target="_blank" rel="noopener noreferrer" class="">#13638</a></li>
<li class="">fix(cayenne): fold a staged append's unpublished keys into the PK-keyset rebuild (fixes #13639) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13644" target="_blank" rel="noopener noreferrer" class="">#13644</a></li>
<li class="">fix(tools): forward strict() and as_mcp_proxy() from a renamed tool (fixes #13443) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13649" target="_blank" rel="noopener noreferrer" class="">#13649</a></li>
<li class="">fix(delta_lake): order a column-mapping relabel target the way the scan reads it (fixes #13434) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13655" target="_blank" rel="noopener noreferrer" class="">#13655</a></li>
<li class="">fix(ci): raise the e2e Linux build bound above the worst legitimate run (fixes #13674) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13675" target="_blank" rel="noopener noreferrer" class="">#13675</a></li>
<li class="">fix: comment out refresh_append_overlap in the sample spicepod by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13680" target="_blank" rel="noopener noreferrer" class="">#13680</a></li>
<li class="">fix(anthropic): refuse a log-probability request instead of narrowing sampling (fixes #13581) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13682" target="_blank" rel="noopener noreferrer" class="">#13682</a></li>
<li class="">fix(cayenne): record a pipelined non-conflict staged append's primary keys (fixes #13642) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13686" target="_blank" rel="noopener noreferrer" class="">#13686</a></li>
<li class="">fix(schema): stop an illegal Arrow Map entries declaration from being stored or compared (fixes #13549) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13695" target="_blank" rel="noopener noreferrer" class="">#13695</a></li>
<li class="">build(rust): upgrade toolchain to 1.97.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13696" target="_blank" rel="noopener noreferrer" class="">#13696</a></li>
<li class="">fix(ci): stop a CI git push from blocking forever on a credential prompt (fixes #13701) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13702" target="_blank" rel="noopener noreferrer" class="">#13702</a></li>
<li class="">fix(search): remove the vector a rejected write left behind (fixes #13504) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13705" target="_blank" rel="noopener noreferrer" class="">#13705</a></li>
<li class="">fix(acceleration): stop a refresh already running from answering a later waiter (refs #13544) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13709" target="_blank" rel="noopener noreferrer" class="">#13709</a></li>
<li class="">fix(search): remove a chunked row's stale chunks when its text goes away (refs #13704) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13716" target="_blank" rel="noopener noreferrer" class="">#13716</a></li>
<li class="">fix(catalogs): install the Spice function deny-list on the SQL catalog connectors (refs #13664) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13731" target="_blank" rel="noopener noreferrer" class="">#13731</a></li>
<li class="">fix(runtime-tools): declare what the mcp feature actually needs (fixes #13648) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13733" target="_blank" rel="noopener noreferrer" class="">#13733</a></li>
<li class="">fix(runtime): re-resolve a table after its refresh lands, before acting on the completion (fixes #13603) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13735" target="_blank" rel="noopener noreferrer" class="">#13735</a></li>
<li class="">fix(flight): count a discarded batch by its IPC header, not its body length (fixes #13636) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13736" target="_blank" rel="noopener noreferrer" class="">#13736</a></li>
<li class="">docs(makefile): say what SPICED_DATA_FEATURES actually is (fixes #13678) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13738" target="_blank" rel="noopener noreferrer" class="">#13738</a></li>
<li class="">fix(anthropic): classify a streaming failure by Anthropic's error type, not its message text (fixes #13562) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13748" target="_blank" rel="noopener noreferrer" class="">#13748</a></li>
<li class="">fix(views): apply a view's acceleration.ready_state instead of dropping it (fixes #13615) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13750" target="_blank" rel="noopener noreferrer" class="">#13750</a></li>
<li class="">fix(ci): resolve a Python 3.11+ interpreter for the lint-rust guards (refs #13754) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13755" target="_blank" rel="noopener noreferrer" class="">#13755</a></li>
<li class="">fix(bigquery): emit valid pushed-down SQL by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13768" target="_blank" rel="noopener noreferrer" class="">#13768</a></li>
<li class="">fix(bigquery): safely federate regexp_match null checks by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13771" target="_blank" rel="noopener noreferrer" class="">#13771</a></li>
<li class="">feat(hash-index): verify the bloom filter's block index with Verus by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13777" target="_blank" rel="noopener noreferrer" class="">#13777</a></li>
<li class="">fix(adbc): federate a BigQuery statement spanning datasets as one query by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13780" target="_blank" rel="noopener noreferrer" class="">#13780</a></li>
<li class="">fix(adbc): cancel an abandoned query, stop the BigQuery job, free the connection by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13782" target="_blank" rel="noopener noreferrer" class="">#13782</a></li>
<li class="">fix(snapshot): conform a recorded snapshot schema to the Arrow map layout (fixes #13694) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13786" target="_blank" rel="noopener noreferrer" class="">#13786</a></li>
<li class="">fix(cayenne): materialize the in-memory CDC tier before a scanning DELETE by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13798" target="_blank" rel="noopener noreferrer" class="">#13798</a></li>
<li class="">fix(caching): say when a caching accelerator has nothing bounding it (fixes #13525) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13805" target="_blank" rel="noopener noreferrer" class="">#13805</a></li>
<li class="">fix(bigquery): run three federated statement shapes BigQuery was refusing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13812" target="_blank" rel="noopener noreferrer" class="">#13812</a></li>
<li class="">fix(duckdb): rewrite DataFusion's btrim to DuckDB's trim (fixes #13794) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13821" target="_blank" rel="noopener noreferrer" class="">#13821</a></li>
<li class="">fix(federation): stop pushing btrim to SQLite and MySQL, which have no btrim (fixes #13840) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13823" target="_blank" rel="noopener noreferrer" class="">#13823</a></li>
<li class="">fix(ci): give the throughput workflow the postgres fixtures bench provisions by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13830" target="_blank" rel="noopener noreferrer" class="">#13830</a></li>
<li class="">fix(acceleration,cayenne): Resolve quoted columns in keys, name which primary key columns are null by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13845" target="_blank" rel="noopener noreferrer" class="">#13845</a></li>
<li class="">fix: pin listing-table Parquet reads to one object generation by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13847" target="_blank" rel="noopener noreferrer" class="">#13847</a></li>
<li class="">fix(duckdb): lower-case the hex digits a federated to_hex gets back (fixes #13818) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13852" target="_blank" rel="noopener noreferrer" class="">#13852</a></li>
<li class="">fix(bigquery): carry the merged unparser fixes through the dialect wrapper by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13853" target="_blank" rel="noopener noreferrer" class="">#13853</a></li>
<li class="">fix(databricks): allow Unity Catalog streaming tables and views through the table-type check by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13855" target="_blank" rel="noopener noreferrer" class="">#13855</a></li>
<li class="">fix(acceleration): report a retention policy that cannot start instead of silently building none (fixes #13804) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13857" target="_blank" rel="noopener noreferrer" class="">#13857</a></li>
<li class="">fix(search): evict a key whose deciding row the index rejected (fixes #13848) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13859" target="_blank" rel="noopener noreferrer" class="">#13859</a></li>
<li class="">fix(duckdb): Restore intermediate index materialization optimization by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13864" target="_blank" rel="noopener noreferrer" class="">#13864</a></li>
<li class="">fix(federation): refuse a user function the deny-list snapshot was built before (fixes #13726) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13868" target="_blank" rel="noopener noreferrer" class="">#13868</a></li>
<li class="">fix(duckdb): decode a federated sha256 back to the digest's bytes (fixes #13850) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13869" target="_blank" rel="noopener noreferrer" class="">#13869</a></li>
<li class="">fix(runtime): Add TCP_NODELAY to HTTP server by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13874" target="_blank" rel="noopener noreferrer" class="">#13874</a></li>
<li class="">fix(query): surface a panicking query as an error, never an empty success (fixes #13876) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13878" target="_blank" rel="noopener noreferrer" class="">#13878</a></li>
<li class="">fix(bigquery): keep the built-in date_trunc, forward two dialect renderings, repin the unparser by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13882" target="_blank" rel="noopener noreferrer" class="">#13882</a></li>
<li class="">fix(llms): classify a provider refusal from its typed fields, not its message (refs #13747) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13884" target="_blank" rel="noopener noreferrer" class="">#13884</a></li>
<li class="">fix(vortex): keep control-byte field names unescaped in physical schema by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13886" target="_blank" rel="noopener noreferrer" class="">#13886</a></li>
<li class="">perf(vortex): push DataFusion <code>array_length</code> down as Vortex <code>list_length</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13888" target="_blank" rel="noopener noreferrer" class="">#13888</a></li>
<li class="">fix(duckdb): render a federated concat as || so a NULL argument propagates (fixes #13849) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13889" target="_blank" rel="noopener noreferrer" class="">#13889</a></li>
<li class="">fix(acceleration): let a schema repair correct a checkpoint without resetting the freshness clock (fixes #13817) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13894" target="_blank" rel="noopener noreferrer" class="">#13894</a></li>
<li class="">fix(duckdb): screen a federated inner_product so a non-finite result is NULL (fixes #13787) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13895" target="_blank" rel="noopener noreferrer" class="">#13895</a></li>
<li class="">refactor(postgres): report an acceleration re-read as a refresh, not a bespoke metric by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13896" target="_blank" rel="noopener noreferrer" class="">#13896</a></li>
<li class="">fix(search): classify a partially non-finite embedding as unindexable on every backend (fixes #13872) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13902" target="_blank" rel="noopener noreferrer" class="">#13902</a></li>
<li class="">fix(duckdb): pin a connector's DuckDB session to UTC so a dataset's schema does not carry the host timezone (fixes #13899) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13903" target="_blank" rel="noopener noreferrer" class="">#13903</a></li>
<li class="">fix(cayenne): keep a file's statistics the same whichever source serves them (refs #13829) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13904" target="_blank" rel="noopener noreferrer" class="">#13904</a></li>
<li class="">fix(bigquery): preserve results and federation for temporal and recursive queries by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13905" target="_blank" rel="noopener noreferrer" class="">#13905</a></li>
<li class="">Make the SQL results cache hold what it says it holds by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13908" target="_blank" rel="noopener noreferrer" class="">#13908</a></li>
<li class="">fix(duckdb): keep a call the dialect cannot render out of the federated plan (fixes #13900) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13909" target="_blank" rel="noopener noreferrer" class="">#13909</a></li>
<li class="">fix(functions): discard cached plans when a hot reload changes the function set (refs #13873) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13911" target="_blank" rel="noopener noreferrer" class="">#13911</a></li>
<li class="">fix(runtime): discard cached logical plans when a hot reload replaces a catalog (fixes #13910) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13914" target="_blank" rel="noopener noreferrer" class="">#13914</a></li>
<li class="">fix(cli): keep the API key on its origin in the SDK-built query client (fixes #12502) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13923" target="_blank" rel="noopener noreferrer" class="">#13923</a></li>
<li class="">fix(search): filter a chunked Elasticsearch delete on a field that can match the key (fixes #13714) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13926" target="_blank" rel="noopener noreferrer" class="">#13926</a></li>
<li class="">ci: align default and ODBC build features by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13933" target="_blank" rel="noopener noreferrer" class="">#13933</a></li>
<li class="">fix(github): bound the pull request page to GitHub's per-request compute budget (refs #13762) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/13938" target="_blank" rel="noopener noreferrer" class="">#13938</a></li>
<li class="">fix: stabilize GitHub tests and bound GraphQL registration (fixes #13762) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13939" target="_blank" rel="noopener noreferrer" class="">#13939</a></li>
<li class="">fix(ci): preserve Cargo discovery markers during runner disk sweeps by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13940" target="_blank" rel="noopener noreferrer" class="">#13940</a></li>
<li class="">fix(bigquery): push down JSON scalar text and null checks by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13944" target="_blank" rel="noopener noreferrer" class="">#13944</a></li>
<li class="">fix(models): read the HuggingFace chat token as hf_token again (fixes #13932) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13946" target="_blank" rel="noopener noreferrer" class="">#13946</a></li>
<li class="">fix(postgres): decode versioned JSONB binary replication values by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13962" target="_blank" rel="noopener noreferrer" class="">#13962</a></li>
<li class="">fix(postgres): preserve microseconds in timestamp writeback by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13963" target="_blank" rel="noopener noreferrer" class="">#13963</a></li>
<li class="">ci: upgrade spiceio setup action to v0.9.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13971" target="_blank" rel="noopener noreferrer" class="">#13971</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.2.1...v2.3.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.2.1...v2.3.0</a></p>]]></content:encoded>
            <category>release</category>
            <category>caching</category>
            <category>github</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.2.1 (Sep 2, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.2.1</link>
            <guid>https://spiceai.org/releases/v2.2.1</guid>
            <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.2.1 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.2.1 is now available! 🛠️</p>
<p>Spice v2.2.1 is a patch release that improves accelerated data management, query federation, and search. Spice Cayenne now reclaims the storage that upserts and compaction leave behind, and new metrics report what each maintenance pass did. Retention policies apply to more Cayenne datasets. Federated queries push more work down to BigQuery. DuckDB and HTTP datasets keep their memory bounded. Vector search with HuggingFace embedding models returns more relevant results.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v221">What's New in v2.2.1<a href="https://spiceai.org/releases/v2.2.1#whats-new-in-v221" class="hash-link" aria-label="Direct link to What's New in v2.2.1" title="Direct link to What's New in v2.2.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-reclaims-storage-automatically">Cayenne Reclaims Storage Automatically<a href="https://spiceai.org/releases/v2.2.1#cayenne-reclaims-storage-automatically" class="hash-link" aria-label="Direct link to Cayenne Reclaims Storage Automatically" title="Direct link to Cayenne Reclaims Storage Automatically" translate="no">​</a></h3>
<p>A <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Spice Cayenne</a> acceleration now reclaims the space that a write or a compaction supersedes. Each maintenance pass removes four kinds of state that earlier releases kept:</p>
<ul>
<li class="">tombstones for superseded upsert rows</li>
<li class="">snapshot directories that a later commit replaced</li>
<li class="">manifest and catalog rows for snapshots that compaction merged away</li>
<li class="">deletion vectors that a compaction orphaned</li>
</ul>
<p>Cayenne also releases the metastore pages that a pass frees. On a table with frequent refreshes or CDC upserts, disk and metastore usage now stay bounded. No configuration change is required.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="retention-policies-apply-to-more-cayenne-datasets">Retention Policies Apply to More Cayenne Datasets<a href="https://spiceai.org/releases/v2.2.1#retention-policies-apply-to-more-cayenne-datasets" class="hash-link" aria-label="Direct link to Retention Policies Apply to More Cayenne Datasets" title="Direct link to Retention Policies Apply to More Cayenne Datasets" translate="no">​</a></h3>
<p>Cayenne now applies <code>retention_sql</code> on datasets with <a href="https://spiceai.org/docs/features/data-acceleration/refresh-modes/full" target="_blank" rel="noopener noreferrer" class=""><code>refresh_mode: full</code></a> and on CDC-accelerated datasets with <a href="https://spiceai.org/docs/features/data-acceleration/refresh-modes/changes" target="_blank" rel="noopener noreferrer" class=""><code>refresh_mode: changes</code></a>. Before this release, only the append refresh path ran the retention pass. A full refresh reloaded every source row, and the rows that a policy had removed came back.</p>
<p>A <code>retention_sql</code> predicate that calls <code>now()</code> also works now. Cayenne prepared the predicate once when the table opened, at a point where DataFusion cannot evaluate <code>now()</code>, so the pass failed and removed nothing. Cayenne now resolves <code>now()</code> at the start of each pass. See <a href="https://spiceai.org/docs/features/data-acceleration/data-refresh" target="_blank" rel="noopener noreferrer" class="">Data Refresh</a> for the retention settings.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">events</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> events</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> cayenne</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">retention_sql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> DELETE FROM events WHERE created_at &lt; now() </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> INTERVAL '7 days'</span><br></div></code></pre></div></div>
<p>Cayenne also accepts <a href="https://spiceai.org/docs/features/data-acceleration/refresh-modes/append" target="_blank" rel="noopener noreferrer" class=""><code>refresh_append_overlap</code></a> now. It warns when a dataset sets <code>retention_sql</code> together with <code>mode: memory</code>, or sets <code>indexes</code>, because it cannot apply either setting.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-maintenance-and-storage-metrics">Cayenne Maintenance and Storage Metrics<a href="https://spiceai.org/releases/v2.2.1#cayenne-maintenance-and-storage-metrics" class="hash-link" aria-label="Direct link to Cayenne Maintenance and Storage Metrics" title="Direct link to Cayenne Maintenance and Storage Metrics" translate="no">​</a></h3>
<p>Cayenne now reports its maintenance decisions and its storage footprint as metrics on the <code>cayenne</code> meter. The runtime serves them at <code>/metrics</code> when <code>spiced</code> starts with <code>--metrics &lt;addr&gt;</code>. An operator can now tell a pass that found nothing from a pass that declined. The metrics also show where disk and metastore space goes. See <a href="https://spiceai.org/docs/features/observability/component_metrics" target="_blank" rel="noopener noreferrer" class="">Metrics</a> for the metrics endpoint.</p>
<ul>
<li class=""><code>cayenne_compaction_outcome_total</code> and <code>cayenne_maintenance_outcome_total</code> count each pass by outcome, such as <code>committed</code>, <code>no_op</code>, or <code>declined_&lt;reason&gt;</code>.</li>
<li class=""><code>cayenne_compaction_trigger_total</code> names the threshold that requested a pass.</li>
<li class=""><code>cayenne_maintenance_reclaimed_files_total</code>, <code>cayenne_maintenance_reclaimed_bytes_total</code>, and <code>cayenne_maintenance_reclaimed_rows_total</code> count what each pass reclaimed.</li>
<li class=""><code>cayenne_storage_files</code>, <code>cayenne_storage_bytes</code>, and <code>cayenne_storage_rows</code> report the live footprint by storage tier.</li>
<li class=""><code>cayenne_data_dir_files</code>, <code>cayenne_data_dir_bytes</code>, and <code>cayenne_data_dir_snapshot_dirs</code> report what the data directory holds on disk.</li>
<li class=""><code>cayenne_metastore_db_bytes</code>, <code>cayenne_metastore_wal_bytes</code>, and <code>cayenne_metastore_table_rows</code> report the size of the metastore.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="query-federation-and-sql-improvements">Query Federation and SQL Improvements<a href="https://spiceai.org/releases/v2.2.1#query-federation-and-sql-improvements" class="hash-link" aria-label="Direct link to Query Federation and SQL Improvements" title="Direct link to Query Federation and SQL Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>ADBC federation</strong>: The <a href="https://spiceai.org/docs/components/data-connectors/adbc" target="_blank" rel="noopener noreferrer" class="">ADBC Data Connector</a> again keeps Spice-only functions such as <code>json_get_str</code> out of the SQL it sends to a source, and it honours <a href="https://spiceai.org/docs/features/query-federation" target="_blank" rel="noopener noreferrer" class=""><code>query_federation: disabled</code></a>. The v2.2.0 move of the connector into its own crate dropped both settings. A query with a Spice-only function against BigQuery then failed with an unknown-function error.</li>
<li class=""><strong>JSON functions in BigQuery</strong>: BigQuery federation now translates <a href="https://spiceai.org/docs/reference/sql/json" target="_blank" rel="noopener noreferrer" class=""><code>json_get_int</code> and <code>json_get_float</code></a> into BigQuery SQL. A filter or a join on a JSON value runs in BigQuery instead of in Spice.</li>
<li class=""><strong>Negative JSON numbers</strong>: <code>json_get_int</code> and <code>json_get_float</code> now read a negative JSON number. Every earlier release returned <code>NULL</code> for one.</li>
<li class=""><strong>Joins between described datasets</strong>: An <code>INNER</code> or <code>FULL</code> join between two datasets that both set a <a href="https://spiceai.org/docs/reference/spicepod/datasets" target="_blank" rel="noopener noreferrer" class=""><code>description</code></a> now plans. DataFusion carries the description as schema metadata, and the join failed with a schema mismatch error. This release updates DataFusion with the fix.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-query-and-delete-fixes">Cayenne Query and Delete Fixes<a href="https://spiceai.org/releases/v2.2.1#cayenne-query-and-delete-fixes" class="hash-link" aria-label="Direct link to Cayenne Query and Delete Fixes" title="Direct link to Cayenne Query and Delete Fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Predicate deletes on upsert tables</strong>: A <a href="https://spiceai.org/docs/reference/sql/dml" target="_blank" rel="noopener noreferrer" class=""><code>DELETE</code></a> with a non-primary-key predicate on a Cayenne upsert table now removes only the rows that match. The delete matched the predicate against superseded row versions as well as live rows. A key whose old version matched therefore lost its live row too. The delete now applies the same visibility rules as a query.</li>
<li class=""><strong>Date filters on Cayenne data files</strong>: A pushed-down <code>CAST(date_col AS TIMESTAMP)</code> comparison failed the scan for a <code>Date32</code> column. For a <code>Date64</code> column, the same comparison skipped files that held matching rows, so the query returned fewer rows. The scan cast the file's date statistic through the wrong storage type. It now converts the statistic before it prunes on it.</li>
<li class=""><strong>Primary keys after an interrupted index rebuild</strong>: A rebuild of the primary-key index that failed or was cancelled left the index disabled for the life of the process. A later upsert could then write a second live row for a declared primary key, and every write rebuilt the whole keyset. Cayenne now closes the rebuild window on every exit path.</li>
<li class=""><strong>Row counts after a commit</strong>: A distributed <code>COUNT(*)</code> that Cayenne answered from its maintained row count could miss the rows of a commit that had just become visible. Cayenne now claims a commit's row-count delta before it publishes the rows.</li>
<li class=""><strong>Point lookups on CDC datasets</strong>: A primary-key lookup with an <code>ORDER BY</code> on the same key failed to plan on a <a href="https://spiceai.org/docs/features/cdc" target="_blank" rel="noopener noreferrer" class="">CDC-accelerated</a> Cayenne dataset after its first transactional commit. An example is <code>WHERE id = 7 ORDER BY id</code>. The runtime rejected the query and returned an error. The scan now forwards its constant columns across the schema cast, and the query plans again.</li>
<li class=""><strong>Arrow <code>Map</code> columns in file mode</strong>: A Cayenne accelerator with <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class=""><code>mode: file</code></a> now stores Arrow <code>Map</code> columns, such as the <code>response_headers</code> column of an HTTP dataset. Every write of such a column failed, and the acceleration stayed empty.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="duckdb-and-http-datasets-keep-memory-bounded">DuckDB and HTTP Datasets Keep Memory Bounded<a href="https://spiceai.org/releases/v2.2.1#duckdb-and-http-datasets-keep-memory-bounded" class="hash-link" aria-label="Direct link to DuckDB and HTTP Datasets Keep Memory Bounded" title="Direct link to DuckDB and HTTP Datasets Keep Memory Bounded" translate="no">​</a></h3>
<p><strong>DuckDB</strong>: The bundled <a href="https://spiceai.org/docs/components/data-accelerators/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB</a> moves from v1.5.5 to v1.4.4. On v1.5.5, a DuckDB-accelerated dataset that refreshed through an <code>ON CONFLICT ... DO UPDATE</code> upsert grew its memory by about 6 MiB per refresh. The row count stayed steady while the memory grew, and the write eventually failed with an out-of-memory error. The DuckDB project tracks the regression as <a href="https://github.com/duckdb/duckdb/issues/25162" target="_blank" rel="noopener noreferrer" class="">duckdb/duckdb#25162</a>, and it is present in every v1.5.x release. v1.4.4 holds a steady footprint. Queries that run during a file-mode DuckDB swap also now recover when the swap invalidates their statements. The configured database path stays attached across the swap.</p>
<p><strong>HTTP</strong>: The <a href="https://spiceai.org/docs/components/data-connectors/https" target="_blank" rel="noopener noreferrer" class="">HTTP Data Connector</a> now bounds its response cache. The cache kept every fetched response for the life of the process. An API-proxy workload with request-shaped keys therefore grew by about 1 MB per distinct request.</p>
<p>The cache now holds at most <code>response_cache_max_size_bytes</code> per dataset, 64 MiB by default, and evicts the oldest entries first. It expires an entry by the origin's <code>max-age</code> and <code>Age</code> headers, and it refuses to store a response that sends <code>no-store</code> or <code>no-cache</code>. The new <code>response_cache_fallback_ttl</code> setting keeps a response from an origin that sends no <code>Cache-Control</code> header at all. Two new metrics, <code>response_cache_size_bytes</code> and <code>response_cache_items_count</code>, report occupancy per dataset.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//api.example.com/v1/items</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> items</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">response_cache_max_size_bytes</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16777216</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">response_cache_fallback_ttl</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 5m</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="more-relevant-vector-search-with-huggingface-embeddings">More Relevant Vector Search with HuggingFace Embeddings<a href="https://spiceai.org/releases/v2.2.1#more-relevant-vector-search-with-huggingface-embeddings" class="hash-link" aria-label="Direct link to More Relevant Vector Search with HuggingFace Embeddings" title="Direct link to More Relevant Vector Search with HuggingFace Embeddings" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/features/search/vector-search" target="_blank" rel="noopener noreferrer" class="">Vector search</a> with a <a href="https://spiceai.org/docs/components/embeddings/huggingface" target="_blank" rel="noopener noreferrer" class="">HuggingFace</a> sentence-transformer embedding model, such as <code>all-MiniLM-L6-v2</code>, now returns relevant results. The runtime kept the fixed padding that some models declare in <code>tokenizer.json</code>, so it padded every input to 128 tokens. The padding then dominated the vector of a short input. The runtime now clears that padding and lets the embedding layer own the attention mask. On the MTEB SciFact benchmark with <code>all-MiniLM-L6-v2</code>, nDCG@10 rises from 0.018 to 0.640 (published: 0.645). Full-text search and <code>model2vec</code> static models were not affected.</p>
<p>A search filter on a timezone-aware timestamp column now matches the exact instant when the runtime pushes it down to a <a href="https://spiceai.org/docs/components/vectors/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB-backed search index</a>. The filter compared whole milliseconds, so a filter inside a millisecond returned different rows than requested.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="change-data-capture-and-write-back">Change Data Capture and Write-Back<a href="https://spiceai.org/releases/v2.2.1#change-data-capture-and-write-back" class="hash-link" aria-label="Direct link to Change Data Capture and Write-Back" title="Direct link to Change Data Capture and Write-Back" translate="no">​</a></h3>
<ul>
<li class=""><strong>PostgreSQL write-back echo suppression</strong>: A CDC-accelerated dataset that writes back to its <a href="https://spiceai.org/docs/features/cdc/postgres-replication" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> source now applies each write once. The logical-replication stream returns every write-back transaction as a change. Spice now records the transaction ID of each delivery and drops the matching changes from the stream. Spice drops a replay after a slot reconnect the same way.</li>
<li class=""><strong>Write-back for <code>BIGINT</code> primary keys</strong>: <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Durable write-back</a> now delivers for a table whose primary key is a single <code>BIGINT</code> column. Such a table acknowledged writes but never delivered them to the source.</li>
<li class=""><strong>MySQL rebuild after a purged binlog</strong>: A <a href="https://spiceai.org/docs/features/cdc/mysql-replication" target="_blank" rel="noopener noreferrer" class="">MySQL</a> acceleration with <code>mysql_replication_invalid_checkpoint_behavior: restart</code> now rebuilds when the source has purged its binlog position, even when <code>mysql_replication_initial_snapshot: disabled</code> is set. It previously resumed from the current head and kept the rows that the source had deleted in the gap.</li>
<li class=""><strong>Append refresh on Cayenne</strong>: An <a href="https://spiceai.org/docs/features/data-acceleration/refresh-modes/append" target="_blank" rel="noopener noreferrer" class="">append refresh</a> on a Cayenne dataset resumes correctly again. The runtime read the append watermark through a timestamp cast that the Cayenne scan could not evaluate. The read failed, and the dataset stopped appending. The runtime now reads the raw column and normalizes the value in memory.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-improvements">Other Improvements<a href="https://spiceai.org/releases/v2.2.1#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>Startup logs</strong>: The log events that the runtime emits while it builds now reach the configured log output. These include the DuckDB memory budget and the query memory-limit defaults. Earlier releases dropped them at every log level.</li>
<li class=""><strong>Spice Cloud CLI</strong>: The CLI now reconciles its stored credential state and active organization for <a href="https://spiceai.org/docs/cli/reference/cloud" target="_blank" rel="noopener noreferrer" class="">Spice Cloud</a> after login.</li>
<li class=""><strong>Cayenne write concurrency</strong>: A Cayenne write that requires a single writer now runs serially even when <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class=""><code>cayenne_write_concurrency</code></a> is raised.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.2.1#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.2.1#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<p>One behavior change to note before you upgrade:</p>
<ul>
<li class=""><strong><a href="https://spiceai.org/docs/components/data-accelerators/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB</a> moves from v1.5.5 to v1.4.4</strong> to keep the memory of DuckDB-accelerated datasets bounded under upsert refreshes (<a href="https://github.com/duckdb/duckdb/issues/25162" target="_blank" rel="noopener noreferrer" class="">duckdb/duckdb#25162</a>). SQL syntax and functions that DuckDB added in v1.5 are not available to DuckDB-accelerated datasets.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.2.1#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 104 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.2.1#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.2.1, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.2.1</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.2.1</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.2.1</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.2.1#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.2.1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Make a pinned single partition actually mean one writer by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13325" target="_blank" rel="noopener noreferrer" class="">#13325</a></li>
<li class="">feat(postgres): outstanding write-back xid registry for CDC echo suppression by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13350" target="_blank" rel="noopener noreferrer" class="">#13350</a></li>
<li class="">fix(llms): clear tokenizer padding/truncation so TEI owns masking by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13416" target="_blank" rel="noopener noreferrer" class="">#13416</a></li>
<li class="">fix(http): bound the connector's response cache and honour <code>no-store</code> (fixes #13460) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13462" target="_blank" rel="noopener noreferrer" class="">#13462</a></li>
<li class="">fix(search): render a DuckDB search filter against the table schema (fixes #13144) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13489" target="_blank" rel="noopener noreferrer" class="">#13489</a></li>
<li class="">fix(duckdb): bump datafusion-table-providers for the attachment-race fixes by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13491" target="_blank" rel="noopener noreferrer" class="">#13491</a></li>
<li class="">fix(cli): reconcile Spice Cloud credential state by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13500" target="_blank" rel="noopener noreferrer" class="">#13500</a></li>
<li class="">fix(mysql): rebuild a purged-position acceleration whatever the snapshot mode says (fixes #13024) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13501" target="_blank" rel="noopener noreferrer" class="">#13501</a></li>
<li class="">fix(cayenne): decode write-back markers for a single Int64 primary key by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13502" target="_blank" rel="noopener noreferrer" class="">#13502</a></li>
<li class="">fix(deps): bump DataFusion to pick up the join schema-metadata fix by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13526" target="_blank" rel="noopener noreferrer" class="">#13526</a></li>
<li class="">fix(cayenne): give each cayenne_catalog test a table root of its own (fixes #13527) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13535" target="_blank" rel="noopener noreferrer" class="">#13535</a></li>
<li class="">fix(acceleration): read the append watermark without casting the time column by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13539" target="_blank" rel="noopener noreferrer" class="">#13539</a></li>
<li class="">test(postgres): cover CDC echo suppression through a real delivery transaction by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13553" target="_blank" rel="noopener noreferrer" class="">#13553</a></li>
<li class="">test(federation): guard the derived-table output names a pin bump landed unguarded (refs #12751) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13555" target="_blank" rel="noopener noreferrer" class="">#13555</a></li>
<li class="">fix(runtime): carry a scan's constant columns across the schema cast by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13565" target="_blank" rel="noopener noreferrer" class="">#13565</a></li>
<li class="">fix(cayenne): store Arrow Map columns in a file-mode accelerator (fixes #13524) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13567" target="_blank" rel="noopener noreferrer" class="">#13567</a></li>
<li class="">fix(cayenne): stop a predicate DELETE destroying live rows on an upsert table by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13574" target="_blank" rel="noopener noreferrer" class="">#13574</a></li>
<li class="">fix(logging): deliver the runtime build's events to the installed subscriber by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13587" target="_blank" rel="noopener noreferrer" class="">#13587</a></li>
<li class="">fix(adbc): restore the federation deny-list and query_federation wiring by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13590" target="_blank" rel="noopener noreferrer" class="">#13590</a></li>
<li class="">feat(cayenne): observability for maintenance decisions and footprint growth by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13619" target="_blank" rel="noopener noreferrer" class="">#13619</a></li>
<li class="">test(forks): guard the Spice patches carried on our upstream forks by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13623" target="_blank" rel="noopener noreferrer" class="">#13623</a></li>
<li class="">test(cayenne): settle the tier before asserting why a subset pass declined by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13632" target="_blank" rel="noopener noreferrer" class="">#13632</a></li>
<li class="">fix(cayenne): close the PK-index checkout window on every exit path (fixes #13267) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13641" target="_blank" rel="noopener noreferrer" class="">#13641</a></li>
<li class="">fix(cayenne): reclaim inline tombstones, and return the freed metastore pages by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13651" target="_blank" rel="noopener noreferrer" class="">#13651</a></li>
<li class="">fix(cayenne): delete merged-away manifest rows at protected-snapshot compaction by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13658" target="_blank" rel="noopener noreferrer" class="">#13658</a></li>
<li class="">fix(cayenne): prune old-snapshot catalog rows at subset small-file compaction by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13659" target="_blank" rel="noopener noreferrer" class="">#13659</a></li>
<li class="">fix(cayenne): delete emptied protected snapshot manifest rows in retention cleanup by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13660" target="_blank" rel="noopener noreferrer" class="">#13660</a></li>
<li class="">fix(cayenne): schedule the orphaned deletion-vector sweep from every publication that orphans one by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13663" target="_blank" rel="noopener noreferrer" class="">#13663</a></li>
<li class="">fix(cayenne): reclaim superseded snapshot dirs against live state by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13670" target="_blank" rel="noopener noreferrer" class="">#13670</a></li>
<li class="">Translate the JSON extraction functions into BigQuery SQL, and read negative JSON numbers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13672" target="_blank" rel="noopener noreferrer" class="">#13672</a></li>
<li class="">test(forks): guard the four BigQuery dialect unparser fixes the datafusion pin carries by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13691" target="_blank" rel="noopener noreferrer" class="">#13691</a></li>
<li class="">fix(cayenne): claim a commit's live-row delta before it publishes the rows (fixes #13036) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13720" target="_blank" rel="noopener noreferrer" class="">#13720</a></li>
<li class="">Downgrade DuckDB to v1.4.4 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13742" target="_blank" rel="noopener noreferrer" class="">#13742</a></li>
<li class="">fix(vortex): convert a date statistic into a timestamp before pruning on it (fixes #13624) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13745" target="_blank" rel="noopener noreferrer" class="">#13745</a></li>
<li class="">fix(cayenne): resolve now() in retention predicates once per pass by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13769" target="_blank" rel="noopener noreferrer" class="">#13769</a></li>
</ul>
<p>**<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.2.0...v2.2.1" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.2.0...v2.2.1</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>adbc</category>
            <category>duckdb</category>
            <category>sql</category>
            <category>data-connector</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.2.0 (Aug 25, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.2.0</link>
            <guid>https://spiceai.org/releases/v2.2.0</guid>
            <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.2.0 is now available! 🚀]]></description>
            <content:encoded><![CDATA[<p>Spice v2.2.0 is now available! 🚀</p>
<p>Spice v2.2.0 focuses on real-time data, performance, and stability. <strong>Cloud Connect</strong> links self-hosted runtimes to <a href="https://spice.ai/" target="_blank" rel="noopener noreferrer" class="">Spice.ai Cloud</a> for management and observability. MySQL datasets and PostgreSQL catalogs can now stream source changes into accelerated datasets. Debezium sources can send CDC events directly without Kafka. Warm in-memory indexes improve vector and full-text search performance.</p>
<p>Highlights in v2.2.0 include:</p>
<ul>
<li class=""><strong><a href="https://spiceai.org/releases/v2.2.0#cloud-connect" class="">Cloud Connect</a></strong> — link self-hosted runtimes for BYOC (Bring Your Own Cloud) to Spice.ai Cloud for management and observability</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.2.0#mysql-change-data-capture" class="">MySQL CDC</a></strong> — MySQL tables now stay in sync in real time using MySQL binlog replication, with no Kafka or Debezium infrastructure and no scheduled refreshes</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.2.0#postgresql-catalog-cdc" class="">PostgreSQL Catalog CDC</a></strong> — accelerate an entire PostgreSQL database in real time with a few lines of configuration and no per-table setup</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.2.0#faster-search-with-warm-in-memory-indexes" class="">Faster Search</a></strong> — vector and full-text search can now serve from an in-memory index by default, with no configuration change</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v220">What's New in v2.2.0<a href="https://spiceai.org/releases/v2.2.0#whats-new-in-v220" class="hash-link" aria-label="Direct link to What's New in v2.2.0" title="Direct link to What's New in v2.2.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cloud-connect">Cloud Connect<a href="https://spiceai.org/releases/v2.2.0#cloud-connect" class="hash-link" aria-label="Direct link to Cloud Connect" title="Direct link to Cloud Connect" translate="no">​</a></h3>
<blockquote>
<p>Spice Cloud Connect is a feature of <a href="https://spice.ai/" target="_blank" rel="noopener noreferrer" class="">Spice.ai Cloud</a>.</p>
</blockquote>
<p><a href="https://spiceai.org/docs/deployment/cloud/cloud-connect" target="_blank" rel="noopener noreferrer" class="">Spice Cloud Connect</a> links self-hosted runtimes for BYOC (Bring Your Own Cloud) to Spice.ai Cloud for management and observability. Run <a href="https://spiceai.org/docs/cli/reference/cloud#link" target="_blank" rel="noopener noreferrer" class=""><code>spice cloud link</code></a> to enroll a standalone runtime.</p>
<p>Try it with the <a href="https://github.com/spiceai/cookbook/tree/trunk/cloud-connect-dev" target="_blank" rel="noopener noreferrer" class="">Cloud Connect on a Development Machine</a> recipe.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mysql-change-data-capture">MySQL Change Data Capture<a href="https://spiceai.org/releases/v2.2.0#mysql-change-data-capture" class="hash-link" aria-label="Direct link to MySQL Change Data Capture" title="Direct link to MySQL Change Data Capture" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-connectors/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL Data Connector</a> now supports <code>refresh_mode: changes</code>. The runtime loads an initial snapshot of the table. It then applies inserts, updates, and deletes from the MySQL <a href="https://dev.mysql.com/doc/refman/8.4/en/binary-log.html" target="_blank" rel="noopener noreferrer" class="">binlog</a> as they commit. The acceleration stays current without scheduled refreshes.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mysql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mysql_host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mysql_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mysql_user</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> replicator</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mysql_pass</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">mysql_pass</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> cayenne</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>Failover-safe GTID positions</strong>: When the source server has <a href="https://dev.mysql.com/doc/refman/8.4/en/replication-gtids.html" target="_blank" rel="noopener noreferrer" class="">GTID</a> enabled, the runtime tracks the replication position as a GTID set. A GTID position stays valid across a replica promotion, so replication survives a failover to a new primary without a rebuild.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="postgresql-catalog-cdc">PostgreSQL Catalog CDC<a href="https://spiceai.org/releases/v2.2.0#postgresql-catalog-cdc" class="hash-link" aria-label="Direct link to PostgreSQL Catalog CDC" title="Direct link to PostgreSQL Catalog CDC" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/catalogs" target="_blank" rel="noopener noreferrer" class="">PostgreSQL Catalog Connector</a> is now Beta with new Catalog CDC acceleration support at Alpha.</p>
<p>A PostgreSQL catalog can now use <code>refresh_mode: changes</code>. One configuration replicates every table that the <code>include</code> patterns match. Queries then read fresh PostgreSQL data with no per-table setup.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">catalogs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> pg</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> pg</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">include</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'public.*'</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_user</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_pass</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">pg_pass</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<p>Known limitations while catalog CDC acceleration is Alpha: configuration may change; a table dropped and recreated in the source can serve rows captured before it was recreated (<a href="https://github.com/spiceai/spiceai/issues/12110" target="_blank" rel="noopener noreferrer" class="">#12110</a>); and a durable catalog acceleration can come back empty after a restart (<a href="https://github.com/spiceai/spiceai/issues/12729" target="_blank" rel="noopener noreferrer" class="">#12729</a>). Feedback is welcome in <a href="https://github.com/spiceai/spiceai/issues/11850" target="_blank" rel="noopener noreferrer" class="">#11850</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="debezium-cdc-without-kafka">Debezium CDC Without Kafka<a href="https://spiceai.org/releases/v2.2.0#debezium-cdc-without-kafka" class="hash-link" aria-label="Direct link to Debezium CDC Without Kafka" title="Direct link to Debezium CDC Without Kafka" translate="no">​</a></h3>
<p>Any Debezium source plugin can now stream change events directly into Spice, with no Kafka bus in between. A dataset with <code>from: cdc:…</code> accepts change events at <code>POST /v1/datasets/{name}/cdc</code>, in JSON or Avro. The existing Kafka path (<code>from: debezium:…</code>) is unchanged.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="faster-search-with-warm-in-memory-indexes">Faster Search with Warm In-Memory Indexes<a href="https://spiceai.org/releases/v2.2.0#faster-search-with-warm-in-memory-indexes" class="hash-link" aria-label="Direct link to Faster Search with Warm In-Memory Indexes" title="Direct link to Faster Search with Warm In-Memory Indexes" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/features/search" target="_blank" rel="noopener noreferrer" class="">Search</a> adds a warm in-memory tier for vector and full-text indexes. The runtime writes each change to the warm tier and to the durable store together. Queries read the warm tier first and fall back to the durable store. The warm tier covers vector indexes, full-text indexes, <code>.vectors</code> datasets, views, and chunked Elasticsearch vector columns.</p>
<p>More search improvements:</p>
<ul>
<li class=""><code>cosine_distance</code> uses SIMD instructions through the <code>simsimd</code> library.</li>
<li class="">Full-text search applies stemming by default.</li>
<li class="">Full-text search pushes SQL filters down into the tantivy index.</li>
<li class="">A delete now removes the document from full-text and vector indexes. BM25 statistics no longer count superseded documents.</li>
<li class="">The runtime loads local rerankers from <code>text-embeddings-inference</code> models.</li>
<li class="">The runtime validates vector search parameters before it runs the SQL query.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="operations--observability">Operations &amp; Observability<a href="https://spiceai.org/releases/v2.2.0#operations--observability" class="hash-link" aria-label="Direct link to Operations &amp; Observability" title="Direct link to Operations &amp; Observability" translate="no">​</a></h3>
<ul>
<li class=""><strong>Query timeout</strong>: The new <code>runtime.query.timeout</code> setting bounds the duration of every query. An expired query fails with HTTP 504 or gRPC <code>DEADLINE_EXCEEDED</code>.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">query</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">timeout</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 30s</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>CPU sizing for Kubernetes pods without a CPU limit</strong>: A Spice runtime pod with a CPU request and no CPU limit now sizes itself to twice the request instead of every core on the node. Set <code>SPICE_CPU_CORES=all</code> (or <code>runtime.cpu.cores: all</code>) to burst to all cores, for example when a 0.5-core request runs on a 24-core node.</li>
<li class=""><strong>Trace IDs in logs</strong>: Every log record from a query carries the query's trace ID. Filter the logs by one ID to see everything that query did.</li>
<li class=""><strong>Improved dashboards</strong>: The Grafana and Datadog dashboards add new and improved panels, and support multi-replica and Kubernetes deployments.</li>
<li class=""><strong>Helm</strong>: The Helm chart supports a custom Deployment strategy and StatefulSet <code>updateStrategy</code>.</li>
<li class=""><strong>Dataset status</strong>: A non-accelerated dataset now shows the <code>Error</code> state when its source is unavailable, instead of appearing healthy while queries fail.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-notable-improvements-and-bug-fixes">Other Notable Improvements and Bug Fixes<a href="https://spiceai.org/releases/v2.2.0#other-notable-improvements-and-bug-fixes" class="hash-link" aria-label="Direct link to Other Notable Improvements and Bug Fixes" title="Direct link to Other Notable Improvements and Bug Fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Drasi (Alpha)</strong>: The runtime forwards CDC changes and runtime tables to a <a href="https://drasi.io/" target="_blank" rel="noopener noreferrer" class="">Drasi</a> source.</li>
<li class=""><strong>Microsoft SQL Server</strong>: Kerberos integrated authentication now works on Unix.</li>
<li class=""><strong>HTTP connector</strong>: OAuth2 client-credentials authentication.</li>
<li class=""><strong>Oracle <code>DATE</code></strong>: Values lost their time of day. They now map to a timestamp.</li>
<li class=""><strong>Catalog <code>exclude</code> patterns</strong>: The Glue and Cayenne catalogs ignored <code>exclude</code> patterns. Both pattern lists now apply.</li>
<li class=""><strong>Spice Cayenne schema changes</strong>: Partitioned accelerations could report a source schema change as applied while partitions kept the old schema. This mismatch caused lossy casts or append failures. Cayenne now rejects in-place evolution for partitioned accelerations. The configured schema-change policy then handles the change.</li>
<li class=""><strong>Snowflake <code>NUMBER</code> values</strong>: The connector could remove fractional digits during schema discovery. It treated numeric metadata as absent and defaulted the scale to zero. It now preserves the source precision and scale.</li>
</ul>
<p>See the <a href="https://spiceai.org/releases/v2.2.0#changelog" class="">Changelog</a> for the full list of fixes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sdk-updates">SDK Updates<a href="https://spiceai.org/releases/v2.2.0#sdk-updates" class="hash-link" aria-label="Direct link to SDK Updates" title="Direct link to SDK Updates" translate="no">​</a></h3>
<p>Updated SDKs release alongside v2.2.0:</p>
<ul>
<li class=""><a href="https://github.com/spiceai/spice.js/releases/tag/v3.2.0" target="_blank" rel="noopener noreferrer" class="">spice.js v3.2.0</a> — adds query cancellation (<code>listActiveQueries</code>/<code>cancelActiveQuery</code>), mTLS client certificates, HTTP fallback when Flight is unavailable, and typed parameter binding via Flight SQL prepared statements. Also fixes <code>nsql()</code> and <code>search()</code> response handling and named parameters over HTTP.</li>
<li class=""><a href="https://github.com/spiceai/spicepy/releases/tag/v4.0.0" target="_blank" rel="noopener noreferrer" class="">spicepy v4.0.0</a> — adds streaming of large results, natural-language queries (<code>nsql</code>), vector and hybrid search, and query cancellation. Spice.ai Cloud users need this update: the legacy hostnames are retired in favor of region-specific endpoints.</li>
<li class=""><a href="https://github.com/spiceai/spice-rs/releases/tag/v4.0.0" target="_blank" rel="noopener noreferrer" class="">spice-rs v4.0.0</a> — adds search, NSQL, async queries, query cancellation, and mTLS.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.2.0#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version</th></tr></thead><tbody><tr><td><strong>DataFusion</strong></td><td>v54.1</td></tr><tr><td><strong>iceberg-rust</strong></td><td>v0.10.0</td></tr><tr><td><strong>Turso</strong></td><td>v0.7.2</td></tr><tr><td><strong>Rust toolchain</strong></td><td>v1.96.1</td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="new-contributors">New Contributors<a href="https://spiceai.org/releases/v2.2.0#new-contributors" class="hash-link" aria-label="Direct link to New Contributors" title="Direct link to New Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/boittega" target="_blank" rel="noopener noreferrer" class="">@boittega</a> made their first contribution in <a href="https://github.com/spiceai/spiceai/pull/11509" target="_blank" rel="noopener noreferrer" class="">#11509</a></li>
<li class=""><a href="https://github.com/lesbass" target="_blank" rel="noopener noreferrer" class="">@lesbass</a> made their first contribution in <a href="https://github.com/spiceai/spiceai/pull/12253" target="_blank" rel="noopener noreferrer" class="">#12253</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.2.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/boittega" target="_blank" rel="noopener noreferrer" class="">@boittega</a></li>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lesbass" target="_blank" rel="noopener noreferrer" class="">@lesbass</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/v1gnesh" target="_blank" rel="noopener noreferrer" class="">@v1gnesh</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.2.0#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<ul>
<li class=""><strong>CPU sizing for Kubernetes pods without a CPU limit</strong>: A Spice runtime pod with a CPU request and no CPU limit now sizes itself to twice the request instead of every core on the node. Set <code>SPICE_CPU_CORES=all</code> (or <code>runtime.cpu.cores: all</code>) to keep the previous behavior, or set <code>runtime.cpu.cores</code> to a specific core count.</li>
<li class=""><strong>Partitioned DuckDB accelerations are removed</strong>: The DuckDB accelerator now rejects <code>partition_by</code>. Use the Cayenne or Arrow accelerator for partitioned datasets.</li>
<li class=""><strong>Adaptive Cayenne tuning requires an explicit opt-in</strong>: An unset <code>cayenne_tuning</code> now resolves to <code>auto</code>. Set <code>cayenne_tuning: adaptive</code> to enable the closed-loop controller.</li>
<li class=""><strong>ONNX ML inference is removed</strong>: The runtime no longer loads ONNX models, and it no longer serves the <code>/v1/predict</code> endpoints. Use an LLM model provider instead.</li>
<li class=""><strong>One process-wide Vortex segment cache</strong>: Cayenne tables now share one segment cache instead of one cache per table. Set <code>cayenne_segment_cache_mb</code> under <code>runtime.params</code> to size it. When unset, the cache takes 1/64 of the memory entitlement, clamped to 256 MiB - 2 GiB.</li>
<li class=""><strong>The Pingora cache engine is now a Spice.ai Enterprise feature</strong>: An OSS build with <code>engine: pingora</code> degrades to the Moka engine and logs the substitution.</li>
<li class=""><strong>Deprecated settings</strong>: <code>pg_replication_temporary_slot</code> is deprecated. <code>cayenne_segment_cache_mb</code> at the table level is deprecated — set it under <code>runtime.params</code> instead. This release renames the MongoDB <code>num_docs_to_infer_schema</code> setting to <code>schema_infer_max_records</code>. The old name still works and warns.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.2.0#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<ul>
<li class="">Added a new recipe for <a href="https://github.com/spiceai/cookbook/tree/trunk/mysql/cdc" target="_blank" rel="noopener noreferrer" class="">MySQL CDC (Binlog Replication)</a>: stream real-time changes from a MySQL table into Spice with <code>refresh_mode: changes</code>.</li>
<li class="">Added a new recipe for <a href="https://github.com/spiceai/cookbook/tree/trunk/mysql/rds-aurora-cdc" target="_blank" rel="noopener noreferrer" class="">Aurora MySQL CDC (Binlog Replication)</a>: the same CDC setup for an AWS-hosted Amazon Aurora MySQL cluster.</li>
<li class="">Added a new recipe for <a href="https://github.com/spiceai/cookbook/tree/trunk/catalogs/postgres-cdc" target="_blank" rel="noopener noreferrer" class="">PostgreSQL Catalog CDC</a>: replicate every table of a PostgreSQL database with one catalog configuration.</li>
<li class="">Added a new recipe for <a href="https://github.com/spiceai/cookbook/tree/trunk/cloud-connect-dev" target="_blank" rel="noopener noreferrer" class="">Cloud Connect on a Development Machine</a>: connect a local Spice instance to Spice.ai Cloud, deploy live changes, and deliver a secret.</li>
</ul>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 104 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.2.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.2.0, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.2.0</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.2.0</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.2.0</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.2.0#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.2.0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">feat(testoperator): --prepare-only / --skip-prepare for htap source reuse by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11486" target="_blank" rel="noopener noreferrer" class="">#11486</a></li>
<li class="">test(cluster): de-flake scheduler_failover (drop unreliable scheduler_node assertion) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11518" target="_blank" rel="noopener noreferrer" class="">#11518</a></li>
<li class="">feat(cayenne): wire orphaned-DV cleanup knob to spicepod params + doc sync by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11523" target="_blank" rel="noopener noreferrer" class="">#11523</a></li>
<li class="">fix(cayenne): warn (not panic) on benign manifest/listing race; re-enable now-passing ignored tests by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11511" target="_blank" rel="noopener noreferrer" class="">#11511</a></li>
<li class="">fix(datafusion): accurate projected scan byte size so hash joins build the smaller side by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11503" target="_blank" rel="noopener noreferrer" class="">#11503</a></li>
<li class="">fix(cayenne): seed persisted <code>num_rows</code> for hash-join sizing by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11515" target="_blank" rel="noopener noreferrer" class="">#11515</a></li>
<li class="">fix(cayenne): user-visible DELETE WHERE pk IN (...) reports the real row count by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11514" target="_blank" rel="noopener noreferrer" class="">#11514</a></li>
<li class="">test(cayenne): CDC convergence/resurrection fuzz harness by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11502" target="_blank" rel="noopener noreferrer" class="">#11502</a></li>
<li class="">fix(cayenne): correctness &amp; memory_limit fixes from perf audit (2 P0, 3 P1) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11516" target="_blank" rel="noopener noreferrer" class="">#11516</a></li>
<li class="">perf(cayenne): compaction IO-hygiene follow-ups — input-page evict + O_DIRECT writer + bench by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11498" target="_blank" rel="noopener noreferrer" class="">#11498</a></li>
<li class="">Update end_game.md by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11535" target="_blank" rel="noopener noreferrer" class="">#11535</a></li>
<li class="">chore: Vendor ttf-parser, lopdf, pdf-extract by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11521" target="_blank" rel="noopener noreferrer" class="">#11521</a></li>
<li class="">fix: Update tpch benchmark snapshots for federated/mysql[catalog].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/11531" target="_blank" rel="noopener noreferrer" class="">#11531</a></li>
<li class="">Fix s3 vectors API by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11536" target="_blank" rel="noopener noreferrer" class="">#11536</a></li>
<li class="">Update from spiceai/datafusion#177 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11541" target="_blank" rel="noopener noreferrer" class="">#11541</a></li>
<li class="">perf(cayenne): off-write_lock N&gt;1 mem-tier checkpoint + adaptive query-admission throttle by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11538" target="_blank" rel="noopener noreferrer" class="">#11538</a></li>
<li class="">fix(flightsql): propagate bearer token to per-endpoint clients by <a href="https://github.com/boittega" target="_blank" rel="noopener noreferrer" class="">@boittega</a> in <a href="https://github.com/spiceai/spiceai/pull/11509" target="_blank" rel="noopener noreferrer" class="">#11509</a></li>
<li class="">fix: Placeholder table initialization lock swap by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11540" target="_blank" rel="noopener noreferrer" class="">#11540</a></li>
<li class="">chore(cluster): bump ballista pin for the null-aware anti-join fix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11544" target="_blank" rel="noopener noreferrer" class="">#11544</a></li>
<li class="">fix(runtime-tools): fix memory table identifier validation rejecting valid names by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11546" target="_blank" rel="noopener noreferrer" class="">#11546</a></li>
<li class="">test(chbench): enable 4-way mem-tier PK sharding on SF1000 memory-durability configurations by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11553" target="_blank" rel="noopener noreferrer" class="">#11553</a></li>
<li class="">fix(reorder): reorder inner-join islands inside EXISTS / NOT EXISTS by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11552" target="_blank" rel="noopener noreferrer" class="">#11552</a></li>
<li class="">feat(cayenne): enable orphaned-DV cleanup by default (per-table threshold 20) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11533" target="_blank" rel="noopener noreferrer" class="">#11533</a></li>
<li class="">fix(postgres): delete old key on CDC primary-key updates by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11551" target="_blank" rel="noopener noreferrer" class="">#11551</a></li>
<li class="">Properly exclude vendored crates from <code>make lint-rust-fix</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11560" target="_blank" rel="noopener noreferrer" class="">#11560</a></li>
<li class="">fix: arrow IndexedMemTable serves stale results after DML/retention/sync (fixes #11262) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11532" target="_blank" rel="noopener noreferrer" class="">#11532</a></li>
<li class="">perf(cayenne): concurrent per-shard mem-tier checkpoint encode (drain parallelism) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11558" target="_blank" rel="noopener noreferrer" class="">#11558</a></li>
<li class="">fix(physical-plan): estimate col=literal selectivity from NDV, not the flat 20% default (Datafusion) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11562" target="_blank" rel="noopener noreferrer" class="">#11562</a></li>
<li class="">fix: Read Postgres DB source error when available by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11566" target="_blank" rel="noopener noreferrer" class="">#11566</a></li>
<li class="">feat(cayenne): cold object-store tier with read-optimized clustering by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11543" target="_blank" rel="noopener noreferrer" class="">#11543</a></li>
<li class="">Generic CDC replication-lag metric by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11554" target="_blank" rel="noopener noreferrer" class="">#11554</a></li>
<li class="">fix: ignore transitive quick-xml advisories (RUSTSEC-2026-0194/0195) in cargo-deny by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11571" target="_blank" rel="noopener noreferrer" class="">#11571</a></li>
<li class="">test(chbench): add cold-object-store-tier SF-1000 HTAP run; cap SF-1000 mem-tier at 1 GiB by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11573" target="_blank" rel="noopener noreferrer" class="">#11573</a></li>
<li class="">fix: surface silent Turso read-path conversion failures (fixes #11276) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11570" target="_blank" rel="noopener noreferrer" class="">#11570</a></li>
<li class="">feat(testoperator): emit P99 + Max replication lag and staleness telemetry for HTAP by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11572" target="_blank" rel="noopener noreferrer" class="">#11572</a></li>
<li class="">feat(runtime): cost-based eager aggregation, enabled by default (datafusion spiceai-54) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11446" target="_blank" rel="noopener noreferrer" class="">#11446</a></li>
<li class="">Bump datafusion to include spiceai/datafusion#181 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11563" target="_blank" rel="noopener noreferrer" class="">#11563</a></li>
<li class="">fix(cayenne): drain in-flight maintenance before in-process reopen (mutation_property flake) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11578" target="_blank" rel="noopener noreferrer" class="">#11578</a></li>
<li class="">Unified JSON nesting by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11555" target="_blank" rel="noopener noreferrer" class="">#11555</a></li>
<li class="">feat(testoperator): capture under-load EXPLAIN plans as HTAP artifacts by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11576" target="_blank" rel="noopener noreferrer" class="">#11576</a></li>
<li class="">feat(cayenne): freshness-SLO-driven adaptive mem-tier shrink (+ freshness diagnostics) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11574" target="_blank" rel="noopener noreferrer" class="">#11574</a></li>
<li class="">fix(cayenne): fold un-checkpointed mem-tier keys into the cold keyset rebuild by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11592" target="_blank" rel="noopener noreferrer" class="">#11592</a></li>
<li class="">perf(cayenne): reuse the PK RowConverter across the sharded CDC apply by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11590" target="_blank" rel="noopener noreferrer" class="">#11590</a></li>
<li class="">Add labels to <code>spiceai-dev</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11591" target="_blank" rel="noopener noreferrer" class="">#11591</a></li>
<li class="">Rename mongo <code>num_docs_to_infer_schema</code> (deprecated) -&gt; <code>schema_infer_max_records</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11593" target="_blank" rel="noopener noreferrer" class="">#11593</a></li>
<li class="">fix(postgres): don't ACK replication slot past uncommitted envelopes on empty transactions by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11582" target="_blank" rel="noopener noreferrer" class="">#11582</a></li>
<li class="">refactor(connectors): extract abfs, adbc, cosmosdb, ducklake, gcs, git, github, glue, kafka, snowflake-native, spiceai into data-connectors crates by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11407" target="_blank" rel="noopener noreferrer" class="">#11407</a></li>
<li class="">Revert "Generic CDC replication-lag metric" by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11600" target="_blank" rel="noopener noreferrer" class="">#11600</a></li>
<li class="">refactor(cayenne): remove orphaned-DV cleanup spicepod param, make it always-on by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11575" target="_blank" rel="noopener noreferrer" class="">#11575</a></li>
<li class="">fix(mongodb): substitute delete when UpdateLookup finds no document by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11583" target="_blank" rel="noopener noreferrer" class="">#11583</a></li>
<li class="">ci(chbench): SF1000 tuned+adaptive every 3h, other configs once daily by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11601" target="_blank" rel="noopener noreferrer" class="">#11601</a></li>
<li class="">feat(cayenne): add integer support to maintained AVG by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11564" target="_blank" rel="noopener noreferrer" class="">#11564</a></li>
<li class="">Refresh spidapter Spice Cloud token from client credentials by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11594" target="_blank" rel="noopener noreferrer" class="">#11594</a></li>
<li class="">fix: cluster filtered COUNT(*) on append-only tables returns unfiltered total (fixes #11599) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11603" target="_blank" rel="noopener noreferrer" class="">#11603</a></li>
<li class="">fix(scylladb): error on lossy CQL decimal conversion instead of silent truncation/NULL (fixes #11267) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11604" target="_blank" rel="noopener noreferrer" class="">#11604</a></li>
<li class="">ci(chbench): drop postgres-arrow and tuned (non-memory) from scheduled HTAP runs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11606" target="_blank" rel="noopener noreferrer" class="">#11606</a></li>
<li class="">ci(chbench): lower tuned SF1000 mem-tier max age to 15s for scheduled HTAP runs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11618" target="_blank" rel="noopener noreferrer" class="">#11618</a></li>
<li class="">fix(cayenne): fold the un-checkpointed mem-tier into the persisted-bloom PK-index rebuild (SF-100 over-count) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11609" target="_blank" rel="noopener noreferrer" class="">#11609</a></li>
<li class="">Potential fix for 1 code quality finding by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11614" target="_blank" rel="noopener noreferrer" class="">#11614</a></li>
<li class="">fix(postgres): shared replication slot drops WAL for partitioned tables (fixes #11290) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11607" target="_blank" rel="noopener noreferrer" class="">#11607</a></li>
<li class="">bench(chbench): add 4-slot CDC variant pod for SF-1000 memory (separate from default) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11605" target="_blank" rel="noopener noreferrer" class="">#11605</a></li>
<li class="">fix(cayenne): don't serve drifted memory-CDC row count as Exact to COUNT(*) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11602" target="_blank" rel="noopener noreferrer" class="">#11602</a></li>
<li class="">chore(deps): vendor pgwire-replication 0.3.2 by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11617" target="_blank" rel="noopener noreferrer" class="">#11617</a></li>
<li class="">Add SQL warehouse ID to integration workflow by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11561" target="_blank" rel="noopener noreferrer" class="">#11561</a></li>
<li class="">fix(search): cosine_distance returns NULL not NaN for zero-magnitude vectors by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11621" target="_blank" rel="noopener noreferrer" class="">#11621</a></li>
<li class="">feat(spidapter): tuned + adaptive MongoDB CDC spicepods with scenario selection by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11579" target="_blank" rel="noopener noreferrer" class="">#11579</a></li>
<li class="">Potential fixes for 3 code quality findings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11613" target="_blank" rel="noopener noreferrer" class="">#11613</a></li>
<li class="">Potential fixes for 2 code quality findings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11611" target="_blank" rel="noopener noreferrer" class="">#11611</a></li>
<li class="">Potential fixes for 2 code quality findings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11615" target="_blank" rel="noopener noreferrer" class="">#11615</a></li>
<li class="">Potential fix for 1 code quality finding by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11612" target="_blank" rel="noopener noreferrer" class="">#11612</a></li>
<li class="">feat(cayenne): split mem-tier into ingestion + immutable pieces; advance the replication slot on a cheap periodic seal (default 2s) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11622" target="_blank" rel="noopener noreferrer" class="">#11622</a></li>
<li class="">fix(mcp): encode catalog-qualified tool names without '/' (fixes #10894) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11629" target="_blank" rel="noopener noreferrer" class="">#11629</a></li>
<li class="">fix(refresh): apply refresh_sql override on manual refresh when source unchanged (fixes #11353) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11626" target="_blank" rel="noopener noreferrer" class="">#11626</a></li>
<li class="">fix: report empty accelerated schema instead of misleading missing-column error (fixes #10920) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11625" target="_blank" rel="noopener noreferrer" class="">#11625</a></li>
<li class="">fix(imap): store message date as millisecond Timestamp, not seconds in Date64 (fixes #11547) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11624" target="_blank" rel="noopener noreferrer" class="">#11624</a></li>
<li class="">test(bucket): guard frozen partition-hash output against silent ahash drift (addresses #11277) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11623" target="_blank" rel="noopener noreferrer" class="">#11623</a></li>
<li class="">Bump datafusion (spiceai/datafusion#182) and datafusion-table-providers (#27): fix q16 CollectLeft planning error and SQLite q6 wrong revenue by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11598" target="_blank" rel="noopener noreferrer" class="">#11598</a></li>
<li class="">fix(cluster): prevent executor flaps and distributed query stalls by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11565" target="_blank" rel="noopener noreferrer" class="">#11565</a></li>
<li class="">fix(cli): allow <code>spice trace</code> on dynamic MCP/custom tool_use tasks (fixes #10995) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11630" target="_blank" rel="noopener noreferrer" class="">#11630</a></li>
<li class="">docs: add clang/lld to arm64 Linux build prerequisites (fixes #11120) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11632" target="_blank" rel="noopener noreferrer" class="">#11632</a></li>
<li class="">perf(cayenne): mem-tier visible-batch memo + maintained MIN/MAX IVM by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11631" target="_blank" rel="noopener noreferrer" class="">#11631</a></li>
<li class="">docs: consolidate agent instructions and fix stale references by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11634" target="_blank" rel="noopener noreferrer" class="">#11634</a></li>
<li class="">build(deps): bump the github-actions-dependencies group across 2 directories with 7 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/11627" target="_blank" rel="noopener noreferrer" class="">#11627</a></li>
<li class="">perf(flight): offload query-result IPC encoding off the IO runtime by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11608" target="_blank" rel="noopener noreferrer" class="">#11608</a></li>
<li class="">feat(runtime): reservation-aware Cayenne CDC query-memory default (75%→70%) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11641" target="_blank" rel="noopener noreferrer" class="">#11641</a></li>
<li class="">Revert "ci(chbench): lower tuned SF1000 mem-tier max age to 15s for scheduled HTAP runs" by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11648" target="_blank" rel="noopener noreferrer" class="">#11648</a></li>
<li class="">fix(cayenne): don't bump mem-tier version on seal (QPH regression from #11622) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11649" target="_blank" rel="noopener noreferrer" class="">#11649</a></li>
<li class="">feat(cayenne): vendor versioned row_converter module (byte-compatible with arrow-row 58.3.0) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11654" target="_blank" rel="noopener noreferrer" class="">#11654</a></li>
<li class="">fix(flightsql): advertise analyzed query schemas by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11656" target="_blank" rel="noopener noreferrer" class="">#11656</a></li>
<li class="">feat(cayenne): bounded append freshness — segmented stream publishing + publish-triggered executor stats broadcast by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11620" target="_blank" rel="noopener noreferrer" class="">#11620</a></li>
<li class="">fix(postgres): decouple replication keepalive/feedback from apply backpressure by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11653" target="_blank" rel="noopener noreferrer" class="">#11653</a></li>
<li class="">fix: bump DataFusion for eager decimal SUM schema by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11657" target="_blank" rel="noopener noreferrer" class="">#11657</a></li>
<li class="">fix(cayenne): stop mem-tier snapshot storms under memory pressure and byte-range splitting of small snapshot scans by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11645" target="_blank" rel="noopener noreferrer" class="">#11645</a></li>
<li class="">fix(ducklake): add opt-in automatic_migration to attach older catalogs (fixes #10899) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11635" target="_blank" rel="noopener noreferrer" class="">#11635</a></li>
<li class="">ci(e2e): tolerate empty-type DuckDB variant of the parquet-rename race by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11636" target="_blank" rel="noopener noreferrer" class="">#11636</a></li>
<li class="">build(deps): bump the aws-sdk group with 3 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/11628" target="_blank" rel="noopener noreferrer" class="">#11628</a></li>
<li class="">ci(chbench): FIFO-queue HTAP runs via concurrency queue: max; simplify dispatcher by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11659" target="_blank" rel="noopener noreferrer" class="">#11659</a></li>
<li class="">fix(bucket): guard against ahash AES-path re-bucketing of partition data (fixes #11277) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11665" target="_blank" rel="noopener noreferrer" class="">#11665</a></li>
<li class="">fix(cayenne): gate metastore reinsert_sequence schema behind a user_version (fixes #11291) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11651" target="_blank" rel="noopener noreferrer" class="">#11651</a></li>
<li class="">fix(cayenne): durable CDC delete keeps the pk IN (...) fast path (fixes #11633) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11642" target="_blank" rel="noopener noreferrer" class="">#11642</a></li>
<li class="">ci(chbench): make scheduled HTAP runs adaptive-only (retire tuned, convert cold tier to adaptive) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11677" target="_blank" rel="noopener noreferrer" class="">#11677</a></li>
<li class="">fix(imap): decode text body into content instead of storing raw MIME (fixes #11549) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11667" target="_blank" rel="noopener noreferrer" class="">#11667</a></li>
<li class="">feat(cayenne): end-to-end integrity checksums for WAL records and Vortex data files (fixes #11639) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11646" target="_blank" rel="noopener noreferrer" class="">#11646</a></li>
<li class="">feat(spidapter): date-prefix per-run MongoDB CDC databases by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11658" target="_blank" rel="noopener noreferrer" class="">#11658</a></li>
<li class="">test(cayenne): fuzz mem-tier CDC + seq-prefix bake; harden durable-path count exactness by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11643" target="_blank" rel="noopener noreferrer" class="">#11643</a></li>
<li class="">deps: bump spiceai/datafusion to pick up ORDER BY alias unparser fix by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11655" target="_blank" rel="noopener noreferrer" class="">#11655</a></li>
<li class="">fix(postgres_replication): size CDC change-batch builders to the transaction row count by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11675" target="_blank" rel="noopener noreferrer" class="">#11675</a></li>
<li class="">Release notes for v2.1.0 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11429" target="_blank" rel="noopener noreferrer" class="">#11429</a></li>
<li class="">perf(pgwire-replication): incremental zero-copy framing (FrameReader) + bounded message size by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11668" target="_blank" rel="noopener noreferrer" class="">#11668</a></li>
<li class="">fix(cdc): memory-mode changes stream no longer fatally stops on a transient deferred-commit queue (fixes #11644) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11678" target="_blank" rel="noopener noreferrer" class="">#11678</a></li>
<li class="">test: update snapshots from job 84685029883 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11569" target="_blank" rel="noopener noreferrer" class="">#11569</a></li>
<li class="">fix: Distinguish no filters vs lit(false) for RefreshSql distributed accelerations by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11596" target="_blank" rel="noopener noreferrer" class="">#11596</a></li>
<li class="">Fix cargo-deny crossbeam-epoch advisory by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11681" target="_blank" rel="noopener noreferrer" class="">#11681</a></li>
<li class="">fix: Update benchmark snapshots for <code>trunk</code> run by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/11666" target="_blank" rel="noopener noreferrer" class="">#11666</a></li>
<li class="">chore(deps): upgrade Vortex to 0.76.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11682" target="_blank" rel="noopener noreferrer" class="">#11682</a></li>
<li class="">refactor: extract runtime-metrics crate, move ComponentType to runtime-api-types by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11524" target="_blank" rel="noopener noreferrer" class="">#11524</a></li>
<li class="">feat(cloud-connect): standalone instance adoption by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11060" target="_blank" rel="noopener noreferrer" class="">#11060</a></li>
<li class="">docs: keep the feature set constant across a session (incremental-build hygiene) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11679" target="_blank" rel="noopener noreferrer" class="">#11679</a></li>
<li class="">feat(mysql): binlog replication for <code>refresh_mode: changes</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11672" target="_blank" rel="noopener noreferrer" class="">#11672</a></li>
<li class="">feat(cdc): cap keys per durable delete plan + absorb fall-through metrics (#11673) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11680" target="_blank" rel="noopener noreferrer" class="">#11680</a></li>
<li class="">ci(chbench): run scheduled SF1000-adaptive HTAP bench every 6h instead of 3h by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11698" target="_blank" rel="noopener noreferrer" class="">#11698</a></li>
<li class="">fix: MySQL connector fails to convert unsigned integer types (fixes #8364) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11691" target="_blank" rel="noopener noreferrer" class="">#11691</a></li>
<li class="">observability(cdc): localize CDC back-pressure across the ingest pipeline by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11610" target="_blank" rel="noopener noreferrer" class="">#11610</a></li>
<li class="">fix(cache): cache empty (zero-row) SQL result sets by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11699" target="_blank" rel="noopener noreferrer" class="">#11699</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11706" target="_blank" rel="noopener noreferrer" class="">#11706</a></li>
<li class="">Add support for MysSQL in Ch-Bench by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11700" target="_blank" rel="noopener noreferrer" class="">#11700</a></li>
<li class="">observability(chbench): limit CH-BenCHmark logs to info and above by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11711" target="_blank" rel="noopener noreferrer" class="">#11711</a></li>
<li class="">perf(cdc): cache per-dataset metric labels to avoid per-event string copies by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11712" target="_blank" rel="noopener noreferrer" class="">#11712</a></li>
<li class="">feat(postgres): pgoutput binary-format CDC decoding + zero-copy decoder by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11702" target="_blank" rel="noopener noreferrer" class="">#11702</a></li>
<li class="">Update integration_models.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11715" target="_blank" rel="noopener noreferrer" class="">#11715</a></li>
<li class="">fix(cayenne): zero-row append refresh fails with "No such file or directory" by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11710" target="_blank" rel="noopener noreferrer" class="">#11710</a></li>
<li class="">perf(cdc): cut shared-slot Postgres replication pump per-event overhead by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11709" target="_blank" rel="noopener noreferrer" class="">#11709</a></li>
<li class="">fix(spicepod): reject unknown fields on columns[] config (fixes #10972) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11719" target="_blank" rel="noopener noreferrer" class="">#11719</a></li>
<li class="">feat(cayenne): tier-gated O_DIRECT compaction writer (EBS/NAS network storage) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11696" target="_blank" rel="noopener noreferrer" class="">#11696</a></li>
<li class="">fix(cayenne): harden Vortex compaction writes by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11692" target="_blank" rel="noopener noreferrer" class="">#11692</a></li>
<li class="">perf(vortex): push boolean NOT filters into the Vortex scan by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11721" target="_blank" rel="noopener noreferrer" class="">#11721</a></li>
<li class="">chore(chbench): cap scheduled HTAP runs at 250K tpmC (rate 9250) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11723" target="_blank" rel="noopener noreferrer" class="">#11723</a></li>
<li class="">MySQL CH-benCHmark HTAP: SF1 + SF1000 adaptive configs by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11722" target="_blank" rel="noopener noreferrer" class="">#11722</a></li>
<li class="">feat(testoperator): TPC-DS SF100 federated cluster-bench spicepod + default spicehq nodegroup by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11716" target="_blank" rel="noopener noreferrer" class="">#11716</a></li>
<li class="">refactor(runtime): move AccelerationSource and Acceleration into runtime-acceleration by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11530" target="_blank" rel="noopener noreferrer" class="">#11530</a></li>
<li class="">remove(ml): delete model_components crate and ONNX/Tract ML inference by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11684" target="_blank" rel="noopener noreferrer" class="">#11684</a></li>
<li class="">ci: dedupe testoperator query_overrides run steps by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11690" target="_blank" rel="noopener noreferrer" class="">#11690</a></li>
<li class="">Update search snapshots by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11714" target="_blank" rel="noopener noreferrer" class="">#11714</a></li>
<li class="">refactor: use inherent <code>is::&lt;T&gt;()</code> on <code>dyn TableProvider</code>/<code>dyn ExecutionPlan</code> for type checks by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11585" target="_blank" rel="noopener noreferrer" class="">#11585</a></li>
<li class="">chore: remove unused BlueOak license allowance by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11762" target="_blank" rel="noopener noreferrer" class="">#11762</a></li>
<li class="">perf(vortex): remove per-file and per-segment allocations on the scan path by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11733" target="_blank" rel="noopener noreferrer" class="">#11733</a></li>
<li class="">fix(ci): use GraphQL API to check isLatest in spiced_docker workflow by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11735" target="_blank" rel="noopener noreferrer" class="">#11735</a></li>
<li class="">fix(release): use release notes heading as GitHub release title by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11744" target="_blank" rel="noopener noreferrer" class="">#11744</a></li>
<li class="">feat(chbench): headline run summary + adaptive slot-topology variants by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11734" target="_blank" rel="noopener noreferrer" class="">#11734</a></li>
<li class="">fix(ci): update e2e CLI tests for Windows-no-runtime and chat error wording by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11717" target="_blank" rel="noopener noreferrer" class="">#11717</a></li>
<li class="">build(rust): upgrade toolchain to 1.96.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11743" target="_blank" rel="noopener noreferrer" class="">#11743</a></li>
<li class="">fix(deps): enable reqwest "query" feature for isolated crate builds by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11760" target="_blank" rel="noopener noreferrer" class="">#11760</a></li>
<li class="">build: define clippy lints in [workspace.lints], opt in every crate by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11676" target="_blank" rel="noopener noreferrer" class="">#11676</a></li>
<li class="">refactor(runtime): parameterize table-provider unwrapping by inner-fn set by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11759" target="_blank" rel="noopener noreferrer" class="">#11759</a></li>
<li class="">fix(cayenne): retain source deletion index in scan memos to close ABA hazard (fixes #11303) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11739" target="_blank" rel="noopener noreferrer" class="">#11739</a></li>
<li class="">fix(mysql): refuse binlog resume across source layout drift by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11761" target="_blank" rel="noopener noreferrer" class="">#11761</a></li>
<li class="">perf: avoid unnecessary allocations on search hot paths by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11767" target="_blank" rel="noopener noreferrer" class="">#11767</a></li>
<li class="">feat(spidapter): support cluster_name for private nodegroup targeting by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11740" target="_blank" rel="noopener noreferrer" class="">#11740</a></li>
<li class="">feat(cayenne): finalize datalake (cold) tier v1 UX, credentials, and e2e integration test by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11731" target="_blank" rel="noopener noreferrer" class="">#11731</a></li>
<li class="">perf(vortex): push CAST(CASE ... END) filters into the Vortex scan by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11729" target="_blank" rel="noopener noreferrer" class="">#11729</a></li>
<li class="">docs: lead README with real-time analytics-node + CDC messaging (Spice 2.0) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11774" target="_blank" rel="noopener noreferrer" class="">#11774</a></li>
<li class="">chore(chbench): extend scheduled HTAP runs to 15m by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11773" target="_blank" rel="noopener noreferrer" class="">#11773</a></li>
<li class="">perf(cayenne): lazy NDV — compute on file spill, off the inline hot loop by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11741" target="_blank" rel="noopener noreferrer" class="">#11741</a></li>
<li class="">ci(rust): install 1.96.1 in workflows that pin the toolchain explicitly by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11769" target="_blank" rel="noopener noreferrer" class="">#11769</a></li>
<li class="">perf(cdc): deferred parsing — move Postgres CDC decode + build off the shared pump by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11732" target="_blank" rel="noopener noreferrer" class="">#11732</a></li>
<li class="">docs: correct sort-kernel SIMD note (AVX2, not AVX-512) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11771" target="_blank" rel="noopener noreferrer" class="">#11771</a></li>
<li class="">fix(cayenne): roll cold-tier files at cayenne_cold_target_file_size_mb by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11746" target="_blank" rel="noopener noreferrer" class="">#11746</a></li>
<li class="">docs(cayenne): move the Cayenne technical reference into the repo by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11775" target="_blank" rel="noopener noreferrer" class="">#11775</a></li>
<li class="">perf(cayenne): unify upsert PK-key hashing on prehashed XXH3-128 digests by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11736" target="_blank" rel="noopener noreferrer" class="">#11736</a></li>
<li class="">perf: avoid unnecessary allocations on query hot paths by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11768" target="_blank" rel="noopener noreferrer" class="">#11768</a></li>
<li class="">Extended schema inference for mysql by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11742" target="_blank" rel="noopener noreferrer" class="">#11742</a></li>
<li class="">chore(hash-index): add SBBF probe/insert baseline benchmark by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11770" target="_blank" rel="noopener noreferrer" class="">#11770</a></li>
<li class="">feat(cayenne): incremental datalake promotion, per-file PK blooms, physical GC by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11745" target="_blank" rel="noopener noreferrer" class="">#11745</a></li>
<li class="">test(cayenne): limit property-test concurrency by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11784" target="_blank" rel="noopener noreferrer" class="">#11784</a></li>
<li class="">perf(cdc): lock-free per-member ack slots + coalescing for shared Postgres replication by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11779" target="_blank" rel="noopener noreferrer" class="">#11779</a></li>
<li class="">perf(chbench): speed up MySQL and Postgres seed loading by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11782" target="_blank" rel="noopener noreferrer" class="">#11782</a></li>
<li class="">fix(ci): download MinIO client from public-data mirror by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11790" target="_blank" rel="noopener noreferrer" class="">#11790</a></li>
<li class="">ci: developer sign-off attestation gating the merge queue by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11776" target="_blank" rel="noopener noreferrer" class="">#11776</a></li>
<li class="">fix(tests): synchronize chat expect prompts correctly by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11802" target="_blank" rel="noopener noreferrer" class="">#11802</a></li>
<li class="">perf(chbench): default adaptive pod to 4-slot grouping + deep prefetch by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11799" target="_blank" rel="noopener noreferrer" class="">#11799</a></li>
<li class="">refactor(cli): replace open crate with in-tree system-open by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11791" target="_blank" rel="noopener noreferrer" class="">#11791</a></li>
<li class="">refactor(runtime): drop direct rustls-pemfile dependency by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11792" target="_blank" rel="noopener noreferrer" class="">#11792</a></li>
<li class="">Cache ListingTable file statistics to avoid per-query footer re-parse by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11793" target="_blank" rel="noopener noreferrer" class="">#11793</a></li>
<li class="">ci: inherit sign-off across clean base merges by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11804" target="_blank" rel="noopener noreferrer" class="">#11804</a></li>
<li class="">perf(cayenne): hash PK once and skip OwnedRow clone on present path by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11805" target="_blank" rel="noopener noreferrer" class="">#11805</a></li>
<li class="">fix(postgres catalog): register partitioned parent, not child partitions by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11798" target="_blank" rel="noopener noreferrer" class="">#11798</a></li>
<li class="">fix(postgres catalog): quote foreign-key target identifiers by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11796" target="_blank" rel="noopener noreferrer" class="">#11796</a></li>
<li class="">refactor(cayenne): rename remaining cold_* params to cayenne_datalake_* by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11795" target="_blank" rel="noopener noreferrer" class="">#11795</a></li>
<li class="">build: add release-profiling Cargo profile for CPU profiling by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11807" target="_blank" rel="noopener noreferrer" class="">#11807</a></li>
<li class="">fix(ci): make CH-benCH template restore robust to leftover replication slots by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11811" target="_blank" rel="noopener noreferrer" class="">#11811</a></li>
<li class="">perf(cayenne): remove eager-NDV escape hatch, speed up per-value NDV hashing by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11806" target="_blank" rel="noopener noreferrer" class="">#11806</a></li>
<li class="">Auto-refresh the Attestation check after signoff by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11815" target="_blank" rel="noopener noreferrer" class="">#11815</a></li>
<li class="">refactor(duckdb): remove partitioned DuckDB accelerator modes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11808" target="_blank" rel="noopener noreferrer" class="">#11808</a></li>
<li class="">feat(testoperator): add option to skip the HTAP analytic gate by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11810" target="_blank" rel="noopener noreferrer" class="">#11810</a></li>
<li class="">fix: prevent executor S3 region poisoning before object-store bind by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11766" target="_blank" rel="noopener noreferrer" class="">#11766</a></li>
<li class="">perf(cayenne): reuse per-batch scratch allocations in KeyBasedDeletionFilterStream by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11817" target="_blank" rel="noopener noreferrer" class="">#11817</a></li>
<li class="">Update openapi.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/11816" target="_blank" rel="noopener noreferrer" class="">#11816</a></li>
<li class="">build(deps): bump the github-actions-dependencies group across 2 directories with 5 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/11819" target="_blank" rel="noopener noreferrer" class="">#11819</a></li>
<li class="">fix(task_history): capture ExplainAnalyze metrics from the executed plan by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11794" target="_blank" rel="noopener noreferrer" class="">#11794</a></li>
<li class="">feat: generic spiced env-var passthrough for HTAP testoperator runs by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11824" target="_blank" rel="noopener noreferrer" class="">#11824</a></li>
<li class="">feat(cayenne): datalake tier hardening + row-capped PK-bloom-backed promotion by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11812" target="_blank" rel="noopener noreferrer" class="">#11812</a></li>
<li class="">chore: release finalization for v2.2.0 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11738" target="_blank" rel="noopener noreferrer" class="">#11738</a></li>
<li class="">feat(cayenne): add memory mode (mode: memory) — fully in-RAM accelerator by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11720" target="_blank" rel="noopener noreferrer" class="">#11720</a></li>
<li class="">Fix secrets in <code>.github/workflows/integration_models.yml</code>.  by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11781" target="_blank" rel="noopener noreferrer" class="">#11781</a></li>
<li class="">feat(runtime): add <code>runtime.query.timeout</code> parameter by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11822" target="_blank" rel="noopener noreferrer" class="">#11822</a></li>
<li class="">feat(cloud-connect): align proto to canonical, fix enrollment ordering, add TLS e2e by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11829" target="_blank" rel="noopener noreferrer" class="">#11829</a></li>
<li class="">docs(criteria): mark PostgreSQL Catalog Connector as Alpha by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11785" target="_blank" rel="noopener noreferrer" class="">#11785</a></li>
<li class="">test(cayenne): add regression tests for the mid-pass overwrite guard by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11844" target="_blank" rel="noopener noreferrer" class="">#11844</a></li>
<li class="">perf(cayenne): light delta encoding + higher CDC coalescing defaults by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11826" target="_blank" rel="noopener noreferrer" class="">#11826</a></li>
<li class="">ci: run Cayenne doc PDF build only on trunk merges by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11860" target="_blank" rel="noopener noreferrer" class="">#11860</a></li>
<li class="">fix(cayenne): drain staged Stage-B publishes before cold promotion; add cold-tier fuzz coverage by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11847" target="_blank" rel="noopener noreferrer" class="">#11847</a></li>
<li class="">feat(cayenne): atomic cross-partition append + delete/on-conflict atomicity by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11803" target="_blank" rel="noopener noreferrer" class="">#11803</a></li>
<li class="">feat(cayenne): min/max maintained aggregates + N&gt;1 CDC retract by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11862" target="_blank" rel="noopener noreferrer" class="">#11862</a></li>
<li class="">perf(chbench): CSV-based seed loading for MySQL and Postgres by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11843" target="_blank" rel="noopener noreferrer" class="">#11843</a></li>
<li class="">fix(tests): re-enable <code>prop_concurrent_cold_sqlite</code> cayenne cold-tier fuzz test by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11871" target="_blank" rel="noopener noreferrer" class="">#11871</a></li>
<li class="">fix(deps): replace yanked spin releases by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11878" target="_blank" rel="noopener noreferrer" class="">#11878</a></li>
<li class="">fix(cayenne): correct stale mem_checkpoint_lock comment by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11872" target="_blank" rel="noopener noreferrer" class="">#11872</a></li>
<li class="">Add run links to <code>testoperator_dispatch.yml</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11747" target="_blank" rel="noopener noreferrer" class="">#11747</a></li>
<li class="">Cayenne serializable transactions: gated writes, per-key OCC, multi-table, FlightSQL, durable write-back by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11870" target="_blank" rel="noopener noreferrer" class="">#11870</a></li>
<li class="">fix(cayenne): partitioned datasets deadlock against the global encode budget and never become ready by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11825" target="_blank" rel="noopener noreferrer" class="">#11825</a></li>
<li class="">test(runtime): re-runnable turso file cleanup + bump turso to 0.7.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11783" target="_blank" rel="noopener noreferrer" class="">#11783</a></li>
<li class="">Use liteparse for PDF document parsing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11522" target="_blank" rel="noopener noreferrer" class="">#11522</a></li>
<li class="">ci: add remote signoff workflow by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11864" target="_blank" rel="noopener noreferrer" class="">#11864</a></li>
<li class="">fix(cli): populate org in <code>spice cloud apps --output json</code> (fixes #11041) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11867" target="_blank" rel="noopener noreferrer" class="">#11867</a></li>
<li class="">fix(embeddings): restore params broken by #10853 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11788" target="_blank" rel="noopener noreferrer" class="">#11788</a></li>
<li class="">Move cargo advisory checks to scheduled workflow by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11879" target="_blank" rel="noopener noreferrer" class="">#11879</a></li>
<li class="">perf(cayenne): bound cold-promotion Z-order sort into streaming byte-capped runs by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11890" target="_blank" rel="noopener noreferrer" class="">#11890</a></li>
<li class="">fix(cayenne): write-back transaction atomicity — stage (not publish) and read mem-tier rows by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11889" target="_blank" rel="noopener noreferrer" class="">#11889</a></li>
<li class="">fix(runtime-table-partition): restore sound modulo inequality partition pruning by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11891" target="_blank" rel="noopener noreferrer" class="">#11891</a></li>
<li class="">Replace dotenvy with in-repo dotenv crate by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11894" target="_blank" rel="noopener noreferrer" class="">#11894</a></li>
<li class="">Remove unnecessary allocations from results-cache and hot conversion paths by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11895" target="_blank" rel="noopener noreferrer" class="">#11895</a></li>
<li class="">Increase ready_wait timeout for chbench sf1000 cold-tier configs by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11900" target="_blank" rel="noopener noreferrer" class="">#11900</a></li>
<li class="">fix(mysql): retry binlog checkpoint upsert on transient accelerator write lock by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11876" target="_blank" rel="noopener noreferrer" class="">#11876</a></li>
<li class="">fix(cayenne): gate freshness mem-tier shrink on apply backlog by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11893" target="_blank" rel="noopener noreferrer" class="">#11893</a></li>
<li class="">fix(postgres catalog): honor unsupported_type_action for catalog-discovered tables by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11875" target="_blank" rel="noopener noreferrer" class="">#11875</a></li>
<li class="">fix(postgres): make TPC-H/TPC-DS benchmark CI actually run at SF1/SF10/SF100 by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11883" target="_blank" rel="noopener noreferrer" class="">#11883</a></li>
<li class="">feat(search): writethrough compound <code>SearchIndex</code>/<code>VectorIndex</code> with optional fallback by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11892" target="_blank" rel="noopener noreferrer" class="">#11892</a></li>
<li class="">Revert "perf(cayenne): light delta encoding + higher CDC coalescing defaults" by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11910" target="_blank" rel="noopener noreferrer" class="">#11910</a></li>
<li class="">perf(vss): SIMD-accelerate cosine_distance via simsimd by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11748" target="_blank" rel="noopener noreferrer" class="">#11748</a></li>
<li class="">Add <code>run-name</code> to signoff.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11912" target="_blank" rel="noopener noreferrer" class="">#11912</a></li>
<li class="">fix(cayenne): serialize cold-tier mem-tier checkpoint by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11907" target="_blank" rel="noopener noreferrer" class="">#11907</a></li>
<li class="">fix(postgres catalog): discover materialized views and foreign tables by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11874" target="_blank" rel="noopener noreferrer" class="">#11874</a></li>
<li class="">test(chbench): stronger content fingerprint + MySQL sidecar template caching by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11901" target="_blank" rel="noopener noreferrer" class="">#11901</a></li>
<li class="">test(chbench): align money columns to canonical DECIMAL schema (CMU BenchBase) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11921" target="_blank" rel="noopener noreferrer" class="">#11921</a></li>
<li class="">fix(cayenne): close per-key OCC missed-conflict holes and fused-txn IVM staleness by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11916" target="_blank" rel="noopener noreferrer" class="">#11916</a></li>
<li class="">ci(attestation): fast-track pure reverts past developer sign-off by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11913" target="_blank" rel="noopener noreferrer" class="">#11913</a></li>
<li class="">fix(cloud-connect): accept the portal's 5-char adoption-code segments by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11926" target="_blank" rel="noopener noreferrer" class="">#11926</a></li>
<li class="">docs(layering): codify crate tiers + workspace layering guard by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11919" target="_blank" rel="noopener noreferrer" class="">#11919</a></li>
<li class="">refactor(cayenne): datalake tiering UX — param rename + tracing by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11920" target="_blank" rel="noopener noreferrer" class="">#11920</a></li>
<li class="">feat(params): typed component params via <code>#[derive(TypedParams)]</code> — embeddings pilot by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11809" target="_blank" rel="noopener noreferrer" class="">#11809</a></li>
<li class="">Fix SQlite <code>round</code> type error. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11927" target="_blank" rel="noopener noreferrer" class="">#11927</a></li>
<li class="">fix(signoff): let remote sign-off refresh the Attestation check in CI by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11929" target="_blank" rel="noopener noreferrer" class="">#11929</a></li>
<li class="">feat(testoperator): print rows around CH-benCH analytical-gate mismatches by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11923" target="_blank" rel="noopener noreferrer" class="">#11923</a></li>
<li class="">fix(postgres catalog): don't abort the whole catalog on one schema's discovery failure by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11873" target="_blank" rel="noopener noreferrer" class="">#11873</a></li>
<li class="">ci(signoff): target-lint changed crates before full local/remote gate by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11909" target="_blank" rel="noopener noreferrer" class="">#11909</a></li>
<li class="">feat(runtime)!: always-on schema inference; remove schema_inference config by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11880" target="_blank" rel="noopener noreferrer" class="">#11880</a></li>
<li class="">refactor(layering): extract ClickHouse into connector-clickhouse; add restricted_deps guard by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11931" target="_blank" rel="noopener noreferrer" class="">#11931</a></li>
<li class="">perf: remove unnecessary allocations on hot query, search, and metrics paths by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11918" target="_blank" rel="noopener noreferrer" class="">#11918</a></li>
<li class="">Release notes for v2.1.1 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11906" target="_blank" rel="noopener noreferrer" class="">#11906</a></li>
<li class="">refactor(layering): prepare DynamoDB for extraction from runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11935" target="_blank" rel="noopener noreferrer" class="">#11935</a></li>
<li class="">Coalesce Null  primary keys in RRF.  by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11519" target="_blank" rel="noopener noreferrer" class="">#11519</a></li>
<li class="">ci(e2e): strip ANSI before duckdb_append graceful-shutdown log whitelist by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11937" target="_blank" rel="noopener noreferrer" class="">#11937</a></li>
<li class="">feat(catalog): PostgreSQL catalog-level CDC acceleration (changes mode) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11897" target="_blank" rel="noopener noreferrer" class="">#11897</a></li>
<li class="">chbench(mysql): parallel analytical gate, decimal-comparison fix, and reseed/CI hardening by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11946" target="_blank" rel="noopener noreferrer" class="">#11946</a></li>
<li class="">fix: array_any_value panic when output is hash-repartitioned (empty list elements) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11952" target="_blank" rel="noopener noreferrer" class="">#11952</a></li>
<li class="">feat(layering): checkpoint sidecar as per-engine crates + DI the dynamodb connector by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11938" target="_blank" rel="noopener noreferrer" class="">#11938</a></li>
<li class="">chore(cluster): pin Ballista to upstream 54 merge tip by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11941" target="_blank" rel="noopener noreferrer" class="">#11941</a></li>
<li class="">feat(vortex): upgrade fork pins to Vortex 0.79.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11950" target="_blank" rel="noopener noreferrer" class="">#11950</a></li>
<li class="">chbench(htap): run mysql configs at the shared 9250 rate; 2x converge wait by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11956" target="_blank" rel="noopener noreferrer" class="">#11956</a></li>
<li class="">fix(testoperator): HTAP drain gate false-fails on stale probe observations — final snapshot decides convergence (fixes #11953) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11966" target="_blank" rel="noopener noreferrer" class="">#11966</a></li>
<li class="">feat(catalog): replica-identity-aware eligibility for PostgreSQL catalog CDC by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11951" target="_blank" rel="noopener noreferrer" class="">#11951</a></li>
<li class="">refactor(layering): extract DynamoDB into connector-dynamodb by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11960" target="_blank" rel="noopener noreferrer" class="">#11960</a></li>
<li class="">Add <code>MemoryVectorIndex</code>: in-memory external-store <code>VectorIndex</code> with brute-force exact k-NN by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11908" target="_blank" rel="noopener noreferrer" class="">#11908</a></li>
<li class="">ci(signoff): prefer lab SSH for remote sign-off; skip Rust when no .rs changes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11977" target="_blank" rel="noopener noreferrer" class="">#11977</a></li>
<li class="">Reapply #11826: light delta encoding + CDC coalescing (SF1000 convergence lever) — gated on #11943 + SF1000 fingerprint run by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11944" target="_blank" rel="noopener noreferrer" class="">#11944</a></li>
<li class="">docs: align component statuses with signed release criteria by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11970" target="_blank" rel="noopener noreferrer" class="">#11970</a></li>
<li class="">fix: Spidapter flight auth passthrough by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11976" target="_blank" rel="noopener noreferrer" class="">#11976</a></li>
<li class="">Unified CDC config by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11777" target="_blank" rel="noopener noreferrer" class="">#11777</a></li>
<li class="">feat(cdc): Debezium plugin push ingest to Spice without Kafka by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11955" target="_blank" rel="noopener noreferrer" class="">#11955</a></li>
<li class="">refactor(connectors): unify registration on the linkme slice; restore schema coverage by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11972" target="_blank" rel="noopener noreferrer" class="">#11972</a></li>
<li class="">GTID-based MySQL CDC by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11813" target="_blank" rel="noopener noreferrer" class="">#11813</a></li>
<li class="">test(mysql): ignore mysql_binlog_replication_end_to_end_cayenne by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11986" target="_blank" rel="noopener noreferrer" class="">#11986</a></li>
<li class="">fix(cayenne): support Decimal128 in maintained SUM/AVG aggregates (fixes #11933) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11979" target="_blank" rel="noopener noreferrer" class="">#11979</a></li>
<li class="">feat(params): typed params for VectorStore and FtsStore engines by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11954" target="_blank" rel="noopener noreferrer" class="">#11954</a></li>
<li class="">chore(layering): remove orphaned dead code from connector extractions by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11988" target="_blank" rel="noopener noreferrer" class="">#11988</a></li>
<li class="">feat(cayenne): default-on adaptive cold layout from observed filters (F4) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11973" target="_blank" rel="noopener noreferrer" class="">#11973</a></li>
<li class="">fix: Fairly allocate partitions from scheduler assignment cycle only by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11853" target="_blank" rel="noopener noreferrer" class="">#11853</a></li>
<li class="">fix(cli): avoid escaped ANSI version notification by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11996" target="_blank" rel="noopener noreferrer" class="">#11996</a></li>
<li class="">MySQL Shared binlog connection by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11814" target="_blank" rel="noopener noreferrer" class="">#11814</a></li>
<li class="">feat(catalog): fail-loud + metrics + by-kind reporting for PostgreSQL catalog CDC (#11850) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11983" target="_blank" rel="noopener noreferrer" class="">#11983</a></li>
<li class="">fix(cayenne): P1 audit — subset compact, SMJ 2.5× HT, mem-tier pool account by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11991" target="_blank" rel="noopener noreferrer" class="">#11991</a></li>
<li class="">Add OAuth2 client-credentials grant and configurable auth header to HTTP connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11981" target="_blank" rel="noopener noreferrer" class="">#11981</a></li>
<li class="">fix(telemetry): validate runtime.telemetry.metric_prefix against OTel name syntax by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12002" target="_blank" rel="noopener noreferrer" class="">#12002</a></li>
<li class="">fix(cayenne): purge CDC mem-tier on delete-all/TRUNCATE by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12009" target="_blank" rel="noopener noreferrer" class="">#12009</a></li>
<li class="">Update signoff.yml.  by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11998" target="_blank" rel="noopener noreferrer" class="">#11998</a></li>
<li class="">feat(dev): add <code>scripts/signoff mine</code> — attestation status across your open PRs by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11978" target="_blank" rel="noopener noreferrer" class="">#11978</a></li>
<li class="">refactor(layering): extract MongoDB provider into connector-mongodb by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11982" target="_blank" rel="noopener noreferrer" class="">#11982</a></li>
<li class="">perf: remove three unnecessary allocations on the query hot path by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12029" target="_blank" rel="noopener noreferrer" class="">#12029</a></li>
<li class="">refactor(layering): evacuate cosmosdb/graphql/github/sharepoint providers into their connector crates by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12024" target="_blank" rel="noopener noreferrer" class="">#12024</a></li>
<li class="">fix(mysql-cdc): detect source reset on GTID resume by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12023" target="_blank" rel="noopener noreferrer" class="">#12023</a></li>
<li class="">fix(smb): exclude final SESSION_SETUP response from preauth integrity hash (fixes #11148) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12003" target="_blank" rel="noopener noreferrer" class="">#12003</a></li>
<li class="">fix(postgres): validate pg_replication_slot names before CDC refresh by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12001" target="_blank" rel="noopener noreferrer" class="">#12001</a></li>
<li class="">fix(postgres): honor pg_connection_string for CDC (closes #11994) by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12000" target="_blank" rel="noopener noreferrer" class="">#12000</a></li>
<li class="">feat: Support OTLP Histogram ingest, unix nanos time by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11992" target="_blank" rel="noopener noreferrer" class="">#11992</a></li>
<li class="">feat(search): write-through warm + fallback compound index for FTS (#11886) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11971" target="_blank" rel="noopener noreferrer" class="">#11971</a></li>
<li class="">docs: PR-description and code-comment conventions by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12032" target="_blank" rel="noopener noreferrer" class="">#12032</a></li>
<li class="">refactor(postgres cdc): consolidate every dataset onto the shared pump by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12028" target="_blank" rel="noopener noreferrer" class="">#12028</a></li>
<li class="">feat(cloud-connect): Standalone instance adoption connection by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11980" target="_blank" rel="noopener noreferrer" class="">#11980</a></li>
<li class="">fix(cdc): don't force the durable path on zero-row readiness heartbeats (fixes #12007) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12030" target="_blank" rel="noopener noreferrer" class="">#12030</a></li>
<li class="">Upgrade DataFusion to 54.1.0 by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11974" target="_blank" rel="noopener noreferrer" class="">#11974</a></li>
<li class="">perf(github): parallelize serial fetches (commits + workflow logs) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12017" target="_blank" rel="noopener noreferrer" class="">#12017</a></li>
<li class="">refactor(layering): evacuate odbc/scylladb/imap/git providers into their connector crates by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11993" target="_blank" rel="noopener noreferrer" class="">#11993</a></li>
<li class="">refactor(layering): carve runtime-component out of runtime, break the ArcRuntime cycle by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12031" target="_blank" rel="noopener noreferrer" class="">#12031</a></li>
<li class="">feat(mssql): enable tiberius integrated-auth-gssapi for Kerberos integrated auth on Unix by <a href="https://github.com/v1gnesh" target="_blank" rel="noopener noreferrer" class="">@v1gnesh</a> in <a href="https://github.com/spiceai/spiceai/pull/11386" target="_blank" rel="noopener noreferrer" class="">#11386</a></li>
<li class="">build(deps): bump the aws-sdk group across 1 directory with 5 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/11821" target="_blank" rel="noopener noreferrer" class="">#11821</a></li>
<li class="">fix(cayenne): clear a committed CDC upsert's staging WAL at finalize (#12027) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12034" target="_blank" rel="noopener noreferrer" class="">#12034</a></li>
<li class="">feat(catalog): deterministic instance-independent replication slot + fail-loud + restart recovery (#11850) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12026" target="_blank" rel="noopener noreferrer" class="">#12026</a></li>
<li class="">Auto-cap DuckDB accelerator memory to prevent startup over-commit by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11985" target="_blank" rel="noopener noreferrer" class="">#11985</a></li>
<li class="">perf(refresh): speed up dataset refresh at startup by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12015" target="_blank" rel="noopener noreferrer" class="">#12015</a></li>
<li class="">fix(cayenne): don't create stray <code>file:</code> directory in memory mode (fixes #11922) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11940" target="_blank" rel="noopener noreferrer" class="">#11940</a></li>
<li class="">fix(aws): accept aws_session_token for temporary credentials (fixes #10932) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12041" target="_blank" rel="noopener noreferrer" class="">#12041</a></li>
<li class="">fix(mysql): verify an adopted layout against the event's own column types (fixes #11764) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12048" target="_blank" rel="noopener noreferrer" class="">#12048</a></li>
<li class="">fix(mysql): take the binlog rotate target from the ROTATE event, not its header offset (fixes #12042) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12044" target="_blank" rel="noopener noreferrer" class="">#12044</a></li>
<li class="">fix(search): check dataset readiness before embedding the query (fixes #10956) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12043" target="_blank" rel="noopener noreferrer" class="">#12043</a></li>
<li class="">fix(databricks): pin the authentication mode with databricks_auth_mode so an auto-loaded client secret can't switch U2M to M2M (fixes #11508) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12040" target="_blank" rel="noopener noreferrer" class="">#12040</a></li>
<li class="">fix(imap): narrow scans with IMAP SEARCH instead of refetching the mailbox (fixes #11548) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12039" target="_blank" rel="noopener noreferrer" class="">#12039</a></li>
<li class="">fix(cayenne): rank inference-derived sort columns below observed filter columns by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12049" target="_blank" rel="noopener noreferrer" class="">#12049</a></li>
<li class="">perf(cayenne): warm-subset compaction + mem-tier memory_limit honesty by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12035" target="_blank" rel="noopener noreferrer" class="">#12035</a></li>
<li class="">fix(cayenne): purge the mem-tier on delete-all for a table without a primary key (fixes #12072) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12073" target="_blank" rel="noopener noreferrer" class="">#12073</a></li>
<li class="">fix(accelerator): let an index declare a finalize failure fatal so a stale index can't report a successful refresh (fixes #12038) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12050" target="_blank" rel="noopener noreferrer" class="">#12050</a></li>
<li class="">fix(http): restore a join's embedded projection in HTTP subquery pushdown (fixes #11009) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12054" target="_blank" rel="noopener noreferrer" class="">#12054</a></li>
<li class="">fix(e2e): report a REPL that exits mid-script instead of passing the step (fixes #12057) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12059" target="_blank" rel="noopener noreferrer" class="">#12059</a></li>
<li class="">fix(imap): fetch the raw message only when a scan reads content (fixes #12045) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12060" target="_blank" rel="noopener noreferrer" class="">#12060</a></li>
<li class="">chore: Update Turso crate to 0.7.1 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12062" target="_blank" rel="noopener noreferrer" class="">#12062</a></li>
<li class="">feat(chbench): in-memory _bench_ts watermarks for the MySQL HTAP staleness probe by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12055" target="_blank" rel="noopener noreferrer" class="">#12055</a></li>
<li class="">test(chbench): default MySQL adaptive spicepods to one shared binlog dump by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12076" target="_blank" rel="noopener noreferrer" class="">#12076</a></li>
<li class="">feat(search): warm in-memory writethrough/fallback index for <code>.vectors</code> datasets and views by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11914" target="_blank" rel="noopener noreferrer" class="">#11914</a></li>
<li class="">fix(search): expunge superseded documents from full-text BM25 statistics (fixes #12053) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12056" target="_blank" rel="noopener noreferrer" class="">#12056</a></li>
<li class="">fix(write-back): gate durable write-back on a safe source delivery primitive (fixes #11915) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12051" target="_blank" rel="noopener noreferrer" class="">#12051</a></li>
<li class="">fix(cayenne): keep protected snapshots a position-delete rewrite never folded in (fixes #11477) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12052" target="_blank" rel="noopener noreferrer" class="">#12052</a></li>
<li class="">ci(signoff): fast-track Attestation for Dependabot and non-Rust PRs, and cut the local gate by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12081" target="_blank" rel="noopener noreferrer" class="">#12081</a></li>
<li class="">fix(search): reach a compound's inner full-text tier when a change stream attaches (fixes #12061) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12063" target="_blank" rel="noopener noreferrer" class="">#12063</a></li>
<li class="">fix(accelerator): report PK equality pushdown Inexact so a point lookup can't return the whole table (fixes #12070) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12071" target="_blank" rel="noopener noreferrer" class="">#12071</a></li>
<li class="">fix(github): paginate issues and pull_requests on an immutable sort key so a row touched mid-scan isn't dropped (fixes #12067) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12069" target="_blank" rel="noopener noreferrer" class="">#12069</a></li>
<li class="">fix(otel): scope reserved metric column names to the data-point shape (fixes #12064) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12065" target="_blank" rel="noopener noreferrer" class="">#12065</a></li>
<li class="">fix(cayenne): sample the subset compaction append fence before the listing it guards (fixes #12074) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12075" target="_blank" rel="noopener noreferrer" class="">#12075</a></li>
<li class="">fix(search): drop a search hit whose row is not in the base table (fixes #12089) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12094" target="_blank" rel="noopener noreferrer" class="">#12094</a></li>
<li class="">feat(datasets): mark non-accelerated datasets Error when their source is unavailable by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12079" target="_blank" rel="noopener noreferrer" class="">#12079</a></li>
<li class="">fix(models): restore spice.ai/spiceai as a model source by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12092" target="_blank" rel="noopener noreferrer" class="">#12092</a></li>
<li class="">fix(cayenne): bound the cold PK-index rebuild; build shard views in one pass by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12078" target="_blank" rel="noopener noreferrer" class="">#12078</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12077" target="_blank" rel="noopener noreferrer" class="">#12077</a></li>
<li class="">feat(catalog): view warnings, docs-linked messages, and clearer startup summary for PostgreSQL catalog CDC (#11850) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12022" target="_blank" rel="noopener noreferrer" class="">#12022</a></li>
<li class="">fix(postgres): log the cumulative delivery wait in the sink-stall warning by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12093" target="_blank" rel="noopener noreferrer" class="">#12093</a></li>
<li class="">refactor(cloud-connect): single-source the sealed-secret wire crypto in a shared crate by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/12124" target="_blank" rel="noopener noreferrer" class="">#12124</a></li>
<li class="">build(deps): bump quinn-proto from 0.11.14 to 0.11.16 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12037" target="_blank" rel="noopener noreferrer" class="">#12037</a></li>
<li class="">perf(cayenne): demand-driven scan-view cache with access-based freshness (alternative to #11948) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12005" target="_blank" rel="noopener noreferrer" class="">#12005</a></li>
<li class="">build: exclude libnfs from the nextest workspace run by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12131" target="_blank" rel="noopener noreferrer" class="">#12131</a></li>
<li class="">build(deps): bump the aws-sdk group across 1 directory with 3 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12068" target="_blank" rel="noopener noreferrer" class="">#12068</a></li>
<li class="">fix(search): keep CDC changes streams working when embeddings wrap a CDC source by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12086" target="_blank" rel="noopener noreferrer" class="">#12086</a></li>
<li class="">fix(cli): report a truncated release download as a failed download (fixes #12120) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12121" target="_blank" rel="noopener noreferrer" class="">#12121</a></li>
<li class="">fix(postgres): honor inline PEM pg_sslrootcert on the replication path by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12128" target="_blank" rel="noopener noreferrer" class="">#12128</a></li>
<li class="">refactor(layering): extract RuntimeStatus into a runtime-status crate by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12115" target="_blank" rel="noopener noreferrer" class="">#12115</a></li>
<li class="">fix(libnfs): model AUTH as an opaque type so its layout assertion holds by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12132" target="_blank" rel="noopener noreferrer" class="">#12132</a></li>
<li class="">feat(duckdb): <code>on_full_refresh: replace_file</code> — full refresh into a new database file, atomically replaced by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12135" target="_blank" rel="noopener noreferrer" class="">#12135</a></li>
<li class="">Add v2.1.2 release notes by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12146" target="_blank" rel="noopener noreferrer" class="">#12146</a></li>
<li class="">feat(duckdb): 'on_full_refresh: checkpoint_file' to bound acceleration file growth by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12139" target="_blank" rel="noopener noreferrer" class="">#12139</a></li>
<li class="">fix(lint): remove unused DuckDBTableWriter import in duckdb accelerator tests by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12158" target="_blank" rel="noopener noreferrer" class="">#12158</a></li>
<li class="">fix(duckdb): drop a file-replacement test assertion that can never hold by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12178" target="_blank" rel="noopener noreferrer" class="">#12178</a></li>
<li class="">fix(cayenne): Remove redundant  <code>EmptyExec</code> within <code>UnionExec</code> used by <code>CayenneTableProvider::scan</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12126" target="_blank" rel="noopener noreferrer" class="">#12126</a></li>
<li class="">build(deps): bump async-openai for aggregated rate-limit logging by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12149" target="_blank" rel="noopener noreferrer" class="">#12149</a></li>
<li class="">perf(mysql): fast row-image decoder for CDC change builds by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12122" target="_blank" rel="noopener noreferrer" class="">#12122</a></li>
<li class="">feat(catalog): pre-flight replication-slot-capacity check for PostgreSQL catalog CDC (#11850) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12114" target="_blank" rel="noopener noreferrer" class="">#12114</a></li>
<li class="">fix(oracle): map DATE to a timestamp so the time-of-day is not silently truncated (fixes #12096) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12097" target="_blank" rel="noopener noreferrer" class="">#12097</a></li>
<li class="">fix(search): skip the warm vector index when nothing hydrates it (fixes #12101) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12103" target="_blank" rel="noopener noreferrer" class="">#12103</a></li>
<li class="">refactor(layering): extract the DataAccelerator contract into data-accelerator-api by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12099" target="_blank" rel="noopener noreferrer" class="">#12099</a></li>
<li class="">fix(cli): surface the registry error behind a failed <code>spice add</code> instead of blaming the archive (fixes #12116) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12119" target="_blank" rel="noopener noreferrer" class="">#12119</a></li>
<li class="">fix(ci): gate Rust checks on the lint config the gate itself reads (fixes #12111) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12112" target="_blank" rel="noopener noreferrer" class="">#12112</a></li>
<li class="">fix: Ensure executors report table statistics for distributed plan ordering by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11854" target="_blank" rel="noopener noreferrer" class="">#11854</a></li>
<li class="">fix: <code>EMBED_UDF_NAME</code> without models feature by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12136" target="_blank" rel="noopener noreferrer" class="">#12136</a></li>
<li class="">fix(openai): <code>openai_responses_tools: web_search</code> uses <code>web_search</code>, not <code>web_search_preview</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12142" target="_blank" rel="noopener noreferrer" class="">#12142</a></li>
<li class="">fix(ci): cancel workflow runs left behind by superseded merge-queue batches (fixes #12170) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12177" target="_blank" rel="noopener noreferrer" class="">#12177</a></li>
<li class="">fix(runtime): return from a readiness wait when the runtime shuts down (fixes #12125) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12165" target="_blank" rel="noopener noreferrer" class="">#12165</a></li>
<li class="">perf(postgres): coalesce shared-slot CDC envelopes so a slow sink stops throttling the walsender by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12147" target="_blank" rel="noopener noreferrer" class="">#12147</a></li>
<li class="">fix(ci): make cargo_deny_advisories.yml parseable so the Rust advisory scan can run (fixes #12181) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12182" target="_blank" rel="noopener noreferrer" class="">#12182</a></li>
<li class="">fix(cluster): run GetTaskHistory under read-only SQL validation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12174" target="_blank" rel="noopener noreferrer" class="">#12174</a></li>
<li class="">fix(duckdb): count accelerated views in the coordinated memory budget (fixes #12123) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12161" target="_blank" rel="noopener noreferrer" class="">#12161</a></li>
<li class="">fix(ci): run the PR hygiene check on a GitHub-hosted runner by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12163" target="_blank" rel="noopener noreferrer" class="">#12163</a></li>
<li class="">fix(cayenne): warm PK existence caches at first write; bound keyset memory during bulk load by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12133" target="_blank" rel="noopener noreferrer" class="">#12133</a></li>
<li class="">ci: remote sign-off dispatches GitHub Actions only, never SSH to lab hosts by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12205" target="_blank" rel="noopener noreferrer" class="">#12205</a></li>
<li class="">Standalone instances: <code>spice connect</code> enroll-only split + connect surface by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12143" target="_blank" rel="noopener noreferrer" class="">#12143</a></li>
<li class="">fix(search): Fix ordering to correct <code>NDCG@k</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12191" target="_blank" rel="noopener noreferrer" class="">#12191</a></li>
<li class="">refactor(layering): carry component configuration into connectors and extract data-connector-api by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12157" target="_blank" rel="noopener noreferrer" class="">#12157</a></li>
<li class="">fix(logging): mute the candle embedding backend's GeLU notice below -vv by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12194" target="_blank" rel="noopener noreferrer" class="">#12194</a></li>
<li class="">test: redact connection context in federated explain snapshots by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11800" target="_blank" rel="noopener noreferrer" class="">#11800</a></li>
<li class="">Enable deletes for Index, SearchIndex, and VectorIndex by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11961" target="_blank" rel="noopener noreferrer" class="">#11961</a></li>
<li class="">feat(testoperator): trace probe latency breaches and percentiles under HTAP load by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12209" target="_blank" rel="noopener noreferrer" class="">#12209</a></li>
<li class="">Add v2.1.1 and 2.1.2 as supported in SECURITY.md by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12190" target="_blank" rel="noopener noreferrer" class="">#12190</a></li>
<li class="">fix(ci): seed the TPC-H Postgres benches from the fleet's dataset and schedule the catalog schema tests by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12214" target="_blank" rel="noopener noreferrer" class="">#12214</a></li>
<li class="">fix(cluster): restrict ExpandSecret to spicepod-referenced keys by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12156" target="_blank" rel="noopener noreferrer" class="">#12156</a></li>
<li class="">test: redact endpoint-URL compute contexts in federated explain snapshots by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12215" target="_blank" rel="noopener noreferrer" class="">#12215</a></li>
<li class="">fix(testoperator): a fully-censored table floors worst-P99 at the discard cap by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12196" target="_blank" rel="noopener noreferrer" class="">#12196</a></li>
<li class="">ci(e2e): tolerate any garbage type token in the duckdb_append parquet-rename race by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12207" target="_blank" rel="noopener noreferrer" class="">#12207</a></li>
<li class="">refactor(cloud-connect): update the proto contract for evolvability and versioning by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/12153" target="_blank" rel="noopener noreferrer" class="">#12153</a></li>
<li class="">chore(cloud-connect): use port 443 for gateway addresses in the doc example and test fixtures by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12252" target="_blank" rel="noopener noreferrer" class="">#12252</a></li>
<li class="">fix(ci): authenticate the management API integration suite with secrets that exist (fixes #12184) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12185" target="_blank" rel="noopener noreferrer" class="">#12185</a></li>
<li class="">feat(search): add Recall@k, MRR@k, and Precision@k retrieval metrics by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12193" target="_blank" rel="noopener noreferrer" class="">#12193</a></li>
<li class="">fix(search): enable stemming by default for full-text search by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12220" target="_blank" rel="noopener noreferrer" class="">#12220</a></li>
<li class="">fix: Report query metrics when task history is disabled by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12227" target="_blank" rel="noopener noreferrer" class="">#12227</a></li>
<li class="">fix(runtime): count accelerated views when gating the Cayenne compaction pool (fixes #12164) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12171" target="_blank" rel="noopener noreferrer" class="">#12171</a></li>
<li class="">fix(secrets): snapshot the store registry instead of holding its lock across awaits (fixes #12127) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12166" target="_blank" rel="noopener noreferrer" class="">#12166</a></li>
<li class="">fix(search): address Elasticsearch deletes by document _id (fixes #12267) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12273" target="_blank" rel="noopener noreferrer" class="">#12273</a></li>
<li class="">fix(postgres): deprecate pg_replication_temporary_slot, which could never work (fixes #12213) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12265" target="_blank" rel="noopener noreferrer" class="">#12265</a></li>
<li class="">fix(cayenne): always materialize a snapshot directory the catalog may reference (fixes #12208) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12262" target="_blank" rel="noopener noreferrer" class="">#12262</a></li>
<li class="">fix(duckdb): size the connection pool for accelerated views too (fixes #12160) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12169" target="_blank" rel="noopener noreferrer" class="">#12169</a></li>
<li class="">fix(ci): link brew formulas that are installed but unlinked in setup-cc by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12286" target="_blank" rel="noopener noreferrer" class="">#12286</a></li>
<li class="">fix(runtime): size memory budgets from the process's own cgroup limit by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12263" target="_blank" rel="noopener noreferrer" class="">#12263</a></li>
<li class="">Harden dataset availability checks against idle connection resets by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12180" target="_blank" rel="noopener noreferrer" class="">#12180</a></li>
<li class="">test(mysql): harden binlog CDC with dump-reconnect and full type-matrix coverage by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12264" target="_blank" rel="noopener noreferrer" class="">#12264</a></li>
<li class="">fix: send enc_pubkey_pem on /renew for standalone runtime by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12312" target="_blank" rel="noopener noreferrer" class="">#12312</a></li>
<li class="">Connection-scale client modes for testoperator throughput and load tests by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12280" target="_blank" rel="noopener noreferrer" class="">#12280</a></li>
<li class="">fix(search): remove all chunk documents when a chunked Elasticsearch index deletes a row (fixes #12088) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12268" target="_blank" rel="noopener noreferrer" class="">#12268</a></li>
<li class="">fix(duckdb): run spice_sys DuckDB sidecar writes on the blocking pool (fixes #12175) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12204" target="_blank" rel="noopener noreferrer" class="">#12204</a></li>
<li class="">fix(cayenne): the write-concurrency raise must respect the memory brake by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12317" target="_blank" rel="noopener noreferrer" class="">#12317</a></li>
<li class="">feat(runtime): expose the memory numbers that explain an OOM as gauges by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12195" target="_blank" rel="noopener noreferrer" class="">#12195</a></li>
<li class="">fix(flightsql): mark stamped statistics inexact when a LIMIT is pushed to the remote scan (fixes #12292) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12293" target="_blank" rel="noopener noreferrer" class="">#12293</a></li>
<li class="">fix(deps): bump wasmtime to 47.0.3 to clear RUSTSEC-2026-0222 (fixes #12295) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12298" target="_blank" rel="noopener noreferrer" class="">#12298</a></li>
<li class="">fix(telemetry): read the cgroup CPU quota along the whole cgroup path (fixes #12299) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12300" target="_blank" rel="noopener noreferrer" class="">#12300</a></li>
<li class="">refactor(layering): move the DataFusion helpers below runtime and derive the federation deny-list from a function registry by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12210" target="_blank" rel="noopener noreferrer" class="">#12210</a></li>
<li class="">fix(search): reject a persisted full-text index whose schema no longer matches the configuration (fixes #12274) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12275" target="_blank" rel="noopener noreferrer" class="">#12275</a></li>
<li class="">fix(spiced): keep dependency logging and chat progress alive when task history is off (fixes #12279) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12281" target="_blank" rel="noopener noreferrer" class="">#12281</a></li>
<li class="">fix(runtime): count a mid-stream response failure as a failure in the HTTP metrics (fixes #12284) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12291" target="_blank" rel="noopener noreferrer" class="">#12291</a></li>
<li class="">fix(cluster): mark a coordinator leaf scan's cached executor statistics inexact (fixes #12303) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12304" target="_blank" rel="noopener noreferrer" class="">#12304</a></li>
<li class="">fix(runtime): report a memory-pool refusal as ResourcesExhausted and answer it with 503 (fixes #12282) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12289" target="_blank" rel="noopener noreferrer" class="">#12289</a></li>
<li class="">fix(cayenne): enforce the sharded PK keyset byte budget; correct per-entry accounting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12192" target="_blank" rel="noopener noreferrer" class="">#12192</a></li>
<li class="">fix(runtime): carve the Cayenne compaction memory pool only when a dataset can compact into it (fixes #12320) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12326" target="_blank" rel="noopener noreferrer" class="">#12326</a></li>
<li class="">feat(spiced): report fatal signals before exit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12334" target="_blank" rel="noopener noreferrer" class="">#12334</a></li>
<li class="">bug: Filters on <code>_match</code> fail during planning by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12247" target="_blank" rel="noopener noreferrer" class="">#12247</a></li>
<li class="">bug: S3 metadata-filter conversion silently drops unconvertible AND/OR operands by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12248" target="_blank" rel="noopener noreferrer" class="">#12248</a></li>
<li class="">fix(ci): reject a failed sign-off on the head commit (fixes #12357) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12362" target="_blank" rel="noopener noreferrer" class="">#12362</a></li>
<li class="">ci: let signoff.yml sign off fork PRs by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12025" target="_blank" rel="noopener noreferrer" class="">#12025</a></li>
<li class="">fix(search): resolve an append stream through a vector scan (fixes #12313) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12314" target="_blank" rel="noopener noreferrer" class="">#12314</a></li>
<li class="">docs: Spice v2.1.3 release notes by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12378" target="_blank" rel="noopener noreferrer" class="">#12378</a></li>
<li class="">bug: <code>MemoryVectorIndex</code> leaves external-store entries on delete. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12246" target="_blank" rel="noopener noreferrer" class="">#12246</a></li>
<li class="">fix(cluster): keep the executor's cluster-service channel alive while idle (fixes #12301) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12302" target="_blank" rel="noopener noreferrer" class="">#12302</a></li>
<li class="">fix(https): reject OAuth2 params on structured HTTP file datasets (fixes #12315) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12321" target="_blank" rel="noopener noreferrer" class="">#12321</a></li>
<li class="">fix(scheduler): drive the interval-timing tests on a virtual clock (fixes #12323) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12329" target="_blank" rel="noopener noreferrer" class="">#12329</a></li>
<li class="">fix(ci): do not report a shutdown-cancelled sidecar task as a failure (fixes #12322) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12331" target="_blank" rel="noopener noreferrer" class="">#12331</a></li>
<li class="">fix(logging): let log colour follow the output sink (fixes #12327) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12335" target="_blank" rel="noopener noreferrer" class="">#12335</a></li>
<li class="">fix(cayenne): report the auto-tuned config once per resolution (fixes #12330) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12341" target="_blank" rel="noopener noreferrer" class="">#12341</a></li>
<li class="">chore: Update Turso crate to 0.7.2 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12344" target="_blank" rel="noopener noreferrer" class="">#12344</a></li>
<li class="">fix(runtime): stop retrying a dataset configuration failure that no retry can clear (fixes #12339) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12345" target="_blank" rel="noopener noreferrer" class="">#12345</a></li>
<li class="">build(deps): bump the github-actions-dependencies group across 3 directories with 9 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12359" target="_blank" rel="noopener noreferrer" class="">#12359</a></li>
<li class="">feat(llms): GLM 5.2 across 3+ nodes, context_length + paged_attention params, MXFP4 for DeepSeek-V4 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11990" target="_blank" rel="noopener noreferrer" class="">#11990</a></li>
<li class="">feat(runtime): size every CPU-derived pool from the CPU entitlement by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12276" target="_blank" rel="noopener noreferrer" class="">#12276</a></li>
<li class="">chore(ci): bump the spiceio setup action to v0.5.9 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12391" target="_blank" rel="noopener noreferrer" class="">#12391</a></li>
<li class="">feat(testoperator): serve /health and /v1/ready for the HTAP run by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12373" target="_blank" rel="noopener noreferrer" class="">#12373</a></li>
<li class="">feat(catalog): durable storage modes for PostgreSQL catalog CDC, and let the catalog own its accelerated tables by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12222" target="_blank" rel="noopener noreferrer" class="">#12222</a></li>
<li class="">fix(runtime): correctly classify a memory-pool refusal as ResourcesExhausted (fixes #12380) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12382" target="_blank" rel="noopener noreferrer" class="">#12382</a></li>
<li class="">fix(ci): budget the sign-off run below the pool's job wall (fixes #12340) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12343" target="_blank" rel="noopener noreferrer" class="">#12343</a></li>
<li class="">fix(bench): install make before the seeded-database check; surface catalog error causes by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12372" target="_blank" rel="noopener noreferrer" class="">#12372</a></li>
<li class="">Clean up SQLite sidecar files in cold bloom catalog test by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12404" target="_blank" rel="noopener noreferrer" class="">#12404</a></li>
<li class="">fix(ci): name an incoherent Cargo.lock before every cargo job fails on it (fixes #12375) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12423" target="_blank" rel="noopener noreferrer" class="">#12423</a></li>
<li class="">test(search): exercise the S3 Vectors warm-tier fallback path by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12197" target="_blank" rel="noopener noreferrer" class="">#12197</a></li>
<li class="">fix(ci): stop the spiced child E2E cleanup was leaking, scoped to this runner (fixes #12058) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12431" target="_blank" rel="noopener noreferrer" class="">#12431</a></li>
<li class="">perf(cayenne): give refresh_mode full its own write profile by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12338" target="_blank" rel="noopener noreferrer" class="">#12338</a></li>
<li class="">fix(ci): skip the Attestation refresh when the sign-off SHA is no longer the PR head (fixes #12360) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12433" target="_blank" rel="noopener noreferrer" class="">#12433</a></li>
<li class="">fix(monitoring): correct p99 queries in the Datadog dashboard by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12444" target="_blank" rel="noopener noreferrer" class="">#12444</a></li>
<li class="">fix(ci): tell an out-of-disk sign-off apart from a failing branch (fixes #12412) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12426" target="_blank" rel="noopener noreferrer" class="">#12426</a></li>
<li class="">feat(search): warm in-memory tier for chunked Elasticsearch vector columns by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12082" target="_blank" rel="noopener noreferrer" class="">#12082</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/12451" target="_blank" rel="noopener noreferrer" class="">#12451</a></li>
<li class="">fix(search): preserve field names with capitals and '.' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12389" target="_blank" rel="noopener noreferrer" class="">#12389</a></li>
<li class="">fix(ci): size the cayenne property-test timeout ceiling to its measured runtime (fixes #12336) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12438" target="_blank" rel="noopener noreferrer" class="">#12438</a></li>
<li class="">fix(models): pass the pinned revision to a HuggingFace embedding model (fixes #12430) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12446" target="_blank" rel="noopener noreferrer" class="">#12446</a></li>
<li class="">fix(ci): make the out-of-disk sign-off verdict survive being out of disk (fixes #12427) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12461" target="_blank" rel="noopener noreferrer" class="">#12461</a></li>
<li class="">fix(ci): stop Enforce Pulls with Spice racing itself, and let a Dependabot PR pass it (fixes #12377) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12466" target="_blank" rel="noopener noreferrer" class="">#12466</a></li>
<li class="">docs: update v2.1.3 release notes for the Iceberg timestamptz fix (trunk sync) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12459" target="_blank" rel="noopener noreferrer" class="">#12459</a></li>
<li class="">fix(ci): install protoc before building the spice CLI in the E2E CLI workflow by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12449" target="_blank" rel="noopener noreferrer" class="">#12449</a></li>
<li class="">fix(ci): reject an <code>if:</code> naming a context GitHub does not provide there (refs #12396) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12468" target="_blank" rel="noopener noreferrer" class="">#12468</a></li>
<li class="">fix(monitoring): align Datadog dashboard with OTel service instance identity by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12454" target="_blank" rel="noopener noreferrer" class="">#12454</a></li>
<li class="">chore(ci): bump the spiceio setup action to v0.5.10 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12490" target="_blank" rel="noopener noreferrer" class="">#12490</a></li>
<li class="">test(cayenne): query result correctness vs standalone engines and Spice accelerators by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12098" target="_blank" rel="noopener noreferrer" class="">#12098</a></li>
<li class="">fix(elasticsearch): keep the response body out of errors on the row-data request paths (fixes #12409) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12456" target="_blank" rel="noopener noreferrer" class="">#12456</a></li>
<li class="">fix(ci): key the sign-off concurrency group on the commit, not the dispatch input (fixes #12472) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12474" target="_blank" rel="noopener noreferrer" class="">#12474</a></li>
<li class="">perf(ci): run the workspace unit-test gate in one cargo invocation by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12437" target="_blank" rel="noopener noreferrer" class="">#12437</a></li>
<li class="">feat(monitoring): Runtime Resources observability on Grafana dashboard by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12441" target="_blank" rel="noopener noreferrer" class="">#12441</a></li>
<li class="">fix(ci): report cache health on the build failures it explains (refs #12420) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12471" target="_blank" rel="noopener noreferrer" class="">#12471</a></li>
<li class="">fix: resolve fixed-offset timezones when writing Vortex files by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12463" target="_blank" rel="noopener noreferrer" class="">#12463</a></li>
<li class="">fix(search): stop re-parsing a dotted index key as relation.column (fixes #12462) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12464" target="_blank" rel="noopener noreferrer" class="">#12464</a></li>
<li class="">fix(ci): build the ADBC BigQuery driver with the Go version its go.mod requires by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12470" target="_blank" rel="noopener noreferrer" class="">#12470</a></li>
<li class="">fix(llms): keep the Hugging Face cache token and harden the model E2E job by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12422" target="_blank" rel="noopener noreferrer" class="">#12422</a></li>
<li class="">fix(ci): stop a cancelled Remote Sign-off from claiming the checks failed (fixes #12424) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12425" target="_blank" rel="noopener noreferrer" class="">#12425</a></li>
<li class="">fix(runtime): fail the write when an index cannot prepare its write window (fixes #12421) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12448" target="_blank" rel="noopener noreferrer" class="">#12448</a></li>
<li class="">fix(runtime): stop retrying a permanent configuration failure on the catalog and dataset load paths (fixes #12417) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12443" target="_blank" rel="noopener noreferrer" class="">#12443</a></li>
<li class="">chore(ci): bump spiceio setup action to v0.6.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12522" target="_blank" rel="noopener noreferrer" class="">#12522</a></li>
<li class="">fix(ci): say what was unready when a spiced readiness wait times out (refs #12473) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12484" target="_blank" rel="noopener noreferrer" class="">#12484</a></li>
<li class="">feat(cayenne): drive incremental vacuum from the maintenance tick by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12435" target="_blank" rel="noopener noreferrer" class="">#12435</a></li>
<li class="">feat(ci): allow additional cargo features for spiceai-dev Docker builds by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/12198" target="_blank" rel="noopener noreferrer" class="">#12198</a></li>
<li class="">fix(cli): authenticate the SQL REPL's nql line like the session's SQL (fixes #12491) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12496" target="_blank" rel="noopener noreferrer" class="">#12496</a></li>
<li class="">fix(search): keep the row's primary key out of Elasticsearch bulk-index failures (fixes #12370) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12410" target="_blank" rel="noopener noreferrer" class="">#12410</a></li>
<li class="">fix(cpu-budget): state a low CPU request plainly, and only below half the cores by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12440" target="_blank" rel="noopener noreferrer" class="">#12440</a></li>
<li class="">fix(models): reject a pinned Model2Vec revision instead of 401ing on it (fixes #12445) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12475" target="_blank" rel="noopener noreferrer" class="">#12475</a></li>
<li class="">fix(cli): keep a login credential on the origin it was minted for (fixes #12505) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12508" target="_blank" rel="noopener noreferrer" class="">#12508</a></li>
<li class="">bug: S3 vector indexing succeeds when the embedding column is absent by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12249" target="_blank" rel="noopener noreferrer" class="">#12249</a></li>
<li class="">bug: S3 Vectors advertises unsupported metadata predicates as exact pushdown (fixes #12243) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12250" target="_blank" rel="noopener noreferrer" class="">#12250</a></li>
<li class="">fix(cli): treat a blank --api-key as no key at all (fixes #12498) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12501" target="_blank" rel="noopener noreferrer" class="">#12501</a></li>
<li class="">task: Add <code>#[derive(TypedParams)]</code> for secret stores. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12154" target="_blank" rel="noopener noreferrer" class="">#12154</a></li>
<li class="">fix(runtime): report a deferred dataset that cannot build its connector (fixes #12414) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12483" target="_blank" rel="noopener noreferrer" class="">#12483</a></li>
<li class="">fix(mysql): pre-flight CDC replication privileges with an actionable error (fixes #11967) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12485" target="_blank" rel="noopener noreferrer" class="">#12485</a></li>
<li class="">fix(testoperator): reject a client fleet the HTTP executors cannot bound (fixes #12348) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12349" target="_blank" rel="noopener noreferrer" class="">#12349</a></li>
<li class="">fix(ci): commit the catalog schema snapshot baselines and stop the daily PR churn by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12525" target="_blank" rel="noopener noreferrer" class="">#12525</a></li>
<li class="">refactor(runtime): describe every table-provider wrapper layer once in a layer table by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12200" target="_blank" rel="noopener noreferrer" class="">#12200</a></li>
<li class="">Add testoperator dispatch support for search benchmarks and replace benchmarks_search.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12224" target="_blank" rel="noopener noreferrer" class="">#12224</a></li>
<li class="">bug: RRF discards a candidate stream after an empty first batch (fixes #12239) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12384" target="_blank" rel="noopener noreferrer" class="">#12384</a></li>
<li class="">fix(cli): stop the SQL REPL asking a runtime its queries never went to (fixes #12493) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12494" target="_blank" rel="noopener noreferrer" class="">#12494</a></li>
<li class="">test(runtime): run the metrics tests that are built but never run by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12510" target="_blank" rel="noopener noreferrer" class="">#12510</a></li>
<li class="">fix(tests): assert the search cache status instead of wall-clock timings (fixes #12487) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12488" target="_blank" rel="noopener noreferrer" class="">#12488</a></li>
<li class="">fix(search): resolve a chunked index's entries from the authoritative store, not the read listing (fixes #12266) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12411" target="_blank" rel="noopener noreferrer" class="">#12411</a></li>
<li class="">fix(search): Improvements for search harness by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12226" target="_blank" rel="noopener noreferrer" class="">#12226</a></li>
<li class="">test(cayenne): cover the selective PK join and the inline/file tier boundary by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12517" target="_blank" rel="noopener noreferrer" class="">#12517</a></li>
<li class="">fix(runtime): surface the unknown-connector suggestion, and report it once (fixes #12415) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12469" target="_blank" rel="noopener noreferrer" class="">#12469</a></li>
<li class="">fix(ci): publish no sign-off verdict when the run was signalled (fixes #12518) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12544" target="_blank" rel="noopener noreferrer" class="">#12544</a></li>
<li class="">refactor(layering): move the modules the accelerated table shares below runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12219" target="_blank" rel="noopener noreferrer" class="">#12219</a></li>
<li class="">chore(ci): upgrade spiceio setup action to v0.7.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12611" target="_blank" rel="noopener noreferrer" class="">#12611</a></li>
<li class="">fix(runtime): keep the leading slash on an inferred local Iceberg warehouse root (fixes #12533) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12540" target="_blank" rel="noopener noreferrer" class="">#12540</a></li>
<li class="">fix(ci): let a cancelled sign-off correct only the failure it posted (fixes #12428) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12432" target="_blank" rel="noopener noreferrer" class="">#12432</a></li>
<li class="">fix(runtime): compare an append high-water mark inclusively on a day-granular time column (fixes #12492) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12500" target="_blank" rel="noopener noreferrer" class="">#12500</a></li>
<li class="">fix(runtime): report a dataset connector load failure once, not once per site (fixes #12365) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12526" target="_blank" rel="noopener noreferrer" class="">#12526</a></li>
<li class="">fix(workers): give the weighted-router test a noise margin it can survive (fixes #12537) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12538" target="_blank" rel="noopener noreferrer" class="">#12538</a></li>
<li class="">fix(runtime): reject a Hadoop table URL too short to name a namespace (fixes #12539) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12542" target="_blank" rel="noopener noreferrer" class="">#12542</a></li>
<li class="">fix(ci): probe a pinned Hugging Face revision at a URL the Hub has (fixes #12553) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12554" target="_blank" rel="noopener noreferrer" class="">#12554</a></li>
<li class="">feat(testoperator): pin the load phase to a target query rate by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12519" target="_blank" rel="noopener noreferrer" class="">#12519</a></li>
<li class="">fix(cli): follow only same-origin redirects, so the API key cannot leave the origin by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12503" target="_blank" rel="noopener noreferrer" class="">#12503</a></li>
<li class="">fix(ci): use spiceio and sccache for E2E macOS aarch64 builds by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12590" target="_blank" rel="noopener noreferrer" class="">#12590</a></li>
<li class="">perf(cdc): build a drained CDC burst with one blocking-pool handoff by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12514" target="_blank" rel="noopener noreferrer" class="">#12514</a></li>
<li class="">feat(cloud-connect): complete the spice connect surface — install, codeless connect, remove by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/12159" target="_blank" rel="noopener noreferrer" class="">#12159</a></li>
<li class="">fix(scripts): distinguish merge-queue PRs in signoff mine by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12383" target="_blank" rel="noopener noreferrer" class="">#12383</a></li>
<li class="">bug: HTTP RRF truncates each candidate leg before fusion by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12386" target="_blank" rel="noopener noreferrer" class="">#12386</a></li>
<li class="">fix(cayenne): pair the cold manifest with the warm snapshot a scan captured by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12577" target="_blank" rel="noopener noreferrer" class="">#12577</a></li>
<li class="">fix(deps): bump the Vortex pin and guard the task-cancellation regression by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12548" target="_blank" rel="noopener noreferrer" class="">#12548</a></li>
<li class="">chore(deps): bump datafusion and table-providers for the DuckDB timezone and retention fixes by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12545" target="_blank" rel="noopener noreferrer" class="">#12545</a></li>
<li class="">fix(cayenne): surface the real error for partitioned Cayenne writes by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12535" target="_blank" rel="noopener noreferrer" class="">#12535</a></li>
<li class="">fix(postgres): re-snapshot in-memory Cayenne on slot resume, and match the slot's lifetime to the accelerator's by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12221" target="_blank" rel="noopener noreferrer" class="">#12221</a></li>
<li class="">fix(cli): bound the Spice.ai login poll instead of retrying forever (fixes #12506) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12523" target="_blank" rel="noopener noreferrer" class="">#12523</a></li>
<li class="">fix(runtime): name a UTC timestamp column's zone in a spelling DuckDB knows (fixes #12528) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12534" target="_blank" rel="noopener noreferrer" class="">#12534</a></li>
<li class="">fix(mysql): raise net_write_timeout on the shared binlog dump session (fixes #12527) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12586" target="_blank" rel="noopener noreferrer" class="">#12586</a></li>
<li class="">fix(google-genai): read a Gemini SSE stream as bytes, so a split character survives (fixes #12597) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12601" target="_blank" rel="noopener noreferrer" class="">#12601</a></li>
<li class="">fix(mssql): follow an availability group's read-only routing redirect (fixes #11453) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12607" target="_blank" rel="noopener noreferrer" class="">#12607</a></li>
<li class="">test(cayenne): measure small-file fan-out against the seeded appends, not a listed count (fixes #12602) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12613" target="_blank" rel="noopener noreferrer" class="">#12613</a></li>
<li class="">fix(ci): keep the build cache's S3 endpoint out of the runtime under test (fixes #12624) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12626" target="_blank" rel="noopener noreferrer" class="">#12626</a></li>
<li class="">perf(ci): verify the CLI binary instead of building it again by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12486" target="_blank" rel="noopener noreferrer" class="">#12486</a></li>
<li class="">fix(postgres): publish a member's held CDC envelope before a bulk transaction (fixes #12311) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12408" target="_blank" rel="noopener noreferrer" class="">#12408</a></li>
<li class="">fix(cayenne): consolidate the two partition creators, fixing the accelerator's missing directory sync (fixes #12212) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12619" target="_blank" rel="noopener noreferrer" class="">#12619</a></li>
<li class="">fix(cayenne): run a backend-parameterized test on a stack its plan fits in (fixes #12436) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12561" target="_blank" rel="noopener noreferrer" class="">#12561</a></li>
<li class="">fix(ci): let only the merge queue pass Attestation without a sign-off (fixes #12679) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12681" target="_blank" rel="noopener noreferrer" class="">#12681</a></li>
<li class="">fix(ci): take the trusted sign-off helpers from the workflow's own commit (fixes #12657) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12662" target="_blank" rel="noopener noreferrer" class="">#12662</a></li>
<li class="">fix(ci): name the E2E jobs that did not succeed (fixes #12643) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12649" target="_blank" rel="noopener noreferrer" class="">#12649</a></li>
<li class="">fix(ci): give the openai model job a ceiling above its own setup (fixes #12644) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12650" target="_blank" rel="noopener noreferrer" class="">#12650</a></li>
<li class="">fix(ci): recognise the Flight bind wording so a foreign ready cannot pass (fixes #12642) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12648" target="_blank" rel="noopener noreferrer" class="">#12648</a></li>
<li class="">fix(ci): call an unreachable compiler cache infrastructure, not a failing branch (fixes #12556) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12557" target="_blank" rel="noopener noreferrer" class="">#12557</a></li>
<li class="">fix(search): clear a replacing index instead of keeping rows the source dropped (fixes #12066) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12564" target="_blank" rel="noopener noreferrer" class="">#12564</a></li>
<li class="">fix(ci): retry the sign-off status post, and say so when it never lands (fixes #12701) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12704" target="_blank" rel="noopener noreferrer" class="">#12704</a></li>
<li class="">build(deps): bump aws-smithy-runtime from 1.12.0 to 1.12.1 in the aws-sdk group across 1 directory by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12358" target="_blank" rel="noopener noreferrer" class="">#12358</a></li>
<li class="">task: Add <code>#[derive(TypedParams)]</code> for LLMs. (fixes #12150) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12155" target="_blank" rel="noopener noreferrer" class="">#12155</a></li>
<li class="">fix(ci): let a nightly's later test suites survive an earlier one's failure (fixes #12625) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12627" target="_blank" rel="noopener noreferrer" class="">#12627</a></li>
<li class="">fix(tests): wait for a partition to persist before snapshotting its plan (fixes #12645) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12652" target="_blank" rel="noopener noreferrer" class="">#12652</a></li>
<li class="">fix(object-store): bound an FTP and SFTP connection attempt end to end (fixes #12647) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12655" target="_blank" rel="noopener noreferrer" class="">#12655</a></li>
<li class="">test(iceberg): decide the Hadoop catalog test's backends by environment (fixes #12646) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12665" target="_blank" rel="noopener noreferrer" class="">#12665</a></li>
<li class="">fix(ci): give each E2E model job its own spiced ports (fixes #12419) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12685" target="_blank" rel="noopener noreferrer" class="">#12685</a></li>
<li class="">fix(cache): evict the Pingora cache down to max_size instead of only recording it (fixes #12688) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12694" target="_blank" rel="noopener noreferrer" class="">#12694</a></li>
<li class="">fix(cayenne): bound protected-snapshot compaction by the compaction memory pool by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12541" target="_blank" rel="noopener noreferrer" class="">#12541</a></li>
<li class="">fix(ci): leave an incomplete sign-off pending, not failed (fixes #12741) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12742" target="_blank" rel="noopener noreferrer" class="">#12742</a></li>
<li class="">fix(telemetry): resolve duration histograms below a millisecond (fixes #12693) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12699" target="_blank" rel="noopener noreferrer" class="">#12699</a></li>
<li class="">fix(ci): bound every E2E job, so a wedged build cannot hold the queue (fixes #12717) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12719" target="_blank" rel="noopener noreferrer" class="">#12719</a></li>
<li class="">feat(testoperator): add new search benchmark datasets by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12237" target="_blank" rel="noopener noreferrer" class="">#12237</a></li>
<li class="">test(cayenne): name the small-file compaction tests after the path they take (fixes #12612) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12740" target="_blank" rel="noopener noreferrer" class="">#12740</a></li>
<li class="">fix(cli): bound an inference call by silence, not by total duration (fixes #12583) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12589" target="_blank" rel="noopener noreferrer" class="">#12589</a></li>
<li class="">fix(turso): store and read back the same set of types (fixes #12628) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12633" target="_blank" rel="noopener noreferrer" class="">#12633</a></li>
<li class="">fix(catalogs): keep a Glue database whose tables the include patterns select (fixes #12630) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12638" target="_blank" rel="noopener noreferrer" class="">#12638</a></li>
<li class="">fix(catalogs): apply a catalog's exclude patterns, not just its include (fixes #12636) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12641" target="_blank" rel="noopener noreferrer" class="">#12641</a></li>
<li class="">fix(cayenne): build a carry-forward rewrite from the classified manifest rows (fixes #12708) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12711" target="_blank" rel="noopener noreferrer" class="">#12711</a></li>
<li class="">fix(runtime): subtract an append dedup window as a multiset, not a set (fixes #12499) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12513" target="_blank" rel="noopener noreferrer" class="">#12513</a></li>
<li class="">bug: FTS exec drops absent columns and violates its declared schema (fixes #12228) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12245" target="_blank" rel="noopener noreferrer" class="">#12245</a></li>
<li class="">bug: rrf() linear recency decay divides the document age by the decay window twice (fixes #12232) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12385" target="_blank" rel="noopener noreferrer" class="">#12385</a></li>
<li class="">chore(deps): bump datafusion rev to spiceai-54 with outer-join unparser fix by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12683" target="_blank" rel="noopener noreferrer" class="">#12683</a></li>
<li class="">fix(ci): recognise sccache's startup-timeout wording as an unusable cache (fixes #12622) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12788" target="_blank" rel="noopener noreferrer" class="">#12788</a></li>
<li class="">fix(spiced): open the log with the startup banner by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12615" target="_blank" rel="noopener noreferrer" class="">#12615</a></li>
<li class="">fix(metrics): resolve S3 Vectors latency below a hundred milliseconds (fixes #12698) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12702" target="_blank" rel="noopener noreferrer" class="">#12702</a></li>
<li class="">fix(google-genai): bound one unterminated SSE event so a stalled endpoint cannot grow spiced (fixes #12600) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12690" target="_blank" rel="noopener noreferrer" class="">#12690</a></li>
<li class="">feat(cpu-budget): size a burstable pod from its CPU request, with an all-cores opt-out by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12581" target="_blank" rel="noopener noreferrer" class="">#12581</a></li>
<li class="">fix(ci): refuse a sign-off the branch's Makefile cannot run (fixes #12813) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12815" target="_blank" rel="noopener noreferrer" class="">#12815</a></li>
<li class="">test(postgres): say which readiness wait timed out and what it saw (fixes #12730) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12731" target="_blank" rel="noopener noreferrer" class="">#12731</a></li>
<li class="">fix(mssql): bound one connection attempt, so a stalled peer cannot pin a pool slot (fixes #12606) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12733" target="_blank" rel="noopener noreferrer" class="">#12733</a></li>
<li class="">fix(ci): ask whether the disk watcher runs before make writes to it (fixes #12734) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12736" target="_blank" rel="noopener noreferrer" class="">#12736</a></li>
<li class="">fix: delete three source files that no crate root declares (fixes #12735) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12738" target="_blank" rel="noopener noreferrer" class="">#12738</a></li>
<li class="">fix(telemetry): keep a startup-recorded gauge on the operator meter, so it reaches /metrics (fixes #12667) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12754" target="_blank" rel="noopener noreferrer" class="">#12754</a></li>
<li class="">fix(cloud-connect): pin rustls where the release call presents its identity (fixes #12760) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12764" target="_blank" rel="noopener noreferrer" class="">#12764</a></li>
<li class="">test(cloud-client): assert the redirect policy by behaviour against a live server (fixes #12509) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12767" target="_blank" rel="noopener noreferrer" class="">#12767</a></li>
<li class="">fix(search): decline a warm vector tier the accelerator cannot refill (fixes #12102) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12768" target="_blank" rel="noopener noreferrer" class="">#12768</a></li>
<li class="">fix(ci): build without the compiler cache when it cannot be reached (fixes #12770) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12771" target="_blank" rel="noopener noreferrer" class="">#12771</a></li>
<li class="">fix(json): end an array element where serde did, so bare scalars read (fixes #12782) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12785" target="_blank" rel="noopener noreferrer" class="">#12785</a></li>
<li class="">fix(cache): count an invalidation as an eviction, and export the counters before one fires (fixes #12687) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12791" target="_blank" rel="noopener noreferrer" class="">#12791</a></li>
<li class="">fix(ci): ask whether the runner can hold the build before starting one (fixes #12798) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12799" target="_blank" rel="noopener noreferrer" class="">#12799</a></li>
<li class="">fix(ci): size the cayenne property-test ceiling above the pool, not at it (fixes #12811) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12814" target="_blank" rel="noopener noreferrer" class="">#12814</a></li>
<li class="">fix(ci): bound every merge-queue-required job with timeout-minutes by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12817" target="_blank" rel="noopener noreferrer" class="">#12817</a></li>
<li class="">deps: bump datafusion-table-providers to 894e279 (fixes #12585) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12663" target="_blank" rel="noopener noreferrer" class="">#12663</a></li>
<li class="">fix(ci): take stale build output off the runners, not just report a full one (fixes #12800) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12801" target="_blank" rel="noopener noreferrer" class="">#12801</a></li>
<li class="">fix(cayenne): give the Turso metastore sidecars one pool over cayenne.db (fixes #12727) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12804" target="_blank" rel="noopener noreferrer" class="">#12804</a></li>
<li class="">fix(deps): drop the unreferenced ctor dev-dependency from data_components (fixes #12664) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12819" target="_blank" rel="noopener noreferrer" class="">#12819</a></li>
<li class="">fix(ci): decline a verdict when the sign-off run itself was signalled (fixes #12710) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12724" target="_blank" rel="noopener noreferrer" class="">#12724</a></li>
<li class="">fix(postgres): hold a resuming shared slot's ack floor for tables with no member by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12676" target="_blank" rel="noopener noreferrer" class="">#12676</a></li>
<li class="">refactor(layering): split the table-provider layers out of runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12661" target="_blank" rel="noopener noreferrer" class="">#12661</a></li>
<li class="">build(deps): bump the github-actions-dependencies group across 3 directories with 7 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12842" target="_blank" rel="noopener noreferrer" class="">#12842</a></li>
<li class="">fix(spiced): make the crash handler more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12834" target="_blank" rel="noopener noreferrer" class="">#12834</a></li>
<li class="">fix(catalogs): apply the Cayenne catalog's include and exclude patterns (fixes #12766) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12833" target="_blank" rel="noopener noreferrer" class="">#12833</a></li>
<li class="">fix(search): decide a compound index's write fatality per half, not by OR (fixes #12826) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12828" target="_blank" rel="noopener noreferrer" class="">#12828</a></li>
<li class="">feat(cloud): organization context for spice cloud commands by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12515" target="_blank" rel="noopener noreferrer" class="">#12515</a></li>
<li class="">perf(postgres catalog): skip metadata queries for schemas no include pattern can reach by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12651" target="_blank" rel="noopener noreferrer" class="">#12651</a></li>
<li class="">bug: S3 vector metadata conversion silently drops filterable metadata (fixes #12240) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12387" target="_blank" rel="noopener noreferrer" class="">#12387</a></li>
<li class="">build(deps): bump nvidia/cuda from 13.3.0-cudnn-runtime-ubuntu24.04 to 13.3.1-cudnn-runtime-ubuntu24.04 in the docker-dependencies group by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/12356" target="_blank" rel="noopener noreferrer" class="">#12356</a></li>
<li class="">fix(runtime): keep serving when the working directory cannot be walked (fixes #6301) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12803" target="_blank" rel="noopener noreferrer" class="">#12803</a></li>
<li class="">fix(connectors): report an object-store timeout as a timeout, not as bad credentials (fixes #12793) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12797" target="_blank" rel="noopener noreferrer" class="">#12797</a></li>
<li class="">test(runtime): say which components were not ready when the wait times out (refs #12396) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12827" target="_blank" rel="noopener noreferrer" class="">#12827</a></li>
<li class="">fix(cayenne): measure tuner memory pressure as unreclaimable demand (fixes #12531) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12623" target="_blank" rel="noopener noreferrer" class="">#12623</a></li>
<li class="">Include v2.1.3 and 2.1.4 in SECURITY.md by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12497" target="_blank" rel="noopener noreferrer" class="">#12497</a></li>
<li class="">fix(search): leave the stored rows in place when a delete cannot be applied (fixes #12822) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12825" target="_blank" rel="noopener noreferrer" class="">#12825</a></li>
<li class="">fix(google-genai): resume the SSE scan where it stopped, not at the buffer start (fixes #12689) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12713" target="_blank" rel="noopener noreferrer" class="">#12713</a></li>
<li class="">fix(json): report a malformed JSON array element instead of dropping the rest of the file (fixes #12755) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12777" target="_blank" rel="noopener noreferrer" class="">#12777</a></li>
<li class="">fix(runtime): honour a declared type's precision instead of narrowing it (fixes #12756) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12774" target="_blank" rel="noopener noreferrer" class="">#12774</a></li>
<li class="">fix(cayenne): drop the partition-value guard that key encoding made unreachable (fixes #12616) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12753" target="_blank" rel="noopener noreferrer" class="">#12753</a></li>
<li class="">fix(runtime): pin the catalog-acceleration contract in both feature configurations (fixes #12743) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12752" target="_blank" rel="noopener noreferrer" class="">#12752</a></li>
<li class="">fix(cli): report an answer the model stopped early, instead of printing it as whole (fixes #12596) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12715" target="_blank" rel="noopener noreferrer" class="">#12715</a></li>
<li class="">fix(runtime): scope query jobs and active queries to the principal that submitted them by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12841" target="_blank" rel="noopener noreferrer" class="">#12841</a></li>
<li class="">Compute all <code>metrics@k</code> for all <code>0 &lt; k &lt;= n</code> during search quality metrics. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12521" target="_blank" rel="noopener noreferrer" class="">#12521</a></li>
<li class="">task: Add a <code>truncate</code> to huggingface and file embedding providers by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12620" target="_blank" rel="noopener noreferrer" class="">#12620</a></li>
<li class="">fix(cache): never serve a result whose tables changed after it read them by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12703" target="_blank" rel="noopener noreferrer" class="">#12703</a></li>
<li class="">test(cayenne): cover datalake-tier statistics, pruning, and promotion triggers by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12847" target="_blank" rel="noopener noreferrer" class="">#12847</a></li>
<li class="">docs(ci): warn that re-running enforce-pull-with-spice replays a stale payload (fixes #12809) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12810" target="_blank" rel="noopener noreferrer" class="">#12810</a></li>
<li class="">fix(cayenne): bound the maintained-aggregate index by memory budget, and let a stale registry recover by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12573" target="_blank" rel="noopener noreferrer" class="">#12573</a></li>
<li class="">fix(runtime): only initialize accelerators for the datasets a reload applies by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12872" target="_blank" rel="noopener noreferrer" class="">#12872</a></li>
<li class="">feat: promote BYOC and Cloud Connect changes to trunk by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12852" target="_blank" rel="noopener noreferrer" class="">#12852</a></li>
<li class="">fix(flight): resolve per-request settings from the live app by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12873" target="_blank" rel="noopener noreferrer" class="">#12873</a></li>
<li class="">fix(cli): keep polling when the token exchange has not seen the auth code yet by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12871" target="_blank" rel="noopener noreferrer" class="">#12871</a></li>
<li class="">feat(cayenne): inline a small whole-table refresh into the metastore by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12367" target="_blank" rel="noopener noreferrer" class="">#12367</a></li>
<li class="">ci: upgrade spiceio setup action to v0.8.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12885" target="_blank" rel="noopener noreferrer" class="">#12885</a></li>
<li class="">fix(runtime): measure the CDC prefetch backlog, and stop its byte counter wrapping by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12675" target="_blank" rel="noopener noreferrer" class="">#12675</a></li>
<li class="">fix(turso): keep a reloaded file-accelerated dataset queryable by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12882" target="_blank" rel="noopener noreferrer" class="">#12882</a></li>
<li class="">fix(query): preserve expression ordering across partition wrappers by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12854" target="_blank" rel="noopener noreferrer" class="">#12854</a></li>
<li class="">fix(runtime): report every start-time-only <code>runtime.*</code> section a reload changes by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12874" target="_blank" rel="noopener noreferrer" class="">#12874</a></li>
<li class="">fix(search): handle null embeddings in vector writes and JIT search by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12855" target="_blank" rel="noopener noreferrer" class="">#12855</a></li>
<li class="">test(embeddings): truncate over-length inputs in the MiniLM embed spicepods by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12856" target="_blank" rel="noopener noreferrer" class="">#12856</a></li>
<li class="">fix(search): Improve search benchmarking DX and fix some vector index names by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12892" target="_blank" rel="noopener noreferrer" class="">#12892</a></li>
<li class="">test(search): dispatch all MTEB search variants by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12850" target="_blank" rel="noopener noreferrer" class="">#12850</a></li>
<li class="">fix(runtime): stop a superseded scheduler incarnation from claiming the heartbeat key by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12851" target="_blank" rel="noopener noreferrer" class="">#12851</a></li>
<li class="">fix: Ensure OTel ingest materializes missing/null dimension columns by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/12087" target="_blank" rel="noopener noreferrer" class="">#12087</a></li>
<li class="">feat(cloud-connect): apply a component-only Spicepod deployment in place by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12895" target="_blank" rel="noopener noreferrer" class="">#12895</a></li>
<li class="">feat(cli): typed login sessions and explicit connect organization selection by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12912" target="_blank" rel="noopener noreferrer" class="">#12912</a></li>
<li class="">refactor: make each table wrapper a typed layer that answers where a walk goes by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12891" target="_blank" rel="noopener noreferrer" class="">#12891</a></li>
<li class="">feat(runtime): put every query's trace id on its log records by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12610" target="_blank" rel="noopener noreferrer" class="">#12610</a></li>
<li class="">feat(cayenne): bound the SUM of the per-table PK keyset caches by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12802" target="_blank" rel="noopener noreferrer" class="">#12802</a></li>
<li class="">fix(cache): read and expire a Pingora entry under one hold of its shard (fixes #12832) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12839" target="_blank" rel="noopener noreferrer" class="">#12839</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12707" target="_blank" rel="noopener noreferrer" class="">#12707</a></li>
<li class="">fix(runtime): invalidate localpod children's cached results on parent refresh by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12897" target="_blank" rel="noopener noreferrer" class="">#12897</a></li>
<li class="">fix(cayenne): use valid snapshot IDs for deferred appends by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12853" target="_blank" rel="noopener noreferrer" class="">#12853</a></li>
<li class="">fix(ci): New branch for each <code>push-snap-changes</code> (only affects integration_search.yml) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12684" target="_blank" rel="noopener noreferrer" class="">#12684</a></li>
<li class="">fix(search): make chunked embedding and offset columns nullable (#12778) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12783" target="_blank" rel="noopener noreferrer" class="">#12783</a></li>
<li class="">feat(cayenne): charge scan materialization to the query memory pool by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12759" target="_blank" rel="noopener noreferrer" class="">#12759</a></li>
<li class="">fix(cache): run the Pingora invalidation scan off the calling runtime worker (fixes #12806) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12808" target="_blank" rel="noopener noreferrer" class="">#12808</a></li>
<li class="">fix(cache): count the removals the Pingora engine performs itself (fixes #12792) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12830" target="_blank" rel="noopener noreferrer" class="">#12830</a></li>
<li class="">fix(cayenne): reserve append sequence for partitioned upsert appends (#12779) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12784" target="_blank" rel="noopener noreferrer" class="">#12784</a></li>
<li class="">test(cayenne): prove the keyset degrade releases each shard as it converts by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12790" target="_blank" rel="noopener noreferrer" class="">#12790</a></li>
<li class="">perf(postgres catalog): resolve a schema's table schemas in one query (#12106) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12886" target="_blank" rel="noopener noreferrer" class="">#12886</a></li>
<li class="">fix(vortex): expose segment cache metrics on scrape by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12944" target="_blank" rel="noopener noreferrer" class="">#12944</a></li>
<li class="">refactor: point connector imports at the crates that actually own them by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12925" target="_blank" rel="noopener noreferrer" class="">#12925</a></li>
<li class="">fix(postgres): rebuild the acceleration when a replication slot's history is gone by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12922" target="_blank" rel="noopener noreferrer" class="">#12922</a></li>
<li class="">fix(cayenne)!: only an explicit <code>cayenne_tuning: adaptive</code> enables the closed loop by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12949" target="_blank" rel="noopener noreferrer" class="">#12949</a></li>
<li class="">fix(dev-tools): show merge-queue and conflict state as labels in scripts/signoff mine by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12924" target="_blank" rel="noopener noreferrer" class="">#12924</a></li>
<li class="">test: cover warm-index delete paths across backends (#11964) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12635" target="_blank" rel="noopener noreferrer" class="">#12635</a></li>
<li class="">fix(cayenne): fractional proptest scaling + batch timestamp-partition test inserts by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12796" target="_blank" rel="noopener noreferrer" class="">#12796</a></li>
<li class="">Helpful tool to track what users/bots have got done lately by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12603" target="_blank" rel="noopener noreferrer" class="">#12603</a></li>
<li class="">Release notes housekeeping by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12977" target="_blank" rel="noopener noreferrer" class="">#12977</a></li>
<li class="">build(deps): bump serde_with from 3.20.0 to 3.21.0 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/11969" target="_blank" rel="noopener noreferrer" class="">#11969</a></li>
<li class="">refactor: make runtime's re-export shims crate-visible by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12969" target="_blank" rel="noopener noreferrer" class="">#12969</a></li>
<li class="">fix(runtime): surface OTel metric tables with duplicate columns, and count unsupported metric types as rejected by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/12923" target="_blank" rel="noopener noreferrer" class="">#12923</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/12979" target="_blank" rel="noopener noreferrer" class="">#12979</a></li>
<li class="">Make <code>signoff.yml</code> more searchable. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12392" target="_blank" rel="noopener noreferrer" class="">#12392</a></li>
<li class="">bug: Support search UDTFs in SQL function components by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12919" target="_blank" rel="noopener noreferrer" class="">#12919</a></li>
<li class="">docs: document the stacked-PR workflow, with a tested restack helper by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12951" target="_blank" rel="noopener noreferrer" class="">#12951</a></li>
<li class="">fix(llms): fall back to pytorch_model.bin for embeddings without safetensors by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12971" target="_blank" rel="noopener noreferrer" class="">#12971</a></li>
<li class="">feat(monitoring): improve the Datadog dashboard for multi-replica and Kubernetes deployments by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12972" target="_blank" rel="noopener noreferrer" class="">#12972</a></li>
<li class="">Charge the query memory pool for concurrent Vortex split decodes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12940" target="_blank" rel="noopener noreferrer" class="">#12940</a></li>
<li class="">docs(release-notes): write release notes in Simplified Technical English by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12947" target="_blank" rel="noopener noreferrer" class="">#12947</a></li>
<li class="">refactor: narrow the DataConnector trait off the runtime's types by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12993" target="_blank" rel="noopener noreferrer" class="">#12993</a></li>
<li class="">fix(cayenne): compact a DDL-created partition on an interval, not only on write (fixes #12617) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12757" target="_blank" rel="noopener noreferrer" class="">#12757</a></li>
<li class="">fix(cayenne): hand out a pooled Turso connection in autocommit (refs #12820) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12821" target="_blank" rel="noopener noreferrer" class="">#12821</a></li>
<li class="">fix: fail the lint gate on a source file no crate root declares (fixes #12737) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12744" target="_blank" rel="noopener noreferrer" class="">#12744</a></li>
<li class="">fix(search): stage a full refresh of the memory vector tier, so dropped rows leave it (refs #12413) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12823" target="_blank" rel="noopener noreferrer" class="">#12823</a></li>
<li class="">fix(graphql): keep the configured schema when a page has no rows (fixes #13004) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13016" target="_blank" rel="noopener noreferrer" class="">#13016</a></li>
<li class="">fix(runtime): register task_history before embeddings/rerankers load by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12978" target="_blank" rel="noopener noreferrer" class="">#12978</a></li>
<li class="">test(postgres): converge the catalog on source DDL, and warn when it selects nothing by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12988" target="_blank" rel="noopener noreferrer" class="">#12988</a></li>
<li class="">fix(cayenne): budget for catalogs in the Cayenne memory classification by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13027" target="_blank" rel="noopener noreferrer" class="">#13027</a></li>
<li class="">fix(cayenne): hold primary keys committed while the existence index is checked out by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13019" target="_blank" rel="noopener noreferrer" class="">#13019</a></li>
<li class="">feat(search): push SQL filters down into tantivy full-text search by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12812" target="_blank" rel="noopener noreferrer" class="">#12812</a></li>
<li class="">fix(cayenne): serve the maintained count Inexact while its delta is queued (fixes #12824) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12829" target="_blank" rel="noopener noreferrer" class="">#12829</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/13060" target="_blank" rel="noopener noreferrer" class="">#13060</a></li>
<li class="">fix(testoperator benchmarks): benchmark fixes by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13012" target="_blank" rel="noopener noreferrer" class="">#13012</a></li>
<li class="">fix(runtime): stop query_active_count drifting up when queries share a request (fixes #12883) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13034" target="_blank" rel="noopener noreferrer" class="">#13034</a></li>
<li class="">chore(deps): bump model2vec-rs for fast WordPiece tokenizer by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12986" target="_blank" rel="noopener noreferrer" class="">#12986</a></li>
<li class="">ci(cayenne-doc): render diagrams locally with mermaid-cli, and fix the diagram that has been failing the build for a month by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13063" target="_blank" rel="noopener noreferrer" class="">#13063</a></li>
<li class="">feat(monitoring): improve results cache panels on the Datadog dashboard by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13066" target="_blank" rel="noopener noreferrer" class="">#13066</a></li>
<li class="">feat(cayenne)!: one process-wide Vortex segment cache instead of a cache per table by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12983" target="_blank" rel="noopener noreferrer" class="">#12983</a></li>
<li class="">fix(connectors): keep the projected schema when a query returns no rows (fixes #13015) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13078" target="_blank" rel="noopener noreferrer" class="">#13078</a></li>
<li class="">fix(deps): bump the datafusion pin past the merged unparser fixes (fixes #12406) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13083" target="_blank" rel="noopener noreferrer" class="">#13083</a></li>
<li class="">fix(cache): compact a sliced result before caching it (fixes #12921) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13043" target="_blank" rel="noopener noreferrer" class="">#13043</a></li>
<li class="">refactor(cdc): give the sidecar checkpoint stores a below-runtime interface by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13045" target="_blank" rel="noopener noreferrer" class="">#13045</a></li>
<li class="">fix(cayenne): re-baseline the maintained row count when a promotion folds a delete tombstone (fixes #12846) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/12998" target="_blank" rel="noopener noreferrer" class="">#12998</a></li>
<li class="">fix(acceleration): stop an engine-required type rewrite reading as a stale acceleration schema (fixes #13014) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13074" target="_blank" rel="noopener noreferrer" class="">#13074</a></li>
<li class="">fix(udfs): return NULL for a vector distance that is not defined (refs #11263) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13091" target="_blank" rel="noopener noreferrer" class="">#13091</a></li>
<li class="">fix(cayenne): refuse a data directory that contains the metastore (fixes #13055) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13101" target="_blank" rel="noopener noreferrer" class="">#13101</a></li>
<li class="">fix(json): report content after a JSON array instead of dropping it (fixes #12786) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13097" target="_blank" rel="noopener noreferrer" class="">#13097</a></li>
<li class="">fix(runtime): bound the spicepod apply so an unloadable dataset cannot wedge it (fixes #12862) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13095" target="_blank" rel="noopener noreferrer" class="">#13095</a></li>
<li class="">fix(catalogs): apply the Glue catalog's exclude patterns (fixes #12634) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13103" target="_blank" rel="noopener noreferrer" class="">#13103</a></li>
<li class="">fix(metrics): make component metrics and tests more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13094" target="_blank" rel="noopener noreferrer" class="">#13094</a></li>
<li class="">feat(cache)!: ship the Pingora cache engine as an Enterprise-only feature by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13000" target="_blank" rel="noopener noreferrer" class="">#13000</a></li>
<li class="">fix: Update benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/13056" target="_blank" rel="noopener noreferrer" class="">#13056</a></li>
<li class="">fix(postgres): compare CDC positions against what the slot can stream, not what it retains by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12990" target="_blank" rel="noopener noreferrer" class="">#12990</a></li>
<li class="">docs(cayenne): compress the changelog, and give it a rule for what earns a row by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13067" target="_blank" rel="noopener noreferrer" class="">#13067</a></li>
<li class="">test: remove a test's container when it is done with it, including on failure by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13123" target="_blank" rel="noopener noreferrer" class="">#13123</a></li>
<li class="">fix(flight): record one metric sample per Flight RPC (fixes #12844) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13112" target="_blank" rel="noopener noreferrer" class="">#13112</a></li>
<li class="">feat(drasi): forward CDC changes and runtime tables to a Drasi source (Alpha) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12653" target="_blank" rel="noopener noreferrer" class="">#12653</a></li>
<li class="">fix(bench): time the engine instead of the results cache, and validate ClickBench by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13150" target="_blank" rel="noopener noreferrer" class="">#13150</a></li>
<li class="">refactor(connector): retype the DataConnector surface to DatasetSpec by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13096" target="_blank" rel="noopener noreferrer" class="">#13096</a></li>
<li class="">bug: SQL-tier function body does not support named arguments (=&gt;) for search UDTFs (fixes #12898) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12920" target="_blank" rel="noopener noreferrer" class="">#12920</a></li>
<li class="">fix(cache): compact the sliced and wide results that compaction previously skipped by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13176" target="_blank" rel="noopener noreferrer" class="">#13176</a></li>
<li class="">docs(stacked-prs): correct when a restack forfeits the sign-off by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13130" target="_blank" rel="noopener noreferrer" class="">#13130</a></li>
<li class="">fix(postgres): load a provably empty CDC acceleration through its snapshot bootstrap by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13175" target="_blank" rel="noopener noreferrer" class="">#13175</a></li>
<li class="">fix(cayenne): keep Arrow timestamp units (Vortex supports ns) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13180" target="_blank" rel="noopener noreferrer" class="">#13180</a></li>
<li class="">Cloud Connect: enrollment and identity foundation by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13181" target="_blank" rel="noopener noreferrer" class="">#13181</a></li>
<li class="">refactor(model): give the model-provider contracts a home below llms by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13201" target="_blank" rel="noopener noreferrer" class="">#13201</a></li>
<li class="">Fix runtime lint with zero features by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13208" target="_blank" rel="noopener noreferrer" class="">#13208</a></li>
<li class="">fix(benchmarks): BigQuery + Snowflake fixes + updated snapshots by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13136" target="_blank" rel="noopener noreferrer" class="">#13136</a></li>
<li class="">Revert "fix(search): decline a warm vector tier the accelerator cannot refill (fixes #12102)" (#12768) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13041" target="_blank" rel="noopener noreferrer" class="">#13041</a></li>
<li class="">fix(snapshots): don't bootstrap the snapshot file_create just discarded by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/13179" target="_blank" rel="noopener noreferrer" class="">#13179</a></li>
<li class="">Declare the CPU entitlement to Vortex at startup by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13173" target="_blank" rel="noopener noreferrer" class="">#13173</a></li>
<li class="">fix(mysql): fix net_write_timeout session syntax and extend transient replication errors by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/13178" target="_blank" rel="noopener noreferrer" class="">#13178</a></li>
<li class="">fix(postgres): classify EOF and server termination errors as transient in CDC replication by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/13163" target="_blank" rel="noopener noreferrer" class="">#13163</a></li>
<li class="">feat(testoperator): support customer-supplied datasets in run search by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12982" target="_blank" rel="noopener noreferrer" class="">#12982</a></li>
<li class="">Add PDF page splitter and FinanceBench staging job (#12858) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12984" target="_blank" rel="noopener noreferrer" class="">#12984</a></li>
<li class="">fix(cayenne): frame the persisted PK bloom with the probe function that filled it (fixes #13137) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13153" target="_blank" rel="noopener noreferrer" class="">#13153</a></li>
<li class="">refactor(layering): move the connectors below the runtime by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13166" target="_blank" rel="noopener noreferrer" class="">#13166</a></li>
<li class="">feat(cli): manage the Cloud Connect service with launchd on macOS by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13203" target="_blank" rel="noopener noreferrer" class="">#13203</a></li>
<li class="">Support local rerankers from <code>text-embeddings-inference</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12929" target="_blank" rel="noopener noreferrer" class="">#12929</a></li>
<li class="">fix(catalog): make the PostgreSQL catalog's errors and warnings actionable by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13199" target="_blank" rel="noopener noreferrer" class="">#13199</a></li>
<li class="">fix(cloud-connect): look again when a lock create reports the entry missing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13231" target="_blank" rel="noopener noreferrer" class="">#13231</a></li>
<li class="">Skip DynamoDB in scheduled benchmarks by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/13222" target="_blank" rel="noopener noreferrer" class="">#13222</a></li>
<li class="">Populate the file metadata cache with Vortex footers at write time by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13228" target="_blank" rel="noopener noreferrer" class="">#13228</a></li>
<li class="">perf(cayenne): give the PK filter a cache-line layout, and the bit count it asks for by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13219" target="_blank" rel="noopener noreferrer" class="">#13219</a></li>
<li class="">fix(mysql): rebuild a purged-position acceleration atomically instead of emptying it (fixes #12967) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13023" target="_blank" rel="noopener noreferrer" class="">#13023</a></li>
<li class="">fix(cloud-connect): heartbeat restart-required, attachment by app id, and this crate's integration tests in the gate by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13234" target="_blank" rel="noopener noreferrer" class="">#13234</a></li>
<li class="">fix(search): join all of a dataset's vector indexes on one VectorScanTableProvider by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13209" target="_blank" rel="noopener noreferrer" class="">#13209</a></li>
<li class="">Validate vector search parameters before SQL query by <a href="https://github.com/lesbass" target="_blank" rel="noopener noreferrer" class="">@lesbass</a> in <a href="https://github.com/spiceai/spiceai/pull/12253" target="_blank" rel="noopener noreferrer" class="">#12253</a></li>
<li class="">feat(helm): support customizing Deployment strategy and StatefulSet updateStrategy by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13249" target="_blank" rel="noopener noreferrer" class="">#13249</a></li>
<li class="">fix(postgres): recover from a replication slot lost while streaming, and state what each slot costs by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13221" target="_blank" rel="noopener noreferrer" class="">#13221</a></li>
<li class="">fix(cayenne): stop a partitioned acceleration reporting a schema change it never applied (fixes #12999) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13057" target="_blank" rel="noopener noreferrer" class="">#13057</a></li>
<li class="">feat(cloud-connect): name the local spicepod a cloud-managed instance serves or ignores by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13262" target="_blank" rel="noopener noreferrer" class="">#13262</a></li>
<li class="">fix(snowflake): keep NUMBER precision and scale during schema discovery by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13272" target="_blank" rel="noopener noreferrer" class="">#13272</a></li>
<li class="">fix(secrets): check secret references where the components resolve them by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/13265" target="_blank" rel="noopener noreferrer" class="">#13265</a></li>
<li class="">docs(criteria): sign off the PostgreSQL Catalog Connector at Beta by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13235" target="_blank" rel="noopener noreferrer" class="">#13235</a></li>
<li class="">fix(cloud-connect): resolve locked service state through the retained directory descriptor (fixes #13204) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/13292" target="_blank" rel="noopener noreferrer" class="">#13292</a></li>
<li class="">chore(deps): upgrade iceberg-rust to v0.10.0 by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13189" target="_blank" rel="noopener noreferrer" class="">#13189</a></li>
<li class="">fix(cloud-connect): fix Windows build of identity state-file helpers by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/13308" target="_blank" rel="noopener noreferrer" class="">#13308</a></li>
<li class="">fix(cayenne): normalize append de-duplication types by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/13200" target="_blank" rel="noopener noreferrer" class="">#13200</a></li>
<li class="">feat(cli): unify Spice Cloud enrollment and service workflows by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13326" target="_blank" rel="noopener noreferrer" class="">#13326</a></li>
<li class="">feat(postgres): native upsert delivery for durable write-back by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13323" target="_blank" rel="noopener noreferrer" class="">#13323</a></li>
<li class="">feat(cli): create an unattached Cloud Connect project by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/13333" target="_blank" rel="noopener noreferrer" class="">#13333</a></li>
<li class="">fix(cayenne): exclude protected snapshots above the delete fence from subset compaction by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13343" target="_blank" rel="noopener noreferrer" class="">#13343</a></li>
<li class="">fix(cli): resolve a Cloud Connect project's data-plane region from its config by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/13370" target="_blank" rel="noopener noreferrer" class="">#13370</a></li>
<li class="">fix(cli): keep a granted Spice Cloud login when the identity endpoint is silent by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/13376" target="_blank" rel="noopener noreferrer" class="">#13376</a></li>
<li class="">fix(duckdb): fix concurrent-query failures after a replace_file swap with multiple DuckDB files by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/13383" target="_blank" rel="noopener noreferrer" class="">#13383</a></li>
</ul>
<p>*<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.0...v2.2.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.0...v2.2.0</a></p>]]></content:encoded>
            <category>release</category>
            <category>CDC</category>
            <category>mysql</category>
            <category>PostgreSQL</category>
            <category>search</category>
            <category>BYOC</category>
            <category>Debezium Kafka</category>
            <category>Observability</category>
            <category>Dashboard</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.5 (Aug 12, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.5</link>
            <guid>https://spiceai.org/releases/v2.1.5</guid>
            <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.5 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.5 is now available! 🛠️</p>
<p>Spice v2.1.5 is a patch release focused on dependable cached data and predictable operation under load. Cached queries now reflect data changes more reliably, Cayenne workloads stay within configured memory limits, health checks remain responsive while cached results are updated, and cache dashboards provide a more complete view of activity.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v215">What's New in v2.1.5<a href="https://spiceai.org/releases/v2.1.5#whats-new-in-v215" class="hash-link" aria-label="Direct link to What's New in v2.1.5" title="Direct link to What's New in v2.1.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cached-queries-stay-fresh-as-data-changes">Cached Queries Stay Fresh as Data Changes<a href="https://spiceai.org/releases/v2.1.5#cached-queries-stay-fresh-as-data-changes" class="hash-link" aria-label="Direct link to Cached Queries Stay Fresh as Data Changes" title="Direct link to Cached Queries Stay Fresh as Data Changes" translate="no">​</a></h3>
<p>Cached results are now cleared reliably after refreshes, writes, retention changes, and updates to dependent local datasets. Expired entries are removed promptly, and entries for data that is no longer part of a Cayenne dataset are not reused by later queries.</p>
<p>These improvements prevent a completed data change from being followed by an older cached answer. No configuration changes are required.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="more-predictable-cayenne-behavior-under-heavy-load">More Predictable Cayenne Behavior Under Heavy Load<a href="https://spiceai.org/releases/v2.1.5#more-predictable-cayenne-behavior-under-heavy-load" class="hash-link" aria-label="Direct link to More Predictable Cayenne Behavior Under Heavy Load" title="Direct link to More Predictable Cayenne Behavior Under Heavy Load" translate="no">​</a></h3>
<p>Cayenne now keeps track of the memory needed to prepare query results, including when several parts of a query are prepared at once. Multiple accelerated tables also share available memory instead of each planning as though it were the only table in the deployment.</p>
<p>Large and concurrent workloads are therefore less likely to exhaust the available memory. When a query cannot fit within the configured limit, it fails cleanly instead of putting the entire service at risk. Operators can also limit how much work one dataset does at once when it needs a smaller memory footprint, without slowing every query.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="health-checks-remain-responsive-during-cache-updates">Health Checks Remain Responsive During Cache Updates<a href="https://spiceai.org/releases/v2.1.5#health-checks-remain-responsive-during-cache-updates" class="hash-link" aria-label="Direct link to Health Checks Remain Responsive During Cache Updates" title="Direct link to Health Checks Remain Responsive During Cache Updates" translate="no">​</a></h3>
<p>Refreshing or writing a dataset with many cached results no longer holds up Spice while it finds old answers that need to be cleared. Health checks and other requests can continue during this work, reducing avoidable service restarts under load.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="more-trustworthy-cache-dashboards">More Trustworthy Cache Dashboards<a href="https://spiceai.org/releases/v2.1.5#more-trustworthy-cache-dashboards" class="hash-link" aria-label="Direct link to More Trustworthy Cache Dashboards" title="Direct link to More Trustworthy Cache Dashboards" translate="no">​</a></h3>
<p>Cache dashboards now show total space, space in use, stored results, requests, and successful reuse whenever the dashboard is refreshed, including for new or lightly used datasets. Counts for expired results, automatic size cleanup, and cleanup after data changes are also reported consistently, so a zero value represents no activity rather than missing information.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.5#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.5#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.5#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.5#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.5, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.5</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.5</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.5</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.5#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.5#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix: arrow IndexedMemTable serves stale results after DML/retention/sync (fixes #11262) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11532" target="_blank" rel="noopener noreferrer" class="">#11532</a></li>
<li class="">fix(cache): evict the Pingora cache down to max_size instead of only recording it (fixes #12688) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12694" target="_blank" rel="noopener noreferrer" class="">#12694</a></li>
<li class="">fix(cache): count an invalidation as an eviction, and export the counters before one fires (fixes #12687) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12791" target="_blank" rel="noopener noreferrer" class="">#12791</a></li>
<li class="">fix(cache): never serve a result whose tables changed after it read them by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12703" target="_blank" rel="noopener noreferrer" class="">#12703</a></li>
<li class="">Remove unnecessary allocations from results-cache and hot conversion paths by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11895" target="_blank" rel="noopener noreferrer" class="">#11895</a></li>
<li class="">fix(cache): read and expire a Pingora entry under one hold of its shard (fixes #12832) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12839" target="_blank" rel="noopener noreferrer" class="">#12839</a></li>
<li class="">fix(runtime): invalidate localpod children's cached results on parent refresh by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/12897" target="_blank" rel="noopener noreferrer" class="">#12897</a></li>
<li class="">fix(cache): run the Pingora invalidation scan off the calling runtime worker (fixes #12806) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12808" target="_blank" rel="noopener noreferrer" class="">#12808</a></li>
<li class="">fix(cache): count the removals the Pingora engine performs itself (fixes #12792) by <a href="https://github.com/grokspice" target="_blank" rel="noopener noreferrer" class="">@grokspice</a> in <a href="https://github.com/spiceai/spiceai/pull/12830" target="_blank" rel="noopener noreferrer" class="">#12830</a></li>
<li class="">feat(cayenne): charge scan materialization to the query memory pool by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12759" target="_blank" rel="noopener noreferrer" class="">#12759</a></li>
<li class="">feat(cayenne): bound the SUM of the per-table PK keyset caches by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12802" target="_blank" rel="noopener noreferrer" class="">#12802</a></li>
<li class="">Charge the query memory pool for concurrent Vortex split decodes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12940" target="_blank" rel="noopener noreferrer" class="">#12940</a></li>
<li class="">fix(vortex): invalidate retired segment cache entries by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12943" target="_blank" rel="noopener noreferrer" class="">#12943</a></li>
<li class="">fix(vortex): expose segment cache metrics on scrape by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12944" target="_blank" rel="noopener noreferrer" class="">#12944</a></li>
</ul>
<p>*<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.4...v2.1.5" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.4...v2.1.5</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>caching</category>
            <category>Dashboard</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.4 (Aug 5, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.4</link>
            <guid>https://spiceai.org/releases/v2.1.4</guid>
            <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.4 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.4 is now available! 🛠️</p>
<p>Spice v2.1.4 is a patch release that improves DuckDB acceleration and runtime stability: datasets with UTC timestamp columns, such as Iceberg tables, now load successfully when accelerated with DuckDB, retention policies run reliably, and the runtime is more resilient under heavy query load.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v214">What's New in v2.1.4<a href="https://spiceai.org/releases/v2.1.4#whats-new-in-v214" class="hash-link" aria-label="Direct link to What's New in v2.1.4" title="Direct link to What's New in v2.1.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="duckdb-acceleration-works-with-iceberg-timestamps">DuckDB Acceleration Works with Iceberg Timestamps<a href="https://spiceai.org/releases/v2.1.4#duckdb-acceleration-works-with-iceberg-timestamps" class="hash-link" aria-label="Direct link to DuckDB Acceleration Works with Iceberg Timestamps" title="Direct link to DuckDB Acceleration Works with Iceberg Timestamps" translate="no">​</a></h3>
<p>A dataset with a UTC timestamp column — for example, any Iceberg <code>timestamptz</code> column — could previously fail to load when accelerated with DuckDB, leaving the dataset unhealthy and unqueryable. These datasets now load and become ready normally, with no configuration changes needed.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="reliable-retention-policies-on-duckdb">Reliable Retention Policies on DuckDB<a href="https://spiceai.org/releases/v2.1.4#reliable-retention-policies-on-duckdb" class="hash-link" aria-label="Direct link to Reliable Retention Policies on DuckDB" title="Direct link to Reliable Retention Policies on DuckDB" translate="no">​</a></h3>
<p>Retention policies now apply cleanly on DuckDB-accelerated datasets, including policies that combine a time window with an additional condition. Expired rows are evicted on every retention interval, keeping accelerated data fresh and storage bounded.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="improved-runtime-stability">Improved Runtime Stability<a href="https://spiceai.org/releases/v2.1.4#improved-runtime-stability" class="hash-link" aria-label="Direct link to Improved Runtime Stability" title="Direct link to Improved Runtime Stability" translate="no">​</a></h3>
<p>The runtime is now more robust when queries are cancelled — whether by a client disconnecting, a timeout, or a new refresh superseding an in-flight read. A rare crash in this path has been eliminated.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.4#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.4#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.4#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.4#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.4, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.4</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.4</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.4</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.4#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.4#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">chore(deps): bump datafusion and table-providers for the DuckDB timezone and retention fixes (2.1 backport) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12546" target="_blank" rel="noopener noreferrer" class="">#12546</a></li>
<li class="">fix(deps): bump the Vortex pin to pick up the task-cancellation fix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12547" target="_blank" rel="noopener noreferrer" class="">#12547</a></li>
</ul>
<p>*<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.3...v2.1.4" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.3...v2.1.4</a></p>]]></content:encoded>
            <category>release</category>
            <category>duckdb</category>
            <category>acceleration</category>
            <category>iceberg</category>
            <category>Stability</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.3 (Aug 4, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.3</link>
            <guid>https://spiceai.org/releases/v2.1.3</guid>
            <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.3 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.3 is now available! 🛠️</p>
<p>Spice v2.1.3 is a patch release focused on resource efficiency: explicit CPU sizing with the new <code>runtime.cpu.cores</code> setting, more query memory for Cayenne deployments, and improved memory and crash diagnostics. It also fixes Cayenne acceleration of Iceberg datasets with <code>timestamptz</code> columns and restores <code>WHERE</code> filters on federated <code>LEFT</code>/<code>RIGHT JOIN</code> queries.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v213">What's New in v2.1.3<a href="https://spiceai.org/releases/v2.1.3#whats-new-in-v213" class="hash-link" aria-label="Direct link to What's New in v2.1.3" title="Direct link to What's New in v2.1.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cpu-sizing-with-runtimecpucores">CPU Sizing with <code>runtime.cpu.cores</code><a href="https://spiceai.org/releases/v2.1.3#cpu-sizing-with-runtimecpucores" class="hash-link" aria-label="Direct link to cpu-sizing-with-runtimecpucores" title="Direct link to cpu-sizing-with-runtimecpucores" translate="no">​</a></h3>
<p>The new <code>runtime.cpu.cores</code> setting controls how many cores the runtime targets. Thread pools, query partitioning, and accelerator concurrency are all derived from it.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpu</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cores</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># `auto` (default) detects. Accepts 4, 3.5, 3500m</span><br></div></code></pre></div></div>
<p>Also available as <code>--cpu-cores</code> and <code>SPICE_CPU_CORES</code> (precedence: flag &gt; environment &gt; Spicepod).</p>
<p>This is most useful on large, shared nodes. A pod that sets <code>resources.requests.cpu</code> without a CPU limit exposes no cgroup quota, so the runtime sizes itself for every core on the node rather than its allocated share. Setting the entitlement aligns parallelism and memory footprint with the CPU the pod actually receives.</p>
<p>The effective value, its source, and the derived sizing are logged at startup and exported as the <code>spiced_cpu_budget_cores</code> gauge.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="more-query-memory-for-cayenne-deployments">More Query Memory for Cayenne Deployments<a href="https://spiceai.org/releases/v2.1.3#more-query-memory-for-cayenne-deployments" class="hash-link" aria-label="Direct link to More Query Memory for Cayenne Deployments" title="Direct link to More Query Memory for Cayenne Deployments" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> compaction memory pool is now reserved only for accelerations that can compact into it: file mode with a small-write refresh profile. Other deployments, including <code>refresh_mode: full</code>, keep the full memory limit available to queries — up to 6.4 GiB on a 32 GiB limit, with no configuration change.</p>
<p>Memory budgets are now derived from the process's own cgroup limit rather than total host memory.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="diagnostics">Diagnostics<a href="https://spiceai.org/releases/v2.1.3#diagnostics" class="hash-link" aria-label="Direct link to Diagnostics" title="Direct link to Diagnostics" translate="no">​</a></h3>
<p>Three new gauges report memory in use: <code>query_memory_pool_used_bytes</code>, <code>cayenne_compaction_memory_pool_used_bytes</code>, and <code>process_resident_memory_bytes</code>.</p>
<p>Memory pool refusals now return <code>ResourcesExhausted</code> and HTTP <code>503</code>, distinguishing them from query errors.</p>
<p>Fatal native signals (<code>SIGSEGV</code>, <code>SIGBUS</code>, <code>SIGILL</code>, <code>SIGFPE</code>) report the signal, faulting address, and thread before exit, so a crash can be diagnosed from logs.</p>
<p>Fixed a bug where setting <code>runtime.task_history.enabled: false</code> also disabled every query metric — <code>query_duration_ms</code>, <code>query_execution_duration_ms</code>, <code>query_executions</code>, <code>query_failures</code>, <code>query_returned_rows</code>, and <code>query_returned_bytes</code>. These are now reported regardless of the task history setting.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-acceleration-of-iceberg-timestamptz-columns">Cayenne Acceleration of Iceberg <code>timestamptz</code> Columns<a href="https://spiceai.org/releases/v2.1.3#cayenne-acceleration-of-iceberg-timestamptz-columns" class="hash-link" aria-label="Direct link to cayenne-acceleration-of-iceberg-timestamptz-columns" title="Direct link to cayenne-acceleration-of-iceberg-timestamptz-columns" translate="no">​</a></h3>
<p>Accelerating an Iceberg dataset with a <code>timestamptz</code> column using the <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> engine previously failed during the refresh write with an error resolving the time zone <code>+00:00</code>. Iceberg maps every <code>timestamptz</code> column to the fixed-offset Arrow time zone <code>+00:00</code>, which the file writer could not resolve when building column statistics. Fixed-offset time zones (<code>±HH:MM</code>, <code>±HHMM</code>, and <code>±HH</code>) are now resolved wherever time zones are handled, so these datasets accelerate correctly.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="federated-outer-join-filters">Federated Outer Join Filters<a href="https://spiceai.org/releases/v2.1.3#federated-outer-join-filters" class="hash-link" aria-label="Direct link to Federated Outer Join Filters" title="Direct link to Federated Outer Join Filters" translate="no">​</a></h3>
<p>A federated query combining a <code>LEFT JOIN</code> with a <code>WHERE</code> filter on the left table previously returned all rows instead of the filtered rows: when the query was pushed down to the data source or accelerator, the filter was folded into the <code>JOIN ON</code> clause, where it no longer filters the left side (<code>RIGHT JOIN</code> was affected symmetrically). Filters now stay on the side of the join they came from, so these queries return the correct rows.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.3#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.3#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.3#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.3#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.3, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.3</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.3</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.3</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.3#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.3#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">feat(runtime): size every CPU-derived pool from the CPU entitlement by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/12276" target="_blank" rel="noopener noreferrer" class="">#12276</a></li>
<li class="">fix(runtime): carve the Cayenne compaction memory pool only when a dataset can compact into it by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12326" target="_blank" rel="noopener noreferrer" class="">#12326</a></li>
<li class="">fix(runtime): size memory budgets from the process's own cgroup limit by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12263" target="_blank" rel="noopener noreferrer" class="">#12263</a></li>
<li class="">fix(telemetry): read the cgroup CPU quota along the whole cgroup path by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12300" target="_blank" rel="noopener noreferrer" class="">#12300</a></li>
<li class="">feat(runtime): expose the memory numbers that explain an OOM as gauges by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12195" target="_blank" rel="noopener noreferrer" class="">#12195</a></li>
<li class="">fix(runtime): report a memory-pool refusal as ResourcesExhausted and answer it with 503 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12289" target="_blank" rel="noopener noreferrer" class="">#12289</a></li>
<li class="">fix(cayenne): the write-concurrency raise must respect the memory brake by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12317" target="_blank" rel="noopener noreferrer" class="">#12317</a></li>
<li class="">feat(spiced): report fatal signals before exit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12334" target="_blank" rel="noopener noreferrer" class="">#12334</a></li>
<li class="">fix: report query metrics when task history is disabled by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12227" target="_blank" rel="noopener noreferrer" class="">#12227</a></li>
<li class="">chore(deps): repoint vortex at the 2.1 fixed-offset timezone fix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/12455" target="_blank" rel="noopener noreferrer" class="">#12455</a></li>
<li class="">chore(deps): bump datafusion rev for outer-join unparser fix by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/12460" target="_blank" rel="noopener noreferrer" class="">#12460</a></li>
</ul>
<p>*<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.2...v2.1.3" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.2...v2.1.3</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>acceleration</category>
            <category>iceberg</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.2 (Jul 28, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.2</link>
            <guid>https://spiceai.org/releases/v2.1.2</guid>
            <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.2 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.2 is now available! 🛠️</p>
<p>Spice v2.1.2 is a patch release focused on improving the DuckDB data accelerator. It upgrades the DuckDB engine to v1.5.5 and introduces the <code>on_full_refresh</code> parameter, giving file-mode DuckDB accelerations compact, predictable disk usage across repeated full refreshes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v212">What's New in v2.1.2<a href="https://spiceai.org/releases/v2.1.2#whats-new-in-v212" class="hash-link" aria-label="Direct link to What's New in v2.1.2" title="Direct link to What's New in v2.1.2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="bounded-duckdb-acceleration-file-growth-with-on_full_refresh">Bounded DuckDB Acceleration File Growth with <code>on_full_refresh</code><a href="https://spiceai.org/releases/v2.1.2#bounded-duckdb-acceleration-file-growth-with-on_full_refresh" class="hash-link" aria-label="Direct link to bounded-duckdb-acceleration-file-growth-with-on_full_refresh" title="Direct link to bounded-duckdb-acceleration-file-growth-with-on_full_refresh" translate="no">​</a></h3>
<p>File-mode <a href="https://spiceai.org/docs/components/data-accelerators/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB</a> accelerations using <code>refresh_mode: full</code> now reclaim disk space on every refresh, keeping the database file compact and disk usage predictable for long-running deployments. Each full refresh bulk-loads a fresh copy of the data, and the new <code>on_full_refresh</code> modes ensure the space held by prior copies is returned rather than accumulating in the file.</p>
<p>The new <code>on_full_refresh</code> acceleration parameter controls how disk space is reclaimed after each full refresh:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> file</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> full</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">duckdb_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /data/shared.duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">on_full_refresh</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> replace_file </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># default: reuse_file</span><br></div></code></pre></div></div>
<ul>
<li class=""><code>reuse_file</code> (default): Existing behavior — refresh into the existing database file.</li>
<li class=""><code>replace_file</code>: Each full refresh streams data into a fresh staging database file, carries over every other object sharing the file (other datasets' tables, views, indexes, and Spice metadata), checkpoints it, and atomically replaces the configured file. Queries are never interrupted — in-flight queries drain against the old file while new queries see the new file — and space is fully reclaimed on every refresh.</li>
<li class=""><code>checkpoint_file</code>: After each refresh, run a <code>CHECKPOINT</code> in place, escalating to <code>FORCE CHECKPOINT</code> when concurrent transactions block the plain attempt (waiting for in-flight transactions; never aborting them).</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="duckdb-155">DuckDB 1.5.5<a href="https://spiceai.org/releases/v2.1.2#duckdb-155" class="hash-link" aria-label="Direct link to DuckDB 1.5.5" title="Direct link to DuckDB 1.5.5" translate="no">​</a></h3>
<p>The DuckDB engine is upgraded from v1.5.3 to <a href="https://github.com/duckdb/duckdb/releases/tag/v1.5.5" target="_blank" rel="noopener noreferrer" class="">v1.5.5</a>, bringing the latest upstream stability fixes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.2#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.2#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.2#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.2#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.2, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.2</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.2</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.2</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.2#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.2#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">feat(duckdb): <code>on_full_refresh: replace_file</code> — full refresh into a new database file, atomically replaced by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/12135" target="_blank" rel="noopener noreferrer" class="">#12135</a></li>
<li class="">feat(duckdb): 'on_full_refresh: checkpoint_file' to bound acceleration file growth by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/12139" target="_blank" rel="noopener noreferrer" class="">#12139</a></li>
</ul>
<p>*<strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.1...v2.1.2" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.1...v2.1.2</a></p>]]></content:encoded>
            <category>release</category>
            <category>duckdb</category>
            <category>acceleration</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.1 (Jul 21, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.1</link>
            <guid>https://spiceai.org/releases/v2.1.1</guid>
            <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.1 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.1 is now available! 🛠️</p>
<p>Spice v2.1.1 is a patch release focused on reliability and performance. It resolves a possible deadlock that affected datasets with partitioned Cayenne accelerators, caches empty SQL result sets so repeat queries are served from cache, speeds up repeated queries on multi-file datasets, and restores Bedrock embedding provider parameters.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v211">What's New in v2.1.1<a href="https://spiceai.org/releases/v2.1.1#whats-new-in-v211" class="hash-link" aria-label="Direct link to What's New in v2.1.1" title="Direct link to What's New in v2.1.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-partitioned-dataset-deadlock-fix">Cayenne Partitioned Dataset Deadlock Fix<a href="https://spiceai.org/releases/v2.1.1#cayenne-partitioned-dataset-deadlock-fix" class="hash-link" aria-label="Direct link to Cayenne Partitioned Dataset Deadlock Fix" title="Direct link to Cayenne Partitioned Dataset Deadlock Fix" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> datasets configured with <code>partition_by</code> could deadlock during their initial refresh and never become ready. Non-partitioned tables and small partitioned tables were unaffected. The root cause was a deadlock between the partition routing and the global Vortex encode budget introduced in v2.1.0.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-zero-row-append-refresh-stability">Cayenne Zero-Row Append Refresh Stability<a href="https://spiceai.org/releases/v2.1.1#cayenne-zero-row-append-refresh-stability" class="hash-link" aria-label="Direct link to Cayenne Zero-Row Append Refresh Stability" title="Direct link to Cayenne Zero-Row Append Refresh Stability" translate="no">​</a></h3>
<p>An idle append refresh, one where no source rows are newer than the current <code>max(time_column)</code>, wrote no Vortex files, so the expected snapshot directory was never created. The subsequent <code>fsync</code> on that directory failed with <code>ENOENT</code>, marking the dataset unhealthy. The fix skips the snapshot sequence record and protected-snapshot publish when the write carried no rows.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="caching-of-empty-result-sets">Caching of Empty Result Sets<a href="https://spiceai.org/releases/v2.1.1#caching-of-empty-result-sets" class="hash-link" aria-label="Direct link to Caching of Empty Result Sets" title="Direct link to Caching of Empty Result Sets" translate="no">​</a></h3>
<p>The SQL results cache now stores empty (zero-row) result sets. Queries that legitimately return no rows (e.g. <code>WHERE 1=0</code>, <code>LIMIT 0</code>) are now served from the results cache on subsequent requests instead of being re-executed against the source, reducing planning and query latency for these patterns.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="faster-repeated-queries-on-multi-file-datasets">Faster Repeated Queries on Multi-File Datasets<a href="https://spiceai.org/releases/v2.1.1#faster-repeated-queries-on-multi-file-datasets" class="hash-link" aria-label="Direct link to Faster Repeated Queries on Multi-File Datasets" title="Direct link to Faster Repeated Queries on Multi-File Datasets" translate="no">​</a></h3>
<p>Object store datasets using parquet now cache Parquet footer statistics across queries. This reduces the frequency of Parquet footer parsing during planning, subsequently heavily reducing planning latency for certain query patterns (e.g. <code>COUNT(*)</code>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="embedding-parameter-regression-fixes">Embedding Parameter Regression Fixes<a href="https://spiceai.org/releases/v2.1.1#embedding-parameter-regression-fixes" class="hash-link" aria-label="Direct link to Embedding Parameter Regression Fixes" title="Direct link to Embedding Parameter Regression Fixes" translate="no">​</a></h3>
<p>v2.1.0 introduced explicit definitions across embedding component parameters (i.e. <code>.embeddings[].params</code>). This introduced regressions for AWS Bedrock parameters <code>truncation</code> and <code>truncation_mode</code> that caused panics.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.1#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.1#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.1#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.1#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.1, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.1</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.1</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.1</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.1#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(cache): cache empty (zero-row) SQL result sets by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11699" target="_blank" rel="noopener noreferrer" class="">#11699</a></li>
<li class="">fix(cayenne): zero-row append refresh fails with "No such file or directory" by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11710" target="_blank" rel="noopener noreferrer" class="">#11710</a></li>
<li class="">feat(file): cache <code>ListingTable</code> file statistics to avoid per-query footer re-parse by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11793" target="_blank" rel="noopener noreferrer" class="">#11793</a></li>
<li class="">fix(embeddings): restore params broken by #10853 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11788" target="_blank" rel="noopener noreferrer" class="">#11788</a></li>
<li class="">fix(cayenne): partitioned datasets deadlock against the global encode budget and never become ready by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11825" target="_blank" rel="noopener noreferrer" class="">#11825</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.1.0...v2.1.1" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.1.0...v2.1.1</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>caching</category>
            <category>embeddings</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.1.0 (Jul 9, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.1.0</link>
            <guid>https://spiceai.org/releases/v2.1.0</guid>
            <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.1.0 is now available! 🎉]]></description>
            <content:encoded><![CDATA[<p>Spice v2.1.0 is now available! 🎉</p>
<p>Spice v2.1.0 is the next minor release of Spice, headlined by <strong>high-throughput Cayenne CDC</strong>, scaling and resilience improvements to <strong>PostgreSQL logical replication</strong>, expanded <strong>distributed query</strong> with Iceberg catalog scans and broadcast joins, and the upgrade to <strong>DataFusion v54</strong> (including v53), Arrow v58.3, and Vortex v0.74. The release also adds experimental adaptive self-tuning for the Cayenne accelerator, distributed GLM inference, and a range of security, search, and connector improvements.</p>
<p>Highlights in v2.1.0 include:</p>
<ul>
<li class=""><strong><a href="https://spiceai.org/releases/v2.1.0#high-throughput-cayenne-cdc" class="">High-Throughput Cayenne CDC</a></strong> — in-memory CDC tier, dedicated compaction runtime, and write-path optimizations that cut replication lag on high-volume CDC workloads</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.1.0#change-data-capture--htap" class="">PostgreSQL Replication at Scale</a></strong> — multiple <code>changes</code>-mode datasets share a single replication slot, unchanged-TOAST recovery, and resilient reconnects across rolling deploys</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.1.0#distributed-query" class="">Distributed Query</a></strong> — distributed Ballista scans of Iceberg catalog tables, broadcast joins for small dimension tables, and shared scheduler job state with failover</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.1.0#performance--query-engine" class="">DataFusion v54</a></strong> — upgrade to DataFusion v54 (folding in v53), Arrow v58.3, and Vortex v0.74, bringing faster joins, scans, and planning</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.1.0#adaptive-self-tuning-experimental" class="">Adaptive Self-Tuning (Experimental)</a></strong> — opt-in closed-loop tuning and maintained aggregates that adapt Cayenne to hardware, schema, and live workload</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v210">What's New in v2.1.0<a href="https://spiceai.org/releases/v2.1.0#whats-new-in-v210" class="hash-link" aria-label="Direct link to What's New in v2.1.0" title="Direct link to What's New in v2.1.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="high-throughput-cayenne-cdc">High-Throughput Cayenne CDC<a href="https://spiceai.org/releases/v2.1.0#high-throughput-cayenne-cdc" class="hash-link" aria-label="Direct link to High-Throughput Cayenne CDC" title="Direct link to High-Throughput Cayenne CDC" translate="no">​</a></h3>
<p>A major focus of v2.1 is <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Spice Cayenne</a> write-path throughput for change-data-capture (HTAP) workloads:</p>
<ul>
<li class=""><strong>In-Memory CDC Tier</strong>: A new in-memory CDC tier and follow-ups cut replication lag on hot upsert tables, with bounded mem-tier checkpointing and O(1) per-scan deletion views, plus a two-phase off-fence checkpoint on the ingest path.</li>
<li class=""><strong>Dedicated Compaction Runtime</strong>: A dedicated compaction runtime with CDC pipelining and protected snapshots isolates compaction from query and ingest paths, with parallelized deletion-vector writes, per-batch directory-barrier coalescing, and size-aware parallel encode for protected-snapshot compaction.</li>
<li class=""><strong>Incremental Protected Snapshot Compaction</strong>: Incremental compaction of protected snapshots (used in Cayenne's merge-on-read deletion index) reduces disk usage and improves query performance.</li>
<li class=""><strong>Smaller WAL &amp; Metadata-Only Publish</strong>: <code>cayenne_insert_record</code> table IDs are stored as 16-byte raw-UUID BLOBs, cutting CDC WAL volume ~34%; upsert commits publish metadata-only, dropping per-key insert records; transient staged CDC deltas are light-encoded.</li>
<li class=""><strong>Delta-Write Encoding Levels</strong>: A new <code>cayenne_delta_encoding</code> setting (default <code>auto</code>) selects delta-write encoding, and <code>cayenne_compression_strategy: zstd</code> is now fully wired.</li>
<li class=""><strong>In-Memory CDC Sharding</strong>: PK-hash intra-apply sharding parallelizes in-memory CDC apply.</li>
<li class=""><strong>Scan Safety Under Write</strong>: In-flight scans are ref-counted so snapshot GC can't delete Vortex files mid-read; in-RAM scan parallelism, query admission control, and sound scan output ordering improve read behavior under sustained CDC.</li>
</ul>
<p>Delta-write encoding effort and Vortex compression are tunable per accelerator. <code>cayenne_delta_encoding: auto</code> (the default) size-gates fresh CDC/append writes — small deltas use a light scheme and are re-encoded during compaction — or pin an explicit level <code>0..10</code> (<code>7</code> is the full default cascade); <code>cayenne_compression_strategy</code> selects the Vortex compression:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> cayenne</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cayenne_delta_encoding</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 'auto' (default), or pin a level 0..10 (7 = full cascade)</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cayenne_compression_strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> zstd </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 'btrblocks' (default) or 'zstd'</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="change-data-capture--htap">Change Data Capture &amp; HTAP<a href="https://spiceai.org/releases/v2.1.0#change-data-capture--htap" class="hash-link" aria-label="Direct link to Change Data Capture &amp; HTAP" title="Direct link to Change Data Capture &amp; HTAP" translate="no">​</a></h3>
<p>PostgreSQL logical replication (CDC, <code>refresh_mode: changes</code>, <a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">introduced in v2.0</a>) gets significant scaling and resilience work in v2.1:</p>
<ul>
<li class=""><strong>Shared Replication Slot</strong>: Multiple <code>refresh_mode: changes</code> <a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> datasets on the same connection can name the same <code>pg_replication_slot</code> to share a single replication slot, walsender decoder, and publication, with decoded changes multiplexed by <code>(schema, table)</code> to each dataset. This collapses the slot count from one-per-dataset to one — staying well under Postgres's default <code>max_replication_slots = 10</code>.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">public.orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_replication_slot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> spice_cdc </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># shared slot name</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">public.customers</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> customers</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_replication_slot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> spice_cdc </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># same name -&gt; one slot, walsender &amp; publication</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>Unchanged-TOAST Recovery</strong>: Under <code>REPLICA IDENTITY FULL</code>, when an <code>UPDATE</code> leaves a large TOASTed column unchanged, pgoutput sends an "unchanged" marker; Spice now fills that value from the old tuple — its old value is its current value — so updates no longer error or drop columns. Without an old tuple, the error persists with a hint to enable <code>REPLICA IDENTITY FULL</code>.</li>
<li class=""><strong>Transient Walsender Contention</strong>: Slot-contention errors during rolling deploys — <code>SQLSTATE 55006</code> ("replication slot is active for PID") and <code>53300</code> ("requested standby connections exceeds max_wal_senders") — are now classified as transient and retried with backoff instead of fatally terminating the stream. Replication connections are also released at shutdown start (not process exit), freeing walsender seats for replacement instances.</li>
<li class=""><strong>Strict CDC Param Validation</strong>: PostgreSQL CDC parameters are strictly validated rather than silently defaulted.</li>
<li class=""><strong>Debezium Schema Evolution</strong>: Fixes for Debezium schema-evolution support, including tombstone-message handling and sign-extension of minimal-width base64 decimals.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="distributed-query">Distributed Query<a href="https://spiceai.org/releases/v2.1.0#distributed-query" class="hash-link" aria-label="Direct link to Distributed Query" title="Direct link to Distributed Query" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/features/distributed-query" target="_blank" rel="noopener noreferrer" class="">Distributed Query</a> gains:</p>
<ul>
<li class=""><strong>Distributed Iceberg Catalog Scans</strong>: Ballista distributes scans of Iceberg catalog tables across executors.</li>
<li class=""><strong>Broadcast Joins</strong>: Small dimension tables are broadcast to executors for distributed joins.</li>
<li class=""><strong>Shared Scheduler Job State with Failover</strong>: Ballista job state is shared so the scheduler can fail over without losing in-flight work.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="performance--query-engine">Performance &amp; Query Engine<a href="https://spiceai.org/releases/v2.1.0#performance--query-engine" class="hash-link" aria-label="Direct link to Performance &amp; Query Engine" title="Direct link to Performance &amp; Query Engine" translate="no">​</a></h3>
<p><a href="https://datafusion.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache DataFusion</a> is upgraded to <strong>v54</strong>, folding in v53, alongside <strong>Arrow v58.3</strong> and <strong>Vortex v0.74</strong> (with a pin bump adding intra-file decode split and a per-execution kernel cache). Two DataFusion releases land in this upgrade:</p>
<ul>
<li class=""><strong>DataFusion v54</strong> (<a href="https://datafusion.apache.org/blog/2026/06/12/datafusion-54.0.0/" target="_blank" rel="noopener noreferrer" class="">release notes</a>): adds <code>LATERAL</code> joins, SQL lambda functions (<code>x -&gt; expr</code> with <code>array_transform</code>/<code>array_filter</code>/<code>array_any_match</code>), spilling nested-loop joins, and a faster <code>arrow-avro</code> reader. Performance work includes morsel-driven Parquet scans (up to ~2x faster for skewed scans), 20-50x faster sort-merge semi/anti/mark joins, redundant-sort-key pruning, NDV-based cardinality estimation, and <code>inner_product</code>/<code>cosine_distance</code> functions.</li>
<li class=""><strong>DataFusion v53</strong> (<a href="https://datafusion.apache.org/blog/2026/04/02/datafusion-53.0.0/" target="_blank" rel="noopener noreferrer" class="">release notes</a>): adds <code>LIMIT</code>-aware Parquet row-group pruning, broader filter pushdown through joins and <code>UNION</code>, nested-field pushdown (<code>get_field</code> into the scan), faster query planning (some plans dropping from ~4-5ms to ~100us), and 42 faster built-in functions.</li>
</ul>
<p>Federation deny-list enforcement and catalog DDL are restored after the DataFusion upgrades, and a cost-based left-deep join reordering rule is added for Cayenne acceleration.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ai--llm">AI &amp; LLM<a href="https://spiceai.org/releases/v2.1.0#ai--llm" class="hash-link" aria-label="Direct link to AI &amp; LLM" title="Direct link to AI &amp; LLM" translate="no">​</a></h3>
<ul>
<li class=""><strong>Native GLM Support with Distributed Inference</strong>: Native GLM model support with surfaced <code>reasoning_content</code>, including tensor-parallel GLM inference. Load a GLM model with <code>model_type: glm4</code> (<code>glm4moe</code> and <code>glm4moelite</code> are also supported):</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">models</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> glm</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> huggingface</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">huggingface.co/THUDM/glm</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">4</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">9b</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">chat</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">model_type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> glm4</span><br></div></code></pre></div></div>
<p>For large models, GLM inference can be distributed across nodes (tensor parallelism) via the mistral.rs pure-TCP <code>ring</code> all-reduce backend — no NCCL/system dependency. This is a <a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> feature requiring the <code>distributed</code> build. Run the same model on each node, changing only <code>node_rank</code>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">models</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> glm</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> huggingface</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">huggingface.co/THUDM/glm</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">4</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">9b</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">chat</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">model_type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> glm4</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">distributed_backend</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> ring</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">nodes</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 10.0.4.21</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain">10.0.4.22 </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># ordered host/IP per rank; the ring backend currently requires exactly 2</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">node_rank</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># rank of THIS node in [0, world_size); rank 0 serves the API. Set node_rank: 1 on 10.0.4.22</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>NSQL Context Endpoint</strong>: A new <code>GET /v1/nsql/context</code> endpoint returns the SQL dialect, dataset schemas (with optional sample rows), and registered functions that Spice injects into natural-language-to-SQL (<code>POST /v1/nsql</code>) requests — useful for inspecting or caching exactly what the model sees:</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Inspect the context injected into /v1/nsql requests (examples_limit default 3, max 100)</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">curl</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"http://localhost:8090/v1/nsql/context?include_examples=true&amp;examples_limit=3"</span><br></div></code></pre></div></div>
<p>Returns the dialect, per-dataset schema (keys, indexes, searchable columns), the registered function inventory, and sample rows (abbreviated):</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"context"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"# Spice.ai NSQL Context"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"instructions"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Write SQL for the Spice runtime, which uses Apache DataFusion with the SQL parser configured for the PostgreSQL dialect."</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Use table and column descriptions, primary keys, foreign keys, unique constraints, and indexes when choosing joins and filters."</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"sql"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"engine"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Apache DataFusion"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"version"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"54.0.0"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"dialect"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"PostgreSQL"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"parser"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"DataFusion SQL parser configured with PostgreSQL dialect"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"datasets"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"sales.orders"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"table"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"orders"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"description"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Customer orders"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"columns"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"order_id"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"data_type"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Int64"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"nullable"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"primary_key"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"indexed"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"customer_id"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"data_type"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Utf8"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"nullable"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"vector_search"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"full_text_search"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"primary_key"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">"order_id"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"foreign_keys"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"columns"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">"customer_id"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"foreign_table"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"spice.sales.customers"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"foreign_columns"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">"id"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"functions"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"summary"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Spice SQL runs on Apache DataFusion ... Run SELECT * FROM list_udfs() to inspect the full registered function inventory"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"search"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"vector_search"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"syntax"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"vector_search(dataset, 'query text'[, column])"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"text_search"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"syntax"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"text_search(dataset, 'query text'[, column])"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"samples"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"title"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Example rows for `sales.orders`"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token property" style="color:hsl(5, 74%, 59%)">"content"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"| order_id | customer_id |\n| --- | --- |\n| 42 | CUST-1 |"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="search--vectors">Search &amp; Vectors<a href="https://spiceai.org/releases/v2.1.0#search--vectors" class="hash-link" aria-label="Direct link to Search &amp; Vectors" title="Direct link to Search &amp; Vectors" translate="no">​</a></h3>
<ul>
<li class=""><strong>S3 Vectors Pagination</strong>: <code>QueryVectors</code> paginates for top-K up to 10,000.</li>
<li class=""><strong>Elasticsearch kNN Candidate Pool</strong>: The default kNN candidate pool is raised from 10 to 1000 for better recall.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql--query-engine">SQL &amp; Query Engine<a href="https://spiceai.org/releases/v2.1.0#sql--query-engine" class="hash-link" aria-label="Direct link to SQL &amp; Query Engine" title="Direct link to SQL &amp; Query Engine" translate="no">​</a></h3>
<ul>
<li class=""><strong>FlightSQL Substrait Plans</strong>: <code>CommandStatementSubstraitPlan</code> support.</li>
<li class=""><strong>Large Result Streaming</strong>: Flight streaming is optimized for large result sets.</li>
<li class=""><strong>Write Authorization</strong>: The SQL tool allows writes for ReadWrite API keys.</li>
<li class=""><strong>Schema Evolution Policies</strong>: <code>on_schema_change</code> supports widening-only evolution and a <code>drop_and_recreate</code> policy.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="security--connectors">Security &amp; Connectors<a href="https://spiceai.org/releases/v2.1.0#security--connectors" class="hash-link" aria-label="Direct link to Security &amp; Connectors" title="Direct link to Security &amp; Connectors" translate="no">​</a></h3>
<ul>
<li class=""><strong>Kafka mTLS</strong>: Mutual TLS configuration is surfaced in the Kafka data connector.</li>
<li class=""><strong>Secret Resolution at Startup</strong>: Secret references are checked and reported at startup.</li>
<li class=""><strong>DuckDB HNSW</strong>: Upgrade to DuckDB v1.5.3 with the statically linked VSS (HNSW) vector extension.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="adaptive-self-tuning-experimental">Adaptive Self-Tuning (Experimental)<a href="https://spiceai.org/releases/v2.1.0#adaptive-self-tuning-experimental" class="hash-link" aria-label="Direct link to Adaptive Self-Tuning (Experimental)" title="Direct link to Adaptive Self-Tuning (Experimental)" translate="no">​</a></h3>
<p>The Spice Cayenne accelerator gains experimental opt-in self-tuning. <code>cayenne_tuning: auto</code> derives configuration from the detected hardware and inferred schema, while <code>adaptive</code> additionally runs a per-table closed-feedback controller that adapts flush caps, the in-memory CDC tier, compaction cadence, and write concurrency toward operator SLOs (replication lag, freshness, query latency, queries-per-hour). Cayenne can also maintain aggregates incrementally — with predicate-aware delta serving and incremental retraction — and fold whole-table <code>SUM</code>/<code>AVG</code>/<code>COUNT</code>/<code>MIN</code>/<code>MAX</code> from statistics. These features are experimental and disabled by default.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">public.orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> cayenne</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cayenne_tuning</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> adaptive </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 'auto' (static, env- + schema-derived) or 'adaptive' (closed-loop)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="observability">Observability<a href="https://spiceai.org/releases/v2.1.0#observability" class="hash-link" aria-label="Direct link to Observability" title="Direct link to Observability" translate="no">​</a></h3>
<ul>
<li class=""><strong>Per-Dataset Query Attribution</strong>: The <code>query_executions</code> metric gains a <code>datasets</code> dimension.</li>
<li class=""><strong>HTAP Diagnostics</strong>: Improved HTAP replication diagnostics on non-convergence.</li>
<li class=""><strong>Cayenne Write Observability</strong>: Write-phase observability for the in-memory CDC tier.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="notable-bug-fixes">Notable Bug Fixes<a href="https://spiceai.org/releases/v2.1.0#notable-bug-fixes" class="hash-link" aria-label="Direct link to Notable Bug Fixes" title="Direct link to Notable Bug Fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Cayenne Utf8View</strong>: The Utf8View read schema avoids a hash-join offset overflow.</li>
<li class=""><strong>Cayenne metastore</strong>: <code>cayenne_metastore: turso</code> is honored for partitioned tables and the dataset checkpoint.</li>
<li class=""><strong>Dual-write detection</strong>: Dual-write accelerated tables are detected behind the metadata-enrichment wrapper.</li>
<li class=""><strong><code>digest_many</code> collisions</strong>: Values are length-prefixed so column boundaries can't collide.</li>
<li class=""><strong>Turso WAL checkpoint</strong>: WAL checkpoints route through the native Turso connection.</li>
<li class=""><strong>TLS status probe</strong>: The status check probes the metrics endpoint over HTTPS when TLS is enabled.</li>
<li class=""><strong>Search snippet offsets</strong>: Character chunk offsets persist so search snippets aren't shifted or garbled.</li>
<li class=""><strong>Async query chunk offsets</strong>: <code>/v1/queries</code> chunk <code>row_offset</code> uses the cumulative offset rather than <code>chunk_index * chunk_size</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.1.0#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version</th></tr></thead><tbody><tr><td><strong>DataFusion</strong></td><td>v54</td></tr><tr><td><strong>Arrow (arrow-rs)</strong></td><td>v58.3</td></tr><tr><td><strong>Vortex</strong></td><td>v0.74</td></tr><tr><td><strong>iceberg-rust</strong></td><td>v0.9.1</td></tr><tr><td><strong>DuckDB</strong></td><td>v1.5.3</td></tr><tr><td><strong>Rust toolchain</strong></td><td>v1.95.0</td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.1.0#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a></li>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/melks" target="_blank" rel="noopener noreferrer" class="">@melks</a></li>
<li class=""><a href="https://github.com/mvanhorn" target="_blank" rel="noopener noreferrer" class="">@mvanhorn</a></li>
<li class=""><a href="https://github.com/Oxygen56" target="_blank" rel="noopener noreferrer" class="">@Oxygen56</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/v1gnesh" target="_blank" rel="noopener noreferrer" class="">@v1gnesh</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.1.0#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.1.0#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.1.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.1.0, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.1.0</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.1.0</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.1.0</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.1.0#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.1.0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Make DuckDB schema cast logic more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10991" target="_blank" rel="noopener noreferrer" class="">#10991</a></li>
<li class="">perf(cayenne): reduce allocation overheads in hot paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10950" target="_blank" rel="noopener noreferrer" class="">#10950</a></li>
<li class="">improve error message for 'params.spiceai_region' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10954" target="_blank" rel="noopener noreferrer" class="">#10954</a></li>
<li class="">fix(acceleration): rename WriteMode variants to fix #10960 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10974" target="_blank" rel="noopener noreferrer" class="">#10974</a></li>
<li class="">add Scylla, bigquery and turso to throughput benchmarking by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11006" target="_blank" rel="noopener noreferrer" class="">#11006</a></li>
<li class="">deps(ballista): pull in shuffle-on-object-store correctness fixes (datafusion-ballista PRs #42 + #43) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10919" target="_blank" rel="noopener noreferrer" class="">#10919</a></li>
<li class="">fix(kafka): seek to sidecar offsets via post_rebalance callback on restart by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11007" target="_blank" rel="noopener noreferrer" class="">#11007</a></li>
<li class="">Propagate source comments into schema metadata by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10944" target="_blank" rel="noopener noreferrer" class="">#10944</a></li>
<li class="">feat(chbench-driver): better alignment to BenchBase by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11012" target="_blank" rel="noopener noreferrer" class="">#11012</a></li>
<li class="">fix: handle EXISTS/NOT EXISTS subqueries in federation analyzer by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10996" target="_blank" rel="noopener noreferrer" class="">#10996</a></li>
<li class="">Enable filter pushdown in spicepod defined UDTFs by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11004" target="_blank" rel="noopener noreferrer" class="">#11004</a></li>
<li class="">Refactor spice dataset configuration command by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10999" target="_blank" rel="noopener noreferrer" class="">#10999</a></li>
<li class="">fix: ensure HashJoinExec partition counts match when join input is statically empty by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11025" target="_blank" rel="noopener noreferrer" class="">#11025</a></li>
<li class="">feat(chbench): Improve OLTP throughput and reduce PostgreSQL CDC overhead by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11018" target="_blank" rel="noopener noreferrer" class="">#11018</a></li>
<li class="">feat(cluster): add distributed query observability metrics by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10990" target="_blank" rel="noopener noreferrer" class="">#10990</a></li>
<li class="">fix: delegate truncate in PolyTableProvider to inner write provider by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11036" target="_blank" rel="noopener noreferrer" class="">#11036</a></li>
<li class="">Remove default runtime features - enable explicitly in spiced by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11037" target="_blank" rel="noopener noreferrer" class="">#11037</a></li>
<li class="">fix: preserve field and schema metadata in Vortex physical schema calculation by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11013" target="_blank" rel="noopener noreferrer" class="">#11013</a></li>
<li class="">Expose metadata descriptions via PostgreSQL UDFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11032" target="_blank" rel="noopener noreferrer" class="">#11032</a></li>
<li class="">fix: route Turso WAL checkpoint through native turso connection (fixes #10657) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11048" target="_blank" rel="noopener noreferrer" class="">#11048</a></li>
<li class="">fix: add missing truncate delegation and guards for wrapper TableProviders by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11014" target="_blank" rel="noopener noreferrer" class="">#11014</a></li>
<li class="">Update DataConnector statuses by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11052" target="_blank" rel="noopener noreferrer" class="">#11052</a></li>
<li class="">remove redundant readonly checks by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10975" target="_blank" rel="noopener noreferrer" class="">#10975</a></li>
<li class="">Fix Unity Catalog connector compatibility with OSS Unity Catalog by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11026" target="_blank" rel="noopener noreferrer" class="">#11026</a></li>
<li class="">refactor(cdc): reduce CDC sub-batch splits for interleaved upsert/delete workloads by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11051" target="_blank" rel="noopener noreferrer" class="">#11051</a></li>
<li class="">feat(cayenne): allow inline writes with pending deletions (deletes/upserts) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11031" target="_blank" rel="noopener noreferrer" class="">#11031</a></li>
<li class="">fix(sql-tool): defer read-only gate to caller's API key role by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11040" target="_blank" rel="noopener noreferrer" class="">#11040</a></li>
<li class="">fix: map Gemini Recitation finish reason to ContentFilter by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11046" target="_blank" rel="noopener noreferrer" class="">#11046</a></li>
<li class="">feat(cayenne): fast-path CDC deletes by extracting PK values from filters by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11049" target="_blank" rel="noopener noreferrer" class="">#11049</a></li>
<li class="">fix(cluster): gate scheduler readiness on executor partition loads by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10992" target="_blank" rel="noopener noreferrer" class="">#10992</a></li>
<li class="">fix(snowflake): enforce function deny-list in federation pushdown by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11057" target="_blank" rel="noopener noreferrer" class="">#11057</a></li>
<li class="">perf(cdc): Last-write-wins dedup in <code>group_into_sub_batches</code> to reduce sub-batch splits by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11059" target="_blank" rel="noopener noreferrer" class="">#11059</a></li>
<li class="">[Bug] Timing between reconnect and AllocateInitialPartitions leaves connection without flight_sql_client by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10805" target="_blank" rel="noopener noreferrer" class="">#10805</a></li>
<li class="">Define 'trait QueryEngine' to refactor runtime crate by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11028" target="_blank" rel="noopener noreferrer" class="">#11028</a></li>
<li class="">fix(snowflake): apply Spice function deny-list in extracted connector crate by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11071" target="_blank" rel="noopener noreferrer" class="">#11071</a></li>
<li class="">perf(cayenne): keep CDC upsert PK keysets resident to avoid per-batch full-table rebuilds by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11074" target="_blank" rel="noopener noreferrer" class="">#11074</a></li>
<li class="">fix(postgres-replication): emit recovery log + reduce reconnect-warn volume by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11084" target="_blank" rel="noopener noreferrer" class="">#11084</a></li>
<li class="">fix metadata on search indexing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11080" target="_blank" rel="noopener noreferrer" class="">#11080</a></li>
<li class="">perf(cayenne): scale CDC inline flush caps with memory + storage class by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11087" target="_blank" rel="noopener noreferrer" class="">#11087</a></li>
<li class="">feat(cayenne): merge-on-read position deletes for PK upsert tables + memory-pool accounting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11085" target="_blank" rel="noopener noreferrer" class="">#11085</a></li>
<li class="">Support tuple-IN composite PK extraction in Cayenne delete fast-path by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11093" target="_blank" rel="noopener noreferrer" class="">#11093</a></li>
<li class="">feat(cluster): report per-executor table statistics so distributed JoinSelection can size joins by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11089" target="_blank" rel="noopener noreferrer" class="">#11089</a></li>
<li class="">feat(cluster): NDV-aware executor stats so CDC q18 join swap fires by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11098" target="_blank" rel="noopener noreferrer" class="">#11098</a></li>
<li class="">Improve HTAP replication diagnostics on non-convergence by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11100" target="_blank" rel="noopener noreferrer" class="">#11100</a></li>
<li class="">Normalize <code>DataType::Null</code> to <code>Int32</code> in acceleration schema for duckdb by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11062" target="_blank" rel="noopener noreferrer" class="">#11062</a></li>
<li class="">Fix debezium schema evolution support by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11095" target="_blank" rel="noopener noreferrer" class="">#11095</a></li>
<li class="">feat(cayenne): incremental write-path executor statistics for distributed join sizing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11104" target="_blank" rel="noopener noreferrer" class="">#11104</a></li>
<li class="">fix(cache): periodic moka maintenance to drain invalidation predicates (#11077) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11106" target="_blank" rel="noopener noreferrer" class="">#11106</a></li>
<li class="">fix: validate Snowflake account identifiers and auth config by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11024" target="_blank" rel="noopener noreferrer" class="">#11024</a></li>
<li class="">fix: trace external mcp server tool calls by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11058" target="_blank" rel="noopener noreferrer" class="">#11058</a></li>
<li class="">Remove unwrap from test code; drop clippy::unwrap_used suppressions by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11108" target="_blank" rel="noopener noreferrer" class="">#11108</a></li>
<li class="">Upgrade to DuckDB 1.5.3 + statically link the VSS (HNSW) extension by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11107" target="_blank" rel="noopener noreferrer" class="">#11107</a></li>
<li class="">Fix fetched_at for HTTP connector by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11116" target="_blank" rel="noopener noreferrer" class="">#11116</a></li>
<li class="">fix(search): propagate LIMIT to base TableScan in VectorScanTableProvider (fixes #8368) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11124" target="_blank" rel="noopener noreferrer" class="">#11124</a></li>
<li class="">feat(runtime): add spicebench feature to register the Cayenne catalog connector by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11122" target="_blank" rel="noopener noreferrer" class="">#11122</a></li>
<li class="">fix(cayenne): tombstone inline-checkpointed rows on upsert to prevent duplicate PKs by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11129" target="_blank" rel="noopener noreferrer" class="">#11129</a></li>
<li class="">Remove possibility of a deadlock in <code>RuntimeStatus</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11114" target="_blank" rel="noopener noreferrer" class="">#11114</a></li>
<li class="">Fix Windows build: vendored-vss duckdb-rs + adapt to table-providers mongodb API by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11140" target="_blank" rel="noopener noreferrer" class="">#11140</a></li>
<li class="">localpod: synchronize child refreshes when parent uses in-memory (arrow) accelerator by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11139" target="_blank" rel="noopener noreferrer" class="">#11139</a></li>
<li class="">Add <code>datasets</code> dimension to the <code>query_executions</code> metric by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11138" target="_blank" rel="noopener noreferrer" class="">#11138</a></li>
<li class="">fix(spiceai): keep correlated subqueries out of JOIN ON for Spice Cloud federation by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11143" target="_blank" rel="noopener noreferrer" class="">#11143</a></li>
<li class="">fix(duckdb): normalize timestamp columns to microsecond precision (fixes #10627) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11145" target="_blank" rel="noopener noreferrer" class="">#11145</a></li>
<li class="">feat(cayenne): sharded parallel Vortex encode with key/time clustering by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11144" target="_blank" rel="noopener noreferrer" class="">#11144</a></li>
<li class="">fix(cluster): prevent DoPut write pipeline self-deadlock under ingest backpressure by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11160" target="_blank" rel="noopener noreferrer" class="">#11160</a></li>
<li class="">feat(chbench): configurable HTAP concurrency, DuckDB query overrides, and OLTP rate control by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11162" target="_blank" rel="noopener noreferrer" class="">#11162</a></li>
<li class="">fix(http): preserve non-JSON response rows instead of crashing nested decomposition (fixes #11155) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11161" target="_blank" rel="noopener noreferrer" class="">#11161</a></li>
<li class="">Use declared schema in DynamoDB/MongoDB/Debezium by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11066" target="_blank" rel="noopener noreferrer" class="">#11066</a></li>
<li class="">fix(cluster): prevent partitioned datasets from staying Refreshing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11157" target="_blank" rel="noopener noreferrer" class="">#11157</a></li>
<li class="">fix(runtime): don't list <code>postgres</code> as a valid accelerator engine when <code>postgres-accel</code> is disabled by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11169" target="_blank" rel="noopener noreferrer" class="">#11169</a></li>
<li class="">fix(spark): recover stale or broken Spark Connect sessions on failure by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11171" target="_blank" rel="noopener noreferrer" class="">#11171</a></li>
<li class="">fix(secrets): don't abort secret lookup precedence walk on a failing store by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11175" target="_blank" rel="noopener noreferrer" class="">#11175</a></li>
<li class="">feat(cayenne): bound aggregate write concurrency, conservative defaults, and write/read observability by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11170" target="_blank" rel="noopener noreferrer" class="">#11170</a></li>
<li class="">feat(unity_catalog): support Unity Catalog credential vending for Delta Lake tables by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11180" target="_blank" rel="noopener noreferrer" class="">#11180</a></li>
<li class="">fix(secrets): keep failed secret stores registered so lookups report the init root cause by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11181" target="_blank" rel="noopener noreferrer" class="">#11181</a></li>
<li class="">fix(debezium): sign-extend minimal-width base64 decimals instead of zero-padding by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11184" target="_blank" rel="noopener noreferrer" class="">#11184</a></li>
<li class="">fix(deps): update hickory-resolver to 0.26 (evicts hickory-proto 0.25.x) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11183" target="_blank" rel="noopener noreferrer" class="">#11183</a></li>
<li class="">refactor(secrets): derive secret store metadata from a single registry table by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11188" target="_blank" rel="noopener noreferrer" class="">#11188</a></li>
<li class="">perf(cayenne): cut CDC replication lag on hot upsert tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11191" target="_blank" rel="noopener noreferrer" class="">#11191</a></li>
<li class="">feat(cayenne): async inline-fallback (per-tombstone published flag) + 64c/256GB tuning by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11194" target="_blank" rel="noopener noreferrer" class="">#11194</a></li>
<li class="">Add HTTP connector mTLS support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11127" target="_blank" rel="noopener noreferrer" class="">#11127</a></li>
<li class="">feat(snowflake): push AT TIME ZONE as CONVERT_TIMEZONE and pin session to UTC by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11190" target="_blank" rel="noopener noreferrer" class="">#11190</a></li>
<li class="">feat(cdc): make cdc_max_coalesce_age_ms a real apply-loop linger by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11196" target="_blank" rel="noopener noreferrer" class="">#11196</a></li>
<li class="">feat(cayenne): delta-write encoding levels (cayenne_delta_encoding, default auto) + make compression_strategy=zstd real by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11199" target="_blank" rel="noopener noreferrer" class="">#11199</a></li>
<li class="">Add NSQL context endpoint by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11075" target="_blank" rel="noopener noreferrer" class="">#11075</a></li>
<li class="">fix(federation): respect the Spice function deny-list across all SQL connectors; dialect-aware DuckDB pushdown by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11186" target="_blank" rel="noopener noreferrer" class="">#11186</a></li>
<li class="">fix: surface unknown/applied cayenne_* runtime.params at startup (fixes #10970) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11133" target="_blank" rel="noopener noreferrer" class="">#11133</a></li>
<li class="">perf(cayenne): plain-fsync ordering tier on the staged-commit hot path by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11198" target="_blank" rel="noopener noreferrer" class="">#11198</a></li>
<li class="">fix(kafka): decode JSON payloads to Arrow directly — fixes lossy Decimal128 + removes double-parse (#11192) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11207" target="_blank" rel="noopener noreferrer" class="">#11207</a></li>
<li class="">feat(cayenne): self-tuning accelerator — hardware + schema + closed-loop adaptive (auto/adaptive modes) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11213" target="_blank" rel="noopener noreferrer" class="">#11213</a></li>
<li class="">perf(cayenne): CDC throughput — SF-100 @10K txn/s toward &lt;5s lag + 5K QPH by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11206" target="_blank" rel="noopener noreferrer" class="">#11206</a></li>
<li class="">fix(cluster): distribute accelerated tables wrapped by metadata/index providers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11226" target="_blank" rel="noopener noreferrer" class="">#11226</a></li>
<li class="">Improve Cayenne adaptive tuning and schema safety by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11237" target="_blank" rel="noopener noreferrer" class="">#11237</a></li>
<li class="">feat: Add cayenne_file_pruning param by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11239" target="_blank" rel="noopener noreferrer" class="">#11239</a></li>
<li class="">Debezium connector - handle tombstone messages in kafka topic, with schema evolution enabled by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11197" target="_blank" rel="noopener noreferrer" class="">#11197</a></li>
<li class="">feat(cayenne): broadcast small-dimension joins to executors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11245" target="_blank" rel="noopener noreferrer" class="">#11245</a></li>
<li class="">fix: scope request context across the managed query runtime by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11253" target="_blank" rel="noopener noreferrer" class="">#11253</a></li>
<li class="">fix: Strip inference columns from table schema on query by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11251" target="_blank" rel="noopener noreferrer" class="">#11251</a></li>
<li class="">fix(flightsql): don't drop un-pushed FilterExec predicates in distributed pushdown rules by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11256" target="_blank" rel="noopener noreferrer" class="">#11256</a></li>
<li class="">feat(postgres): share one replication slot across multiple changes-mode datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11255" target="_blank" rel="noopener noreferrer" class="">#11255</a></li>
<li class="">Upgrade to DataFusion v53.1, Arrow v58.3, Vortex v0.74, and dependencies by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11118" target="_blank" rel="noopener noreferrer" class="">#11118</a></li>
<li class="">feat(connectors): support file_format: vortex everywhere parquet is supported by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11282" target="_blank" rel="noopener noreferrer" class="">#11282</a></li>
<li class="">perf(cayenne): metadata-only publish — drop per-key insert records on upsert commit by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11260" target="_blank" rel="noopener noreferrer" class="">#11260</a></li>
<li class="">fix(kafka): harden fetch_latest_message for multi-partition topics by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11285" target="_blank" rel="noopener noreferrer" class="">#11285</a></li>
<li class="">perf(cayenne): bound mem-tier checkpoint churn + O(1) per-scan deletion view by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11249" target="_blank" rel="noopener noreferrer" class="">#11249</a></li>
<li class="">fix(udfs): length-prefix digest_many values so column boundaries can't collide (fixes #11272) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11288" target="_blank" rel="noopener noreferrer" class="">#11288</a></li>
<li class="">fix: restore federation deny-list enforcement regressed by the DataFusion 53 upgrade by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11294" target="_blank" rel="noopener noreferrer" class="">#11294</a></li>
<li class="">fix(postgres): recover unchanged-TOAST columns from the old tuple; classify walsender contention as transient by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11293" target="_blank" rel="noopener noreferrer" class="">#11293</a></li>
<li class="">feat: deepen extended schema inference and wire it into cayenne compaction sharding/sorting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11284" target="_blank" rel="noopener noreferrer" class="">#11284</a></li>
<li class="">perf(cayenne): in-memory CDC tier follow-ups + write-phase observability by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11278" target="_blank" rel="noopener noreferrer" class="">#11278</a></li>
<li class="">Support per-dataset CDC tunable overrides by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11295" target="_blank" rel="noopener noreferrer" class="">#11295</a></li>
<li class="">feat(cayenne): harden adaptive auto-tuner (controller hygiene, mem-tier actuator, delete/burst signals, single opt-in) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11302" target="_blank" rel="noopener noreferrer" class="">#11302</a></li>
<li class="">fix(cayenne): scan inlined-view capture starvation under sustained CDC (analytical QPH) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11299" target="_blank" rel="noopener noreferrer" class="">#11299</a></li>
<li class="">fix(vortex): don't row-evaluate hash-join dynamic filters in the scan by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11307" target="_blank" rel="noopener noreferrer" class="">#11307</a></li>
<li class="">fix(deps): bump rust-postgres crates (RUSTSEC-2026-0178/0179) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11313" target="_blank" rel="noopener noreferrer" class="">#11313</a></li>
<li class="">fix: strict validation of Postgres CDC params instead of silent defaults (fixes #11274) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11304" target="_blank" rel="noopener noreferrer" class="">#11304</a></li>
<li class="">fix(duckdb): always quote on-refresh sort columns so reserved-word names don't break refresh by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11305" target="_blank" rel="noopener noreferrer" class="">#11305</a></li>
<li class="">feat(flightsql): fall back to original connection when endpoint location is unreachable by <a href="https://github.com/melks" target="_blank" rel="noopener noreferrer" class="">@melks</a> in <a href="https://github.com/spiceai/spiceai/pull/11287" target="_blank" rel="noopener noreferrer" class="">#11287</a></li>
<li class="">perf(cayenne): light-encode transient staged CDC deltas by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11311" target="_blank" rel="noopener noreferrer" class="">#11311</a></li>
<li class="">feat(acceleration): widening-only schema evolution via on_schema_change by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11261" target="_blank" rel="noopener noreferrer" class="">#11261</a></li>
<li class="">deps(vortex): bump pin to spiceai-53 HEAD — intra-file decode split + per-execution kernel cache by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11314" target="_blank" rel="noopener noreferrer" class="">#11314</a></li>
<li class="">feat(github): enhance GitHub component validation and error handling by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11259" target="_blank" rel="noopener noreferrer" class="">#11259</a></li>
<li class="">feat(cayenne): goal-driven adaptive tuning toward operator SLOs (lag, freshness, query latency, QPH) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11310" target="_blank" rel="noopener noreferrer" class="">#11310</a></li>
<li class="">fix(cayenne): broadcast-join rewrite must bail on ambiguous columns, NULL-equal joins, and residual filters by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11252" target="_blank" rel="noopener noreferrer" class="">#11252</a></li>
<li class="">Add Cayenne maintained aggregates by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11235" target="_blank" rel="noopener noreferrer" class="">#11235</a></li>
<li class="">perf(cayenne): single-hash composite deletion filter via KeyDeletionIndex::get_batch by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11325" target="_blank" rel="noopener noreferrer" class="">#11325</a></li>
<li class="">fix(Vortex): decline only the <code>InList</code> membership conjunct of hash-join dynamic filters by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11335" target="_blank" rel="noopener noreferrer" class="">#11335</a></li>
<li class="">fix: scope SQL UDF arg inlining to args-table columns (fixes #11273) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11337" target="_blank" rel="noopener noreferrer" class="">#11337</a></li>
<li class="">fix(refresh): restore S3 ETag/Version refresh-skip behind provider wrappers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11339" target="_blank" rel="noopener noreferrer" class="">#11339</a></li>
<li class="">fix(cayenne): ref-count in-flight scans so GC can't delete Vortex files mid-read by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11321" target="_blank" rel="noopener noreferrer" class="">#11321</a></li>
<li class="">fix(runtime): retry object-store dataset load when source files are not yet available by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11342" target="_blank" rel="noopener noreferrer" class="">#11342</a></li>
<li class="">feat(s3): default to path-style for dotted bucket names on standard AWS by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11347" target="_blank" rel="noopener noreferrer" class="">#11347</a></li>
<li class="">fix(runtime): resolve accelerated table through metadata-enrichment wrapper by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11345" target="_blank" rel="noopener noreferrer" class="">#11345</a></li>
<li class="">fix: detect dual-write accelerated tables behind the metadata-enrichment wrapper by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11351" target="_blank" rel="noopener noreferrer" class="">#11351</a></li>
<li class="">feat(cayenne): incremental seq-prefix bake — shrink the merge-on-read deletion index by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11326" target="_blank" rel="noopener noreferrer" class="">#11326</a></li>
<li class="">fix(adbc): prevent Spice-specific UDFs from being pushed down to ADBC sources by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11297" target="_blank" rel="noopener noreferrer" class="">#11297</a></li>
<li class="">fix: Query Redshift schema details from svv_redshift tables by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11362" target="_blank" rel="noopener noreferrer" class="">#11362</a></li>
<li class="">perf(cayenne): tune Turso connection PRAGMAs + jitter metastore retries by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11359" target="_blank" rel="noopener noreferrer" class="">#11359</a></li>
<li class="">Upgrade to DataFusion 54 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11360" target="_blank" rel="noopener noreferrer" class="">#11360</a></li>
<li class="">feat(runtime): dedicated CDC-apply tokio runtime + per-runtime tokio metrics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11370" target="_blank" rel="noopener noreferrer" class="">#11370</a></li>
<li class="">fix(cayenne): spill oversized hash joins via sort-merge to avoid OOM by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11371" target="_blank" rel="noopener noreferrer" class="">#11371</a></li>
<li class="">fix(cayenne): honor cayenne_metastore: turso for partitioned tables and the dataset checkpoint by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11365" target="_blank" rel="noopener noreferrer" class="">#11365</a></li>
<li class="">perf(cayenne): in-RAM scan parallelism, query admission control, skip no-op deletion encode, sound scan output_ordering by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11332" target="_blank" rel="noopener noreferrer" class="">#11332</a></li>
<li class="">fix(catalog): restore DDL after DataFusion 54 broke transparent catalog-provider downcasts by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11375" target="_blank" rel="noopener noreferrer" class="">#11375</a></li>
<li class="">feat(flightsql): infer schema via SELECT * LIMIT 1 when GetTables is unimplemented by <a href="https://github.com/melks" target="_blank" rel="noopener noreferrer" class="">@melks</a> in <a href="https://github.com/spiceai/spiceai/pull/11286" target="_blank" rel="noopener noreferrer" class="">#11286</a></li>
<li class="">fix(cayenne): Utf8View read schema avoids hash-join offset overflow by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11379" target="_blank" rel="noopener noreferrer" class="">#11379</a></li>
<li class="">feat(cluster): support distributed (Ballista) scans of Iceberg tables by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11378" target="_blank" rel="noopener noreferrer" class="">#11378</a></li>
<li class="">feat(optimizer): cost-based left-deep join reordering for Cayenne acceleration by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11377" target="_blank" rel="noopener noreferrer" class="">#11377</a></li>
<li class="">cli - fix service-account auth in <code>spice cloud *</code> commands by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11316" target="_blank" rel="noopener noreferrer" class="">#11316</a></li>
<li class="">fix: Support external Redshift table schema inference and Hive external type parsing by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11399" target="_blank" rel="noopener noreferrer" class="">#11399</a></li>
<li class="">feat(llms): native GLM support — opt-in flash-attn + surface reasoning_content by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11400" target="_blank" rel="noopener noreferrer" class="">#11400</a></li>
<li class="">feat(s3_vectors): paginate QueryVectors for topK up to 10,000 by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11405" target="_blank" rel="noopener noreferrer" class="">#11405</a></li>
<li class="">fix: surface .env parse errors with line numbers instead of silently skipping by <a href="https://github.com/Oxygen56" target="_blank" rel="noopener noreferrer" class="">@Oxygen56</a> in <a href="https://github.com/spiceai/spiceai/pull/11306" target="_blank" rel="noopener noreferrer" class="">#11306</a></li>
<li class="">fix(status): probe metrics endpoint over https when TLS is enabled by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11393" target="_blank" rel="noopener noreferrer" class="">#11393</a></li>
<li class="">fix(mcp): record task_history spans for tool calls proxied through /v1/mcp by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11397" target="_blank" rel="noopener noreferrer" class="">#11397</a></li>
<li class="">Properly handle date_trunc in BigQueryDialect by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11416" target="_blank" rel="noopener noreferrer" class="">#11416</a></li>
<li class="">fix(snowflake): honor column scale in Int64 timestamp arm and cast TIME by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11418" target="_blank" rel="noopener noreferrer" class="">#11418</a></li>
<li class="">fix: /v1/queries chunk row_offset uses cumulative offset, not chunk_index * chunk_size (fixes #11271) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11398" target="_blank" rel="noopener noreferrer" class="">#11398</a></li>
<li class="">feat(cayenne): incremental retraction for maintained aggregates + anchor bench by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11389" target="_blank" rel="noopener noreferrer" class="">#11389</a></li>
<li class="">feat(cluster): support distributed (Ballista) scans of Iceberg catalog tables by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11419" target="_blank" rel="noopener noreferrer" class="">#11419</a></li>
<li class="">Simplify chat/responses models by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10997" target="_blank" rel="noopener noreferrer" class="">#10997</a></li>
<li class="">feat(llms): distributed tensor-parallel GLM inference via mistral.rs ring backend by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11406" target="_blank" rel="noopener noreferrer" class="">#11406</a></li>
<li class="">Optimize Flight streaming for large result sets by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11420" target="_blank" rel="noopener noreferrer" class="">#11420</a></li>
<li class="">fix(deps): evict rustls 0.21 / rustls-webpki 0.101.7 (GHSA-82j2-j2ch-gfr8) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11428" target="_blank" rel="noopener noreferrer" class="">#11428</a></li>
<li class="">feat(cayenne): in-memory CDC intra-apply sharding (PK-hash shards) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11421" target="_blank" rel="noopener noreferrer" class="">#11421</a></li>
<li class="">fix(cayenne): shard CDC upserts with pending deletions so the N&gt;1 slot-ack advances by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11445" target="_blank" rel="noopener noreferrer" class="">#11445</a></li>
<li class="">fix(cluster): keep built-in avg over Spark avg (distributed aggregate state schema mismatch) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11434" target="_blank" rel="noopener noreferrer" class="">#11434</a></li>
<li class="">feat(views): support params.file_format for embedding chunking by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11424" target="_blank" rel="noopener noreferrer" class="">#11424</a></li>
<li class="">fix: offload blocking sync calls off the primary async runtime by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11435" target="_blank" rel="noopener noreferrer" class="">#11435</a></li>
<li class="">fix(udfs): rebind dot_product alias to Spice's inner_product on DataFusion 54 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11443" target="_blank" rel="noopener noreferrer" class="">#11443</a></li>
<li class="">feat(secrets): add full-fidelity reference iteration and a resolution-status API by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11195" target="_blank" rel="noopener noreferrer" class="">#11195</a></li>
<li class="">fix: Deny unsupported array functions for Postgres pushdown by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11450" target="_blank" rel="noopener noreferrer" class="">#11450</a></li>
<li class="">fix(cli): spice query honors --http-endpoint instead of failing on a Flight connect by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11452" target="_blank" rel="noopener noreferrer" class="">#11452</a></li>
<li class="">fix(cayenne): coordinate query-pool + in-memory CDC tier budgets to prevent adaptive OOM by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11449" target="_blank" rel="noopener noreferrer" class="">#11449</a></li>
<li class="">Surface mTLS config in Kafka data connector by <a href="https://github.com/v1gnesh" target="_blank" rel="noopener noreferrer" class="">@v1gnesh</a> in <a href="https://github.com/spiceai/spiceai/pull/11372" target="_blank" rel="noopener noreferrer" class="">#11372</a></li>
<li class="">feat(secrets): check and report secret references at startup by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11457" target="_blank" rel="noopener noreferrer" class="">#11457</a></li>
<li class="">Default cayenne_force_view_types to false by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11459" target="_blank" rel="noopener noreferrer" class="">#11459</a></li>
<li class="">fix: resolve table-reference qualification in results-cache invalidation (fixes #11266) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11460" target="_blank" rel="noopener noreferrer" class="">#11460</a></li>
<li class="">feat(cayenne): metadata aggregate pushdown — fold whole-table SUM/AVG/COUNT/MIN/MAX from statistics by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11414" target="_blank" rel="noopener noreferrer" class="">#11414</a></li>
<li class="">fix(search): restore numeric trunc and fix SortPreservingMergeExec planning error (DF54) by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11415" target="_blank" rel="noopener noreferrer" class="">#11415</a></li>
<li class="">fix(cluster): route Ballista shuffle/temp to the data PVC by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11454" target="_blank" rel="noopener noreferrer" class="">#11454</a></li>
<li class="">fix(search): default Elasticsearch kNN candidate pool to 1000 instead of 10 (fixes #11264) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11467" target="_blank" rel="noopener noreferrer" class="">#11467</a></li>
<li class="">feat(acceleration): add on_schema_change drop_and_recreate policy by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11462" target="_blank" rel="noopener noreferrer" class="">#11462</a></li>
<li class="">feat(cayenne): predicate-aware maintained aggregates serve filtered analytical queries from the CDC delta by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11458" target="_blank" rel="noopener noreferrer" class="">#11458</a></li>
<li class="">feat(cluster): shared Ballista job state with scheduler failover by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11436" target="_blank" rel="noopener noreferrer" class="">#11436</a></li>
<li class="">feat(cayenne): extend HLL NDV sketching to string and date columns by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11468" target="_blank" rel="noopener noreferrer" class="">#11468</a></li>
<li class="">fix(search): persist character chunk offsets so search snippets aren't shifted/garbled (fixes #11269) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11479" target="_blank" rel="noopener noreferrer" class="">#11479</a></li>
<li class="">feat(cayenne): storage-aware adaptive CDC tuning — calibration probe, IMDS, I/O-cliff fast path, infeasible-SLO feedback by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11463" target="_blank" rel="noopener noreferrer" class="">#11463</a></li>
<li class="">fix(cayenne): LIMIT N under-delivers on key-deletion tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11490" target="_blank" rel="noopener noreferrer" class="">#11490</a></li>
<li class="">fix(cayenne): live/tier-accurate join build-side stats (merge-on-read deletes + never-shrink NDV) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11496" target="_blank" rel="noopener noreferrer" class="">#11496</a></li>
<li class="">perf(cayenne): kernel-space I/O hygiene — compaction fadvise + staged-commit barrier reduction by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11495" target="_blank" rel="noopener noreferrer" class="">#11495</a></li>
<li class="">feat(cayenne): feed maintained-aggregate IVM from the staged-disk CDC path by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11491" target="_blank" rel="noopener noreferrer" class="">#11491</a></li>
<li class="">feat(cayenne): global adaptive-tuning SLOs with per-dataset overrides; QPH global-only by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11497" target="_blank" rel="noopener noreferrer" class="">#11497</a></li>
<li class="">Update search snapshots by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11473" target="_blank" rel="noopener noreferrer" class="">#11473</a></li>
<li class="">fix: Support reading column types longer than 128 chars in Redshift by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11500" target="_blank" rel="noopener noreferrer" class="">#11500</a></li>
<li class="">fix(cluster): distributed (Ballista) query-execution config + scheduled SF10 bench by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11478" target="_blank" rel="noopener noreferrer" class="">#11478</a></li>
<li class="">fix(http): retry transient response-body read failures; de-flake backoff test by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11482" target="_blank" rel="noopener noreferrer" class="">#11482</a></li>
<li class="">Re-land orphaned deletion-vector cleanup during retention deletes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11501" target="_blank" rel="noopener noreferrer" class="">#11501</a></li>
<li class="">fix(cayenne): re-upsert over a pending delete tombstone records an insert-record (overwrite resurrection) by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11469" target="_blank" rel="noopener noreferrer" class="">#11469</a></li>
<li class="">fix: Flight DoPut silently dropped client batches on early sink completion by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11507" target="_blank" rel="noopener noreferrer" class="">#11507</a></li>
<li class="">Upgrade OpenTelemetry to 0.32 and reqwest to 0.13 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11506" target="_blank" rel="noopener noreferrer" class="">#11506</a></li>
<li class="">fix(queries): run async /v1/queries jobs under the submitting request context by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11505" target="_blank" rel="noopener noreferrer" class="">#11505</a></li>
<li class="">fix(cayenne): restore append-only current-snapshot compaction by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11439" target="_blank" rel="noopener noreferrer" class="">#11439</a></li>
<li class="">perf(cayenne): orphaned deletion-vector cleanup off the write path, behind a knob by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11517" target="_blank" rel="noopener noreferrer" class="">#11517</a></li>
<li class="">fix(datafusion): accurate projected scan byte size so hash joins build the smaller side by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11503" target="_blank" rel="noopener noreferrer" class="">#11503</a></li>
<li class="">fix(cayenne): user-visible DELETE WHERE pk IN (...) reports the real row count by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11514" target="_blank" rel="noopener noreferrer" class="">#11514</a></li>
<li class="">fix(cayenne): seed persisted <code>num_rows</code> for hash-join sizing by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11515" target="_blank" rel="noopener noreferrer" class="">#11515</a></li>
<li class="">fix(cayenne): correctness &amp; memory_limit fixes from perf audit (2 P0, 3 P1) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11516" target="_blank" rel="noopener noreferrer" class="">#11516</a></li>
<li class="">feat(cayenne): wire orphaned-DV cleanup knob to spicepod params + doc sync by <a href="https://github.com/bjchambers" target="_blank" rel="noopener noreferrer" class="">@bjchambers</a> in <a href="https://github.com/spiceai/spiceai/pull/11523" target="_blank" rel="noopener noreferrer" class="">#11523</a></li>
<li class="">Fix s3 vectors API by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11536" target="_blank" rel="noopener noreferrer" class="">#11536</a></li>
<li class="">fix: Placeholder table initialization lock swap by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/11540" target="_blank" rel="noopener noreferrer" class="">#11540</a></li>
<li class="">chore(cluster): bump ballista pin for the null-aware anti-join fix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11544" target="_blank" rel="noopener noreferrer" class="">#11544</a></li>
<li class="">fix(runtime-tools): fix memory table identifier validation rejecting valid names by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11546" target="_blank" rel="noopener noreferrer" class="">#11546</a></li>
<li class="">Bump datafusion to include spiceai/datafusion#181 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11563" target="_blank" rel="noopener noreferrer" class="">#11563</a></li>
<li class="">Update deny.toml by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/11571" target="_blank" rel="noopener noreferrer" class="">#11571</a></li>
<li class="">Bump datafusion (spiceai/datafusion#182) and datafusion-table-providers (#27): fix q16 CollectLeft planning error and SQLite q6 wrong revenue by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11598" target="_blank" rel="noopener noreferrer" class="">#11598</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0...v2.1.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0...v2.1.0</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>CDC</category>
            <category>postgres</category>
            <category>distributed-query</category>
            <category>datafusion</category>
            <category>iceberg</category>
            <category>ballista</category>
            <category>ai</category>
            <category>search</category>
            <category>security</category>
            <category>kafka</category>
            <category>duckdb</category>
            <category>arrow</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0.1 (Jun 17, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0.1</link>
            <guid>https://spiceai.org/releases/v2.0.1</guid>
            <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.0.1 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v2.0.1 is now available! 🛠️</p>
<p>Spice v2.0.1 is a patch release focused on reliability and performance. It speeds up Apache Iceberg reads and fixes bugs across AWS S3 and object-store datasets, data acceleration, distributed query, and authenticated access.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v201">What's New in v2.0.1<a href="https://spiceai.org/releases/v2.0.1#whats-new-in-v201" class="hash-link" aria-label="Direct link to What's New in v2.0.1" title="Direct link to What's New in v2.0.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="faster-iceberg-reads-with-parallel-file-scanning">Faster Iceberg Reads with Parallel File Scanning<a href="https://spiceai.org/releases/v2.0.1#faster-iceberg-reads-with-parallel-file-scanning" class="hash-link" aria-label="Direct link to Faster Iceberg Reads with Parallel File Scanning" title="Direct link to Faster Iceberg Reads with Parallel File Scanning" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/catalogs/iceberg" target="_blank" rel="noopener noreferrer" class="">Apache Iceberg</a> reader now scans data files in parallel (<a href="https://github.com/spiceai/spiceai/pull/11331" target="_blank" rel="noopener noreferrer" class="">#11331</a>), improving read throughput and latency for Iceberg tables that span many files.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="aws-s3--object-store-reliability">AWS S3 &amp; Object-Store Reliability<a href="https://spiceai.org/releases/v2.0.1#aws-s3--object-store-reliability" class="hash-link" aria-label="Direct link to AWS S3 &amp; Object-Store Reliability" title="Direct link to AWS S3 &amp; Object-Store Reliability" translate="no">​</a></h3>
<p>Three fixes improve <a href="https://spiceai.org/docs/components/data-connectors/s3" target="_blank" rel="noopener noreferrer" class="">S3</a> and object-store dataset behavior:</p>
<ul>
<li class=""><strong>Refresh-skip restored</strong> (<a href="https://github.com/spiceai/spiceai/pull/11339" target="_blank" rel="noopener noreferrer" class="">#11339</a>): ETag/Version-based refresh-skip works reliably again, so unchanged S3 objects are no longer re-downloaded on every refresh.</li>
<li class=""><strong>Retry when source files are not yet available</strong> (<a href="https://github.com/spiceai/spiceai/pull/11342" target="_blank" rel="noopener noreferrer" class="">#11342</a>): an object-store dataset whose source files are not present at startup now retries and becomes ready once the data appears, instead of failing permanently.</li>
<li class=""><strong>Path-style addressing for dotted bucket names</strong> (<a href="https://github.com/spiceai/spiceai/pull/11347" target="_blank" rel="noopener noreferrer" class="">#11347</a>): on standard AWS, buckets whose names contain dots now default to path-style addressing, avoiding TLS wildcard certificate errors under virtual-hosted-style HTTPS.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="data-acceleration--distributed-query-fixes">Data Acceleration &amp; Distributed Query Fixes<a href="https://spiceai.org/releases/v2.0.1#data-acceleration--distributed-query-fixes" class="hash-link" aria-label="Direct link to Data Acceleration &amp; Distributed Query Fixes" title="Direct link to Data Acceleration &amp; Distributed Query Fixes" translate="no">​</a></h3>
<p>Two fixes ensure <a href="https://spiceai.org/docs/components/data-accelerators" target="_blank" rel="noopener noreferrer" class="">accelerated</a> datasets behave correctly in more configurations:</p>
<ul>
<li class=""><strong>Acceleration endpoints</strong> (<a href="https://github.com/spiceai/spiceai/pull/11345" target="_blank" rel="noopener noreferrer" class="">#11345</a>): <code>/v1/datasets/{name}/acceleration/refresh</code> (and the related update-refresh-sql, partition-filters, and snapshots endpoints) now work for all accelerated datasets, fixing cases where some incorrectly reported <code>Table is not accelerated</code>.</li>
<li class=""><strong>Distributed clusters</strong> (<a href="https://github.com/spiceai/spiceai/pull/11226" target="_blank" rel="noopener noreferrer" class="">#11226</a>): the <a href="https://spiceai.org/docs/features/distributed-query" target="_blank" rel="noopener noreferrer" class="">distributed query</a> coordinator now serves accelerated data from executors for all accelerated datasets, instead of falling back to reading from the source for some.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="authenticated-query-fixes">Authenticated Query Fixes<a href="https://spiceai.org/releases/v2.0.1#authenticated-query-fixes" class="hash-link" aria-label="Direct link to Authenticated Query Fixes" title="Direct link to Authenticated Query Fixes" translate="no">​</a></h3>
<p>With authentication enabled, queries now consistently run as the requesting user (<a href="https://github.com/spiceai/spiceai/pull/11253" target="_blank" rel="noopener noreferrer" class="">#11253</a>), so per-user behavior such as results caching is correctly scoped to each user.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0.1#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0.1#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0.1#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0.1#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.1, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.1</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.1</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.1</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0.1#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0.1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(ci): key testoperator &amp; validator artifacts by checked-out commit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11281" target="_blank" rel="noopener noreferrer" class="">#11281</a></li>
<li class="">chore(deps): fix cargo-deny advisory failures on release/2.0 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11333" target="_blank" rel="noopener noreferrer" class="">#11333</a></li>
<li class="">chore(deps): bump iceberg-rust to parallel file scanning fork (release/2.0) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11331" target="_blank" rel="noopener noreferrer" class="">#11331</a></li>
<li class="">fix(refresh): restore S3 ETag/Version refresh-skip behind provider wrappers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11339" target="_blank" rel="noopener noreferrer" class="">#11339</a></li>
<li class="">fix(runtime): retry object-store dataset load when source files are not yet available by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11342" target="_blank" rel="noopener noreferrer" class="">#11342</a></li>
<li class="">feat(s3): default to path-style for dotted bucket names on standard AWS by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11347" target="_blank" rel="noopener noreferrer" class="">#11347</a></li>
<li class="">fix(runtime): resolve accelerated table through metadata-enrichment wrapper by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11345" target="_blank" rel="noopener noreferrer" class="">#11345</a></li>
<li class="">fix(cluster): distribute accelerated tables wrapped by metadata/index providers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11226" target="_blank" rel="noopener noreferrer" class="">#11226</a></li>
<li class="">fix: scope request context across the managed query runtime by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11253" target="_blank" rel="noopener noreferrer" class="">#11253</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0...v2.0.1" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0...v2.0.1</a></p>]]></content:encoded>
            <category>release</category>
            <category>distributed-query</category>
            <category>iceberg</category>
            <category>s3</category>
            <category>acceleration</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-stable (Jun 5, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-stable</link>
            <guid>https://spiceai.org/releases/v2.0-stable</guid>
            <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[53 releases since Spice 1.0-stable, Spice.ai OSS has reached the 2.0-stable milestone! 🎉]]></description>
            <content:encoded><![CDATA[<p>53 releases since Spice 1.0-stable, Spice.ai OSS has reached the 2.0-stable milestone! 🎉</p>
<p>Spice v2.0.0 is the next major release of Spice and a major milestone in the project's development, advancing Spice from a single-node engine into a distributed data and query platform built for enterprise AI agents. These agents need low-latency, governed access to data spread across many production systems, and because they generate their own queries autonomously, that access has to be sandboxed, observable, and able to absorb occasional heavy analytical queries without overwhelming the underlying systems. The release is headlined by <strong>multi-node distributed query</strong>, now generally available — multi-active, highly-available, and object-store-native, built on Apache Ballista — distributing both query execution and ingestion across executors with data-local routing and per-executor statistics for distributed join planning. Alongside it, the <strong>Spice Cayenne data accelerator is generally available</strong>, built on the Vortex compressed columnar format, with a high-throughput CDC write path, MERGE INTO, SQL-defined partitioning, inline writes, a dedicated compaction runtime, and write-path statistics for distributed join sizing. The engine also moves to <strong>DataFusion v52</strong> with sort pushdown, a rewritten merge join, and dynamic filters, and the <strong>Spice CLI is rewritten in Rust</strong> as a single self-contained binary.</p>
<p>v2.0 also expands real-time and write-path capabilities across the platform: native <strong>CDC from MongoDB Change Streams and PostgreSQL WAL logical replication</strong>, durable <strong>Kafka CDC offsets</strong>, <strong>DML write-back</strong> for PostgreSQL, Snowflake, DynamoDB, Arrow, and DuckLake, <strong>DDL and MERGE INTO</strong> for Iceberg catalogs, <strong>mutual TLS</strong> across server endpoints and outbound connectors, <strong>HashiCorp Vault and Azure Key Vault secret stores</strong>, <strong>user-defined functions</strong>, hybrid <strong>search with Elasticsearch and DuckDB HNSW vector indexes</strong>, provider-aware <strong>LLM prompt caching</strong>, and the <strong>Responses API across all model providers</strong>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="highlights-in-v200-include">Highlights in v2.0.0 include:<a href="https://spiceai.org/releases/v2.0-stable#highlights-in-v200-include" class="hash-link" aria-label="Direct link to Highlights in v2.0.0 include:" title="Direct link to Highlights in v2.0.0 include:" translate="no">​</a></h2>
<ul>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#spice-cayenne-reaches-general-availability" class="">Spice Cayenne (GA)</a></strong> — generally available on the Vortex compressed columnar format, with WAL-staged writes, inline low-latency writes, fast-path CDC deletes, merge-on-read position deletes, composite &amp; SQL-defined partitioning, MERGE INTO, dedicated compaction runtime, and join-sizing statistics maintained on the write path</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#multi-active-ha-distributed-query-ga" class="">Multi-Active HA Distributed Query (GA)</a></strong> — multi-node distributed query built on Apache Ballista, with object-store-native clustering, dynamic cluster sizing, distributed ingestion, data-local query routing, per-executor table statistics for distributed join planning, and async queries via <code>/v1/queries</code></li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#security-mutual-tls-secret-stores-and-hardening" class="">Mutual TLS (mTLS)</a></strong> — public mTLS for HTTP and Flight, TLS cert hot-reload, and mTLS client certificates for FlightSQL and Spice.ai connectors</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#security-mutual-tls-secret-stores-and-hardening" class="">Enterprise Authentication &amp; Authorization</a></strong> — OIDC bearer-token verification and Cedar-based authorization policy with per-principal row- and column-level filtering</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#security-mutual-tls-secret-stores-and-hardening" class="">New Secret Stores</a></strong> — HashiCorp Vault and Azure Key Vault</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#change-data-capture-cdc-sources" class="">CDC Sources</a></strong> — native MongoDB Change Streams, PostgreSQL WAL logical replication, and durable Kafka CDC offsets — no Debezium or Kafka middleware required</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#dml-ddl-and-write-back" class="">DML &amp; DDL</a></strong> — INSERT/UPDATE/DELETE write-back for PostgreSQL, Snowflake, DynamoDB, and Arrow; <code>CREATE TABLE</code>/<code>DROP TABLE</code> and <code>MERGE INTO</code> for Iceberg catalogs</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#sql--user-defined-functions" class="">User-Defined Functions</a></strong> — SQL UDFs in spicepods, remote UDFs over HTTP, and optional geospatial <code>ST_*</code> UDFs</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#runtime-features" class="">On-Demand Dataset Loading &amp; Unified Query Cancellation</a></strong> — faster startup and end-to-end cancellation across HTTP, Flight, FlightSQL, and MCP</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#data-connectors--catalogs" class="">Dynamic HTTP Connector</a></strong> — OAuth2 refresh tokens, pagination, dynamic headers, subquery-driven parameters, and rate-control state persisted across restarts</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#runtime-features" class="">Storage-Profile Accelerator Tuning &amp; <code>refresh_mode: snapshot</code></a></strong> — storage-aware acceleration defaults and point-in-time snapshot acceleration</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#search--vectors" class="">Search &amp; Vectors</a></strong> — Elasticsearch data connector with native hybrid search, DuckDB HNSW vector engine with a statically linked VSS extension, multi-vector MaxSim embeddings, and a <code>rerank()</code> UDTF</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#ai--llm" class="">AI &amp; LLM</a></strong> — provider-aware prompt caching, Responses API across all providers, MCP Streamable HTTP transport, and a searchable LLM tool registry</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#data-connectors--catalogs" class="">New Data Connectors</a></strong> — Elasticsearch (Alpha), GCS (Alpha), Azure Cosmos DB (Alpha), Git (RC), ADBC, DuckLake (Beta), and catalog connectors for PostgreSQL, MySQL, MSSQL, and Snowflake</li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#rust-cli" class="">Rust CLI</a></strong> — single-binary <code>spice</code> CLI with <code>spice query</code> async REPL, shell completions, and <code>--output=json</code></li>
<li class=""><strong><a href="https://spiceai.org/releases/v2.0-stable#dependency-updates" class="">Dependency upgrades</a></strong> including <strong>DataFusion v52.5</strong>, <strong>DuckDB v1.5.3</strong>, <strong>Arrow v57.2</strong>, <strong>iceberg-rust v0.9.1</strong>, <strong>Turso v0.6.1</strong>, and <strong>Vortex v0.69</strong></li>
</ul>
<p>Spice v2.0 includes several <a href="https://spiceai.org/releases/v2.0-stable#breaking-changes" class="">breaking changes</a>. Review the breaking changes section before upgrading.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="distribution-changes">Distribution Changes<a href="https://spiceai.org/releases/v2.0-stable#distribution-changes" class="hash-link" aria-label="Direct link to Distribution Changes" title="Direct link to Distribution Changes" translate="no">​</a></h2>
<p>AI/ML support including local LLM/ML model and hosted LLM inference is now included in the default Spice build and image. The separate <code>models</code> build variant has been removed.</p>
<p>With models now included by default, the data-only distribution (without AI/ML support) is only published in nightly builds. Official production-ready data-only distributions are available exclusively through <a href="https://spice.ai/pricing" target="_blank" rel="noopener noreferrer" class="">Spice Cloud</a> and the Enterprise release.</p>
<p>A new Network Attached Storage (NAS) distribution with built-in SMB and NFS data connector support is also available in nightly builds and with <a href="https://spice.ai/pricing" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a>.</p>
<table><thead><tr><th>Distribution / Variant</th><th>Open Source</th><th>Spice Cloud</th><th>Enterprise</th></tr></thead><tbody><tr><td>Default</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Data</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>NAS (SMB + NFS)</td><td>Nightly only</td><td>❌</td><td>✅</td></tr><tr><td>Metal (macOS)</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>CUDA (Linux)</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>Allocator variants</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>ODBC connector</td><td>Local build only</td><td>✅</td><td>✅</td></tr></tbody></table>
<p>Native Windows builds are no longer provided; use <a href="https://learn.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noopener noreferrer" class="">WSL</a> for local development. For more details, see the <a class="" href="https://spiceai.org/docs/reference/distributions">Distributions documentation</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200">What's New in v2.0.0<a href="https://spiceai.org/releases/v2.0-stable#whats-new-in-v200" class="hash-link" aria-label="Direct link to What's New in v2.0.0" title="Direct link to What's New in v2.0.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="spice-cayenne-reaches-general-availability">Spice Cayenne Reaches General Availability<a href="https://spiceai.org/releases/v2.0-stable#spice-cayenne-reaches-general-availability" class="hash-link" aria-label="Direct link to Spice Cayenne Reaches General Availability" title="Direct link to Spice Cayenne Reaches General Availability" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Spice Cayenne data accelerator</a> is generally available in v2.0, with a major focus across the release candidates on write-path throughput, correctness, and distributed operation.</p>
<p><strong>Write path &amp; ingest</strong>:</p>
<ul>
<li class=""><strong>Staged Append Writes</strong>: WAL-based staged append writes prevent partial writes and data loss on stream errors — batches commit atomically.</li>
<li class=""><strong>Inline Writes</strong>: Small writes are serialized as Arrow IPC and committed directly into the Cayenne metastore, bypassing the staged Vortex write path for low-latency ingest. Inline upserts atomically rewrite existing inline rows, inline data stays query-visible via an in-memory union scan, and rows are checkpointed to Vortex when thresholds are reached. Inline writes now also proceed with pending deletions in flight, and inline flush caps scale with available memory and storage class.</li>
<li class=""><strong>Fast-Path CDC Deletes</strong>: <code>DELETE</code> statements whose filters identify primary keys directly — including composite keys expressed as <code>(k1, k2) IN ((...), (...))</code> — skip the table scan entirely.</li>
<li class=""><strong>Merge-On-Read Position Deletes</strong>: Primary-key upsert tables use position deletes with memory-pool accounting, avoiding full-table rewrites on update-heavy workloads.</li>
<li class=""><strong>Resident Upsert Keysets</strong>: CDC upsert primary-key keysets stay resident between batches, avoiding per-batch full-table rebuilds.</li>
<li class=""><strong>CDC Sub-Batch Efficiency</strong>: Interleaved upsert/delete workloads produce fewer sub-batch splits, with last-write-wins deduplication applied within batches.</li>
<li class=""><strong>Dedicated Compaction Runtime</strong>: Background compaction runs on a dedicated thread pool with CDC pipelining and protected snapshots, isolating compaction work from query and ingest paths.</li>
</ul>
<p><strong>Query &amp; planning</strong>:</p>
<ul>
<li class=""><strong>Join Filter Propagation</strong>: Filters propagate across equi-join keys, with range fallback for large join filters and IN-list rewrites.</li>
<li class=""><strong>Write-Path Join-Sizing Statistics</strong>: Cayenne maintains live row counts and HyperLogLog-based distinct-value estimates on the write path, so distributed <code>JoinSelection</code> can correctly size joins without rescans.</li>
<li class=""><strong>Scan-Result Cache</strong>: A new scan-result cache accelerates hot reads, with parallel Vortex partition writes and lock-free deletion caches with bloom-prefiltered probes.</li>
</ul>
<p><strong>SQL &amp; catalog</strong>:</p>
<ul>
<li class=""><strong>MERGE INTO</strong>: Upsert-style <code>MERGE INTO</code> for Cayenne catalog tables, distributed across executors in cluster mode.</li>
<li class=""><strong><code>PARTITION BY</code> in SQL</strong>: Define partitioning directly in <code>CREATE TABLE ... PARTITION BY (...)</code>; metadata is persisted in the catalog and survives restarts.</li>
<li class=""><strong>Composite Partitioning</strong>: <code>partition_by: [col1, col2]</code> with hierarchical path-like keys.</li>
<li class=""><strong>File-Based Retention Deletes</strong>: Time-based retention uses file-level deletes for both position-based and primary-key tables.</li>
</ul>
<p><strong>Correctness</strong>: Synchronized partition commits, correct <code>NULL</code>-sentinel handling for nullable partition expressions, tombstoned inline-checkpointed rows on upsert (preventing duplicate primary keys), and live reads through expired protected snapshots.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="multi-active-ha-distributed-query-ga">Multi-Active HA Distributed Query (GA)<a href="https://spiceai.org/releases/v2.0-stable#multi-active-ha-distributed-query-ga" class="hash-link" aria-label="Direct link to Multi-Active HA Distributed Query (GA)" title="Direct link to Multi-Active HA Distributed Query (GA)" translate="no">​</a></h3>
<blockquote>
<p><a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> feature. See <a href="https://docs.spice.ai/docs/enterprise/production/high-availability" target="_blank" rel="noopener noreferrer" class="">High Availability</a>.</p>
</blockquote>
<p><a href="https://spiceai.org/docs/features/distributed-query" target="_blank" rel="noopener noreferrer" class="">Distributed Query</a> is generally available. Built on Apache Ballista, it distributes query execution across multiple active executor nodes with no single point of failure, reading directly from object storage rather than relying on a central cluster.</p>
<p>Distributed query supports two execution modes:</p>
<ul>
<li class=""><strong>Synchronous</strong>: Queries for accelerated datasets are distributed across executors and results stream back in real-time — best for interactive, latency-sensitive queries.</li>
<li class=""><strong>Asynchronous</strong>: Queries submitted via the HTTP <code>/v1/queries</code> API materialize results to object storage for later retrieval — best for long-running analytical and batch workloads.</li>
</ul>
<p><strong>Key capabilities</strong>:</p>
<ul>
<li class=""><strong>Dynamic Cluster Sizing</strong>: The planner adjusts parallelism to the number of active executors as nodes join or leave.</li>
<li class=""><strong>Distributed Ingestion</strong>: Ingestion for partitioned accelerated tables is distributed across executors, with partition-aware write-through splitting scheduler-side Flight <code>DoPut</code> writes to the responsible executors.</li>
<li class=""><strong>Data-Local Query Routing</strong>: Cayenne catalog queries route to the executors holding the relevant partitions.</li>
<li class=""><strong>Per-Executor Table Statistics</strong>: Executors report table statistics — including NDV-aware estimates — so distributed <code>JoinSelection</code> can size joins correctly, fixing out-of-memory conditions on large semi-joins.</li>
<li class=""><strong>Readiness &amp; Failure Detection</strong>: <code>/v1/ready</code> gates on a configurable executor quorum for safe rolling deployments; scheduler readiness additionally waits for executor partition loads; executor heartbeat timeout reduced from 180s to 30s.</li>
<li class=""><strong>Distributed DML &amp; DDL</strong>: UPDATE/DELETE forwarding to all executors, executor DDL sync for late joiners, and distributed <code>MERGE INTO</code>.</li>
<li class=""><strong>Cluster Observability</strong>: New cluster metrics (including <code>scheduler_active_executors_count</code>), distributed <code>runtime.task_history</code> replication, and a Grafana dashboard.</li>
<li class=""><strong>Ballista S3 Shuffle</strong>: Async queries with <code>runtime.params.shuffle_location: s3://...</code> complete reliably with executor-environment-derived S3 clients.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="security-mutual-tls-secret-stores-and-hardening">Security: Mutual TLS, Secret Stores, and Hardening<a href="https://spiceai.org/releases/v2.0-stable#security-mutual-tls-secret-stores-and-hardening" class="hash-link" aria-label="Direct link to Security: Mutual TLS, Secret Stores, and Hardening" title="Direct link to Security: Mutual TLS, Secret Stores, and Hardening" translate="no">​</a></h3>
<blockquote>
<p>Several capabilities in this section are <a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> features. See <a href="https://docs.spice.ai/docs/enterprise/production/security" target="_blank" rel="noopener noreferrer" class="">Enterprise Security</a>.</p>
</blockquote>
<p><strong>Mutual TLS</strong> across the platform:</p>
<ul>
<li class=""><strong>Public mTLS for HTTP and Flight</strong>: <code>client_auth_mode: request</code> (optional, for migration windows) or <code>required</code> (strict) client-certificate verification.</li>
<li class=""><strong>TLS Cert Hot-Reload</strong>: The runtime reloads TLS certificates on <code>SIGHUP</code> for zero-downtime rotation.</li>
<li class=""><strong>Outbound mTLS Client Certificates</strong>: FlightSQL and Spice.ai data connectors present client certificates to upstream services; the <code>spice sql</code> REPL supports mTLS client auth.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">tls</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">certificate_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/server.crt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">key_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/server.key</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">client_auth_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> required</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">client_auth_ca_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/client</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">ca.crt</span><br></div></code></pre></div></div>
<p><strong>Authentication &amp; Authorization</strong> (Spice.ai Enterprise):</p>
<ul>
<li class=""><strong>OIDC Authentication</strong>: Validate <a href="https://docs.spice.ai/docs/enterprise/features/authentication" target="_blank" rel="noopener noreferrer" class="">OIDC</a> bearer tokens (JWTs) issued by enterprise identity providers — Microsoft Entra ID, Okta, Auth0, AWS Cognito, and Google — for secure access to runtime endpoints, standalone or combined with API keys.</li>
<li class=""><strong>Principal-Based Policy Enforcement</strong>: Fine-grained, Cedar-based <a href="https://docs.spice.ai/docs/enterprise/features/policy" target="_blank" rel="noopener noreferrer" class="">authorization policy</a> configured under <code>runtime.authorization</code> governs allow/deny access across datasets, models, tools, and endpoints. Combined with identity SQL functions (<code>current_principal()</code>, <code>current_principal_email()</code>, <code>current_principal_groups()</code>), policies enforce per-principal row-level filtering and column masking.</li>
</ul>
<p><strong>New Secret Stores</strong>: <a href="https://spiceai.org/docs/components/secret-stores/hashicorp-vault" target="_blank" rel="noopener noreferrer" class="">HashiCorp Vault</a> (KV v1/v2; <code>token</code>, <code>approle</code>, <code>kubernetes</code>, and <code>jwt</code> auth with automatic lease renewal) and <a href="https://spiceai.org/docs/components/secret-stores/azure-keyvault" target="_blank" rel="noopener noreferrer" class="">Azure Key Vault</a> (service principal, managed identity, workload identity, Azure CLI, or auto-detect; sovereign cloud support).</p>
<p><strong>Hardening</strong>:</p>
<ul>
<li class=""><strong>Read-only API Key Enforcement</strong> on the Flight <code>DoGet</code> path and async query endpoints.</li>
<li class=""><strong>Per-Principal Cache Namespacing</strong>: SQL, search, and caching-accelerator caches are namespaced per authenticated principal so cached results never cross identity boundaries.</li>
<li class=""><strong>API Key Timing Leak &amp; Remote-UDF SSRF</strong>: Closed a timing-based position-disclosure leak in API key comparison and blocked SSRF via remote UDF endpoints.</li>
<li class=""><strong>Snowflake Function Deny-List</strong>: A function deny-list is enforced in Snowflake federation pushdown, and Snowflake account identifiers and auth configuration are validated at startup.</li>
<li class=""><strong>MCP <code>allowed_hosts</code></strong>: MCP servers can be restricted to an explicit allowlist of upstream hosts.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="change-data-capture-cdc-sources">Change Data Capture (CDC) Sources<a href="https://spiceai.org/releases/v2.0-stable#change-data-capture-cdc-sources" class="hash-link" aria-label="Direct link to Change Data Capture (CDC) Sources" title="Direct link to Change Data Capture (CDC) Sources" translate="no">​</a></h3>
<p>See <a href="https://spiceai.org/docs/features/cdc" target="_blank" rel="noopener noreferrer" class="">Change Data Capture (CDC)</a> for an overview of CDC in Spice.</p>
<ul>
<li class=""><strong>MongoDB Change Streams</strong>: <a href="https://spiceai.org/docs/components/data-connectors/mongodb" target="_blank" rel="noopener noreferrer" class="">MongoDB</a> datasets with <code>refresh_mode: changes</code> stream changes natively into any local accelerator — no Debezium or Kafka required.</li>
<li class=""><strong>PostgreSQL Native Replication (WAL)</strong>: <a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> datasets stream INSERT/UPDATE/DELETE directly from logical replication using <code>pgoutput</code> decoding, with automatic per-replica slot management, an initial <code>REPEATABLE READ</code> bootstrap snapshot, and durable LSN acknowledgement.</li>
<li class=""><strong>Kafka CDC Offset Persistence</strong>: <a href="https://spiceai.org/docs/components/data-connectors/kafka" target="_blank" rel="noopener noreferrer" class="">Kafka</a> CDC offsets persist in sidecar tables for durable, resumable streams across restarts and failovers.</li>
<li class=""><strong>Pipelined CDC Ingestion</strong>: Source reads overlap with batch apply, with envelope coalescing and improved nullability propagation.</li>
<li class=""><strong>Debezium Schema Evolution</strong>: Schema changes in <a href="https://spiceai.org/docs/components/data-connectors/debezium" target="_blank" rel="noopener noreferrer" class="">Debezium</a>-sourced datasets no longer break dataset initialization on reload.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_table</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_table</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dml-ddl-and-write-back">DML, DDL, and Write-Back<a href="https://spiceai.org/releases/v2.0-stable#dml-ddl-and-write-back" class="hash-link" aria-label="Direct link to DML, DDL, and Write-Back" title="Direct link to DML, DDL, and Write-Back" translate="no">​</a></h3>
<p>Spice v2.0 turns more connectors and catalogs into full read/write tables:</p>
<ul>
<li class=""><strong>PostgreSQL DML</strong>: <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> write-back on <a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> datasets, with foreign-key metadata exposed via the PostgreSQL catalog connector.</li>
<li class=""><strong>Snowflake DML</strong>: <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> write-back on <a href="https://spiceai.org/docs/components/data-connectors/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a> datasets.</li>
<li class=""><strong>DynamoDB DML</strong>: <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> for <a href="https://spiceai.org/docs/components/data-connectors/dynamodb" target="_blank" rel="noopener noreferrer" class="">DynamoDB</a>, complementing read and CDC streaming.</li>
<li class=""><strong>Arrow Primary Key Upserts</strong>: Native update-or-insert semantics for in-memory <a href="https://spiceai.org/docs/components/data-accelerators/arrow" target="_blank" rel="noopener noreferrer" class="">Arrow</a>-accelerated tables.</li>
<li class=""><strong>DDL for Iceberg</strong>: <code>CREATE TABLE</code> and <code>DROP TABLE</code> via FlightSQL and <code>/v1/sql</code> for <a href="https://iceberg.apache.org/" target="_blank" rel="noopener noreferrer" class="">Iceberg</a>, with <code>catalog.access: read_write_create</code>.</li>
<li class=""><strong>DuckLake INSERT</strong>: DuckLake catalog tables with <code>read_write</code> access support <code>INSERT</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql--user-defined-functions">SQL &amp; User-Defined Functions<a href="https://spiceai.org/releases/v2.0-stable#sql--user-defined-functions" class="hash-link" aria-label="Direct link to SQL &amp; User-Defined Functions" title="Direct link to SQL &amp; User-Defined Functions" translate="no">​</a></h3>
<p>See the <a href="https://spiceai.org/docs/reference/sql" target="_blank" rel="noopener noreferrer" class="">SQL Reference</a> for the full SQL surface area.</p>
<ul>
<li class=""><strong>User-Defined Functions</strong>: Define reusable SQL UDFs as first-class spicepod components, or invoke remote functions over HTTP (Spice.ai Enterprise), plus table user functions.</li>
<li class=""><strong>Spatial SQL UDFs</strong>: Optional geospatial <code>ST_*</code> UDFs for geometry workloads.</li>
<li class=""><strong>JSON UDTFs</strong>: <code>flatten_json</code>, <code>json_tree</code>, and <code>flatten_json_properties</code> table-valued functions for JSON transformation and schema decomposition (with options such as <code>expand_maps</code>). See <a href="https://spiceai.org/docs/reference/sql/json" target="_blank" rel="noopener noreferrer" class="">JSON Functions and Operators</a>.</li>
<li class=""><strong>PostgreSQL Metadata UDFs</strong>: Dataset and column descriptions are exposed via PostgreSQL-compatible UDFs (<code>obj_description</code>, <code>col_description</code>), so BI tools and <code>psql</code> surface Spice metadata.</li>
<li class=""><strong>FlightSQL Substrait Plans</strong>: <code>CommandStatementSubstraitPlan</code> support for clients submitting Substrait-encoded plans.</li>
<li class=""><strong>SQL REPL Expanded View</strong>: Toggle <code>\x</code> for a vertical key-value layout on wide result sets.</li>
<li class=""><strong>Prepared statement, federation, and unparsing fixes</strong> across the engine, including keeping correlated subqueries out of <code>JOIN ON</code> conditions for Spice Cloud federation and correct <code>EXISTS</code>/<code>NOT EXISTS</code> subquery handling in the federation analyzer.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="runtime-features">Runtime Features<a href="https://spiceai.org/releases/v2.0-stable#runtime-features" class="hash-link" aria-label="Direct link to Runtime Features" title="Direct link to Runtime Features" translate="no">​</a></h3>
<ul>
<li class=""><strong>On-Demand Dataset Loading</strong>: Datasets can be deferred — registered with a declared schema at startup (<code>columns[].type</code>, <code>columns[].nullable</code>) and fully resolved on first reference, reducing startup time and memory for large spicepods.</li>
<li class=""><strong>Unified Query Cancellation</strong>: HTTP, Flight, FlightSQL, MCP, and internal execution paths honour a unified cancellation signal — disconnects, REPL <code>Ctrl-C</code>, and cancelled HTTP requests cancel the query end-to-end.</li>
<li class=""><strong>Storage-Profile Accelerator Tuning</strong>: <code>acceleration.storage_profile</code> (<code>auto</code>, <code>local_ssd</code>, <code>ebs</code>, <code>tmpfs</code>) applies storage-aware defaults across DuckDB, SQLite, Turso, and Cayenne file-mode accelerators; <code>auto</code> detects the backing storage.</li>
<li class=""><strong><code>refresh_mode: snapshot</code></strong> (Spice.ai Enterprise): Point-in-time snapshot acceleration with SQLite/Turso WAL flushing and Cayenne metastore slice integration, now reporting accurate readiness when no snapshot exists yet.</li>
<li class=""><strong>Structured Component Errors</strong>: <code>/v1/datasets?status=true</code> and <code>/v1/models?status=true</code> return structured <code>error</code> objects (<code>category</code>, <code>type</code>, <code>code</code>) and human-readable <code>error_message</code> fields; the CLI shows an <code>ERROR</code> column.</li>
<li class=""><strong>Actionable Config Errors</strong>: Parameter typos, missing secret references, and unknown engine names produce specific, actionable errors with suggestions.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="spicepod-v2">Spicepod v2<a href="https://spiceai.org/releases/v2.0-stable#spicepod-v2" class="hash-link" aria-label="Direct link to Spicepod v2" title="Direct link to Spicepod v2" translate="no">​</a></h3>
<p>Spicepods now support <code>version: v2</code>, the default for <code>spice init</code>, while <code>v1</code> spicepods continue to work with automatic migration of deprecated fields.</p>
<table><thead><tr><th>Version</th><th>Status</th></tr></thead><tbody><tr><td><code>v2</code></td><td>Default. Used by <code>spice init</code>.</td></tr><tr><td><code>v1</code></td><td>Supported. Deprecated fields auto-migrate.</td></tr><tr><td><code>v1beta1</code></td><td>Removed. No longer accepted.</td></tr></tbody></table>
<table><thead><tr><th>v1 (deprecated)</th><th>v2 (preferred)</th><th>Notes</th></tr></thead><tbody><tr><td><code>runtime.results_cache</code></td><td><code>runtime.caching.sql_results</code></td><td>All fields migrate automatically. <code>cache_max_size</code> → <code>max_size</code>.</td></tr><tr><td><code>runtime.memory_limit</code></td><td><code>runtime.query.memory_limit</code></td><td>Auto-migrated. <code>query.memory_limit</code> takes priority if both set.</td></tr><tr><td><code>runtime.temp_directory</code></td><td><code>runtime.query.temp_directory</code></td><td>Auto-migrated. <code>query.temp_directory</code> takes priority if both set.</td></tr><tr><td><code>dataset.invalid_type_action</code></td><td><code>dataset.unsupported_type_action</code></td><td>Auto-migrated. v2 adds a new <code>string</code> variant.</td></tr></tbody></table>
<p>New v2 fields include <code>runtime.ready_state</code>, <code>runtime.query.spill_compression</code>, <code>runtime.caching.sql_results.stale_while_revalidate_ttl</code>, <code>runtime.caching.sql_results.encoding</code>, scheduler partition-assignment configuration, and <code>catalog.access: read_write_create</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="data-connectors--catalogs">Data Connectors &amp; Catalogs<a href="https://spiceai.org/releases/v2.0-stable#data-connectors--catalogs" class="hash-link" aria-label="Direct link to Data Connectors &amp; Catalogs" title="Direct link to Data Connectors &amp; Catalogs" translate="no">​</a></h3>
<p><strong>New connectors</strong>:</p>
<ul>
<li class=""><strong>Elasticsearch (Alpha, Spice.ai Enterprise)</strong>: Query Elasticsearch indexes as SQL tables with native hybrid search — <code>vector_search()</code> kNN, <code>text_search()</code> BM25, and <code>rrf()</code> fusion — plus Elasticsearch as a backing vector engine, direct FTS engine configuration, and index lifecycle controls.</li>
<li class=""><strong>GCS (Alpha)</strong>: Federated queries against Google Cloud Storage, with Iceberg table support.</li>
<li class=""><strong>Azure Cosmos DB (Alpha)</strong>: Read-only NoSQL / Core SQL API connector with cross-partition scans and schema inference.</li>
<li class=""><strong>Git (RC)</strong>: HTTPS/SSH auth, Git LFS support, and per-repo connection resilience.</li>
<li class=""><strong>ADBC</strong>: Data connector and catalog with full query federation, BigQuery support, and schema/table discovery.</li>
<li class=""><strong>DuckLake (Beta)</strong>: Lakehouse-style data management with DuckDB as the metadata catalog and object storage for data — ACID transactions, time travel, and schema evolution on Parquet.</li>
<li class=""><strong>Self-Hosted Spice Connector</strong>: Connect Spice to another self-hosted Spice runtime as a federated source.</li>
</ul>
<p><strong>New catalog connectors</strong> for <a href="https://spiceai.org/docs/components/catalogs/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a>, <a href="https://spiceai.org/docs/components/catalogs/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL</a>, <a href="https://spiceai.org/docs/components/catalogs/mssql" target="_blank" rel="noopener noreferrer" class="">MSSQL</a>, and <a href="https://spiceai.org/docs/components/catalogs/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a>, using native metadata catalogs for schema and table discovery. <a href="https://spiceai.org/docs/components/catalogs/unity-catalog" target="_blank" rel="noopener noreferrer" class="">Unity Catalog</a> compatibility extends to OSS Unity Catalog deployments, and DDL-defined catalogs can expose and query views.</p>
<p><strong>HTTP connector</strong>: OAuth2 refresh-token authentication, query-parameter and no-limit pagination, dynamic request headers parameterised from query predicates, subquery-driven request parameters for fan-out queries, response metadata as queryable columns, map-to-array conversion, shared and persistent rate-control state across restarts and replicas, no caching of transient <code>429</code>/<code>5xx</code> errors, and a correctly populated <code>fetched_at</code> column.</p>
<p><strong>JSON ingestion</strong>: Single-object documents, JSONL, BOM-prefixed input, Socrata SODA responses, format auto-detection, and RFC 6901 <code>json_pointer</code> extraction of nested payloads.</p>
<p><strong>Databricks</strong>: Resilience controls, Unity Catalog-aware permission prechecks with structured advisory errors, Classic SQL Warehouse foreign-table compatibility, <code>connect_timeout</code>/<code>client_timeout</code> parameters, a Databricks SQL dialect for federation, and <a href="https://spiceai.org/docs/components/data-connectors/delta-lake" target="_blank" rel="noopener noreferrer" class="">Delta Lake column mapping</a> (Name and Id modes).</p>
<p><strong>Other connector improvements</strong>: MongoDB SRV support; MySQL <code>mysql_zero_date_behavior</code>; Snowflake <code>OBJECT</code>, <code>MAP</code>, <code>GEOGRAPHY</code>, <code>GEOMETRY</code>, <code>VECTOR</code>, and <code>TIMESTAMP_LTZ</code> types plus key-pair auth; ClickHouse <code>Date32</code>; S3 <code>s3_url_style</code> for path-style addressing and faster Parquet reads; GraphQL custom auth headers; Oracle and MSSQL sort/limit pushdown; GitHub GraphQL resilience; and improved Kafka reliability.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ai--llm">AI &amp; LLM<a href="https://spiceai.org/releases/v2.0-stable#ai--llm" class="hash-link" aria-label="Direct link to AI &amp; LLM" title="Direct link to AI &amp; LLM" translate="no">​</a></h3>
<ul>
<li class=""><strong>Provider-Aware Prompt Caching</strong>: <a href="https://spiceai.org/docs/features/large-language-models" target="_blank" rel="noopener noreferrer" class="">LLM</a> calls automatically use provider-side prompt caching (e.g., Anthropic, OpenAI) for system prompts and tool descriptions, reducing latency and cost.</li>
<li class=""><strong>Responses API Across All Providers</strong>: The Responses API works with every configured model provider, including streaming <code>response.output_text.delta</code> events and <code>Authorization: Bearer</code> header support.</li>
<li class=""><strong>Multi-Vector Embeddings with MaxSim</strong>: List-of-string columns produce one embedding per element with MaxSim/mean/sum scoring for ColBERT-style late-interaction retrieval, plus a <code>_match</code> column identifying the best-matching element.</li>
<li class=""><strong><code>rerank()</code> UDTF</strong>: Reorder results from <code>vector_search</code>, <code>text_search</code>, or <code>rrf</code> using any registered chat model as a reranker, with automatic query propagation and pushdown support.</li>
<li class=""><strong>Searchable LLM Tool Registry</strong>: Agents discover tools via semantic search instead of enumerating every tool in the system prompt.</li>
<li class=""><strong>MCP Improvements</strong>: Streamable HTTP transport (<code>/v1/mcp</code>) on rmcp v1.5.0, native auth for streamable HTTP tools (<code>mcp_auth_token</code>, <code>mcp_headers</code>), external MCP server tool calls traced in task history, and configurable <code>allowed_hosts</code>.</li>
<li class=""><strong>Per-Model Rate-Limited AI UDF Execution</strong> for controlling concurrent AI function invocations.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="search--vectors">Search &amp; Vectors<a href="https://spiceai.org/releases/v2.0-stable#search--vectors" class="hash-link" aria-label="Direct link to Search &amp; Vectors" title="Direct link to Search &amp; Vectors" translate="no">​</a></h3>
<ul>
<li class=""><strong>DuckDB Vector Engine</strong>: <code>vector_engine: duckdb</code> uses DuckDB's HNSW index for fast approximate nearest-neighbor search without an external vector store. In v2.0.0, the DuckDB VSS extension is <strong>statically linked</strong> into the bundled DuckDB, so HNSW vector search works out-of-the-box on clean machines with no extension download. HNSW indexes are preserved across data refresh, and <code>cosine_distance</code> pushes down via <code>array_cosine_distance</code>.</li>
<li class=""><strong>Hybrid Search</strong>: Combine kNN vector search and BM25 full-text search with reciprocal rank fusion (<code>rrf()</code>), backed by Tantivy, Elasticsearch, or DuckDB.</li>
<li class=""><strong>Full-Text Search Performance</strong>: Significantly faster Tantivy ingestion with rollback-on-error, and search metadata is correctly preserved on indexing and in Vortex physical schema calculation.</li>
<li class=""><strong>Embedding Validation</strong>: <code>row_id</code> columns are validated during dataset initialization.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="caching">Caching<a href="https://spiceai.org/releases/v2.0-stable#caching" class="hash-link" aria-label="Direct link to Caching" title="Direct link to Caching" translate="no">​</a></h3>
<p>Improvements across <a href="https://spiceai.org/docs/features/caching" target="_blank" rel="noopener noreferrer" class="">Caching</a>:</p>
<ul>
<li class=""><strong>Stale-While-Revalidate</strong>: <code>runtime.caching.sql_results.stale_while_revalidate_ttl</code> serves stale results while revalidating in the background.</li>
<li class=""><strong>Cache Encoding</strong>: Optional compression (e.g., <code>zstd</code>) for SQL results cache entries.</li>
<li class=""><strong>Retention Policies</strong> for cached query results, and improved CDC-driven cache invalidation (including view plan invalidation on updates).</li>
<li class=""><strong>Idle Cache Maintenance</strong>: Periodic maintenance drains invalidation predicates on idle caches, fixing unbounded memory growth in rarely-read caches.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="performance--query-engine">Performance &amp; Query Engine<a href="https://spiceai.org/releases/v2.0-stable#performance--query-engine" class="hash-link" aria-label="Direct link to Performance &amp; Query Engine" title="Direct link to Performance &amp; Query Engine" translate="no">​</a></h3>
<p><a href="https://datafusion.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache DataFusion</a> is upgraded to <strong>v52.5</strong> over the course of the release cycle, bringing:</p>
<ul>
<li class=""><strong>Sort Pushdown to Scans</strong>: ~30x faster top-K queries on pre-sorted data; Parquet scans reverse row-group order for <code>DESC</code> on <code>ASC</code>-sorted files.</li>
<li class=""><strong>Rewritten Sort-Merge Join</strong>: Up to three orders of magnitude faster in pathological cases (e.g., TPC-H Q21: minutes → milliseconds).</li>
<li class=""><strong>Dynamic Filters</strong>: <code>MIN</code>/<code>MAX</code> aggregates and hash-join build sides prune files, row groups, and rows during execution.</li>
<li class=""><strong>Faster <code>CASE</code> Expressions, statistics caching, and prefix-aware list-files caching</strong> for faster planning.</li>
<li class=""><strong><code>TableProvider</code> DELETE/UPDATE hooks and the <code>RelationPlanner</code> API</strong> for extensible SQL planning.</li>
<li class=""><strong>Strict Overflow Handling</strong>: <code>try_cast_to</code> errors on overflow instead of silently producing NULLs.</li>
</ul>
<p>Additional engine work: default query memory limit raised from 70% to 90% with <code>GreedyMemoryPool</code>, partial aggregation optimization for <code>FlightSQLExec</code>, improved partitioned query planning, and metastore transaction support to prevent concurrent conflicts.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rust-cli">Rust CLI<a href="https://spiceai.org/releases/v2.0-stable#rust-cli" class="hash-link" aria-label="Direct link to Rust CLI" title="Direct link to Rust CLI" translate="no">​</a></h3>
<p>The Spice CLI is completely rewritten from Go to Rust — a single <code>spice</code> binary built from the same codebase as <code>spiced</code>, with full feature parity across 27+ commands.</p>
<ul>
<li class=""><strong><code>spice query</code></strong>: Interactive REPL for <a href="https://spiceai.org/docs/features/query-federation/async-queries" target="_blank" rel="noopener noreferrer" class="">async queries</a> with multi-line SQL, progress indication, and cancellation.</li>
<li class=""><strong><code>spice dataset configure</code></strong>: Non-interactive flag-based configuration (<code>--from</code>, <code>--description</code>, <code>--param KEY=VALUE</code>, <code>--set</code>) alongside interactive prompts.</li>
<li class=""><strong><code>spice completions</code></strong>: Shell completion script generation.</li>
<li class=""><strong><code>--output=json</code></strong>: Machine-readable output for scripting; <code>spice login --output</code> adds <code>env</code>, <code>json</code>, and <code>keychain</code> modes.</li>
<li class=""><strong><code>spice init</code></strong> writes a <code>yaml-language-server</code> schema directive for IDE completions.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="observability">Observability<a href="https://spiceai.org/releases/v2.0-stable#observability" class="hash-link" aria-label="Direct link to Observability" title="Direct link to Observability" translate="no">​</a></h3>
<ul>
<li class=""><strong>OpenTelemetry</strong>: Exporter fixes, authenticated metrics export, configurable metric name prefix (<code>runtime.telemetry.metric_prefix</code>), delta temporality by default, and OTLP resource attributes via <code>runtime.telemetry.properties</code>.</li>
<li class=""><strong>Query Metrics</strong>: The <code>query_executions</code> metric gains a <code>datasets</code> dimension for per-dataset query attribution.</li>
<li class=""><strong>Ingestion Metrics</strong>: <code>rows_written</code>, <code>bytes_written</code>, and <code>dataset_acceleration_size_bytes</code> for acceleration refresh and Flight <code>DoPut</code>/ADBC ingestion, and <code>EXPLAIN ANALYZE</code> metrics in <code>FlightSQLExec</code>.</li>
<li class=""><strong>Task History</strong>: Distributed task history in cluster mode and tracing for external MCP server tool calls.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="notable-bug-fixes">Notable Bug Fixes<a href="https://spiceai.org/releases/v2.0-stable#notable-bug-fixes" class="hash-link" aria-label="Direct link to Notable Bug Fixes" title="Direct link to Notable Bug Fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>localpod synchronization</strong>: <code>localpod</code> child datasets correctly track parent refreshes when the parent uses the in-memory Arrow accelerator.</li>
<li class=""><strong>Spice Cloud federation</strong>: Correlated subqueries are kept out of <code>JOIN ON</code> conditions, fixing rejected federated queries.</li>
<li class=""><strong><code>refresh_mode: snapshot</code></strong>: No longer reports Ready with empty data when no snapshot exists.</li>
<li class=""><strong>Search metadata</strong>: Field and schema metadata preserved on search indexing and in Vortex physical schema calculation.</li>
<li class=""><strong>HTTP connector</strong>: <code>fetched_at</code> column is correctly populated.</li>
<li class=""><strong>Connector correctness</strong>: DynamoDB Streams transient-error retries and typed-NULL DML handling; ScyllaDB physical filter pushdown disabled to fix incorrect results; MSSQL <code>TOP N</code> pushdown; DuckDB DELETE/UPDATE on <code>full</code> and <code>caching</code> refresh modes; Turso checked arithmetic for timestamp conversions; ODBC queries no longer silently return 0 rows on failure; Flight <code>GetFlightInfo</code>/<code>DoGet</code> schema parity.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.0-stable#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version</th></tr></thead><tbody><tr><td><strong>DataFusion</strong></td><td>v52.5</td></tr><tr><td><strong>Ballista</strong></td><td>v52</td></tr><tr><td><strong>Arrow (arrow-rs)</strong></td><td>v57.2</td></tr><tr><td><strong>DuckDB</strong></td><td>v1.5.3 (with statically linked VSS)</td></tr><tr><td><strong>iceberg-rust</strong></td><td>v0.9.1</td></tr><tr><td><strong>Turso (libsql)</strong></td><td>v0.6.1</td></tr><tr><td><strong>Vortex</strong></td><td>v0.69.0</td></tr><tr><td><strong>delta_kernel</strong></td><td>v0.18.2</td></tr><tr><td><strong>rmcp (MCP)</strong></td><td>v1.5.0</td></tr><tr><td><strong>mistral.rs</strong></td><td>v0.8.x (candle v0.10.1)</td></tr><tr><td><strong>ADBC Core</strong></td><td>v0.23</td></tr><tr><td><strong>Rust toolchain</strong></td><td>v1.94.1</td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-stable#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/cluster2600" target="_blank" rel="noopener noreferrer" class="">@cluster2600</a></li>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-stable#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<ul>
<li class="">
<p><strong>Models included by default</strong>: The separate <code>models</code> build variant has been removed. Local LLM inference is always included in the default build and image.</p>
</li>
<li class="">
<p><strong>Windows native builds removed</strong>: Use <a href="https://learn.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noopener noreferrer" class="">WSL</a> for local development.</p>
</li>
<li class="">
<p><strong>Spicepod version defaults to <code>v2</code></strong>: <code>spice init</code> creates <code>version: v2</code> spicepods. <code>v1</code> remains supported with auto-migration; <code>v1beta1</code> is no longer accepted.</p>
</li>
<li class="">
<p><strong>Flattened <code>runtime.scheduler</code> configuration</strong>: The nested <code>runtime.scheduler.partition_management</code> block is flattened and renamed:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Before</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">scheduler</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_management</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 30s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">max_assignments_per_cycle</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">discovery_timeout</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 10s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># After</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">scheduler</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_assignment_interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 30s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">max_assignments_per_interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_discovery_timeout</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 10s</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>S3 metadata columns renamed</strong>: <code>location</code>, <code>last_modified</code>, <code>size</code> → <code>_location</code>, <code>_last_modified</code>, <code>_size</code>.</p>
</li>
<li class="">
<p><strong>Default query memory limit changed</strong>: Increased from 70% to 90%.</p>
</li>
<li class="">
<p><strong>Metric renames</strong>: <code>accelerated_refresh</code> metrics renamed to <code>acceleration_refresh</code>; <code>last_refresh_time</code> gauge renamed to include the milliseconds unit.</p>
</li>
<li class="">
<p><strong>DuckDB parameter rename</strong>: <code>partitioned_write_flush_threshold</code> → <code>partitioned_write_flush_threshold_rows</code>.</p>
</li>
<li class="">
<p><strong><code>/v1/search</code> API</strong>: Always returns an array in <code>matches</code>, even for single results.</p>
</li>
<li class="">
<p><strong><code>/v1/evals</code> API removed</strong>.</p>
</li>
<li class="">
<p><strong>Perplexity model provider removed</strong>.</p>
</li>
<li class="">
<p><strong>x.ai model endpoint</strong>: x.ai models exclusively use the <code>/v1/responses</code> endpoint.</p>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrade-guide-from-v1x">Upgrade Guide from v1.x<a href="https://spiceai.org/releases/v2.0-stable#upgrade-guide-from-v1x" class="hash-link" aria-label="Direct link to Upgrade Guide from v1.x" title="Direct link to Upgrade Guide from v1.x" translate="no">​</a></h2>
<p>Most v1 spicepods continue to work on v2.0 — <code>v1</code> remains supported and deprecated fields auto-migrate at load time — so many deployments can upgrade by updating the binary or image alone. The steps below cover the <a href="https://spiceai.org/releases/v2.0-stable#breaking-changes" class="">breaking changes</a> that may require manual action. Review each before upgrading a production deployment.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-build-image-and-platform-changes">1. Build, image, and platform changes<a href="https://spiceai.org/releases/v2.0-stable#1-build-image-and-platform-changes" class="hash-link" aria-label="Direct link to 1. Build, image, and platform changes" title="Direct link to 1. Build, image, and platform changes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Models are now included by default.</strong> The separate <code>models</code> build variant (and the corresponding <code>-models</code> image tags) has been removed; local LLM inference is always included in the default build and image. If your deployment pinned a <code>models</code> build or <code>-models</code>-tagged image, switch to the default build/image.</li>
<li class=""><strong>Native Windows builds are removed.</strong> Use <a href="https://learn.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noopener noreferrer" class="">WSL</a> for local Windows development.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-adopt-spicepod-v2-recommended">2. Adopt Spicepod <code>v2</code> (recommended)<a href="https://spiceai.org/releases/v2.0-stable#2-adopt-spicepod-v2-recommended" class="hash-link" aria-label="Direct link to 2-adopt-spicepod-v2-recommended" title="Direct link to 2-adopt-spicepod-v2-recommended" translate="no">​</a></h3>
<p><code>spice init</code> now creates <code>version: v2</code> spicepods. <code>v1</code> spicepods remain supported with automatic migration, but <code>v1beta1</code> is no longer accepted. To move to <code>v2</code>, set <code>version: v2</code> and update the following fields — each auto-migrates from <code>v1</code>, but updating now clears the deprecation:</p>
<table><thead><tr><th>v1 (deprecated)</th><th>v2 (preferred)</th></tr></thead><tbody><tr><td><code>runtime.results_cache</code></td><td><code>runtime.caching.sql_results</code> (<code>cache_max_size</code> → <code>max_size</code>)</td></tr><tr><td><code>runtime.memory_limit</code></td><td><code>runtime.query.memory_limit</code></td></tr><tr><td><code>runtime.temp_directory</code></td><td><code>runtime.query.temp_directory</code></td></tr><tr><td><code>dataset.invalid_type_action</code></td><td><code>dataset.unsupported_type_action</code></td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-update-changed-configuration">3. Update changed configuration<a href="https://spiceai.org/releases/v2.0-stable#3-update-changed-configuration" class="hash-link" aria-label="Direct link to 3. Update changed configuration" title="Direct link to 3. Update changed configuration" translate="no">​</a></h3>
<ul>
<li class=""><strong>DuckDB parameter rename:</strong> <code>partitioned_write_flush_threshold</code> → <code>partitioned_write_flush_threshold_rows</code>.</li>
<li class=""><strong>Default query memory limit raised from 70% to 90%.</strong> If you relied on the previous default to leave headroom for other processes on the host, set it explicitly via <code>runtime.query.memory_limit</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-update-queries-and-api-clients">4. Update queries and API clients<a href="https://spiceai.org/releases/v2.0-stable#4-update-queries-and-api-clients" class="hash-link" aria-label="Direct link to 4. Update queries and API clients" title="Direct link to 4. Update queries and API clients" translate="no">​</a></h3>
<ul>
<li class=""><strong>S3 metadata columns renamed:</strong> <code>location</code>, <code>last_modified</code>, <code>size</code> → <code>_location</code>, <code>_last_modified</code>, <code>_size</code>. Update any queries that reference these columns.</li>
<li class=""><strong><code>/v1/search</code> always returns an array</strong> in <code>matches</code>, even for a single result. Update clients that assumed a scalar value.</li>
<li class=""><strong><code>/v1/evals</code> API removed.</strong> Remove integrations that depend on it.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-update-model-providers">5. Update model providers<a href="https://spiceai.org/releases/v2.0-stable#5-update-model-providers" class="hash-link" aria-label="Direct link to 5. Update model providers" title="Direct link to 5. Update model providers" translate="no">​</a></h3>
<ul>
<li class=""><strong>Perplexity model provider removed.</strong> Re-point affected models to another provider.</li>
<li class=""><strong>x.ai models use the <code>/v1/responses</code> endpoint exclusively.</strong> Ensure x.ai integrations target the Responses API.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-update-observability">6. Update observability<a href="https://spiceai.org/releases/v2.0-stable#6-update-observability" class="hash-link" aria-label="Direct link to 6. Update observability" title="Direct link to 6. Update observability" translate="no">​</a></h3>
<ul>
<li class=""><strong>Metric renames:</strong> <code>accelerated_refresh</code> → <code>acceleration_refresh</code>, and the <code>last_refresh_time</code> gauge is renamed to include the milliseconds unit. Update dashboards and alerts that reference these metric names.</li>
</ul>
<p>After updating, restart the runtime and verify datasets and models report ready via <code>/v1/datasets?status=true</code> and <code>/v1/models?status=true</code> (the CLI shows a <code>Ready</code>/<code>ERROR</code> column).</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0-stable#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>New <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> recipes added during the v2.0 release cycle:</p>
<ul>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/async-queries" target="_blank" rel="noopener noreferrer" class="">Async Queries</a></strong>: Submit long-running queries asynchronously and retrieve results later.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/catalogs/ducklake" target="_blank" rel="noopener noreferrer" class="">DuckLake Catalog</a></strong>: Lakehouse-style data management with ACID transactions and time travel.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/distributed" target="_blank" rel="noopener noreferrer" class="">Distributed Query</a></strong>: Run Spice in multi-active distributed cluster mode.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/mtls" target="_blank" rel="noopener noreferrer" class="">mTLS</a></strong>: Mutual TLS for HTTP and Flight endpoints.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/elasticsearch/connector" target="_blank" rel="noopener noreferrer" class="">Elasticsearch Connector</a></strong>: Query Elasticsearch indexes as SQL tables.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/mcp-server" target="_blank" rel="noopener noreferrer" class="">MCP Server</a></strong>: Use Spice as an MCP server over Streamable HTTP.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/snowflake/dml" target="_blank" rel="noopener noreferrer" class="">Snowflake DML</a></strong>: Write-back to Snowflake with INSERT/UPDATE/DELETE.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/catalogs/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a>, <a href="https://github.com/spiceai/cookbook/blob/trunk/catalogs/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL</a>, and <a href="https://github.com/spiceai/cookbook/blob/trunk/catalogs/mssql" target="_blank" rel="noopener noreferrer" class="">MSSQL</a> Catalogs</strong>: Schema and table discovery for external databases.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/full-text-search" target="_blank" rel="noopener noreferrer" class="">Full-Text Search</a></strong>: BM25 full-text search over accelerated datasets.</li>
</ul>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes more than 100 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-stable#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-stable#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-stable#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Add TPC-DS integration tests with S3 source and PostgreSQL acceleration by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9006" target="_blank" rel="noopener noreferrer" class="">#9006</a></li>
<li class="">fix(tests): fix flaky/slow/failing unit tests by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9009" target="_blank" rel="noopener noreferrer" class="">#9009</a></li>
<li class="">fix: Update benchmark snapshots for DF51 upgrade by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9008" target="_blank" rel="noopener noreferrer" class="">#9008</a></li>
<li class="">fix: add feature gate to rrf TEST_EMBEDDING_MODEL by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9017" target="_blank" rel="noopener noreferrer" class="">#9017</a></li>
<li class="">fix: features check by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9014" target="_blank" rel="noopener noreferrer" class="">#9014</a></li>
<li class="">fix: Enable Cayenne acceleration snapshots by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9020" target="_blank" rel="noopener noreferrer" class="">#9020</a></li>
<li class="">URL table support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9018" target="_blank" rel="noopener noreferrer" class="">#9018</a></li>
<li class="">ScyllaDB key filter by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/8997" target="_blank" rel="noopener noreferrer" class="">#8997</a></li>
<li class="">fix: Schema mismatch when using column projection with HTTP caching by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9021" target="_blank" rel="noopener noreferrer" class="">#9021</a></li>
<li class="">Add more tests for HTTP caching with columns selection by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9025" target="_blank" rel="noopener noreferrer" class="">#9025</a></li>
<li class="">HTTP cache snapshots: default to <code>time_interval</code> and fix <code>snapshots_creation_policy: on_change</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9026" target="_blank" rel="noopener noreferrer" class="">#9026</a></li>
<li class="">Fix duplicate snapshot creation on startup by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9029" target="_blank" rel="noopener noreferrer" class="">#9029</a></li>
<li class="">Add ScyllaDB and SMB to the README table by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9034" target="_blank" rel="noopener noreferrer" class="">#9034</a></li>
<li class="">Remove waiting for runtime to be ready before creating snapshot by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9033" target="_blank" rel="noopener noreferrer" class="">#9033</a></li>
<li class="">Fix snapshot on_change policy to skip when no writes occurred by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9028" target="_blank" rel="noopener noreferrer" class="">#9028</a></li>
<li class="">Release notes for release <code>release/1.11.0-rc.2</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9016" target="_blank" rel="noopener noreferrer" class="">#9016</a></li>
<li class="">ci: use arduino/setup-protoc for official protobuf compiler by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9036" target="_blank" rel="noopener noreferrer" class="">#9036</a></li>
<li class="">ci: install unzip on aarch64 runner for arduino/setup-protoc by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9038" target="_blank" rel="noopener noreferrer" class="">#9038</a></li>
<li class="">fix: don't fail release if upload to minio fails by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9039" target="_blank" rel="noopener noreferrer" class="">#9039</a></li>
<li class="">Add missing protoc step to setup-cc action by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9041" target="_blank" rel="noopener noreferrer" class="">#9041</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9013" target="_blank" rel="noopener noreferrer" class="">#9013</a></li>
<li class="">Fix <code>formula_1</code> and <code>codebase_community</code> in <code>bird-bench</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9000" target="_blank" rel="noopener noreferrer" class="">#9000</a></li>
<li class="">Cayenne S3 Express One Zone improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9015" target="_blank" rel="noopener noreferrer" class="">#9015</a></li>
<li class="">Add zlib1g-dev to CI by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9052" target="_blank" rel="noopener noreferrer" class="">#9052</a></li>
<li class="">Improve validation and logging for hash indexes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9047" target="_blank" rel="noopener noreferrer" class="">#9047</a></li>
<li class="">Upgrade Vortex with CASE-WHEN by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9051" target="_blank" rel="noopener noreferrer" class="">#9051</a></li>
<li class="">x.ai models now exclusively use /v1/responses endpoint by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9400" target="_blank" rel="noopener noreferrer" class="">#9400</a></li>
<li class="">Improvements for snapshot schema comparison by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9401" target="_blank" rel="noopener noreferrer" class="">#9401</a></li>
<li class="">v2.0 breaking changes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9233" target="_blank" rel="noopener noreferrer" class="">#9233</a></li>
<li class="">Create <code>PartitionManagementTask</code> for scheduler to update accelerated table partition assignments by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9378" target="_blank" rel="noopener noreferrer" class="">#9378</a></li>
<li class="">refactor(Cayenne): route all write orchestration through <code>CayenneDataSink</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9402" target="_blank" rel="noopener noreferrer" class="">#9402</a></li>
<li class="">Refactor benchmark to use QueryExecutor trait by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9418" target="_blank" rel="noopener noreferrer" class="">#9418</a></li>
<li class="">feat: Add spidapter build and release workflow by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9427" target="_blank" rel="noopener noreferrer" class="">#9427</a></li>
<li class="">Testoperator: add support for api-key when connecting to external spice instance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9421" target="_blank" rel="noopener noreferrer" class="">#9421</a></li>
<li class="">Initial implementation of Ducklake catalog &amp; data connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9083" target="_blank" rel="noopener noreferrer" class="">#9083</a></li>
<li class="">Require <code>aws_lc_rs</code> since jsonwebtoken upgrade by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9426" target="_blank" rel="noopener noreferrer" class="">#9426</a></li>
<li class="">feat: Add spidapter tool by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9425" target="_blank" rel="noopener noreferrer" class="">#9425</a></li>
<li class="">Add release notes for 1.11.2 patch release by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9430" target="_blank" rel="noopener noreferrer" class="">#9430</a></li>
<li class="">feat(spidapter): integrate system-adapter-protocol with SCP provisioning by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9434" target="_blank" rel="noopener noreferrer" class="">#9434</a></li>
<li class="">Add DuckLake TPCH E2E workflow and federated Spicepod configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9431" target="_blank" rel="noopener noreferrer" class="">#9431</a></li>
<li class="">fix(spidapter): use Flight handshake auth instead of x-api-key header by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9435" target="_blank" rel="noopener noreferrer" class="">#9435</a></li>
<li class="">[spidapter] Keep only what sparks joy by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9439" target="_blank" rel="noopener noreferrer" class="">#9439</a></li>
<li class="">Refactor binary operator balancing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9424" target="_blank" rel="noopener noreferrer" class="">#9424</a></li>
<li class="">feat: Add Iceberg DDL support (CREATE TABLE / DROP TABLE) for default catalog override by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9440" target="_blank" rel="noopener noreferrer" class="">#9440</a></li>
<li class="">Fix Flight SQL schema consistency: expand view types and verify field names by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9438" target="_blank" rel="noopener noreferrer" class="">#9438</a></li>
<li class="">Update spidapter for new system-adapter-protocol by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9442" target="_blank" rel="noopener noreferrer" class="">#9442</a></li>
<li class="">docs: fix typos and syntax errors in style guide and error handling docs by <a href="https://github.com/cluster2600" target="_blank" rel="noopener noreferrer" class="">@cluster2600</a> in <a href="https://github.com/spiceai/spiceai/pull/9445" target="_blank" rel="noopener noreferrer" class="">#9445</a></li>
<li class="">Add acceleration refresh ingestion metrics (rows_written, bytes_written) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9461" target="_blank" rel="noopener noreferrer" class="">#9461</a></li>
<li class="">Refactor(Cayenne): Replace CatalogError and string based errors with Snafu errors by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9403" target="_blank" rel="noopener noreferrer" class="">#9403</a></li>
<li class="">Replace deprecated claude-3-5-haiku-latest with claude-haiku-4-5 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9492" target="_blank" rel="noopener noreferrer" class="">#9492</a></li>
<li class="">Fix #9481: Preserve schema in results cache for empty query results by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9485" target="_blank" rel="noopener noreferrer" class="">#9485</a></li>
<li class="">Fix partition by serializing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9474" target="_blank" rel="noopener noreferrer" class="">#9474</a></li>
<li class="">query: reconcile execution stream nullability with logical plan schema by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9486" target="_blank" rel="noopener noreferrer" class="">#9486</a></li>
<li class="">initial <code>spice-cloud-client</code> crate and <code>spice cloud metrics --app &lt;app-name&gt;</code>. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9480" target="_blank" rel="noopener noreferrer" class="">#9480</a></li>
<li class="">feat: Return dataset error message in datasets API by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9487" target="_blank" rel="noopener noreferrer" class="">#9487</a></li>
<li class="">Spicebench by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9447" target="_blank" rel="noopener noreferrer" class="">#9447</a></li>
<li class="">build(deps): consolidate dependabot dependency updates by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9504" target="_blank" rel="noopener noreferrer" class="">#9504</a></li>
<li class="">fix(cluster): route non-partitioned accelerated tables in distributed mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9508" target="_blank" rel="noopener noreferrer" class="">#9508</a></li>
<li class="">Enable core scalar UDFs in refresh SQL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9502" target="_blank" rel="noopener noreferrer" class="">#9502</a></li>
<li class="">Fix metrics in Spidapter again by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9497" target="_blank" rel="noopener noreferrer" class="">#9497</a></li>
<li class="">fix(cluster): tolerate Completed-&gt;status propagation race in distributed query handle by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9510" target="_blank" rel="noopener noreferrer" class="">#9510</a></li>
<li class="">feat: Support distributed ingestion in cayenne catalog by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9506" target="_blank" rel="noopener noreferrer" class="">#9506</a></li>
<li class="">Fix Cayenne duplicate primary keys after DELETE + UPSERT CDC sequences by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9494" target="_blank" rel="noopener noreferrer" class="">#9494</a></li>
<li class="">fix(cluster): rewrite table scans inside subqueries for distributed execution by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9518" target="_blank" rel="noopener noreferrer" class="">#9518</a></li>
<li class="">fix: Set catalog mode to readwritecreate in spidapter by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9519" target="_blank" rel="noopener noreferrer" class="">#9519</a></li>
<li class="">Upgrade AWS SDK crates &amp; set APN user-agent in AWS SDK credential bridge by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/8328" target="_blank" rel="noopener noreferrer" class="">#8328</a></li>
<li class="">feat(runtime): add runtime ready_state on_registration semantics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9522" target="_blank" rel="noopener noreferrer" class="">#9522</a></li>
<li class="">fix: Add spidapter post-setup retries by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9526" target="_blank" rel="noopener noreferrer" class="">#9526</a></li>
<li class="">Make partition discovery more robust and make initialization non-blocking by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9499" target="_blank" rel="noopener noreferrer" class="">#9499</a></li>
<li class="">Make <code>lint-rust-fix</code> support targeted packages and features by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9511" target="_blank" rel="noopener noreferrer" class="">#9511</a></li>
<li class="">Handle new Cloud SCP API by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9532" target="_blank" rel="noopener noreferrer" class="">#9532</a></li>
<li class="">Refactor and simplify streaming benchmarks by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9405" target="_blank" rel="noopener noreferrer" class="">#9405</a></li>
<li class="">fix: ensure spidapter only increments attempts on failures by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9534" target="_blank" rel="noopener noreferrer" class="">#9534</a></li>
<li class="">feat: Support specifying app resources in spidapter by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9536" target="_blank" rel="noopener noreferrer" class="">#9536</a></li>
<li class="">test(runtime): Spice Cayenne DDL integration test by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9535" target="_blank" rel="noopener noreferrer" class="">#9535</a></li>
<li class="">fix: Handle schema evolution mismatch errors during data refresh by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9527" target="_blank" rel="noopener noreferrer" class="">#9527</a></li>
<li class="">fix: resolve clippy lint warnings by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9547" target="_blank" rel="noopener noreferrer" class="">#9547</a></li>
<li class=""><code>pr-builds --tag &lt;TAG&gt;</code> for build_and_release.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9507" target="_blank" rel="noopener noreferrer" class="">#9507</a></li>
<li class="">Add <code>--output</code> flag to <code>spice login</code> with env/json/keychain modes by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9541" target="_blank" rel="noopener noreferrer" class="">#9541</a></li>
<li class="">Don't use 'PartitionedTableScanRewrite' in async distributed query by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9548" target="_blank" rel="noopener noreferrer" class="">#9548</a></li>
<li class="">feat(spidapter): add local backend mode with single executor by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9531" target="_blank" rel="noopener noreferrer" class="">#9531</a></li>
<li class="">support chat template in HF by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9543" target="_blank" rel="noopener noreferrer" class="">#9543</a></li>
<li class="">fix(cayenne): stream PK retention deletes and run OOM regression in CI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9533" target="_blank" rel="noopener noreferrer" class="">#9533</a></li>
<li class="">cayenne: Staged append writes to prevent partial writes and data loss on stream error by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9491" target="_blank" rel="noopener noreferrer" class="">#9491</a></li>
<li class=""><code>AcceleratedTable::scan</code> use <code>FederatedTable::scan</code> when <code>ClusterRole::Scheduler</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9550" target="_blank" rel="noopener noreferrer" class="">#9550</a></li>
<li class="">Upgrade to delta-kernel-rs v0.18.2 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9528" target="_blank" rel="noopener noreferrer" class="">#9528</a></li>
<li class="">Run cayenne tests as part of PR CI by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9554" target="_blank" rel="noopener noreferrer" class="">#9554</a></li>
<li class="">Upgrade to DataFusion v52.2.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9419" target="_blank" rel="noopener noreferrer" class="">#9419</a></li>
<li class="">Remove Snapshot Compaction + Add snapshot existence check by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9523" target="_blank" rel="noopener noreferrer" class="">#9523</a></li>
<li class="">Update dependencies by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9566" target="_blank" rel="noopener noreferrer" class="">#9566</a></li>
<li class="">fix: Update benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9565" target="_blank" rel="noopener noreferrer" class="">#9565</a></li>
<li class="">fix: Compare Cayenne table configuration on startup by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9529" target="_blank" rel="noopener noreferrer" class="">#9529</a></li>
<li class="">Make <code>Refresh::refresh_sql</code> more robust to alterations over time. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9549" target="_blank" rel="noopener noreferrer" class="">#9549</a></li>
<li class="">fix: Update datafusion-table-providers dependency to latest revision by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9574" target="_blank" rel="noopener noreferrer" class="">#9574</a></li>
<li class="">Unset <code>AWS_ENDPOINT_URL</code> when empty by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9575" target="_blank" rel="noopener noreferrer" class="">#9575</a></li>
<li class="">fix: allow BytesProcessedExec repartitioning for unordered input by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9540" target="_blank" rel="noopener noreferrer" class="">#9540</a></li>
<li class="">Sanitize DataFusion errors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9530" target="_blank" rel="noopener noreferrer" class="">#9530</a></li>
<li class="">Add conditional logging for partition assignments by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9577" target="_blank" rel="noopener noreferrer" class="">#9577</a></li>
<li class="">use 'properly early exit on SIGTERM' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9573" target="_blank" rel="noopener noreferrer" class="">#9573</a></li>
<li class="">Update datafusion to 52.2.0 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9582" target="_blank" rel="noopener noreferrer" class="">#9582</a></li>
<li class="">Ensure we query one and only one partition per request by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9416" target="_blank" rel="noopener noreferrer" class="">#9416</a></li>
<li class="">feat: Add support for Spicepod version v2 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9583" target="_blank" rel="noopener noreferrer" class="">#9583</a></li>
<li class="">[SpiceDQ] Improve error messages; Avoid race condition on allocate_initial_partitions. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9579" target="_blank" rel="noopener noreferrer" class="">#9579</a></li>
<li class="">Update ballista dependencies to latest 52.0.0 revision by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9581" target="_blank" rel="noopener noreferrer" class="">#9581</a></li>
<li class="">Fix Databricks spark_connect mode always disabled by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9586" target="_blank" rel="noopener noreferrer" class="">#9586</a></li>
<li class="">Support partitioning in Arrow accelerator by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9571" target="_blank" rel="noopener noreferrer" class="">#9571</a></li>
<li class="">Fix <code>spice query</code> CLI response deserialization by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9588" target="_blank" rel="noopener noreferrer" class="">#9588</a></li>
<li class="">fix: Update benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9584" target="_blank" rel="noopener noreferrer" class="">#9584</a></li>
<li class="">fix: Share RuntimeEnv across Cayenne read/write/delete paths for targeted list_files_cache invalidation by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9589" target="_blank" rel="noopener noreferrer" class="">#9589</a></li>
<li class="">feat: Add file:// state_location support for async queries scheduler by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9590" target="_blank" rel="noopener noreferrer" class="">#9590</a></li>
<li class="">Update endgame links by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9598" target="_blank" rel="noopener noreferrer" class="">#9598</a></li>
<li class="">ci: fix E2E CLI upgrade test to use latest release for spiced download by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9613" target="_blank" rel="noopener noreferrer" class="">#9613</a></li>
<li class="">fix(DF): Lazily initialize BatchCoalescer in RepartitionExec to avoid schema type mismatch by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9623" target="_blank" rel="noopener noreferrer" class="">#9623</a></li>
<li class="">feat: Implement catalog connectors for various databases by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9509" target="_blank" rel="noopener noreferrer" class="">#9509</a></li>
<li class="">Refactor and clean up code across multiple crates by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9620" target="_blank" rel="noopener noreferrer" class="">#9620</a></li>
<li class="">fix: Improve error handling for distributed mode and state_location configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9611" target="_blank" rel="noopener noreferrer" class="">#9611</a></li>
<li class="">Properly install postgres in <code>install-postgres</code> action by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9629" target="_blank" rel="noopener noreferrer" class="">#9629</a></li>
<li class="">fix: Use Python venv for schema validation in CI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9637" target="_blank" rel="noopener noreferrer" class="">#9637</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9640" target="_blank" rel="noopener noreferrer" class="">#9640</a></li>
<li class="">Update testoperator dispatch to use release/2.0 branch by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9641" target="_blank" rel="noopener noreferrer" class="">#9641</a></li>
<li class="">fix: Align CUDA asset names in Dockerfile and install tests with build output by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9639" target="_blank" rel="noopener noreferrer" class="">#9639</a></li>
<li class="">Fix expect test scripts in E2E Installation AI test by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9643" target="_blank" rel="noopener noreferrer" class="">#9643</a></li>
<li class="">testoperator for partitioned arrow accelerator by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9635" target="_blank" rel="noopener noreferrer" class="">#9635</a></li>
<li class="">Remove default 1s refresh_check_interval from spidapter for hive datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9645" target="_blank" rel="noopener noreferrer" class="">#9645</a></li>
<li class="">Fix scheduler panic and cancel race condition by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9644" target="_blank" rel="noopener noreferrer" class="">#9644</a></li>
<li class="">Align Spice.ai connector parameter names across catalog/data connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9632" target="_blank" rel="noopener noreferrer" class="">#9632</a></li>
<li class="">docs: update distribution details and add NAS support in release notes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9650" target="_blank" rel="noopener noreferrer" class="">#9650</a></li>
<li class="">Enable <code>postgres-accel</code> in CI builds for benchmarks by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9649" target="_blank" rel="noopener noreferrer" class="">#9649</a></li>
<li class="">perf: Cache Turso metastore connection across operations by <a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a> in <a href="https://github.com/spiceai/spiceai/pull/9646" target="_blank" rel="noopener noreferrer" class="">#9646</a></li>
<li class="">Add 'scheduler_state_location' to spidapter by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9655" target="_blank" rel="noopener noreferrer" class="">#9655</a></li>
<li class="">Implement Cayenne S3 Express multi-zone live test with data validation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9631" target="_blank" rel="noopener noreferrer" class="">#9631</a></li>
<li class="">chore(spidapter): bump default memory limit from 8Gi to 32Gi by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9661" target="_blank" rel="noopener noreferrer" class="">#9661</a></li>
<li class="">perf: Use prepare_cached() in Turso and SQLite metastore backends by <a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a> in <a href="https://github.com/spiceai/spiceai/pull/9662" target="_blank" rel="noopener noreferrer" class="">#9662</a></li>
<li class="">Improve CDC cache invalidation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9651" target="_blank" rel="noopener noreferrer" class="">#9651</a></li>
<li class="">Refactor Cayenne IDs to use UUIDv7 strings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9667" target="_blank" rel="noopener noreferrer" class="">#9667</a></li>
<li class="">fix: add liveness check for dead executors in partition routing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9657" target="_blank" rel="noopener noreferrer" class="">#9657</a></li>
<li class="">fix(s3): Fix metadata column schema mismatches in projected queries by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9664" target="_blank" rel="noopener noreferrer" class="">#9664</a></li>
<li class="">s3_metadata_columns tests: include test for location outside table prefix by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9676" target="_blank" rel="noopener noreferrer" class="">#9676</a></li>
<li class="">docs: Update DuckDB, GCS, Git connector and Cayenne documentation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9671" target="_blank" rel="noopener noreferrer" class="">#9671</a></li>
<li class="">Add s3_url_style support for S3 connector URL addressing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9642" target="_blank" rel="noopener noreferrer" class="">#9642</a></li>
<li class="">Consolidate E2E workflows and require WSL for Windows runtime by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9660" target="_blank" rel="noopener noreferrer" class="">#9660</a></li>
<li class="">Upgrade to Rust v1.93.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9669" target="_blank" rel="noopener noreferrer" class="">#9669</a></li>
<li class="">Security fixes and improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9666" target="_blank" rel="noopener noreferrer" class="">#9666</a></li>
<li class="">feat(flight): add DoPut rows/bytes written metrics for DoPut ETL ingestion tracking by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9663" target="_blank" rel="noopener noreferrer" class="">#9663</a></li>
<li class="">Skip caching http error response + add <code>response_headers</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9670" target="_blank" rel="noopener noreferrer" class="">#9670</a></li>
<li class="">refactor: Remove <code>v1/evals</code> functionality by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9420" target="_blank" rel="noopener noreferrer" class="">#9420</a></li>
<li class="">Make a test harness for Distributed Spice integration tests by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9615" target="_blank" rel="noopener noreferrer" class="">#9615</a></li>
<li class="">Enable <code>on_zero_results: use_source</code> for views by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9699" target="_blank" rel="noopener noreferrer" class="">#9699</a></li>
<li class="">fix(spidapter): Lower memory limit, passthrough AWS secrets, override flight URL by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9704" target="_blank" rel="noopener noreferrer" class="">#9704</a></li>
<li class="">Show an error on a shared acceleration file with snapshots enabled by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9698" target="_blank" rel="noopener noreferrer" class="">#9698</a></li>
<li class="">Fixes for anthropic by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9707" target="_blank" rel="noopener noreferrer" class="">#9707</a></li>
<li class="">Use <code>max_partitions_per_executor</code> in <code>allocate_initial_partitions</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9659" target="_blank" rel="noopener noreferrer" class="">#9659</a></li>
<li class="">[SpiceDQ] Accelerations must have partition key by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9711" target="_blank" rel="noopener noreferrer" class="">#9711</a></li>
<li class="">Upgrade to Turso v0.5 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9628" target="_blank" rel="noopener noreferrer" class="">#9628</a></li>
<li class="">feat: Rename metadata columns to _location, _last_modified, _size by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9712" target="_blank" rel="noopener noreferrer" class="">#9712</a></li>
<li class="">fix: bump datafusion-ballista to fix BatchCoalescer schema mismatch panic by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9716" target="_blank" rel="noopener noreferrer" class="">#9716</a></li>
<li class="">fix: Ensure Cayenne respects target file size by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9730" target="_blank" rel="noopener noreferrer" class="">#9730</a></li>
<li class="">refactor: Make DDL preprocessing generic from Iceberg DDL processing by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9731" target="_blank" rel="noopener noreferrer" class="">#9731</a></li>
<li class="">[SpiceDQ] Distribute query of Cayenne Catalog to executors with data by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9727" target="_blank" rel="noopener noreferrer" class="">#9727</a></li>
<li class="">Properly set <code>primary_keys</code>/<code>on_conflict</code> for Cayenne tables by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9739" target="_blank" rel="noopener noreferrer" class="">#9739</a></li>
<li class="">Add executor resource and replica support to cloud app config by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/9734" target="_blank" rel="noopener noreferrer" class="">#9734</a></li>
<li class="">feat: Support PARTITION BY in Cayenne Catalog table creation by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9741" target="_blank" rel="noopener noreferrer" class="">#9741</a></li>
<li class="">Update datafusion and related packages to version 52.3.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9708" target="_blank" rel="noopener noreferrer" class="">#9708</a></li>
<li class="">Route FlightSQL statement updates through QueryBuilder by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9754" target="_blank" rel="noopener noreferrer" class="">#9754</a></li>
<li class="">JSON file format improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9743" target="_blank" rel="noopener noreferrer" class="">#9743</a></li>
<li class="">[SpiceDQ] Partition Cayenne catalogs writes through to executors by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9737" target="_blank" rel="noopener noreferrer" class="">#9737</a></li>
<li class="">Update to DF v52.3.0 versions of datafusion &amp; datafusion-tableproviders by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9756" target="_blank" rel="noopener noreferrer" class="">#9756</a></li>
<li class="">Make S3 metadata column handling more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9762" target="_blank" rel="noopener noreferrer" class="">#9762</a></li>
<li class="">Fetch API keys from dedicated endpoint instead of apps response by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9767" target="_blank" rel="noopener noreferrer" class="">#9767</a></li>
<li class="">Update arrow-rs, datafusion-federation, and datafusion-table-providers dependencies by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9769" target="_blank" rel="noopener noreferrer" class="">#9769</a></li>
<li class="">Chunk metastore batch inserts to respect SQLite parameter limits by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9770" target="_blank" rel="noopener noreferrer" class="">#9770</a></li>
<li class="">Improve JSON SODA support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9795" target="_blank" rel="noopener noreferrer" class="">#9795</a></li>
<li class="">Add ADBC Data Connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9723" target="_blank" rel="noopener noreferrer" class="">#9723</a></li>
<li class="">docs: Release Cayenne as RC by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9766" target="_blank" rel="noopener noreferrer" class="">#9766</a></li>
<li class="">cli[feat]: cloud mode to use region-specific endpoints by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9803" target="_blank" rel="noopener noreferrer" class="">#9803</a></li>
<li class="">Include updated JSON formats in HTTPS connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9800" target="_blank" rel="noopener noreferrer" class="">#9800</a></li>
<li class="">Flight DoPut: Partition-aware write-through forwarding by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9759" target="_blank" rel="noopener noreferrer" class="">#9759</a></li>
<li class="">Pass through authentication to ADBC connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9801" target="_blank" rel="noopener noreferrer" class="">#9801</a></li>
<li class="">Move scheduler_state_location from adapter metadata to env var by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9802" target="_blank" rel="noopener noreferrer" class="">#9802</a></li>
<li class="">Fix Cayenne DoPut upsert returning stale data after 3+ writes by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9806" target="_blank" rel="noopener noreferrer" class="">#9806</a></li>
<li class="">Fix JSON column projection producing schema mismatch by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9811" target="_blank" rel="noopener noreferrer" class="">#9811</a></li>
<li class="">Fix http connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9818" target="_blank" rel="noopener noreferrer" class="">#9818</a></li>
<li class="">Fix ADBC Connector build and test by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9813" target="_blank" rel="noopener noreferrer" class="">#9813</a></li>
<li class="">Support update &amp; delete DML for distributed cayenne catalog by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9805" target="_blank" rel="noopener noreferrer" class="">#9805</a></li>
<li class="">Set allow_http param when S3 endpoint uses http scheme by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9834" target="_blank" rel="noopener noreferrer" class="">#9834</a></li>
<li class="">fix: Cayenne Catalog DDL requires a connected executor in distributed mode by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9838" target="_blank" rel="noopener noreferrer" class="">#9838</a></li>
<li class="">fix: Add conditional put support for file:// scheduler state location by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9842" target="_blank" rel="noopener noreferrer" class="">#9842</a></li>
<li class="">fix: Require the DDL primary key contain the partition key by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9844" target="_blank" rel="noopener noreferrer" class="">#9844</a></li>
<li class="">fix: Databricks SQL Warehouse schema retrieval with INLINE disposition and async retry by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9846" target="_blank" rel="noopener noreferrer" class="">#9846</a></li>
<li class="">Filter pushdown improvements for SqlTable by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9852" target="_blank" rel="noopener noreferrer" class="">#9852</a></li>
<li class="">feat: add iam_role_source parameter for AWS credential configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9854" target="_blank" rel="noopener noreferrer" class="">#9854</a></li>
<li class="">Fix ODBC queries silently returning 0 rows on query failure by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9864" target="_blank" rel="noopener noreferrer" class="">#9864</a></li>
<li class="">feat(adbc): Add ADBC catalog connector with schema/table discovery by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9865" target="_blank" rel="noopener noreferrer" class="">#9865</a></li>
<li class="">Make Turso SQL unparsing more robust and fix date comparisons by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9871" target="_blank" rel="noopener noreferrer" class="">#9871</a></li>
<li class="">Fix Flight/FlightSQL filter precedence and mutable query consistency by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9876" target="_blank" rel="noopener noreferrer" class="">#9876</a></li>
<li class="">Partial Aggregation optimisation for <code>FlightSQLExec</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9882" target="_blank" rel="noopener noreferrer" class="">#9882</a></li>
<li class="">fix: v1/responses API preserves client instructions when system_prompt is set by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9884" target="_blank" rel="noopener noreferrer" class="">#9884</a></li>
<li class="">feat: emit <code>scheduler_active_executors_count</code> and use it in spidapter by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9885" target="_blank" rel="noopener noreferrer" class="">#9885</a></li>
<li class="">feat: Add custom auth header support for GraphQL connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9899" target="_blank" rel="noopener noreferrer" class="">#9899</a></li>
<li class="">Add --endpoint flag to spice run with scheme-based routing by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9903" target="_blank" rel="noopener noreferrer" class="">#9903</a></li>
<li class="">When executor connects, send DDL for existing tables by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9904" target="_blank" rel="noopener noreferrer" class="">#9904</a></li>
<li class="">fix: Improve ADBC driver shutdown handling and error classification by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9905" target="_blank" rel="noopener noreferrer" class="">#9905</a></li>
<li class="">fix: require all executors to succeed for distributed DML (DELETE/UPDATE) forwarding by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9908" target="_blank" rel="noopener noreferrer" class="">#9908</a></li>
<li class="">fix(cayenne catalog): fix catalog refresh race condition causing duplicate primary keys by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9909" target="_blank" rel="noopener noreferrer" class="">#9909</a></li>
<li class="">Remove Perplexity support by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9910" target="_blank" rel="noopener noreferrer" class="">#9910</a></li>
<li class="">Fix refresh_sql support for debezium constraints by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9912" target="_blank" rel="noopener noreferrer" class="">#9912</a></li>
<li class="">Implement DML for DynamoDBTableProvider by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9915" target="_blank" rel="noopener noreferrer" class="">#9915</a></li>
<li class="">chore: Update iceberg-rust fork to v0.9 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9917" target="_blank" rel="noopener noreferrer" class="">#9917</a></li>
<li class="">Run physical optimizer on <code>FallbackOnZeroResultsScanExec</code> fallback plan by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9927" target="_blank" rel="noopener noreferrer" class="">#9927</a></li>
<li class="">Improve Databricks error message when dataset has no columns by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9928" target="_blank" rel="noopener noreferrer" class="">#9928</a></li>
<li class="">Delta Lake: fix data skipping for &gt;= timestamp predicates by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9932" target="_blank" rel="noopener noreferrer" class="">#9932</a></li>
<li class="">fix: Ensure distributed Cayenne DML inserts are forwarded to executors by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9948" target="_blank" rel="noopener noreferrer" class="">#9948</a></li>
<li class="">Add full query federation support for ADBC data connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9953" target="_blank" rel="noopener noreferrer" class="">#9953</a></li>
<li class="">Make time_format deserialization case-insensitive by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/9955" target="_blank" rel="noopener noreferrer" class="">#9955</a></li>
<li class="">Hash ADBC join-pushdown context to prevent credential leaks in EXPLAIN plans by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9956" target="_blank" rel="noopener noreferrer" class="">#9956</a></li>
<li class="">fix: Normalize Arrow Dictionary types for DuckDB and SQLite acceleration by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9959" target="_blank" rel="noopener noreferrer" class="">#9959</a></li>
<li class="">ADBC BigQuery: Improve BigQuery dialect date/time and interval SQL generation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9967" target="_blank" rel="noopener noreferrer" class="">#9967</a></li>
<li class="">Make <code>BigQueryDialect</code> more robust and add BigQuery TPC-H benchmark support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9969" target="_blank" rel="noopener noreferrer" class="">#9969</a></li>
<li class="">fix: Show proper unauthorized error instead of misleading runtime unavailable by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9972" target="_blank" rel="noopener noreferrer" class="">#9972</a></li>
<li class="">fix: Enforce target_chunk_size as hard maximum in chunking by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9973" target="_blank" rel="noopener noreferrer" class="">#9973</a></li>
<li class="">Add caching retention by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9984" target="_blank" rel="noopener noreferrer" class="">#9984</a></li>
<li class="">fix: improve Databricks schema error detection and messages by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9987" target="_blank" rel="noopener noreferrer" class="">#9987</a></li>
<li class="">fix: Set default S3 region for opendal operator and fix cayenne nextest by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9995" target="_blank" rel="noopener noreferrer" class="">#9995</a></li>
<li class="">fix(PostgreSQL): fix schema discovery for PostgreSQL partitioned tables by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9997" target="_blank" rel="noopener noreferrer" class="">#9997</a></li>
<li class="">fix: Defer cache size check until after encoding for compressed results by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10001" target="_blank" rel="noopener noreferrer" class="">#10001</a></li>
<li class="">fix: Rewrite numeric BETWEEN to CAST(AS REAL) for Turso by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10003" target="_blank" rel="noopener noreferrer" class="">#10003</a></li>
<li class="">fix: Handle integer time columns in append refresh for all accelerators by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10004" target="_blank" rel="noopener noreferrer" class="">#10004</a></li>
<li class="">fix: preserve s3a:// scheme when building OpenDalStorageFactory with custom endpoint by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10006" target="_blank" rel="noopener noreferrer" class="">#10006</a></li>
<li class="">Fix ISO8601 time_format with Vortex/Cayenne append refresh by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10009" target="_blank" rel="noopener noreferrer" class="">#10009</a></li>
<li class="">fix: Address data correctness bugs found in audit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10015" target="_blank" rel="noopener noreferrer" class="">#10015</a></li>
<li class="">fix(federation): fix SQL unparsing for Inexact filter pushdown with alias by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10017" target="_blank" rel="noopener noreferrer" class="">#10017</a></li>
<li class="">Improve GitHub connector ref handling and resilience by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10023" target="_blank" rel="noopener noreferrer" class="">#10023</a></li>
<li class="">feat: Add spice completions command for shell completion generation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10024" target="_blank" rel="noopener noreferrer" class="">#10024</a></li>
<li class="">fix: Fix data correctness bugs in DynamoDB decimal conversion and GraphQL pagination by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10054" target="_blank" rel="noopener noreferrer" class="">#10054</a></li>
<li class="">Implement RefreshDataset for distributed control stream by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10055" target="_blank" rel="noopener noreferrer" class="">#10055</a></li>
<li class="">perf: Improve S3 parquet read performance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10064" target="_blank" rel="noopener noreferrer" class="">#10064</a></li>
<li class="">fix: Prevent write-through stalls and preserve PartitionTableProvider during catalog refresh by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10066" target="_blank" rel="noopener noreferrer" class="">#10066</a></li>
<li class="">feat: <code>spice completions</code> auto-detects shell directory and writes file by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10068" target="_blank" rel="noopener noreferrer" class="">#10068</a></li>
<li class="">fix: Bug in DynamoDB, GraphQL, and ISO8601 refresh data handling by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10063" target="_blank" rel="noopener noreferrer" class="">#10063</a></li>
<li class="">fix partial aggregation deduplication on string checking by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10078" target="_blank" rel="noopener noreferrer" class="">#10078</a></li>
<li class="">fix: add MetastoreTransaction support to prevent concurrent transaction conflicts by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10080" target="_blank" rel="noopener noreferrer" class="">#10080</a></li>
<li class="">fix: Use GreedyMemoryPool, add spidapter query memory limit arg by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10082" target="_blank" rel="noopener noreferrer" class="">#10082</a></li>
<li class="">feat: Add metrics for EXPLAIN ANALYZE in FlightSQLExec by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10084" target="_blank" rel="noopener noreferrer" class="">#10084</a></li>
<li class="">Use strict cast in <code>try_cast_to</code> to error on overflow instead of silent NULL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10104" target="_blank" rel="noopener noreferrer" class="">#10104</a></li>
<li class="">feat: Implement MERGE INTO for Cayenne catalog tables by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10105" target="_blank" rel="noopener noreferrer" class="">#10105</a></li>
<li class="">feat: Add distributed MERGE INTO support for Cayenne catalog tables by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10106" target="_blank" rel="noopener noreferrer" class="">#10106</a></li>
<li class="">Improve JSON format auto-detection for single multi-line objects by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10107" target="_blank" rel="noopener noreferrer" class="">#10107</a></li>
<li class="">Add mode: file_update acceleration mode by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10108" target="_blank" rel="noopener noreferrer" class="">#10108</a></li>
<li class="">Coerce unsupported Arrow types to Iceberg v2 equivalents in REST catalog API by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10109" target="_blank" rel="noopener noreferrer" class="">#10109</a></li>
<li class="">fix: Update default query memory limit to 90% from 70% by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10112" target="_blank" rel="noopener noreferrer" class="">#10112</a></li>
<li class="">feat: Add mTLS client auth support to spice sql REPL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10113" target="_blank" rel="noopener noreferrer" class="">#10113</a></li>
<li class="">fix(datafusion-federation): report error on overflow instead of silent NULL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10124" target="_blank" rel="noopener noreferrer" class="">#10124</a></li>
<li class="">fix: Prevent data loss in MERGE when source has duplicate keys by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10126" target="_blank" rel="noopener noreferrer" class="">#10126</a></li>
<li class="">feat: Add ClickHouse Date32 type support by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10132" target="_blank" rel="noopener noreferrer" class="">#10132</a></li>
<li class="">Add Delta Lake column mapping support (Name/Id modes) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10134" target="_blank" rel="noopener noreferrer" class="">#10134</a></li>
<li class="">fix: Restore Turso numeric BETWEEN rewrite lost in DML revert by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10139" target="_blank" rel="noopener noreferrer" class="">#10139</a></li>
<li class="">fix: Enable arm64 Linux builds with fp16 and lld workarounds by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10142" target="_blank" rel="noopener noreferrer" class="">#10142</a></li>
<li class="">fix: remove double trailing slash in Unity Catalog storage locations by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10147" target="_blank" rel="noopener noreferrer" class="">#10147</a></li>
<li class="">fix: Improve GitHub GraphQL client resilience and performance by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10151" target="_blank" rel="noopener noreferrer" class="">#10151</a></li>
<li class="">Enable reqwest compression and optimize HTTP client settings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10154" target="_blank" rel="noopener noreferrer" class="">#10154</a></li>
<li class="">fix: executor startup failures by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10155" target="_blank" rel="noopener noreferrer" class="">#10155</a></li>
<li class="">feat: Distributed runtime.task_history support by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10156" target="_blank" rel="noopener noreferrer" class="">#10156</a></li>
<li class="">fix: Preserve timestamp timezone in DDL forwarding to executors by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10159" target="_blank" rel="noopener noreferrer" class="">#10159</a></li>
<li class="">feat: Per-model rate-limited concurrent AI UDF execution by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10160" target="_blank" rel="noopener noreferrer" class="">#10160</a></li>
<li class="">fix(Turso): Reject subquery/outer-ref filter pushdown in Turso provider by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10174" target="_blank" rel="noopener noreferrer" class="">#10174</a></li>
<li class="">Fix linux/macos <code>spice upgrade</code> by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10194" target="_blank" rel="noopener noreferrer" class="">#10194</a></li>
<li class="">Improve CREATE TABLE LIKE error messages, success output, EXPLAIN, and validation by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10203" target="_blank" rel="noopener noreferrer" class="">#10203</a></li>
<li class="">fix: chunk MERGE delete filters and update Vortex for stack-safe IN-lists by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10207" target="_blank" rel="noopener noreferrer" class="">#10207</a></li>
<li class="">Propagate <code>runtime.params.parquet_page_index</code> to Delta Lake connector by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10209" target="_blank" rel="noopener noreferrer" class="">#10209</a></li>
<li class="">Properly mark dataset as Ready on Scheduler by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10215" target="_blank" rel="noopener noreferrer" class="">#10215</a></li>
<li class="">fix: handle Utf8View/LargeUtf8 in GitHub connector ref filters by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10217" target="_blank" rel="noopener noreferrer" class="">#10217</a></li>
<li class="">fix(databricks): Fix schema introspection and timestamp overflow by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10226" target="_blank" rel="noopener noreferrer" class="">#10226</a></li>
<li class="">fix(databricks): Fix schema introspection failures for non-Unity-Catalog environments by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10227" target="_blank" rel="noopener noreferrer" class="">#10227</a></li>
<li class="">feat: Add pagination support to HTTP data connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10228" target="_blank" rel="noopener noreferrer" class="">#10228</a></li>
<li class="">feat(databricks): DESCRIBE TABLE fallback and source-native type parsing for Lakehouse Federation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10229" target="_blank" rel="noopener noreferrer" class="">#10229</a></li>
<li class="">fix(databricks): harden HTTP retries, compression, and token refresh by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10232" target="_blank" rel="noopener noreferrer" class="">#10232</a></li>
<li class="">feat[helm chart]: Add support for ServiceAccount annotations and AWS IRSA example by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9833" target="_blank" rel="noopener noreferrer" class="">#9833</a></li>
<li class="">fix: Log warning and fall back gracefully on Cayenne config change by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9092" target="_blank" rel="noopener noreferrer" class="">#9092</a></li>
<li class="">fix: Handle engine mismatch gracefully in snapshot fallback loop by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9187" target="_blank" rel="noopener noreferrer" class="">#9187</a></li>
<li class="">fix: Full Text Search schema mismatch with ADBC connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10235" target="_blank" rel="noopener noreferrer" class="">#10235</a></li>
<li class="">docs: Update v2.0.0-rc.2 release notes with latest changes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10238" target="_blank" rel="noopener noreferrer" class="">#10238</a></li>
<li class="">Fix append refresh dedup failure when refresh_sql selects column subset by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10225" target="_blank" rel="noopener noreferrer" class="">#10225</a></li>
<li class="">Revert "Properly mark dataset as Ready on Scheduler (#10215)" by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10242" target="_blank" rel="noopener noreferrer" class="">#10242</a></li>
<li class="">Fix failing merge conflicts for benchmarks by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10247" target="_blank" rel="noopener noreferrer" class="">#10247</a></li>
<li class="">fix(github): fetch commits for dynamic and slash refs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10233" target="_blank" rel="noopener noreferrer" class="">#10233</a></li>
<li class="">Upgrade DataFusion to v52.5.0-rc1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10249" target="_blank" rel="noopener noreferrer" class="">#10249</a></li>
<li class="">Merge develop to trunk (2026-04-09) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10248" target="_blank" rel="noopener noreferrer" class="">#10248</a></li>
<li class="">fix: Validate embedding row_id columns during dataset init (fixes #8226) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10208" target="_blank" rel="noopener noreferrer" class="">#10208</a></li>
<li class="">fix: Update tpch benchmark snapshots for federated/glue[csv].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10244" target="_blank" rel="noopener noreferrer" class="">#10244</a></li>
<li class="">feat(databricks): add resilience controls, UC awareness, and task history instrumentation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10246" target="_blank" rel="noopener noreferrer" class="">#10246</a></li>
<li class="">fix: Make PartitionManager resilient to bare vs fully qualified table references by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10257" target="_blank" rel="noopener noreferrer" class="">#10257</a></li>
<li class="">fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-cayenne[file].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10256" target="_blank" rel="noopener noreferrer" class="">#10256</a></li>
<li class="">Merge develop to trunk (2026-04-10) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10251" target="_blank" rel="noopener noreferrer" class="">#10251</a></li>
<li class="">Improve Snowflake/ADBC dataset registration performance and observability by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10266" target="_blank" rel="noopener noreferrer" class="">#10266</a></li>
<li class="">Fixes for kafka connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10263" target="_blank" rel="noopener noreferrer" class="">#10263</a></li>
<li class="">fix(runtime): gate otel code tags, suppress aws sdk noise, and unblock connector init by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10260" target="_blank" rel="noopener noreferrer" class="">#10260</a></li>
<li class="">fix(runtime): avoid regionless AWS SDK loads by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10271" target="_blank" rel="noopener noreferrer" class="">#10271</a></li>
<li class="">Add versioned release install workflow coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10276" target="_blank" rel="noopener noreferrer" class="">#10276</a></li>
<li class="">fix(runtime): handle HTTP JSON unions and spicepod reloads by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10277" target="_blank" rel="noopener noreferrer" class="">#10277</a></li>
<li class="">Databricks UC permission prechecks: explicit denial as permanent error, ambiguous cases advisory by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10274" target="_blank" rel="noopener noreferrer" class="">#10274</a></li>
<li class="">Revert component status changes re-introduced by develop merge (#10248) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10293" target="_blank" rel="noopener noreferrer" class="">#10293</a></li>
<li class="">Fix broken CI workflows by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10294" target="_blank" rel="noopener noreferrer" class="">#10294</a></li>
<li class="">Group dependabot updates by ecosystem by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10296" target="_blank" rel="noopener noreferrer" class="">#10296</a></li>
<li class="">fix(tests): Replace flaky S3 Vectors snapshot tests with structural validation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10301" target="_blank" rel="noopener noreferrer" class="">#10301</a></li>
<li class="">Update test_github_workflows snapshot by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10304" target="_blank" rel="noopener noreferrer" class="">#10304</a></li>
<li class="">fix(ci): fix Bedrock runner mismatch and snapshot auto-merge failure by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10306" target="_blank" rel="noopener noreferrer" class="">#10306</a></li>
<li class="">feat(http): Add map-to-array conversion and query-parameter pagination by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10295" target="_blank" rel="noopener noreferrer" class="">#10295</a></li>
<li class="">New crate: <code>datafusion-ddl</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10205" target="_blank" rel="noopener noreferrer" class="">#10205</a></li>
<li class="">Make Databricks UC permission checks advisory with structured error reporting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10283" target="_blank" rel="noopener noreferrer" class="">#10283</a></li>
<li class="">build(deps): bump the github-actions-dependencies group with 4 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10298" target="_blank" rel="noopener noreferrer" class="">#10298</a></li>
<li class="">fix: Clear cached plans on view updates by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10312" target="_blank" rel="noopener noreferrer" class="">#10312</a></li>
<li class="">build(deps): bump the aws-sdk group with 7 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10299" target="_blank" rel="noopener noreferrer" class="">#10299</a></li>
<li class="">Code out of runtime. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10178" target="_blank" rel="noopener noreferrer" class="">#10178</a></li>
<li class="">fix: Respect function registry denies for accelerated table filter pushdown by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10311" target="_blank" rel="noopener noreferrer" class="">#10311</a></li>
<li class="">fix: Don't block heartbeat when all slots acquired by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10322" target="_blank" rel="noopener noreferrer" class="">#10322</a></li>
<li class="">fix: strip only outer parens in <code>get_table_partition_expr_from_ctx</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10323" target="_blank" rel="noopener noreferrer" class="">#10323</a></li>
<li class="">Upgrade datafusion-table-providers with MongoDB SRV support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10317" target="_blank" rel="noopener noreferrer" class="">#10317</a></li>
<li class="">fix: Avoid pushing down bucketing partition expressions into executors by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10324" target="_blank" rel="noopener noreferrer" class="">#10324</a></li>
<li class="">Upgrade datafusion-table-providers to d1b911a5 and bump adbc to 0.23 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10329" target="_blank" rel="noopener noreferrer" class="">#10329</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10308" target="_blank" rel="noopener noreferrer" class="">#10308</a></li>
<li class="">Handle foreign table + Classic sql warehouse combination gracefully by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10318" target="_blank" rel="noopener noreferrer" class="">#10318</a></li>
<li class="">New crate <code>datafusion-flightsql</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10201" target="_blank" rel="noopener noreferrer" class="">#10201</a></li>
<li class="">Set <code>tantivy=warn</code> unless very verbose logging by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10338" target="_blank" rel="noopener noreferrer" class="">#10338</a></li>
<li class="">Remove image registry and image name options from spidapter by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10241" target="_blank" rel="noopener noreferrer" class="">#10241</a></li>
<li class="">build(deps): bump sysinfo from 0.37.2 to 0.38.4 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10291" target="_blank" rel="noopener noreferrer" class="">#10291</a></li>
<li class="">build(deps): bump futures from 0.3.31 to 0.3.32 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10289" target="_blank" rel="noopener noreferrer" class="">#10289</a></li>
<li class="">New crate 'datafusion-dml' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10334" target="_blank" rel="noopener noreferrer" class="">#10334</a></li>
<li class="">Jeadie/26 04 16/spice sql by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10343" target="_blank" rel="noopener noreferrer" class="">#10343</a></li>
<li class="">Add Teraswitch/Pittsburgh apt mirrors + retry config for CI runners by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10349" target="_blank" rel="noopener noreferrer" class="">#10349</a></li>
<li class="">Implement sort pushdown and fix pushdown gaps across providers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10337" target="_blank" rel="noopener noreferrer" class="">#10337</a></li>
<li class="">Merge develop to trunk (2026-04-16) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10345" target="_blank" rel="noopener noreferrer" class="">#10345</a></li>
<li class="">Update candle and mistral.rs lock-step pins by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10278" target="_blank" rel="noopener noreferrer" class="">#10278</a></li>
<li class="">docs: fix status badges in README by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10350" target="_blank" rel="noopener noreferrer" class="">#10350</a></li>
<li class="">Migrate secrets to vars by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10354" target="_blank" rel="noopener noreferrer" class="">#10354</a></li>
<li class="">Add limit pushdown and improve sort pushdown for Oracle and MSSQL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10351" target="_blank" rel="noopener noreferrer" class="">#10351</a></li>
<li class="">Fix ubuntu mirror configuration by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10359" target="_blank" rel="noopener noreferrer" class="">#10359</a></li>
<li class="">fix: Increase throughput test default ready_wait from 30s to 300s (fixes #8207) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10344" target="_blank" rel="noopener noreferrer" class="">#10344</a></li>
<li class="">Add auth headers support to OTEL metrics exporter by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10347" target="_blank" rel="noopener noreferrer" class="">#10347</a></li>
<li class="">fix(github): shrink GraphQL page size on gateway errors; lower comment defaults by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10355" target="_blank" rel="noopener noreferrer" class="">#10355</a></li>
<li class="">Relax apt mirror substitution failure to warning in CI action by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10361" target="_blank" rel="noopener noreferrer" class="">#10361</a></li>
<li class="">feat(http): Add OAuth2 refresh-token auth to HTTP connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10348" target="_blank" rel="noopener noreferrer" class="">#10348</a></li>
<li class="">Upgrade Rust toolchain to 1.94.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10353" target="_blank" rel="noopener noreferrer" class="">#10353</a></li>
<li class="">Handle order by and sort in PartitionedTableScanRewrite by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9656" target="_blank" rel="noopener noreferrer" class="">#9656</a></li>
<li class="">Fix OTEL Exporter by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10363" target="_blank" rel="noopener noreferrer" class="">#10363</a></li>
<li class="">Pin spiceai candle / TEI forks to merged revs; drop local [patch] overrides by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10362" target="_blank" rel="noopener noreferrer" class="">#10362</a></li>
<li class="">Integrate spiceio and makefile_targets into pr.yml by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10357" target="_blank" rel="noopener noreferrer" class="">#10357</a></li>
<li class="">ci: skip artifact compression for test binaries/archives by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10381" target="_blank" rel="noopener noreferrer" class="">#10381</a></li>
<li class="">chore(deps): bump spiceai/candle, spiceai/mistral.rs, aws-lc-rs, tantivy, rand by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10379" target="_blank" rel="noopener noreferrer" class="">#10379</a></li>
<li class="">Bump datafusion-table-providers (#10375) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10384" target="_blank" rel="noopener noreferrer" class="">#10384</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10376" target="_blank" rel="noopener noreferrer" class="">#10376</a></li>
<li class="">v2.0.0-rc.3 preparation by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10382" target="_blank" rel="noopener noreferrer" class="">#10382</a></li>
<li class="">fix(spicepod): JSON schema accepts string or <code>{name: expr}</code> for <code>partition_by</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10352" target="_blank" rel="noopener noreferrer" class="">#10352</a></li>
<li class="">fix: Use ROUND for Turso decimal BETWEEN comparisons (fixes #9872) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10360" target="_blank" rel="noopener noreferrer" class="">#10360</a></li>
<li class="">Revert "v2.0.0-rc.3 preparation" from trunk by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10386" target="_blank" rel="noopener noreferrer" class="">#10386</a></li>
<li class="">Add <code>on_schema_resolved</code> dataset ready state by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10368" target="_blank" rel="noopener noreferrer" class="">#10368</a></li>
<li class="">feat: Add Elasticsearch data connector with hybrid search support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10258" target="_blank" rel="noopener noreferrer" class="">#10258</a></li>
<li class="">ci: bump test archive upload compression-level to 1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10388" target="_blank" rel="noopener noreferrer" class="">#10388</a></li>
<li class="">feat(git-connector): promote Git connector to RC status by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10385" target="_blank" rel="noopener noreferrer" class="">#10385</a></li>
<li class="">feat(postgres): stream WAL directly to Spice accelerators by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10364" target="_blank" rel="noopener noreferrer" class="">#10364</a></li>
<li class="">Add schema decomposition to the HTTP connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10393" target="_blank" rel="noopener noreferrer" class="">#10393</a></li>
<li class="">fix(cayenne): Skip catalog refresh state reload for existing providers by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10396" target="_blank" rel="noopener noreferrer" class="">#10396</a></li>
<li class="">Make <code>cayenne-flightsql</code> tool by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10356" target="_blank" rel="noopener noreferrer" class="">#10356</a></li>
<li class="">build(deps): bump the github-actions-dependencies group with 2 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10398" target="_blank" rel="noopener noreferrer" class="">#10398</a></li>
<li class="">Update openapi.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10272" target="_blank" rel="noopener noreferrer" class="">#10272</a></li>
<li class="">Merge develop to trunk — 2026-04-19 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10407" target="_blank" rel="noopener noreferrer" class="">#10407</a></li>
<li class="">feat(otel): default OTLP push exporter to delta temporality by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10412" target="_blank" rel="noopener noreferrer" class="">#10412</a></li>
<li class="">fix: Restore analyzer rule ordering to run federation before type coercion by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10415" target="_blank" rel="noopener noreferrer" class="">#10415</a></li>
<li class="">fix: Map Utf8/LargeUtf8 to STRING in Databricks/Spark SQL dialects by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10420" target="_blank" rel="noopener noreferrer" class="">#10420</a></li>
<li class="">feat(otel): add metric name prefix at runtime.telemetry.metric_prefix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10418" target="_blank" rel="noopener noreferrer" class="">#10418</a></li>
<li class="">fix: Map LargeUtf8 to VARCHAR in Athena ODBC dialect by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10419" target="_blank" rel="noopener noreferrer" class="">#10419</a></li>
<li class="">feat(cluster): connector-driven object store registration on executors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10414" target="_blank" rel="noopener noreferrer" class="">#10414</a></li>
<li class="">build(deps): bump ubuntu from 22.04 to 24.04 in the docker-dependencies group by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10397" target="_blank" rel="noopener noreferrer" class="">#10397</a></li>
<li class="">fix: Update benchmark snapshots Apr 20 by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10417" target="_blank" rel="noopener noreferrer" class="">#10417</a></li>
<li class="">feat(otel): apply runtime.telemetry.properties as resource attributes on exported metrics by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10416" target="_blank" rel="noopener noreferrer" class="">#10416</a></li>
<li class="">Publish RC releases to DockerHub; upgrade runners to ubuntu-24.04 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10428" target="_blank" rel="noopener noreferrer" class="">#10428</a></li>
<li class="">feat: Add Azure Cosmos DB (NoSQL) data connector (RC) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10392" target="_blank" rel="noopener noreferrer" class="">#10392</a></li>
<li class="">feat(datafusion): flatten_json_properties + json_tree UDTFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10406" target="_blank" rel="noopener noreferrer" class="">#10406</a></li>
<li class="">Harden /v1/tools and /v1/nsql against unauthenticated / LLM-driven SQL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10365" target="_blank" rel="noopener noreferrer" class="">#10365</a></li>
<li class="">feat(embeddings): multi-vector embeddings with MaxSim + late-interaction by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10408" target="_blank" rel="noopener noreferrer" class="">#10408</a></li>
<li class="">Update GH runners for CUDA builds by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10432" target="_blank" rel="noopener noreferrer" class="">#10432</a></li>
<li class="">fix(delta_lake): register object stores on cluster executors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10436" target="_blank" rel="noopener noreferrer" class="">#10436</a></li>
<li class="">DF-native DML by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10327" target="_blank" rel="noopener noreferrer" class="">#10327</a></li>
<li class="">ci: run Build and Test on spiceai-macos; split install jobs by profile by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10434" target="_blank" rel="noopener noreferrer" class="">#10434</a></li>
<li class="">Improve search UDTFs: text_search, vector_search, rrf by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10387" target="_blank" rel="noopener noreferrer" class="">#10387</a></li>
<li class="">fix(model2vec): Improve robustness of model loading for sentence-transformers layouts by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10444" target="_blank" rel="noopener noreferrer" class="">#10444</a></li>
<li class="">Merge develop to trunk — 2026-04-21 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10448" target="_blank" rel="noopener noreferrer" class="">#10448</a></li>
<li class="">Enable filter pushdown for <code>vector_search</code> UDTF by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10447" target="_blank" rel="noopener noreferrer" class="">#10447</a></li>
<li class="">Support Snowflake OBJECT, MAP, GEOGRAPHY, GEOMETRY, VECTOR, TIMESTAMP_LTZ types by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10451" target="_blank" rel="noopener noreferrer" class="">#10451</a></li>
<li class="">Fix Databricks tests by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10449" target="_blank" rel="noopener noreferrer" class="">#10449</a></li>
<li class="">fix(cluster): forward register_object_stores through connector wrappers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10460" target="_blank" rel="noopener noreferrer" class="">#10460</a></li>
<li class="">Fixes for vector-search by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10455" target="_blank" rel="noopener noreferrer" class="">#10455</a></li>
<li class="">Add expand_maps option and flatten_json UDTF by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10452" target="_blank" rel="noopener noreferrer" class="">#10452</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10458" target="_blank" rel="noopener noreferrer" class="">#10458</a></li>
<li class="">Fix physical codec decode ambiguity for empty protobuf messages by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10466" target="_blank" rel="noopener noreferrer" class="">#10466</a></li>
<li class="">chore(logging): demote s3_single_file_cached skip refresh log to debug by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10467" target="_blank" rel="noopener noreferrer" class="">#10467</a></li>
<li class="">Enable filter pushdown for <code>rrf</code> UDTF by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10465" target="_blank" rel="noopener noreferrer" class="">#10465</a></li>
<li class="">feat(cluster): consolidate distributed state into cluster.json by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10463" target="_blank" rel="noopener noreferrer" class="">#10463</a></li>
<li class="">feat(cayenne): Add column statistics and data inlining by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10314" target="_blank" rel="noopener noreferrer" class="">#10314</a></li>
<li class="">docs(copilot): flag missing wrapper delegation when adding default trait methods by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10461" target="_blank" rel="noopener noreferrer" class="">#10461</a></li>
<li class="">Wire Elasticsearch vector engine write path through acceleration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10453" target="_blank" rel="noopener noreferrer" class="">#10453</a></li>
<li class="">Add helm lint CI by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10468" target="_blank" rel="noopener noreferrer" class="">#10468</a></li>
<li class="">Fix Azure and GCS acceleration snapshot object store credential handling by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10486" target="_blank" rel="noopener noreferrer" class="">#10486</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10485" target="_blank" rel="noopener noreferrer" class="">#10485</a></li>
<li class="">fix(secrets): harden AWS Secrets Manager secret store by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10478" target="_blank" rel="noopener noreferrer" class="">#10478</a></li>
<li class="">Update <code>datafusion-ballista</code> crate by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10488" target="_blank" rel="noopener noreferrer" class="">#10488</a></li>
<li class="">feat(secrets): add ParameterSpec and more params for AWS secrets manager by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10487" target="_blank" rel="noopener noreferrer" class="">#10487</a></li>
<li class="">Add rerank UDTF for hybrid search with query auto-propagation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10469" target="_blank" rel="noopener noreferrer" class="">#10469</a></li>
<li class="">Fix flatten_json_properties by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10475" target="_blank" rel="noopener noreferrer" class="">#10475</a></li>
<li class="">fix: preserve field and schema metadata in expand_views_schema by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10494" target="_blank" rel="noopener noreferrer" class="">#10494</a></li>
<li class="">Upgrade rmcp to upstream 1.5.0; switch MCP server to Streamable HTTP by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10491" target="_blank" rel="noopener noreferrer" class="">#10491</a></li>
<li class="">fix: handle Snowflake TIMESTAMP_LTZ wire format and prevent nanosecond overflow by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10493" target="_blank" rel="noopener noreferrer" class="">#10493</a></li>
<li class="">Lint parity in Makefile by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10492" target="_blank" rel="noopener noreferrer" class="">#10492</a></li>
<li class="">Add connect_timeout/client_timeout params to Databricks sql_warehouse mode by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10495" target="_blank" rel="noopener noreferrer" class="">#10495</a></li>
<li class="">fix(tracing): suppress opentelemetry INFO logs at all verbosity levels by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10497" target="_blank" rel="noopener noreferrer" class="">#10497</a></li>
<li class="">DynamoDB DML by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10470" target="_blank" rel="noopener noreferrer" class="">#10470</a></li>
<li class="">feat(cayenne): native vector search via SIMD similarity UDFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10456" target="_blank" rel="noopener noreferrer" class="">#10456</a></li>
<li class="">fix(cli): suppress banner for all JSON-producing cloud subcommands (fixes #10498) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10510" target="_blank" rel="noopener noreferrer" class="">#10510</a></li>
<li class="">fix(deps): bump openssl to 0.10.78 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10509" target="_blank" rel="noopener noreferrer" class="">#10509</a></li>
<li class="">fix(s3): quiet AWS SDK credential probe when no region is configured by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10506" target="_blank" rel="noopener noreferrer" class="">#10506</a></li>
<li class="">fix(cdc): emit ready signal on caught-up Kafka/Debezium streams (#5201) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10504" target="_blank" rel="noopener noreferrer" class="">#10504</a></li>
<li class=""><code>runtime-cluster</code> crate + Run partition discovery before forwarding refresh to executors by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10490" target="_blank" rel="noopener noreferrer" class="">#10490</a></li>
<li class="">Update lint-rust target to use <code>--keep-going</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10508" target="_blank" rel="noopener noreferrer" class="">#10508</a></li>
<li class="">Add TPC-H SF100 s3[parquet]-duckdb[file] benchmark spicepod by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10524" target="_blank" rel="noopener noreferrer" class="">#10524</a></li>
<li class="">Remove dev-profile install steps from pr.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10507" target="_blank" rel="noopener noreferrer" class="">#10507</a></li>
<li class="">fix: add missing NULL check on Timestamp path in append refresh by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10518" target="_blank" rel="noopener noreferrer" class="">#10518</a></li>
<li class="">fix: return error on Decimal128/256 overflow instead of silently dropping scale by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10519" target="_blank" rel="noopener noreferrer" class="">#10519</a></li>
<li class="">fix: delegate update and delete_from in IndexedTableProvider and EmbeddingTable by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10520" target="_blank" rel="noopener noreferrer" class="">#10520</a></li>
<li class="">feat(devx): make config errors, CLI, and REPL lead users to success by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10489" target="_blank" rel="noopener noreferrer" class="">#10489</a></li>
<li class="">fix(rerank): defer execution to RerankExec, enable filters and projection pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10514" target="_blank" rel="noopener noreferrer" class="">#10514</a></li>
<li class="">fix(llms): support Gemma models with missing attention_bias config field by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10523" target="_blank" rel="noopener noreferrer" class="">#10523</a></li>
<li class="">Fix vector_search silently ignoring named limit/column/include_score args by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10527" target="_blank" rel="noopener noreferrer" class="">#10527</a></li>
<li class="">fix: split unsupported filters locally in scan() for UseSource mode by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10528" target="_blank" rel="noopener noreferrer" class="">#10528</a></li>
<li class="">feat(secrets): add Azure Key Vault secret store by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10496" target="_blank" rel="noopener noreferrer" class="">#10496</a></li>
<li class="">Bump mistralrs by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10532" target="_blank" rel="noopener noreferrer" class="">#10532</a></li>
<li class="">Fix benchmark configurations and CI build issues by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10535" target="_blank" rel="noopener noreferrer" class="">#10535</a></li>
<li class="">Fix catalog query overrides for MySQL and MSSQL benchmarks by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10543" target="_blank" rel="noopener noreferrer" class="">#10543</a></li>
<li class="">For Cayenne, preserve matched columns for <code>MERGE ... ON &lt;cols&gt;</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10340" target="_blank" rel="noopener noreferrer" class="">#10340</a></li>
<li class="">build(deps): bump the aws-sdk group across 1 directory with 5 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10538" target="_blank" rel="noopener noreferrer" class="">#10538</a></li>
<li class="">docs: update AI agent instructions (git workflow + Rust 1.94) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10544" target="_blank" rel="noopener noreferrer" class="">#10544</a></li>
<li class="">fix: Update tpch benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10529" target="_blank" rel="noopener noreferrer" class="">#10529</a></li>
<li class="">fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-duckdb[file].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10525" target="_blank" rel="noopener noreferrer" class="">#10525</a></li>
<li class="">Extract <code>runtime-datafusion</code> from <code>runtime</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10545" target="_blank" rel="noopener noreferrer" class="">#10545</a></li>
<li class="">Use generic DML extension planner for Cayenne by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10437" target="_blank" rel="noopener noreferrer" class="">#10437</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10552" target="_blank" rel="noopener noreferrer" class="">#10552</a></li>
<li class="">Fix security and correctness audit issues by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10526" target="_blank" rel="noopener noreferrer" class="">#10526</a></li>
<li class="">fix(MySQL): revert MySQL result column reorder to fix federated query failures by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10557" target="_blank" rel="noopener noreferrer" class="">#10557</a></li>
<li class="">Fix <code>protoc</code> installation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10566" target="_blank" rel="noopener noreferrer" class="">#10566</a></li>
<li class="">fix: Disable Ballista dynamic filters on HashJoinExec by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10548" target="_blank" rel="noopener noreferrer" class="">#10548</a></li>
<li class="">Support views on DDL catalogs by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10554" target="_blank" rel="noopener noreferrer" class="">#10554</a></li>
<li class="">Update datafusion by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10422" target="_blank" rel="noopener noreferrer" class="">#10422</a></li>
<li class="">Improve full-text search indexing performance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10464" target="_blank" rel="noopener noreferrer" class="">#10464</a></li>
<li class="">feat(mysql): add mysql_zero_date_behavior parameter (null|error) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10573" target="_blank" rel="noopener noreferrer" class="">#10573</a></li>
<li class="">fix(snowflake): declare <code>private_key</code> in connector PARAMETERS (fixes #10517) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10559" target="_blank" rel="noopener noreferrer" class="">#10559</a></li>
<li class="">Honour <code>CARGO_TARGET_DIR</code> in Makefiles by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10569" target="_blank" rel="noopener noreferrer" class="">#10569</a></li>
<li class="">Enable <code>cosine_distance</code> pushdown to DuckDB accelerator via <code>array_cosine_distance</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10564" target="_blank" rel="noopener noreferrer" class="">#10564</a></li>
<li class="">fix: Update test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10570" target="_blank" rel="noopener noreferrer" class="">#10570</a></li>
<li class="">fix: Update tpch benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10560" target="_blank" rel="noopener noreferrer" class="">#10560</a></li>
<li class="">feat(snapshots): make snapshots an optional feature by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10574" target="_blank" rel="noopener noreferrer" class="">#10574</a></li>
<li class="">Enforce read-only API key restrictions on Flight DoGet and async query paths by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10551" target="_blank" rel="noopener noreferrer" class="">#10551</a></li>
<li class="">Improved security posture on Github workflows by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10556" target="_blank" rel="noopener noreferrer" class="">#10556</a></li>
<li class="">fix: Update datafusion-table-providers to improve SqlTable filter pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10595" target="_blank" rel="noopener noreferrer" class="">#10595</a></li>
<li class="">feat(secrets): add HashiCorp Vault secret store by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10561" target="_blank" rel="noopener noreferrer" class="">#10561</a></li>
<li class="">fix: delegate update() in UpsertDedupTableProvider to inner provider by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10593" target="_blank" rel="noopener noreferrer" class="">#10593</a></li>
<li class="">Add DuckDB vector engine support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10562" target="_blank" rel="noopener noreferrer" class="">#10562</a></li>
<li class="">Sharepoint - add object-store listing connector with expanded auth and write support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10473" target="_blank" rel="noopener noreferrer" class="">#10473</a></li>
<li class="">fix: Install protoc from source by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10597" target="_blank" rel="noopener noreferrer" class="">#10597</a></li>
<li class="">Enable DML support for PostgreSQL data connector by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10446" target="_blank" rel="noopener noreferrer" class="">#10446</a></li>
<li class="">feat(postgres): support inline PEM sslrootcert by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10578" target="_blank" rel="noopener noreferrer" class="">#10578</a></li>
<li class="">Add foreign key metadata discovery to PostgreSQL Catalog by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10849" target="_blank" rel="noopener noreferrer" class="">#10849</a></li>
<li class="">Add Snowflake DML support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10747" target="_blank" rel="noopener noreferrer" class="">#10747</a></li>
<li class="">Add MongoDB Change Streams support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10813" target="_blank" rel="noopener noreferrer" class="">#10813</a></li>
<li class="">Add user-defined functions by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10571" target="_blank" rel="noopener noreferrer" class="">#10571</a></li>
<li class="">Add table user functions and gate HTTP servers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10675" target="_blank" rel="noopener noreferrer" class="">#10675</a></li>
<li class="">feat: add on-demand dataset loading by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10629" target="_blank" rel="noopener noreferrer" class="">#10629</a></li>
<li class="">feat(runtime): declared-schema deferred datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10669" target="_blank" rel="noopener noreferrer" class="">#10669</a></li>
<li class="">feat(spicepod, runtime): add columns[].type / nullable + lenient type parser by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10661" target="_blank" rel="noopener noreferrer" class="">#10661</a></li>
<li class="">Replace external smb crate with internal SMB 3.1.1 client by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10516" target="_blank" rel="noopener noreferrer" class="">#10516</a></li>
<li class="">Add unified query cancellation across all paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10390" target="_blank" rel="noopener noreferrer" class="">#10390</a></li>
<li class="">Add dynamic HTTP request headers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10604" target="_blank" rel="noopener noreferrer" class="">#10604</a></li>
<li class="">feat(http): Support dynamic HTTP connector request params from subqueries by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10636" target="_blank" rel="noopener noreferrer" class="">#10636</a></li>
<li class="">feat(http): pass through HTTP metadata columns with JSON schema decomposition by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10679" target="_blank" rel="noopener noreferrer" class="">#10679</a></li>
<li class="">Add nolimit HTTP pagination max pages by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10673" target="_blank" rel="noopener noreferrer" class="">#10673</a></li>
<li class="">Add shared HTTP rate control for connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10648" target="_blank" rel="noopener noreferrer" class="">#10648</a></li>
<li class="">Use origin label instead of name for HTTP rate control metrics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10689" target="_blank" rel="noopener noreferrer" class="">#10689</a></li>
<li class="">fix(http): reject OR across different HTTP filter columns by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10625" target="_blank" rel="noopener noreferrer" class="">#10625</a></li>
<li class="">Add provider-aware LLM prompt caching by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10645" target="_blank" rel="noopener noreferrer" class="">#10645</a></li>
<li class="">Add searchable registry mode for LLM tools by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10647" target="_blank" rel="noopener noreferrer" class="">#10647</a></li>
<li class="">feat: refresh_mode: snapshot + SQLite/Turso WAL flush + Cayenne metastore slice by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10651" target="_blank" rel="noopener noreferrer" class="">#10651</a></li>
<li class="">feat: per-principal cache namespacing for SQL/search/caching-accelerator by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10702" target="_blank" rel="noopener noreferrer" class="">#10702</a></li>
<li class="">Add self-hosted Spice connector support by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10546" target="_blank" rel="noopener noreferrer" class="">#10546</a></li>
<li class="">Add Delta Lake Azure tenant parameter by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10671" target="_blank" rel="noopener noreferrer" class="">#10671</a></li>
<li class="">Support OAuth2 client credentials in 'spice cloud login' by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10586" target="_blank" rel="noopener noreferrer" class="">#10586</a></li>
<li class="">Add configurable allowed_hosts for MCP by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10638" target="_blank" rel="noopener noreferrer" class="">#10638</a></li>
<li class="">fix: make Helm chart probes configurable by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10696" target="_blank" rel="noopener noreferrer" class="">#10696</a></li>
<li class="">Strip high-cardinality datasets dim from anonymous telemetry by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10711" target="_blank" rel="noopener noreferrer" class="">#10711</a></li>
<li class="">feat(elasticsearch): direct FTS engine config + index lifecycle and ingestion controls by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10672" target="_blank" rel="noopener noreferrer" class="">#10672</a></li>
<li class="">Add DuckDB HNSW vector index support for accelerated views by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10695" target="_blank" rel="noopener noreferrer" class="">#10695</a></li>
<li class="">Rewrite DuckDB vector search SQL to activate HNSW_INDEX_SCAN by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10674" target="_blank" rel="noopener noreferrer" class="">#10674</a></li>
<li class="">Fix DuckDB HNSW vector indexes lost after data refresh by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10668" target="_blank" rel="noopener noreferrer" class="">#10668</a></li>
<li class="">Fix DuckDB DELETE/UPDATE on <code>full</code> and <code>caching</code> refresh mode datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10632" target="_blank" rel="noopener noreferrer" class="">#10632</a></li>
<li class="">Fix DuckLake connector: downcast, module registration, schema discovery, and S3 credentials by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10650" target="_blank" rel="noopener noreferrer" class="">#10650</a></li>
<li class="">Fix federation pushing denied functions inside subqueries to remote engines by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10692" target="_blank" rel="noopener noreferrer" class="">#10692</a></li>
<li class="">fix(caching): honour refresh_on_startup: always in caching mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10594" target="_blank" rel="noopener noreferrer" class="">#10594</a></li>
<li class="">fix(iceberg): rebuild storage factory when Hadoop catalog scheme is inferred by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10601" target="_blank" rel="noopener noreferrer" class="">#10601</a></li>
<li class="">Pipeline CDC ingestion: overlap source reads with batch apply by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10676" target="_blank" rel="noopener noreferrer" class="">#10676</a></li>
<li class="">fix: add NULL check to CDC primary key extraction by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10684" target="_blank" rel="noopener noreferrer" class="">#10684</a></li>
<li class="">Properly handle nullability during CDC processing by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10803" target="_blank" rel="noopener noreferrer" class="">#10803</a></li>
<li class="">Flatten scheduler config and rename partition management → partition assignment by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10450" target="_blank" rel="noopener noreferrer" class="">#10450</a></li>
<li class="">Improve NSQL UX and harden internal LLM tools by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10715" target="_blank" rel="noopener noreferrer" class="">#10715</a></li>
<li class="">Support Responses API across model providers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10724" target="_blank" rel="noopener noreferrer" class="">#10724</a></li>
<li class="">Update xAI default model and handle Grok model retirements by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10723" target="_blank" rel="noopener noreferrer" class="">#10723</a></li>
<li class="">Improve cli table layout by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10725" target="_blank" rel="noopener noreferrer" class="">#10725</a></li>
<li class="">TLS cert hot-reload (mTLS plan M1) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10727" target="_blank" rel="noopener noreferrer" class="">#10727</a></li>
<li class="">Fix DuckLake catalog <code>include</code> filter being ignored by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10738" target="_blank" rel="noopener noreferrer" class="">#10738</a></li>
<li class="">Promote DuckLake Catalog and Data Connector to Beta quality by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10743" target="_blank" rel="noopener noreferrer" class="">#10743</a></li>
<li class="">feat(ducklake): Support INSERT on catalog tables with read_write access by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10744" target="_blank" rel="noopener noreferrer" class="">#10744</a></li>
<li class="">perf(cdc): coalesce envelopes and overlap commits in apply pipeline by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10745" target="_blank" rel="noopener noreferrer" class="">#10745</a></li>
<li class="">feat: Allow full version tags in spicepod version by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10748" target="_blank" rel="noopener noreferrer" class="">#10748</a></li>
<li class="">Add Arrow primary key upserts by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10749" target="_blank" rel="noopener noreferrer" class="">#10749</a></li>
<li class="">fix(snapshot): keep refresh_mode snapshot read-only by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10752" target="_blank" rel="noopener noreferrer" class="">#10752</a></li>
<li class="">feat(tls): public mTLS for HTTP and Flight (channel + identity modes) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10753" target="_blank" rel="noopener noreferrer" class="">#10753</a></li>
<li class="">perf(cayenne): lock-free deletion caches with bloom-prefiltered probe by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10756" target="_blank" rel="noopener noreferrer" class="">#10756</a></li>
<li class="">fix(security): close API key timing-position leak and remote-UDF SSRF by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10757" target="_blank" rel="noopener noreferrer" class="">#10757</a></li>
<li class="">Fix 'wait_until_dependent_tables_are_ready' for catalogs by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10758" target="_blank" rel="noopener noreferrer" class="">#10758</a></li>
<li class="">Fixes for views and resolved tables on 'spice refresh' CLI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10759" target="_blank" rel="noopener noreferrer" class="">#10759</a></li>
<li class="">Implement FlightSQL CommandStatementSubstraitPlan support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10761" target="_blank" rel="noopener noreferrer" class="">#10761</a></li>
<li class="">feat(connectors): mTLS client cert support for flightsql and spiceai connectors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10764" target="_blank" rel="noopener noreferrer" class="">#10764</a></li>
<li class="">Allow arbitrary filenames when specifying spicepod path + <code>kind</code> validation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10777" target="_blank" rel="noopener noreferrer" class="">#10777</a></li>
<li class="">fix: ignore field metadata in schema compatibility check in index_table_scan by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10778" target="_blank" rel="noopener noreferrer" class="">#10778</a></li>
<li class="">Display pushed-down limits in EXPLAIN TREE output by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10779" target="_blank" rel="noopener noreferrer" class="">#10779</a></li>
<li class="">fix: enable streaming append for Kafka with Cayenne accelerator by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10780" target="_blank" rel="noopener noreferrer" class="">#10780</a></li>
<li class="">fix: bound chunked-index intermediate batch size to prevent OOM by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10783" target="_blank" rel="noopener noreferrer" class="">#10783</a></li>
<li class="">fix: label all columns in <code>spice cloud metrics</code> table output by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10784" target="_blank" rel="noopener noreferrer" class="">#10784</a></li>
<li class="">fix: use checked arithmetic for Turso integer-millis timestamp read path by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10786" target="_blank" rel="noopener noreferrer" class="">#10786</a></li>
<li class="">fix: use checked arithmetic in timestamp-to-nanosecond conversions by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10666" target="_blank" rel="noopener noreferrer" class="">#10666</a></li>
<li class="">Upgrade to DuckDB v1.5.2 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10788" target="_blank" rel="noopener noreferrer" class="">#10788</a></li>
<li class="">Improve CDC ingestion performance by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10789" target="_blank" rel="noopener noreferrer" class="">#10789</a></li>
<li class="">Fix <code>tool_search</code>/<code>tool_invoke</code> spans by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10791" target="_blank" rel="noopener noreferrer" class="">#10791</a></li>
<li class="">Add Cayenne inline mutations and benchmark coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10792" target="_blank" rel="noopener noreferrer" class="">#10792</a></li>
<li class="">Ensure we always resolve table names in distributed mode/metadata by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10793" target="_blank" rel="noopener noreferrer" class="">#10793</a></li>
<li class="">Remove permanent errors from DynamoDB Streams by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10794" target="_blank" rel="noopener noreferrer" class="">#10794</a></li>
<li class="">Add expanded view mode for wide table display in SQL REPL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10797" target="_blank" rel="noopener noreferrer" class="">#10797</a></li>
<li class="">Fix Cayenne CDC schema mismatch error by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10800" target="_blank" rel="noopener noreferrer" class="">#10800</a></li>
<li class="">Executors should create catalog tables on join by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10807" target="_blank" rel="noopener noreferrer" class="">#10807</a></li>
<li class="">Add compressed file support for listing connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10809" target="_blank" rel="noopener noreferrer" class="">#10809</a></li>
<li class="">Improve Cayenne mutation, scan, and inline memtable scaling by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10811" target="_blank" rel="noopener noreferrer" class="">#10811</a></li>
<li class="">Add range fallback for large join filters by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10816" target="_blank" rel="noopener noreferrer" class="">#10816</a></li>
<li class="">Improve Cayenne join filter pushdown by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10818" target="_blank" rel="noopener noreferrer" class="">#10818</a></li>
<li class="">Synchronize Cayenne partition commits across partitions by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10819" target="_blank" rel="noopener noreferrer" class="">#10819</a></li>
<li class="">fix: Deny nondistributed cayenne catalog by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10821" target="_blank" rel="noopener noreferrer" class="">#10821</a></li>
<li class="">Enable parallel Cayenne Vortex writes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10822" target="_blank" rel="noopener noreferrer" class="">#10822</a></li>
<li class="">Expand Arrow type handling in formatting and Elasticsearch by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10825" target="_blank" rel="noopener noreferrer" class="">#10825</a></li>
<li class="">Add <code>response.output_text.delta</code> to responses API by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10828" target="_blank" rel="noopener noreferrer" class="">#10828</a></li>
<li class="">feat(cayenne): add join filter propagation and no-spill Q21 planning by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10840" target="_blank" rel="noopener noreferrer" class="">#10840</a></li>
<li class="">Upgrade Turso to v0.6.0 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10843" target="_blank" rel="noopener noreferrer" class="">#10843</a></li>
<li class="">feat(cli): add <code>spice feedback</code> command to open community Slack by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10856" target="_blank" rel="noopener noreferrer" class="">#10856</a></li>
<li class="">Upgrade iceberg to v0.9.1 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10859" target="_blank" rel="noopener noreferrer" class="">#10859</a></li>
<li class="">feat(cluster): per-request executor readiness gate on /v1/ready by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10860" target="_blank" rel="noopener noreferrer" class="">#10860</a></li>
<li class="">fix: Require dim-side statistics for <code>CayennePropagateFilterAcrossEquiJoinKeys</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10863" target="_blank" rel="noopener noreferrer" class="">#10863</a></li>
<li class="">fix: Debezium schema evolution breaks dataset init on reload by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10144" target="_blank" rel="noopener noreferrer" class="">#10144</a></li>
<li class="">fix(mssql): Push topK limit to SQL Server for non-nullable sort columns by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10621" target="_blank" rel="noopener noreferrer" class="">#10621</a></li>
<li class="">fix(ScyllaDB): disable physical filter pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10772" target="_blank" rel="noopener noreferrer" class="">#10772</a></li>
<li class="">fix: handle typed NULLs and prevent overflow in DynamoDB DML type conversions by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10511" target="_blank" rel="noopener noreferrer" class="">#10511</a></li>
<li class="">fix: use InsertOp::Overwrite in DynamoDB bootstrap scan_and_overwrite_accelerator by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10639" target="_blank" rel="noopener noreferrer" class="">#10639</a></li>
<li class="">Improve DynamoDB Bootstrap performance by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10616" target="_blank" rel="noopener noreferrer" class="">#10616</a></li>
<li class="">fix: preserve field and schema metadata in Vortex type transformation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10628" target="_blank" rel="noopener noreferrer" class="">#10628</a></li>
<li class="">fix: GH connector - explicitly use AWS LC RS crypto provider for jwt by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10619" target="_blank" rel="noopener noreferrer" class="">#10619</a></li>
<li class="">fix: add snapshot mode guards to delete_from/update and delegate DML in SwappableTableProvider by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10685" target="_blank" rel="noopener noreferrer" class="">#10685</a></li>
<li class="">Persist HTTP rate-control state in object storage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10697" target="_blank" rel="noopener noreferrer" class="">#10697</a></li>
<li class="">Rate limit metrics HTTP endpoint by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10162" target="_blank" rel="noopener noreferrer" class="">#10162</a></li>
<li class="">feat(geo): add optional spatial SQL UDF support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10833" target="_blank" rel="noopener noreferrer" class="">#10833</a></li>
<li class="">feat(cayenne): CDC throughput, compaction, scan caching, and benchmarks by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10852" target="_blank" rel="noopener noreferrer" class="">#10852</a></li>
<li class="">fix(cayenne): fix Vortex panic on highly compressible data by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10855" target="_blank" rel="noopener noreferrer" class="">#10855</a></li>
<li class="">fix(cayenne): Read live protected snapshots after cleanup grace period by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10901" target="_blank" rel="noopener noreferrer" class="">#10901</a></li>
<li class="">fix: Disable Cayenne HashJoin rewriter optimizer by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10882" target="_blank" rel="noopener noreferrer" class="">#10882</a></li>
<li class="">Fix GetFlightInfo vs DoGet Flight Schema by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10864" target="_blank" rel="noopener noreferrer" class="">#10864</a></li>
<li class="">fix(search): preserve column casing in /v1/search primary key plumbing by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10909" target="_blank" rel="noopener noreferrer" class="">#10909</a></li>
<li class="">fix(object-store): dedupe s3 url style auto-detection log by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10898" target="_blank" rel="noopener noreferrer" class="">#10898</a></li>
<li class="">Improve Spice CLI manifest editing and direct command modes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10815" target="_blank" rel="noopener noreferrer" class="">#10815</a></li>
<li class="">Persist Kafka CDC offsets in sidecar tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10823" target="_blank" rel="noopener noreferrer" class="">#10823</a></li>
<li class="">feat(task-history): record Ballista stages for distributed queries by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10831" target="_blank" rel="noopener noreferrer" class="">#10831</a></li>
<li class="">Add '#[deny(clippy::missing_trait_methods)]' to wrapper/delegation trait impls by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10795" target="_blank" rel="noopener noreferrer" class="">#10795</a></li>
<li class="">Optimize Cayenne catalog maintenance paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10904" target="_blank" rel="noopener noreferrer" class="">#10904</a></li>
<li class="">Centralize DuckDB settings for accelerator by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10895" target="_blank" rel="noopener noreferrer" class="">#10895</a></li>
<li class="">deps(ballista): bump to 47e2b494 to fix S3 shuffle reads under cluster mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10910" target="_blank" rel="noopener noreferrer" class="">#10910</a></li>
<li class="">Authorization header + Bump async-openai + <code>responses_adapter</code> fix by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10911" target="_blank" rel="noopener noreferrer" class="">#10911</a></li>
<li class="">Tune accelerators by storage profile by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10913" target="_blank" rel="noopener noreferrer" class="">#10913</a></li>
<li class="">feat: add dataset-level on_schema_change config by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10908" target="_blank" rel="noopener noreferrer" class="">#10908</a></li>
<li class="">Handle <code>NULL</code> sentinel for nullable partition expressions by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10880" target="_blank" rel="noopener noreferrer" class="">#10880</a></li>
<li class="">fix: Remove Cayenne Catalog from catalog registration by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10914" target="_blank" rel="noopener noreferrer" class="">#10914</a></li>
<li class="">Add catalog name to foreign key metadata in postgres catalog by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10917" target="_blank" rel="noopener noreferrer" class="">#10917</a></li>
<li class="">Cayenne perf: eliminate redundant clones, PK point-lookup fanout fix, IN-list rewrite + microbench coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10916" target="_blank" rel="noopener noreferrer" class="">#10916</a></li>
<li class="">fix(turso-shared): retry on Turso BEGIN CONCURRENT "Write-write conflict" by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10946" target="_blank" rel="noopener noreferrer" class="">#10946</a></li>
<li class="">Vendor Vortex DataFusion for Cayenne by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10933" target="_blank" rel="noopener noreferrer" class="">#10933</a></li>
<li class="">perf(cayenne): background retention + enable CDC pipelining for retention-configured tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10936" target="_blank" rel="noopener noreferrer" class="">#10936</a></li>
<li class="">feat(cayenne): scale metastore pool to 32 + vs_duckdb_scaling benches (1→128 concurrency, sqlite + turso lanes) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10943" target="_blank" rel="noopener noreferrer" class="">#10943</a></li>
<li class="">feat(mcp): support auth for streamable HTTP tools by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10927" target="_blank" rel="noopener noreferrer" class="">#10927</a></li>
<li class="">Explicit error if v1/search requests a table without search index by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10968" target="_blank" rel="noopener noreferrer" class="">#10968</a></li>
<li class="">Fix spicepod loading failure when directory name contains dots by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10958" target="_blank" rel="noopener noreferrer" class="">#10958</a></li>
<li class="">Extend append tests with arrow engine configurations by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10959" target="_blank" rel="noopener noreferrer" class="">#10959</a></li>
<li class="">Remove dataset on_schema_change Policy from rc.5 release notes by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10964" target="_blank" rel="noopener noreferrer" class="">#10964</a></li>
<li class="">Skip tpcds_q78 for Cayenne engine at SF100 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10966" target="_blank" rel="noopener noreferrer" class="">#10966</a></li>
<li class="">fix: Update benchmark snapshots May-20 by <a href="https://github.com/apps/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10952" target="_blank" rel="noopener noreferrer" class="">#10952</a></li>
<li class="">Fix #10951: UdtfExec invariant Vec lengths must match children count by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10953" target="_blank" rel="noopener noreferrer" class="">#10953</a></li>
<li class="">docs(release): update v2.0.0-rc.5 notes with latest trunk PRs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10949" target="_blank" rel="noopener noreferrer" class="">#10949</a></li>
<li class="">Remove eval related things for v2.0.0 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10945" target="_blank" rel="noopener noreferrer" class="">#10945</a></li>
<li class="">build(deps): bump ubuntu from 24.04 to 26.04 in the docker-dependencies group by <a href="https://github.com/apps/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10883" target="_blank" rel="noopener noreferrer" class="">#10883</a></li>
<li class="">fix: Add publish = false to chbench-driver by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10939" target="_blank" rel="noopener noreferrer" class="">#10939</a></li>
<li class="">[Bug] Timing between reconnect and AllocateInitialPartitions leaves connection without flight_sql_client by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10805" target="_blank" rel="noopener noreferrer" class="">#10805</a></li>
<li class="">Fix: <code>refresh_mode: snapshot</code> reports Ready with empty data when no snapshot exists by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10979" target="_blank" rel="noopener noreferrer" class="">#10979</a></li>
<li class="">fix(cluster): gate scheduler readiness on executor partition loads by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10992" target="_blank" rel="noopener noreferrer" class="">#10992</a></li>
<li class="">fix: handle EXISTS/NOT EXISTS subqueries in federation analyzer by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10996" target="_blank" rel="noopener noreferrer" class="">#10996</a></li>
<li class="">Refactor spice dataset configuration command by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10999" target="_blank" rel="noopener noreferrer" class="">#10999</a></li>
<li class="">fix: preserve field and schema metadata in Vortex physical schema calculation by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11013" target="_blank" rel="noopener noreferrer" class="">#11013</a></li>
<li class="">fix: validate Snowflake account identifiers and auth config by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11024" target="_blank" rel="noopener noreferrer" class="">#11024</a></li>
<li class="">Fix Unity Catalog connector deserialization failure with OSS Unity Catalog by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11026" target="_blank" rel="noopener noreferrer" class="">#11026</a></li>
<li class="">feat(cayenne): allow inline writes with pending deletions (deletes/upserts) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11031" target="_blank" rel="noopener noreferrer" class="">#11031</a></li>
<li class="">Expose metadata descriptions via PostgreSQL UDFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11032" target="_blank" rel="noopener noreferrer" class="">#11032</a></li>
<li class="">Remove default runtime features - enable explicitly in spiced by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11037" target="_blank" rel="noopener noreferrer" class="">#11037</a></li>
<li class="">feat(cayenne): fast-path CDC deletes by extracting PK values from filters by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11049" target="_blank" rel="noopener noreferrer" class="">#11049</a></li>
<li class="">Cayenne optimizer rules: auto relevance test for q21-shape (all-Cayenne CH-Bench) and runtime rule selection by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11050" target="_blank" rel="noopener noreferrer" class="">#11050</a></li>
<li class="">refactor(cdc): reduce CDC sub-batch splits for interleaved upsert/delete workloads by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11051" target="_blank" rel="noopener noreferrer" class="">#11051</a></li>
<li class="">fix(snowflake): enforce function deny-list in federation pushdown by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11057" target="_blank" rel="noopener noreferrer" class="">#11057</a></li>
<li class="">fix(mcp): trace external server tool calls in task history by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/11058" target="_blank" rel="noopener noreferrer" class="">#11058</a></li>
<li class="">perf(cdc): Last-write-wins dedup in <code>group_into_sub_batches</code> to reduce sub-batch splits by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11059" target="_blank" rel="noopener noreferrer" class="">#11059</a></li>
<li class="">PM edits to v2.0.0-rc5 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11067" target="_blank" rel="noopener noreferrer" class="">#11067</a></li>
<li class="">fix(snowflake): wire deny-list in extracted connector crate (#10703) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/11071" target="_blank" rel="noopener noreferrer" class="">#11071</a></li>
<li class="">perf(cayenne): keep CDC upsert PK keysets resident to avoid per-batch full-table rebuilds by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11074" target="_blank" rel="noopener noreferrer" class="">#11074</a></li>
<li class="">Fix metadata on search indexing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11080" target="_blank" rel="noopener noreferrer" class="">#11080</a></li>
<li class="">feat(cayenne): merge-on-read position deletes for PK upsert tables + memory-pool accounting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11085" target="_blank" rel="noopener noreferrer" class="">#11085</a></li>
<li class="">perf(cayenne): scale CDC inline flush caps with memory + storage class by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11087" target="_blank" rel="noopener noreferrer" class="">#11087</a></li>
<li class="">feat(cluster): report per-executor table statistics so distributed JoinSelection can size joins by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11089" target="_blank" rel="noopener noreferrer" class="">#11089</a></li>
<li class="">Improve Cayenne CDC write and compaction path tracing by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11091" target="_blank" rel="noopener noreferrer" class="">#11091</a></li>
<li class="">Support tuple-IN composite PK extraction in Cayenne delete fast-path by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11093" target="_blank" rel="noopener noreferrer" class="">#11093</a></li>
<li class="">feat(cluster): NDV-aware executor stats so CDC q18 join swap fires by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11098" target="_blank" rel="noopener noreferrer" class="">#11098</a></li>
<li class="">feat(cayenne): maintain join-sizing stats on the write path by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11104" target="_blank" rel="noopener noreferrer" class="">#11104</a></li>
<li class="">fix(cache): run periodic moka maintenance for idle caches by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11106" target="_blank" rel="noopener noreferrer" class="">#11106</a></li>
<li class="">Upgrade to DuckDB 1.5.3 + statically link the VSS (HNSW) extension by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11107" target="_blank" rel="noopener noreferrer" class="">#11107</a></li>
<li class="">Fix fetched_at for HTTP connector by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/11116" target="_blank" rel="noopener noreferrer" class="">#11116</a></li>
<li class="">fix(cayenne): tombstone inline-checkpointed rows on upsert to prevent duplicate PKs by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/11129" target="_blank" rel="noopener noreferrer" class="">#11129</a></li>
<li class="">feat: dedicated compaction runtime for Cayenne + CDC pipelining, protected snapshots, and test coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11130" target="_blank" rel="noopener noreferrer" class="">#11130</a></li>
<li class="">Add <code>datasets</code> dimension to the <code>query_executions</code> metric by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11138" target="_blank" rel="noopener noreferrer" class="">#11138</a></li>
<li class="">Fix #11137: localpod child not tracking parent refreshes with in-memory (arrow) parent accelerator by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11139" target="_blank" rel="noopener noreferrer" class="">#11139</a></li>
<li class="">Fix Windows build: vendor the VSS extension (drop nested submodule) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11140" target="_blank" rel="noopener noreferrer" class="">#11140</a></li>
<li class="">fix(spiceai): keep correlated subqueries out of JOIN ON for Spice Cloud federation by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11143" target="_blank" rel="noopener noreferrer" class="">#11143</a></li>
<li class="">Refactor spice dataset configuration command by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10999" target="_blank" rel="noopener noreferrer" class="">#10999</a></li>
<li class="">feat(cayenne): sharded parallel Vortex encode with key/time clustering by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11144" target="_blank" rel="noopener noreferrer" class="">#11144</a></li>
<li class="">fix(cluster): prevent DoPut write pipeline self-deadlock under ingest backpressure by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/11160" target="_blank" rel="noopener noreferrer" class="">#11160</a></li>
<li class="">fix(cayenne): only warn on genuine protected-snapshot amplification by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/11158" target="_blank" rel="noopener noreferrer" class="">#11158</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.6...v2.0.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.6...v2.0.0</a></p>]]></content:encoded>
            <category>release</category>
            <category>distributed-query</category>
            <category>cayenne</category>
            <category>datafusion</category>
            <category>CDC</category>
            <category>cedar</category>
            <category>postgres</category>
            <category>mongodb</category>
            <category>security</category>
            <category>snowflake</category>
            <category>udf</category>
            <category>http</category>
            <category>kafka</category>
            <category>arrow</category>
            <category>ducklake</category>
            <category>data-connector</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-rc.5 (May 27, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-rc.5</link>
            <guid>https://spiceai.org/releases/v2.0-rc.5</guid>
            <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v2.0-rc.5 is now available! 🔥]]></description>
            <content:encoded><![CDATA[<p>Spice v2.0-rc.5 is now available! 🔥</p>
<p>v2.0.0-rc.5 is the fifth release candidate for advanced testing of v2.0, building on <a href="https://github.com/spiceai/spiceai/releases/tag/v2.0.0-rc.4" target="_blank" rel="noopener noreferrer" class="">v2.0.0-rc.4</a>.</p>
<p>This release completes the mTLS implementation across server endpoints and outbound connectors, adds MongoDB Change Streams and durable Kafka offset persistence as new CDC sources, expands DML write-back to PostgreSQL, Snowflake, and Arrow, promotes DuckLake to Beta, introduces user-defined functions, on-demand dataset loading, unified query cancellation, dynamic HTTP request headers and subquery-driven request parameters, provider-aware LLM prompt caching, and a long list of Cayenne performance improvements.</p>
<p>Highlights in this release candidate include:</p>
<ul>
<li class=""><strong>Spice Cayenne</strong> — CDC throughput, compaction and scan caching, synchronized partition commits, join filter propagation, parallel Vortex writes, lock-free deletion caches</li>
<li class=""><strong>Mutual TLS (mTLS)</strong> — TLS cert hot-reload, public mTLS for HTTP and Flight (channel + identity modes), mTLS client certs for FlightSQL and Spice.ai connectors</li>
<li class=""><strong>MongoDB Change Streams</strong> — native real-time CDC for MongoDB, no Debezium or Kafka required</li>
<li class=""><strong>Kafka CDC offsets</strong> — offsets persisted in sidecar tables for durable, resumable Kafka CDC</li>
<li class=""><strong>PostgreSQL DML</strong> — INSERT, UPDATE, DELETE write-back on PostgreSQL datasets</li>
<li class=""><strong>Snowflake DML</strong> — INSERT, UPDATE, DELETE write-back on Snowflake datasets</li>
<li class=""><strong>Arrow Primary Key Upserts</strong> — native upsert path using primary key matching</li>
<li class=""><strong>DuckLake promoted to Beta</strong> — with INSERT support on catalog tables</li>
<li class=""><strong>User-Defined Functions</strong> — define SQL UDFs in spicepods, plus remote UDFs over HTTP (Spice.ai Enterprise)</li>
<li class=""><strong>Spatial SQL UDFs</strong> — optional geospatial UDFs (<code>ST_*</code>) for geometry workloads</li>
<li class=""><strong>On-Demand Dataset Loading</strong> — datasets can be deferred and loaded on first reference</li>
<li class=""><strong>Unified Query Cancellation</strong> — <code>Ctrl-C</code> and HTTP request cancellation propagate across all execution paths</li>
<li class=""><strong>Dynamic HTTP Connector</strong> — pass-through request headers, subquery-driven params, and JSON schema decomposition</li>
<li class=""><strong>HTTP Rate-Control persistence</strong> — rate-limit state persisted in object storage across restarts</li>
<li class=""><strong><code>refresh_mode: snapshot</code></strong> — point-in-time snapshot acceleration with SQLite/Turso WAL flushing</li>
<li class=""><strong>Storage-profile accelerator tuning</strong> — accelerators auto-tune defaults based on local SSD, EBS-class disk, or tmpfs</li>
<li class=""><strong>Provider-Aware LLM Prompt Caching</strong> — automatic prompt caching for OpenAI-compatible providers that support it</li>
<li class=""><strong>Responses API</strong> — support across all model providers with streaming <code>response.output_text.delta</code>, plus <code>Authorization: Bearer</code> header support</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200-rc5">What's New in v2.0.0-rc.5<a href="https://spiceai.org/releases/v2.0-rc.5#whats-new-in-v200-rc5" class="hash-link" aria-label="Direct link to What's New in v2.0.0-rc.5" title="Direct link to What's New in v2.0.0-rc.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-improvements">Cayenne Improvements<a href="https://spiceai.org/releases/v2.0-rc.5#cayenne-improvements" class="hash-link" aria-label="Direct link to Cayenne Improvements" title="Direct link to Cayenne Improvements" translate="no">​</a></h3>
<p>Significant performance work across <a href="https://spiceai.org/docs/next/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Spice Cayenne</a>-backed catalogs and accelerators.</p>
<ul>
<li class=""><strong>Ingest throughput</strong>: End-to-end improvements to CDC ingest, background compaction, and a new scan-result cache for hot reads; parallel Vortex partition writes; lock-free deletion caches with bloom-prefiltered probes; background retention with CDC pipelining; SQLite metastore pool scaled to 32 for high-concurrency mutation workloads.</li>
<li class=""><strong>Data inlining</strong>: Small writes are serialized as Arrow IPC and committed directly into the Cayenne metastore (<code>cayenne_inlined_data</code>), bypassing the staged Vortex write path for low-latency ingest. Inline upserts atomically rewrite existing inline rows instead of emitting side delete markers, and inline data remains query-visible via an in-memory union scan with a generation-keyed decode cache. Inline rows are checkpointed to Vortex when row, segment, or byte thresholds are reached. Defaults are refresh-mode aware: inline writes are enabled by default for high-frequency <code>caching</code>, <code>changes</code>, and fast <code>append</code> workloads and disabled for <code>full</code>, <code>snapshot</code>, and slower <code>append</code>.</li>
<li class=""><strong>Query planning</strong>: Join filter propagation across equi-join keys (gated behind <code>runtime.params.cayenne_filter_propagation</code>), range fallback for large join filters, hot-path clone elimination, and IN-list rewrites for large filter lists.</li>
<li class=""><strong>Correctness</strong>: Synchronized partition commits across partitions, correct <code>NULL</code>-sentinel handling for nullable partition expressions (e.g. <code>bucket(N, col)</code>), Vortex panic fix on highly compressible data, and live reads through expired protected snapshots.</li>
<li class=""><strong>Catalog and platform</strong>: Refresh-mode-aware compaction defaults, rejection of non-distributed Cayenne catalog configurations, and a vendored Vortex DataFusion integration for faster iteration on the Cayenne planner.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mutual-tls-mtls">Mutual TLS (mTLS)<a href="https://spiceai.org/releases/v2.0-rc.5#mutual-tls-mtls" class="hash-link" aria-label="Direct link to Mutual TLS (mTLS)" title="Direct link to Mutual TLS (mTLS)" translate="no">​</a></h3>
<blockquote>
<p><a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> feature. See <a href="https://docs.spice.ai/docs/enterprise/production/security" target="_blank" rel="noopener noreferrer" class="">Enterprise Security</a>.</p>
</blockquote>
<p>Spice now supports full mutual <a href="https://spiceai.org/docs/next/api/tls" target="_blank" rel="noopener noreferrer" class="">TLS</a> for both HTTP and Arrow Flight endpoints.</p>
<p><strong>TLS cert hot-reload</strong> (<a href="https://github.com/spiceai/spiceai/pull/10727" target="_blank" rel="noopener noreferrer" class="">#10727</a>): The Spice runtime watches for <code>SIGHUP</code> and reloads TLS certificates without restarting, enabling cert rotation with zero downtime.</p>
<p><strong>Public mTLS for HTTP and Flight</strong> (<a href="https://github.com/spiceai/spiceai/pull/10753" target="_blank" rel="noopener noreferrer" class="">#10753</a>): Two <code>client_auth_mode</code> values control how the server handles client certificates:</p>
<ul>
<li class=""><code>request</code> — optional mTLS: the server requests a client cert but accepts connections without one (useful for migration windows).</li>
<li class=""><code>required</code> — strict mTLS: the server requires a valid client cert signed by the configured CA.</li>
</ul>
<p><strong>mTLS client certs for FlightSQL and Spice.ai connectors</strong> (<a href="https://github.com/spiceai/spiceai/pull/10764" target="_blank" rel="noopener noreferrer" class="">#10764</a>): Outbound connections from the FlightSQL and Spice.ai data connectors can now present client certificates for mutual authentication with upstream services.</p>
<p>Example configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">tls</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">certificate_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/server.crt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">key_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/server.key</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">client_auth_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> required</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">client_auth_ca_file</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /etc/spice/tls/client</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">ca.crt</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mongodb-change-streams">MongoDB Change Streams<a href="https://spiceai.org/releases/v2.0-rc.5#mongodb-change-streams" class="hash-link" aria-label="Direct link to MongoDB Change Streams" title="Direct link to MongoDB Change Streams" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/next/components/data-connectors/mongodb" target="_blank" rel="noopener noreferrer" class="">MongoDB</a> datasets configured with <code>refresh_mode: changes</code> now stream changes from MongoDB Change Streams into any local accelerator (<a href="https://github.com/spiceai/spiceai/pull/10813" target="_blank" rel="noopener noreferrer" class="">#10813</a>), providing real-time CDC without Debezium or Kafka.</p>
<p>Example configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mongodb</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_collection</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_collection</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">cluster.mongodb.net</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cdc-improvements">CDC Improvements<a href="https://spiceai.org/releases/v2.0-rc.5#cdc-improvements" class="hash-link" aria-label="Direct link to CDC Improvements" title="Direct link to CDC Improvements" translate="no">​</a></h3>
<p>See <a href="https://spiceai.org/docs/next/features/cdc" target="_blank" rel="noopener noreferrer" class="">Change Data Capture (CDC)</a> for an overview of CDC in Spice.</p>
<ul>
<li class=""><strong>Kafka CDC offset persistence</strong> (<a href="https://github.com/spiceai/spiceai/pull/10823" target="_blank" rel="noopener noreferrer" class="">#10823</a>): <a href="https://spiceai.org/docs/next/components/data-connectors/kafka" target="_blank" rel="noopener noreferrer" class="">Kafka</a> CDC offsets are persisted in sidecar tables for durable, resumable streams. On restart or failover, Spice resumes from the last committed offset.</li>
<li class=""><strong>Pipelined CDC ingestion</strong> (<a href="https://github.com/spiceai/spiceai/pull/10676" target="_blank" rel="noopener noreferrer" class="">#10676</a>): Source reads overlap with batch apply, with additional batching, envelope coalescing, and nullability propagation improvements across the apply pipeline.</li>
<li class=""><strong>Debezium schema evolution fix</strong> (<a href="https://github.com/spiceai/spiceai/pull/10144" target="_blank" rel="noopener noreferrer" class="">#10144</a>): Schema changes in <a href="https://spiceai.org/docs/next/components/data-connectors/debezium" target="_blank" rel="noopener noreferrer" class="">Debezium</a>-sourced datasets no longer break dataset initialization on reload (fixes <a href="https://github.com/spiceai/spiceai/issues/9782" target="_blank" rel="noopener noreferrer" class="">#9782</a>).</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="postgresql-dml-support">PostgreSQL DML Support<a href="https://spiceai.org/releases/v2.0-rc.5#postgresql-dml-support" class="hash-link" aria-label="Direct link to PostgreSQL DML Support" title="Direct link to PostgreSQL DML Support" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/next/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> data connector now supports write-back via <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> operations (<a href="https://github.com/spiceai/spiceai/pull/10446" target="_blank" rel="noopener noreferrer" class="">#10446</a>). Combined with the existing read-side federation, PostgreSQL-backed datasets can serve as full read/write tables. The PostgreSQL Catalog connector additionally exposes foreign-key metadata for NSQL and query planning (<a href="https://github.com/spiceai/spiceai/pull/10849" target="_blank" rel="noopener noreferrer" class="">#10849</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="snowflake-dml-support">Snowflake DML Support<a href="https://spiceai.org/releases/v2.0-rc.5#snowflake-dml-support" class="hash-link" aria-label="Direct link to Snowflake DML Support" title="Direct link to Snowflake DML Support" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/next/components/data-connectors/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a> data connector now supports write-back via <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> operations (<a href="https://github.com/spiceai/spiceai/pull/10747" target="_blank" rel="noopener noreferrer" class="">#10747</a>), complementing its existing read capabilities.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="arrow-primary-key-upserts">Arrow Primary Key Upserts<a href="https://spiceai.org/releases/v2.0-rc.5#arrow-primary-key-upserts" class="hash-link" aria-label="Direct link to Arrow Primary Key Upserts" title="Direct link to Arrow Primary Key Upserts" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/next/components/data-accelerators/arrow" target="_blank" rel="noopener noreferrer" class="">Arrow</a>-accelerated tables now support native upsert operations using primary key matching (<a href="https://github.com/spiceai/spiceai/pull/10749" target="_blank" rel="noopener noreferrer" class="">#10749</a>), providing efficient update-or-insert semantics for in-memory datasets.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ducklake-promoted-to-beta">DuckLake Promoted to Beta<a href="https://spiceai.org/releases/v2.0-rc.5#ducklake-promoted-to-beta" class="hash-link" aria-label="Direct link to DuckLake Promoted to Beta" title="Direct link to DuckLake Promoted to Beta" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/next/components/catalogs/ducklake" target="_blank" rel="noopener noreferrer" class="">DuckLake</a> Catalog and <a href="https://spiceai.org/docs/next/components/data-connectors/ducklake" target="_blank" rel="noopener noreferrer" class="">Data Connector</a> are promoted to <strong>Beta</strong> quality (<a href="https://github.com/spiceai/spiceai/pull/10743" target="_blank" rel="noopener noreferrer" class="">#10743</a>).</p>
<p>DuckLake catalog tables with <code>read_write</code> access now support <code>INSERT</code> operations (<a href="https://github.com/spiceai/spiceai/pull/10744" target="_blank" rel="noopener noreferrer" class="">#10744</a>), enabling full read/write workflows against DuckLake-backed catalogs. The DuckLake connector also gains a series of correctness fixes for downcast, module registration, schema discovery, and S3 credentials (<a href="https://github.com/spiceai/spiceai/pull/10650" target="_blank" rel="noopener noreferrer" class="">#10650</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="user-defined-functions">User-Defined Functions<a href="https://spiceai.org/releases/v2.0-rc.5#user-defined-functions" class="hash-link" aria-label="Direct link to User-Defined Functions" title="Direct link to User-Defined Functions" translate="no">​</a></h3>
<p>Spice now supports <strong>user-defined functions (UDFs)</strong> as a first-class spicepod component (<a href="https://github.com/spiceai/spiceai/pull/10571" target="_blank" rel="noopener noreferrer" class="">#10571</a>), letting you define reusable SQL functions in the spicepod or invoke remote functions over HTTP. The runtime also gains <strong>table user functions</strong> with HTTP server gating (<a href="https://github.com/spiceai/spiceai/pull/10675" target="_blank" rel="noopener noreferrer" class="">#10675</a>).</p>
<p>A security fix closes a remote-UDF SSRF vector (<a href="https://github.com/spiceai/spiceai/pull/10757" target="_blank" rel="noopener noreferrer" class="">#10757</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="spatial-sql-udfs">Spatial SQL UDFs<a href="https://spiceai.org/releases/v2.0-rc.5#spatial-sql-udfs" class="hash-link" aria-label="Direct link to Spatial SQL UDFs" title="Direct link to Spatial SQL UDFs" translate="no">​</a></h3>
<p>Spice now ships an optional set of geospatial <a href="https://spiceai.org/docs/next/reference/sql" target="_blank" rel="noopener noreferrer" class="">SQL</a> UDFs (<code>ST_*</code>) for geometry workloads (<a href="https://github.com/spiceai/spiceai/pull/10833" target="_blank" rel="noopener noreferrer" class="">#10833</a>). The functions are gated behind a build feature and can be invoked from any SQL surface.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="on-demand-dataset-loading">On-Demand Dataset Loading<a href="https://spiceai.org/releases/v2.0-rc.5#on-demand-dataset-loading" class="hash-link" aria-label="Direct link to On-Demand Dataset Loading" title="Direct link to On-Demand Dataset Loading" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/next/reference/spicepod/datasets" target="_blank" rel="noopener noreferrer" class="">Datasets</a> can now be marked for <strong>on-demand loading</strong> (<a href="https://github.com/spiceai/spiceai/pull/10629" target="_blank" rel="noopener noreferrer" class="">#10629</a>). Deferred datasets are registered with a declared schema at startup (<a href="https://github.com/spiceai/spiceai/pull/10669" target="_blank" rel="noopener noreferrer" class="">#10669</a>) and only fully resolve when first referenced, reducing startup time and memory footprint for spicepods with many seldom-used datasets.</p>
<p>Spicepods also gain <strong><code>columns[].type</code> and <code>columns[].nullable</code></strong> (<a href="https://github.com/spiceai/spiceai/pull/10661" target="_blank" rel="noopener noreferrer" class="">#10661</a>) with a lenient type parser for declaring schemas inline.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="unified-query-cancellation">Unified Query Cancellation<a href="https://spiceai.org/releases/v2.0-rc.5#unified-query-cancellation" class="hash-link" aria-label="Direct link to Unified Query Cancellation" title="Direct link to Unified Query Cancellation" translate="no">​</a></h3>
<p>All query execution paths — HTTP, Flight, FlightSQL, MCP, and internal — now honour a unified cancellation signal (<a href="https://github.com/spiceai/spiceai/pull/10390" target="_blank" rel="noopener noreferrer" class="">#10390</a>). When a client disconnects, presses <code>Ctrl-C</code> in the REPL, or cancels an in-flight HTTP request, the corresponding query is cancelled end-to-end, freeing resources promptly.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dynamic-http-connector">Dynamic HTTP Connector<a href="https://spiceai.org/releases/v2.0-rc.5#dynamic-http-connector" class="hash-link" aria-label="Direct link to Dynamic HTTP Connector" title="Direct link to Dynamic HTTP Connector" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/next/components/data-connectors/https" target="_blank" rel="noopener noreferrer" class="">HTTP data connector</a> gains dynamic request headers parameterised from query predicates (<a href="https://github.com/spiceai/spiceai/pull/10604" target="_blank" rel="noopener noreferrer" class="">#10604</a>), subquery-driven request parameters for fan-out queries (<a href="https://github.com/spiceai/spiceai/pull/10636" target="_blank" rel="noopener noreferrer" class="">#10636</a>), HTTP response metadata as queryable columns via JSON schema decomposition (<a href="https://github.com/spiceai/spiceai/pull/10679" target="_blank" rel="noopener noreferrer" class="">#10679</a>), no-limit pagination (<a href="https://github.com/spiceai/spiceai/pull/10673" target="_blank" rel="noopener noreferrer" class="">#10673</a>), and shared rate-control across HTTP-based connectors using the same backend host (<a href="https://github.com/spiceai/spiceai/pull/10648" target="_blank" rel="noopener noreferrer" class="">#10648</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="http-rate-control-persistence">HTTP Rate-Control Persistence<a href="https://spiceai.org/releases/v2.0-rc.5#http-rate-control-persistence" class="hash-link" aria-label="Direct link to HTTP Rate-Control Persistence" title="Direct link to HTTP Rate-Control Persistence" translate="no">​</a></h3>
<p>The HTTP rate-control state (per-endpoint throttle counters) is now persisted in object storage (<a href="https://github.com/spiceai/spiceai/pull/10697" target="_blank" rel="noopener noreferrer" class="">#10697</a>), ensuring rate limits survive restarts and are consistent across replicas. Rate-control metrics now use an <code>origin</code> label rather than the connector name for cleaner aggregation (<a href="https://github.com/spiceai/spiceai/pull/10689" target="_blank" rel="noopener noreferrer" class="">#10689</a>).</p>
<p>The metrics HTTP endpoint (<code>/metrics</code>) is also independently rate-limited (<a href="https://github.com/spiceai/spiceai/pull/10162" target="_blank" rel="noopener noreferrer" class="">#10162</a>) to prevent scraping from impacting query serving.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="refresh_mode-snapshot"><code>refresh_mode: snapshot</code><a href="https://spiceai.org/releases/v2.0-rc.5#refresh_mode-snapshot" class="hash-link" aria-label="Direct link to refresh_mode-snapshot" title="Direct link to refresh_mode-snapshot" translate="no">​</a></h3>
<blockquote>
<p><a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> feature. See <a href="https://docs.spice.ai/docs/enterprise/features/acceleration-snapshots" target="_blank" rel="noopener noreferrer" class="">Acceleration Snapshots</a>.</p>
</blockquote>
<p>A new <code>refresh_mode: snapshot</code> provides point-in-time snapshot acceleration (<a href="https://github.com/spiceai/spiceai/pull/10651" target="_blank" rel="noopener noreferrer" class="">#10651</a>), with SQLite and Turso WAL flushing and a Cayenne metastore slice integration so accelerated readers see a consistent snapshot while writes continue.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="storage-profile-accelerator-tuning">Storage-Profile Accelerator Tuning<a href="https://spiceai.org/releases/v2.0-rc.5#storage-profile-accelerator-tuning" class="hash-link" aria-label="Direct link to Storage-Profile Accelerator Tuning" title="Direct link to Storage-Profile Accelerator Tuning" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/next/components/data-accelerators" target="_blank" rel="noopener noreferrer" class="">Acceleration</a> configs gain a new <code>storage_profile</code> field (<a href="https://github.com/spiceai/spiceai/pull/10913" target="_blank" rel="noopener noreferrer" class="">#10913</a>) with values <code>auto</code> (default), <code>local_ssd</code>, <code>ebs</code>, and <code>tmpfs</code>. Under <code>auto</code>, the runtime detects whether the acceleration store is backed by local SSD, EBS-class network disk, or tmpfs, and applies storage-aware defaults across DuckDB, partitioned DuckDB, SQLite, Turso, and Cayenne file-mode accelerators. Explicit per-accelerator parameters always override the profile defaults.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="provider-aware-llm-prompt-caching">Provider-Aware LLM Prompt Caching<a href="https://spiceai.org/releases/v2.0-rc.5#provider-aware-llm-prompt-caching" class="hash-link" aria-label="Direct link to Provider-Aware LLM Prompt Caching" title="Direct link to Provider-Aware LLM Prompt Caching" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/next/features/large-language-models" target="_blank" rel="noopener noreferrer" class="">LLM</a> calls automatically use <strong>provider-aware prompt caching</strong> (<a href="https://github.com/spiceai/spiceai/pull/10645" target="_blank" rel="noopener noreferrer" class="">#10645</a>) when the configured model provider supports it (e.g., Anthropic, OpenAI). System prompts and tool descriptions are marked for caching so repeated invocations within the cache window reuse the provider-side cached prefix, reducing latency and cost.</p>
<p>A new <strong>searchable registry mode for LLM tools</strong> (<a href="https://github.com/spiceai/spiceai/pull/10647" target="_blank" rel="noopener noreferrer" class="">#10647</a>) lets agents discover tools by semantic search rather than enumerating all tools in the system prompt, which scales to large tool inventories.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="responses-api-improvements">Responses API Improvements<a href="https://spiceai.org/releases/v2.0-rc.5#responses-api-improvements" class="hash-link" aria-label="Direct link to Responses API Improvements" title="Direct link to Responses API Improvements" translate="no">​</a></h3>
<p>The Responses API is now supported across all configured <a href="https://spiceai.org/docs/next/components/models" target="_blank" rel="noopener noreferrer" class="">model providers</a> (<a href="https://github.com/spiceai/spiceai/pull/10724" target="_blank" rel="noopener noreferrer" class="">#10724</a>). Streaming delta events via <code>response.output_text.delta</code> are also supported (<a href="https://github.com/spiceai/spiceai/pull/10828" target="_blank" rel="noopener noreferrer" class="">#10828</a>). The runtime now also accepts <code>Authorization: Bearer</code> headers in addition to <code>x-api-key</code>, bumps <code>async-openai</code>, and stops populating <code>FunctionToolCall.id</code> so OpenAI-compatible servers can assign the ID themselves (<a href="https://github.com/spiceai/spiceai/pull/10911" target="_blank" rel="noopener noreferrer" class="">#10911</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="distributed-cluster-improvements">Distributed Cluster Improvements<a href="https://spiceai.org/releases/v2.0-rc.5#distributed-cluster-improvements" class="hash-link" aria-label="Direct link to Distributed Cluster Improvements" title="Direct link to Distributed Cluster Improvements" translate="no">​</a></h3>
<blockquote>
<p><a href="https://docs.spice.ai/docs/enterprise" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a> feature. See <a href="https://docs.spice.ai/docs/enterprise/production/high-availability" target="_blank" rel="noopener noreferrer" class="">High Availability</a>.</p>
</blockquote>
<ul>
<li class=""><strong>Per-request executor readiness gate</strong> (<a href="https://github.com/spiceai/spiceai/pull/10860" target="_blank" rel="noopener noreferrer" class="">#10860</a>): <code>/v1/ready</code> on schedulers waits for a configurable quorum of executors before returning healthy, enabling proper rolling deployments.</li>
<li class=""><strong>Ballista S3 shuffle reads under cluster mode</strong> (<a href="https://github.com/spiceai/spiceai/pull/10910" target="_blank" rel="noopener noreferrer" class="">#10910</a>): The shuffle reader builds its S3 client from the executor pod's environment, matching the writer. Async queries with <code>runtime.params.shuffle_location: s3://...</code> now complete instead of failing with <code>AccessDenied</code> on shuffle fetches.</li>
<li class=""><strong>Flattened scheduler config</strong> (<a href="https://github.com/spiceai/spiceai/pull/10450" target="_blank" rel="noopener noreferrer" class="">#10450</a>): <code>runtime.scheduler.partition_management.*</code> fields are flattened directly onto <code>runtime.scheduler</code> and renamed under the canonical "partition assignment" terminology. See <a href="https://spiceai.org/releases/v2.0-rc.5#breaking-changes" class="">Breaking Changes</a>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="caching--search">Caching &amp; Search<a href="https://spiceai.org/releases/v2.0-rc.5#caching--search" class="hash-link" aria-label="Direct link to Caching &amp; Search" title="Direct link to Caching &amp; Search" translate="no">​</a></h3>
<p>Improvements across <a href="https://spiceai.org/docs/next/features/caching" target="_blank" rel="noopener noreferrer" class="">Caching</a> and <a href="https://spiceai.org/docs/next/features/search" target="_blank" rel="noopener noreferrer" class="">Search</a>:</p>
<ul>
<li class=""><strong>Per-principal cache namespacing</strong> (<a href="https://github.com/spiceai/spiceai/pull/10702" target="_blank" rel="noopener noreferrer" class="">#10702</a>): SQL, search, and caching-accelerator caches are now namespaced per authenticated principal, so cached results never cross identity boundaries.</li>
<li class=""><strong>DuckDB HNSW vector indexes</strong> (<a href="https://github.com/spiceai/spiceai/pull/10695" target="_blank" rel="noopener noreferrer" class="">#10695</a>, <a href="https://github.com/spiceai/spiceai/pull/10674" target="_blank" rel="noopener noreferrer" class="">#10674</a>, <a href="https://github.com/spiceai/spiceai/pull/10668" target="_blank" rel="noopener noreferrer" class="">#10668</a>): DuckDB-accelerated views support HNSW vector indexes for <a href="https://spiceai.org/docs/next/features/search/vector-search" target="_blank" rel="noopener noreferrer" class="">vector search</a>, vector search SQL is rewritten to activate <code>HNSW_INDEX_SCAN</code>, and HNSW indexes are preserved across data refresh.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="security-improvements">Security Improvements<a href="https://spiceai.org/releases/v2.0-rc.5#security-improvements" class="hash-link" aria-label="Direct link to Security Improvements" title="Direct link to Security Improvements" translate="no">​</a></h3>
<p>See <a href="https://spiceai.org/docs/next/api/auth" target="_blank" rel="noopener noreferrer" class="">Authentication</a> and <a href="https://spiceai.org/docs/next/api/tls" target="_blank" rel="noopener noreferrer" class="">TLS</a> for configuring Spice security.</p>
<ul>
<li class=""><strong>API key timing-position leak and remote-UDF SSRF</strong> (<a href="https://github.com/spiceai/spiceai/pull/10757" target="_blank" rel="noopener noreferrer" class="">#10757</a>): Closed a timing-based position-disclosure leak in API key comparison and blocked SSRF via remote UDF endpoint parameters.</li>
<li class=""><strong>Configurable <code>allowed_hosts</code> for MCP</strong> (<a href="https://github.com/spiceai/spiceai/pull/10638" target="_blank" rel="noopener noreferrer" class="">#10638</a>): MCP servers can be restricted to an explicit allowlist of upstream hosts.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql-query-and-developer-experience">SQL, Query, and Developer Experience<a href="https://spiceai.org/releases/v2.0-rc.5#sql-query-and-developer-experience" class="hash-link" aria-label="Direct link to SQL, Query, and Developer Experience" title="Direct link to SQL, Query, and Developer Experience" translate="no">​</a></h3>
<p>See the <a href="https://spiceai.org/docs/next/reference/sql" target="_blank" rel="noopener noreferrer" class="">SQL Reference</a> for the full SQL surface area.</p>
<ul>
<li class=""><strong>SQL REPL expanded view</strong> (<a href="https://github.com/spiceai/spiceai/pull/10797" target="_blank" rel="noopener noreferrer" class="">#10797</a>): Toggle <code>\x</code> in the REPL for a vertical key-value layout on wide result sets.</li>
<li class=""><strong>FlightSQL Substrait plan support</strong> (<a href="https://github.com/spiceai/spiceai/pull/10761" target="_blank" rel="noopener noreferrer" class="">#10761</a>): The Spice runtime now implements <code>CommandStatementSubstraitPlan</code>, enabling clients that submit plans as Substrait-encoded protobuf.</li>
<li class=""><strong>MCP auth for streamable HTTP tools</strong> (<a href="https://github.com/spiceai/spiceai/pull/10927" target="_blank" rel="noopener noreferrer" class="">#10927</a>): Streamable HTTP MCP tools support native authentication via <code>mcp_auth_token</code> and <code>mcp_headers</code>, both with full Spice secret expansion.</li>
<li class=""><strong>Elasticsearch FTS engine config and index lifecycle</strong> (<a href="https://github.com/spiceai/spiceai/pull/10672" target="_blank" rel="noopener noreferrer" class="">#10672</a>): Direct FTS engine configuration plus index lifecycle and ingestion controls for the <a href="https://spiceai.org/docs/next/components/data-connectors/elasticsearch" target="_blank" rel="noopener noreferrer" class="">Elasticsearch</a> connector.</li>
<li class=""><strong>Self-hosted Spice connector</strong> (<a href="https://github.com/spiceai/spiceai/pull/10546" target="_blank" rel="noopener noreferrer" class="">#10546</a>): Connect Spice to another self-hosted Spice runtime as a federated source.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="connector-bug-fixes">Connector Bug Fixes<a href="https://spiceai.org/releases/v2.0-rc.5#connector-bug-fixes" class="hash-link" aria-label="Direct link to Connector Bug Fixes" title="Direct link to Connector Bug Fixes" translate="no">​</a></h3>
<p>Notable correctness fixes across the <a href="https://spiceai.org/docs/next/components/data-connectors" target="_blank" rel="noopener noreferrer" class="">Data Connectors</a>: DynamoDB Streams retry on transient errors (<a href="https://github.com/spiceai/spiceai/pull/10794" target="_blank" rel="noopener noreferrer" class="">#10794</a>) and typed-NULL handling in DML (<a href="https://github.com/spiceai/spiceai/pull/10511" target="_blank" rel="noopener noreferrer" class="">#10511</a>); ScyllaDB physical filter pushdown disabled to fix incorrect results (<a href="https://github.com/spiceai/spiceai/pull/10772" target="_blank" rel="noopener noreferrer" class="">#10772</a>); MSSQL <code>TOP N</code> pushdown for non-nullable sort columns (<a href="https://github.com/spiceai/spiceai/pull/10621" target="_blank" rel="noopener noreferrer" class="">#10621</a>); DuckLake <code>include</code> filter applied (<a href="https://github.com/spiceai/spiceai/pull/10738" target="_blank" rel="noopener noreferrer" class="">#10738</a>); DuckDB DELETE/UPDATE on <code>full</code> and <code>caching</code> refresh modes (<a href="https://github.com/spiceai/spiceai/pull/10632" target="_blank" rel="noopener noreferrer" class="">#10632</a>); checked arithmetic for Turso integer-millis and timestamp-to-nanosecond conversions (<a href="https://github.com/spiceai/spiceai/pull/10786" target="_blank" rel="noopener noreferrer" class="">#10786</a>, <a href="https://github.com/spiceai/spiceai/pull/10666" target="_blank" rel="noopener noreferrer" class="">#10666</a>); and Flight <code>GetFlightInfo</code>/<code>DoGet</code> schema parity (<a href="https://github.com/spiceai/spiceai/pull/10864" target="_blank" rel="noopener noreferrer" class="">#10864</a>). See the <a href="https://spiceai.org/releases/v2.0-rc.5#changelog" class="">Changelog</a> for the full list.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.0-rc.5#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version</th></tr></thead><tbody><tr><td><strong>DuckDB</strong></td><td>v1.5.2</td></tr><tr><td><strong>Iceberg</strong></td><td>v0.9.1</td></tr><tr><td><strong>Turso</strong></td><td>v0.6.0</td></tr><tr><td><strong>Vortex</strong></td><td>v0.69.0</td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-rc.5#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-rc.5#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p><strong>Flattened <code>runtime.scheduler</code> configuration</strong> (<a href="https://github.com/spiceai/spiceai/pull/10450" target="_blank" rel="noopener noreferrer" class="">#10450</a>): The nested <code>runtime.scheduler.partition_management</code> block has been flattened and renamed to use the canonical "partition assignment" terminology. Migrate as follows:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Before</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">scheduler</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_management</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 30s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">max_assignments_per_cycle</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">discovery_timeout</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 10s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># After</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">runtime</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">scheduler</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_assignment_interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 30s</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">max_assignments_per_interval</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">partition_discovery_timeout</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 10s</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0-rc.5#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-rc.5#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0-rc.5, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade v2.0.0-rc.5</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0-rc.5</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0-rc.5</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0-rc.5</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-rc.5#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-rc.5#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Enable DML support for PostgreSQL data connector by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10446" target="_blank" rel="noopener noreferrer" class="">#10446</a></li>
<li class="">feat(postgres): support inline PEM sslrootcert by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10578" target="_blank" rel="noopener noreferrer" class="">#10578</a></li>
<li class="">Add foreign key metadata discovery to PostgreSQL Catalog by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10849" target="_blank" rel="noopener noreferrer" class="">#10849</a></li>
<li class="">Add Snowflake DML support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10747" target="_blank" rel="noopener noreferrer" class="">#10747</a></li>
<li class="">Add MongoDB Change Streams support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10813" target="_blank" rel="noopener noreferrer" class="">#10813</a></li>
<li class="">Add user-defined functions by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10571" target="_blank" rel="noopener noreferrer" class="">#10571</a></li>
<li class="">Add table user functions and gate HTTP servers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10675" target="_blank" rel="noopener noreferrer" class="">#10675</a></li>
<li class="">feat: add on-demand dataset loading by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10629" target="_blank" rel="noopener noreferrer" class="">#10629</a></li>
<li class="">feat(runtime): declared-schema deferred datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10669" target="_blank" rel="noopener noreferrer" class="">#10669</a></li>
<li class="">feat(spicepod, runtime): add columns[].type / nullable + lenient type parser by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10661" target="_blank" rel="noopener noreferrer" class="">#10661</a></li>
<li class="">Replace external smb crate with internal SMB 3.1.1 client by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10516" target="_blank" rel="noopener noreferrer" class="">#10516</a></li>
<li class="">Add unified query cancellation across all paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10390" target="_blank" rel="noopener noreferrer" class="">#10390</a></li>
<li class="">Add dynamic HTTP request headers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10604" target="_blank" rel="noopener noreferrer" class="">#10604</a></li>
<li class="">feat(http): Support dynamic HTTP connector request params from subqueries by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10636" target="_blank" rel="noopener noreferrer" class="">#10636</a></li>
<li class="">feat(http): pass through HTTP metadata columns with JSON schema decomposition by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10679" target="_blank" rel="noopener noreferrer" class="">#10679</a></li>
<li class="">Add nolimit HTTP pagination max pages by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10673" target="_blank" rel="noopener noreferrer" class="">#10673</a></li>
<li class="">Add shared HTTP rate control for connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10648" target="_blank" rel="noopener noreferrer" class="">#10648</a></li>
<li class="">Use origin label instead of name for HTTP rate control metrics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10689" target="_blank" rel="noopener noreferrer" class="">#10689</a></li>
<li class="">fix(http): reject OR across different HTTP filter columns by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10625" target="_blank" rel="noopener noreferrer" class="">#10625</a></li>
<li class="">Add provider-aware LLM prompt caching by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10645" target="_blank" rel="noopener noreferrer" class="">#10645</a></li>
<li class="">Add searchable registry mode for LLM tools by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10647" target="_blank" rel="noopener noreferrer" class="">#10647</a></li>
<li class="">feat: refresh_mode: snapshot + SQLite/Turso WAL flush + Cayenne metastore slice by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10651" target="_blank" rel="noopener noreferrer" class="">#10651</a></li>
<li class="">feat: per-principal cache namespacing for SQL/search/caching-accelerator by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10702" target="_blank" rel="noopener noreferrer" class="">#10702</a></li>
<li class="">Add self-hosted Spice connector support by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10546" target="_blank" rel="noopener noreferrer" class="">#10546</a></li>
<li class="">Add Delta Lake Azure tenant parameter by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10671" target="_blank" rel="noopener noreferrer" class="">#10671</a></li>
<li class="">Support OAuth2 client credentials in 'spice cloud login' by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10586" target="_blank" rel="noopener noreferrer" class="">#10586</a></li>
<li class="">Add configurable allowed_hosts for MCP by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10638" target="_blank" rel="noopener noreferrer" class="">#10638</a></li>
<li class="">fix: make Helm chart probes configurable by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10696" target="_blank" rel="noopener noreferrer" class="">#10696</a></li>
<li class="">Strip high-cardinality datasets dim from anonymous telemetry by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10711" target="_blank" rel="noopener noreferrer" class="">#10711</a></li>
<li class="">feat(elasticsearch): direct FTS engine config + index lifecycle and ingestion controls by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10672" target="_blank" rel="noopener noreferrer" class="">#10672</a></li>
<li class="">Add DuckDB HNSW vector index support for accelerated views by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10695" target="_blank" rel="noopener noreferrer" class="">#10695</a></li>
<li class="">Rewrite DuckDB vector search SQL to activate HNSW_INDEX_SCAN by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10674" target="_blank" rel="noopener noreferrer" class="">#10674</a></li>
<li class="">Fix DuckDB HNSW vector indexes lost after data refresh by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10668" target="_blank" rel="noopener noreferrer" class="">#10668</a></li>
<li class="">Fix DuckDB DELETE/UPDATE on <code>full</code> and <code>caching</code> refresh mode datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10632" target="_blank" rel="noopener noreferrer" class="">#10632</a></li>
<li class="">Fix DuckLake connector: downcast, module registration, schema discovery, and S3 credentials by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10650" target="_blank" rel="noopener noreferrer" class="">#10650</a></li>
<li class="">Fix federation pushing denied functions inside subqueries to remote engines by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10692" target="_blank" rel="noopener noreferrer" class="">#10692</a></li>
<li class="">fix(caching): honour refresh_on_startup: always in caching mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10594" target="_blank" rel="noopener noreferrer" class="">#10594</a></li>
<li class="">fix(iceberg): rebuild storage factory when Hadoop catalog scheme is inferred by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10601" target="_blank" rel="noopener noreferrer" class="">#10601</a></li>
<li class="">Pipeline CDC ingestion: overlap source reads with batch apply by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10676" target="_blank" rel="noopener noreferrer" class="">#10676</a></li>
<li class="">fix: add NULL check to CDC primary key extraction by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10684" target="_blank" rel="noopener noreferrer" class="">#10684</a></li>
<li class="">Properly handle nullability during CDC processing by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10803" target="_blank" rel="noopener noreferrer" class="">#10803</a></li>
<li class="">Flatten scheduler config and rename partition management → partition assignment by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10450" target="_blank" rel="noopener noreferrer" class="">#10450</a></li>
<li class="">Improve NSQL UX and harden internal LLM tools by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10715" target="_blank" rel="noopener noreferrer" class="">#10715</a></li>
<li class="">Support Responses API across model providers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10724" target="_blank" rel="noopener noreferrer" class="">#10724</a></li>
<li class="">Update xAI default model and handle Grok model retirements by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10723" target="_blank" rel="noopener noreferrer" class="">#10723</a></li>
<li class="">Improve cli table layout by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10725" target="_blank" rel="noopener noreferrer" class="">#10725</a></li>
<li class="">TLS cert hot-reload (mTLS plan M1) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10727" target="_blank" rel="noopener noreferrer" class="">#10727</a></li>
<li class="">Fix DuckLake catalog <code>include</code> filter being ignored by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10738" target="_blank" rel="noopener noreferrer" class="">#10738</a></li>
<li class="">Promote DuckLake Catalog and Data Connector to Beta quality by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10743" target="_blank" rel="noopener noreferrer" class="">#10743</a></li>
<li class="">feat(ducklake): Support INSERT on catalog tables with read_write access by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10744" target="_blank" rel="noopener noreferrer" class="">#10744</a></li>
<li class="">perf(cdc): coalesce envelopes and overlap commits in apply pipeline by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10745" target="_blank" rel="noopener noreferrer" class="">#10745</a></li>
<li class="">feat: Allow full version tags in spicepod version by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10748" target="_blank" rel="noopener noreferrer" class="">#10748</a></li>
<li class="">Add Arrow primary key upserts by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10749" target="_blank" rel="noopener noreferrer" class="">#10749</a></li>
<li class="">fix(snapshot): keep refresh_mode snapshot read-only by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10752" target="_blank" rel="noopener noreferrer" class="">#10752</a></li>
<li class="">feat(tls): public mTLS for HTTP and Flight (channel + identity modes) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10753" target="_blank" rel="noopener noreferrer" class="">#10753</a></li>
<li class="">perf(cayenne): lock-free deletion caches with bloom-prefiltered probe by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10756" target="_blank" rel="noopener noreferrer" class="">#10756</a></li>
<li class="">fix(security): close API key timing-position leak and remote-UDF SSRF by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10757" target="_blank" rel="noopener noreferrer" class="">#10757</a></li>
<li class="">Fix 'wait_until_dependent_tables_are_ready' for catalogs by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10758" target="_blank" rel="noopener noreferrer" class="">#10758</a></li>
<li class="">Fixes for views and resolved tables on 'spice refresh' CLI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10759" target="_blank" rel="noopener noreferrer" class="">#10759</a></li>
<li class="">Implement FlightSQL CommandStatementSubstraitPlan support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10761" target="_blank" rel="noopener noreferrer" class="">#10761</a></li>
<li class="">feat(connectors): mTLS client cert support for flightsql and spiceai connectors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10764" target="_blank" rel="noopener noreferrer" class="">#10764</a></li>
<li class="">Allow arbitrary filenames when specifying spicepod path + <code>kind</code> validation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10777" target="_blank" rel="noopener noreferrer" class="">#10777</a></li>
<li class="">fix: ignore field metadata in schema compatibility check in index_table_scan by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10778" target="_blank" rel="noopener noreferrer" class="">#10778</a></li>
<li class="">Display pushed-down limits in EXPLAIN TREE output by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10779" target="_blank" rel="noopener noreferrer" class="">#10779</a></li>
<li class="">fix: enable streaming append for Kafka with Cayenne accelerator by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10780" target="_blank" rel="noopener noreferrer" class="">#10780</a></li>
<li class="">fix: bound chunked-index intermediate batch size to prevent OOM by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10783" target="_blank" rel="noopener noreferrer" class="">#10783</a></li>
<li class="">fix: label all columns in <code>spice cloud metrics</code> table output by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10784" target="_blank" rel="noopener noreferrer" class="">#10784</a></li>
<li class="">fix: use checked arithmetic for Turso integer-millis timestamp read path by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10786" target="_blank" rel="noopener noreferrer" class="">#10786</a></li>
<li class="">fix: use checked arithmetic in timestamp-to-nanosecond conversions by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10666" target="_blank" rel="noopener noreferrer" class="">#10666</a></li>
<li class="">Upgrade to DuckDB v1.5.2 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10788" target="_blank" rel="noopener noreferrer" class="">#10788</a></li>
<li class="">Improve CDC ingestion performance by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10789" target="_blank" rel="noopener noreferrer" class="">#10789</a></li>
<li class="">Fix <code>tool_search</code>/<code>tool_invoke</code> spans by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10791" target="_blank" rel="noopener noreferrer" class="">#10791</a></li>
<li class="">Add Cayenne inline mutations and benchmark coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10792" target="_blank" rel="noopener noreferrer" class="">#10792</a></li>
<li class="">Ensure we always resolve table names in distributed mode/metadata by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10793" target="_blank" rel="noopener noreferrer" class="">#10793</a></li>
<li class="">Remove permanent errors from DynamoDB Streams by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10794" target="_blank" rel="noopener noreferrer" class="">#10794</a></li>
<li class="">Add expanded view mode for wide table display in SQL REPL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10797" target="_blank" rel="noopener noreferrer" class="">#10797</a></li>
<li class="">Fix Cayenne CDC schema mismatch error by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10800" target="_blank" rel="noopener noreferrer" class="">#10800</a></li>
<li class="">Executors should create catalog tables on join by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10807" target="_blank" rel="noopener noreferrer" class="">#10807</a></li>
<li class="">Add compressed file support for listing connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10809" target="_blank" rel="noopener noreferrer" class="">#10809</a></li>
<li class="">Improve Cayenne mutation, scan, and inline memtable scaling by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10811" target="_blank" rel="noopener noreferrer" class="">#10811</a></li>
<li class="">Add range fallback for large join filters by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10816" target="_blank" rel="noopener noreferrer" class="">#10816</a></li>
<li class="">Improve Cayenne join filter pushdown by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10818" target="_blank" rel="noopener noreferrer" class="">#10818</a></li>
<li class="">Synchronize Cayenne partition commits across partitions by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10819" target="_blank" rel="noopener noreferrer" class="">#10819</a></li>
<li class="">fix: Deny nondistributed cayenne catalog by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10821" target="_blank" rel="noopener noreferrer" class="">#10821</a></li>
<li class="">Enable parallel Cayenne Vortex writes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10822" target="_blank" rel="noopener noreferrer" class="">#10822</a></li>
<li class="">Expand Arrow type handling in formatting and Elasticsearch by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10825" target="_blank" rel="noopener noreferrer" class="">#10825</a></li>
<li class="">Add <code>response.output_text.delta</code> to responses API by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10828" target="_blank" rel="noopener noreferrer" class="">#10828</a></li>
<li class="">feat(cayenne): add join filter propagation and no-spill Q21 planning by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10840" target="_blank" rel="noopener noreferrer" class="">#10840</a></li>
<li class="">Upgrade Turso to v0.6.0 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10843" target="_blank" rel="noopener noreferrer" class="">#10843</a></li>
<li class="">feat(cli): add <code>spice feedback</code> command to open community Slack by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10856" target="_blank" rel="noopener noreferrer" class="">#10856</a></li>
<li class="">Upgrade iceberg to v0.9.1 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10859" target="_blank" rel="noopener noreferrer" class="">#10859</a></li>
<li class="">feat(cluster): per-request executor readiness gate on /v1/ready by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10860" target="_blank" rel="noopener noreferrer" class="">#10860</a></li>
<li class="">fix: Require dim-side statistics for <code>CayennePropagateFilterAcrossEquiJoinKeys</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10863" target="_blank" rel="noopener noreferrer" class="">#10863</a></li>
<li class="">fix: Debezium schema evolution breaks dataset init on reload by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10144" target="_blank" rel="noopener noreferrer" class="">#10144</a></li>
<li class="">fix(mssql): Push topK limit to SQL Server for non-nullable sort columns by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10621" target="_blank" rel="noopener noreferrer" class="">#10621</a></li>
<li class="">fix(ScyllaDB): disable physical filter pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10772" target="_blank" rel="noopener noreferrer" class="">#10772</a></li>
<li class="">fix: handle typed NULLs and prevent overflow in DynamoDB DML type conversions by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10511" target="_blank" rel="noopener noreferrer" class="">#10511</a></li>
<li class="">fix: use InsertOp::Overwrite in DynamoDB bootstrap scan_and_overwrite_accelerator by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10639" target="_blank" rel="noopener noreferrer" class="">#10639</a></li>
<li class="">Improve DynamoDB Bootstrap performance by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10616" target="_blank" rel="noopener noreferrer" class="">#10616</a></li>
<li class="">fix: preserve field and schema metadata in Vortex type transformation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10628" target="_blank" rel="noopener noreferrer" class="">#10628</a></li>
<li class="">fix: GH connector - explicitly use AWS LC RS crypto provider for jwt by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10619" target="_blank" rel="noopener noreferrer" class="">#10619</a></li>
<li class="">fix: add snapshot mode guards to delete_from/update and delegate DML in SwappableTableProvider by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10685" target="_blank" rel="noopener noreferrer" class="">#10685</a></li>
<li class="">Persist HTTP rate-control state in object storage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10697" target="_blank" rel="noopener noreferrer" class="">#10697</a></li>
<li class="">Rate limit metrics HTTP endpoint by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10162" target="_blank" rel="noopener noreferrer" class="">#10162</a></li>
<li class="">feat(geo): add optional spatial SQL UDF support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10833" target="_blank" rel="noopener noreferrer" class="">#10833</a></li>
<li class="">feat(cayenne): CDC throughput, compaction, scan caching, and benchmarks by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10852" target="_blank" rel="noopener noreferrer" class="">#10852</a></li>
<li class="">fix(cayenne): fix Vortex panic on highly compressible data by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10855" target="_blank" rel="noopener noreferrer" class="">#10855</a></li>
<li class="">fix(cayenne): Read live protected snapshots after cleanup grace period by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10901" target="_blank" rel="noopener noreferrer" class="">#10901</a></li>
<li class="">fix: Disable Cayenne HashJoin rewriter optimizer by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10882" target="_blank" rel="noopener noreferrer" class="">#10882</a></li>
<li class="">Fix GetFlightInfo vs DoGet Flight Schema by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10864" target="_blank" rel="noopener noreferrer" class="">#10864</a></li>
<li class="">fix(search): preserve column casing in /v1/search primary key plumbing by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10909" target="_blank" rel="noopener noreferrer" class="">#10909</a></li>
<li class="">fix(object-store): dedupe s3 url style auto-detection log by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10898" target="_blank" rel="noopener noreferrer" class="">#10898</a></li>
<li class="">Improve Spice CLI manifest editing and direct command modes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10815" target="_blank" rel="noopener noreferrer" class="">#10815</a></li>
<li class="">Persist Kafka CDC offsets in sidecar tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10823" target="_blank" rel="noopener noreferrer" class="">#10823</a></li>
<li class="">feat(task-history): record Ballista stages for distributed queries by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10831" target="_blank" rel="noopener noreferrer" class="">#10831</a></li>
<li class="">Add '#[deny(clippy::missing_trait_methods)]' to wrapper/delegation trait impls by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10795" target="_blank" rel="noopener noreferrer" class="">#10795</a></li>
<li class="">Optimize Cayenne catalog maintenance paths by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10904" target="_blank" rel="noopener noreferrer" class="">#10904</a></li>
<li class="">Centralize DuckDB settings for accelerator by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10895" target="_blank" rel="noopener noreferrer" class="">#10895</a></li>
<li class="">deps(ballista): bump to 47e2b494 to fix S3 shuffle reads under cluster mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10910" target="_blank" rel="noopener noreferrer" class="">#10910</a></li>
<li class="">Authorization header + Bump async-openai + <code>responses_adapter</code> fix by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10911" target="_blank" rel="noopener noreferrer" class="">#10911</a></li>
<li class="">Tune accelerators by storage profile by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10913" target="_blank" rel="noopener noreferrer" class="">#10913</a></li>
<li class="">feat: add dataset-level on_schema_change config by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10908" target="_blank" rel="noopener noreferrer" class="">#10908</a></li>
<li class="">Handle <code>NULL</code> sentinel for nullable partition expressions by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10880" target="_blank" rel="noopener noreferrer" class="">#10880</a></li>
<li class="">fix: Remove Cayenne Catalog from catalog registration by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10914" target="_blank" rel="noopener noreferrer" class="">#10914</a></li>
<li class="">Add catalog name to foreign key metadata in postgres catalog by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10917" target="_blank" rel="noopener noreferrer" class="">#10917</a></li>
<li class="">Cayenne perf: eliminate redundant clones, PK point-lookup fanout fix, IN-list rewrite + microbench coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10916" target="_blank" rel="noopener noreferrer" class="">#10916</a></li>
<li class="">fix(turso-shared): retry on Turso BEGIN CONCURRENT "Write-write conflict" by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10946" target="_blank" rel="noopener noreferrer" class="">#10946</a></li>
<li class="">Vendor Vortex DataFusion for Cayenne by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10933" target="_blank" rel="noopener noreferrer" class="">#10933</a></li>
<li class="">perf(cayenne): background retention + enable CDC pipelining for retention-configured tables by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10936" target="_blank" rel="noopener noreferrer" class="">#10936</a></li>
<li class="">feat(cayenne): scale metastore pool to 32 + vs_duckdb_scaling benches (1→128 concurrency, sqlite + turso lanes) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10943" target="_blank" rel="noopener noreferrer" class="">#10943</a></li>
<li class="">feat(mcp): support auth for streamable HTTP tools by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10927" target="_blank" rel="noopener noreferrer" class="">#10927</a></li>
<li class="">Explicit error if v1/search requests a table without search index by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10968" target="_blank" rel="noopener noreferrer" class="">#10968</a></li>
<li class="">Fix spicepod loading failure when directory name contains dots by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10958" target="_blank" rel="noopener noreferrer" class="">#10958</a></li>
<li class="">Extend append tests with arrow engine configurations by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10959" target="_blank" rel="noopener noreferrer" class="">#10959</a></li>
<li class="">Remove dataset on_schema_change Policy from rc.5 release notes by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10964" target="_blank" rel="noopener noreferrer" class="">#10964</a></li>
<li class="">Skip tpcds_q78 for Cayenne engine at SF100 by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10966" target="_blank" rel="noopener noreferrer" class="">#10966</a></li>
<li class="">fix: Update benchmark snapshots May-20 by <a href="https://github.com/apps/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10952" target="_blank" rel="noopener noreferrer" class="">#10952</a></li>
<li class="">Fix #10951: UdtfExec invariant Vec lengths must match children count by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10953" target="_blank" rel="noopener noreferrer" class="">#10953</a></li>
<li class="">docs(release): update v2.0.0-rc.5 notes with latest trunk PRs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10949" target="_blank" rel="noopener noreferrer" class="">#10949</a></li>
<li class="">Remove eval related things for v2.0.0 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10945" target="_blank" rel="noopener noreferrer" class="">#10945</a></li>
<li class="">build(deps): bump ubuntu from 24.04 to 26.04 in the docker-dependencies group by <a href="https://github.com/apps/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10883" target="_blank" rel="noopener noreferrer" class="">#10883</a></li>
<li class="">fix: Add publish = false to chbench-driver by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10939" target="_blank" rel="noopener noreferrer" class="">#10939</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0-rc.4...v2.0.0-rc.5" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0-rc.4...v2.0.0-rc.5</a></p>]]></content:encoded>
            <category>release</category>
            <category>cayenne</category>
            <category>postgres</category>
            <category>mongodb</category>
            <category>snowflake</category>
            <category>udf</category>
            <category>kafka</category>
            <category>arrow</category>
            <category>ducklake</category>
            <category>data-connector</category>
        </item>
        <item>
            <title><![CDATA[Spice v1.11.6 (May 6, 2026)]]></title>
            <link>https://spiceai.org/releases/v1.11.6</link>
            <guid>https://spiceai.org/releases/v1.11.6</guid>
            <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spice v1.11.6 is now available! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Spice v1.11.6 is now available! 🛠️</p>
<p>Spice v1.11.6 is a patch release improving <strong>DynamoDB</strong> bootstrap ingestion performance and making <strong>Helm chart</strong> health probes configurable.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v1116">What's New in v1.11.6<a href="https://spiceai.org/releases/v1.11.6#whats-new-in-v1116" class="hash-link" aria-label="Direct link to What's New in v1.11.6" title="Direct link to What's New in v1.11.6" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dynamodb-faster-bootstrap-ingestion">DynamoDB: Faster Bootstrap Ingestion<a href="https://spiceai.org/releases/v1.11.6#dynamodb-faster-bootstrap-ingestion" class="hash-link" aria-label="Direct link to DynamoDB: Faster Bootstrap Ingestion" title="Direct link to DynamoDB: Faster Bootstrap Ingestion" translate="no">​</a></h3>
<p>Improved <a href="https://spiceai.org/docs/components/data-connectors/dynamodb" target="_blank" rel="noopener noreferrer" class="">DynamoDB</a> bootstrap ingestion throughput for <code>refresh_mode: changes</code> datasets (<a href="https://github.com/spiceai/spiceai/pull/10616" target="_blank" rel="noopener noreferrer" class="">#10616</a>). Large tables now maintain a high, steady ingestion rate throughout the entire bootstrap, even for very large tables.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="helm-chart-configurable-health-probes">Helm Chart: Configurable Health Probes<a href="https://spiceai.org/releases/v1.11.6#helm-chart-configurable-health-probes" class="hash-link" aria-label="Direct link to Helm Chart: Configurable Health Probes" title="Direct link to Helm Chart: Configurable Health Probes" translate="no">​</a></h3>
<p>The Spice <a href="https://spiceai.org/docs/deployment/kubernetes" target="_blank" rel="noopener noreferrer" class="">Helm chart</a> now supports configurable <code>livenessProbe</code>, <code>readinessProbe</code>, and <code>startupProbe</code> settings (<a href="https://github.com/spiceai/spiceai/pull/10696" target="_blank" rel="noopener noreferrer" class="">#10696</a>), including probe path, port, and timing parameters.</p>
<p><strong>Example <code>values.yaml</code>:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">livenessProbe</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">httpGet</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">path</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /health</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">port</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">8090</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">timeoutSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">periodSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">failureThreshold</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">readinessProbe</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">httpGet</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">path</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /v1/ready</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">port</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">8090</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">timeoutSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">5</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">periodSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">failureThreshold</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">startupProbe</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">httpGet</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">path</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /health</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">port</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">8090</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">timeoutSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">periodSeconds</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">failureThreshold</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">30</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v1.11.6#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v1.11.6#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v1.11.6#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v1.11.6#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v1.11.6, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:1.11.6</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:1.11.6</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 1.11.6</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v1.11.6#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v1.11.6#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Improve DynamoDB Bootstrap performance by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10616" target="_blank" rel="noopener noreferrer" class="">#10616</a></li>
<li class="">fix: use InsertOp::Overwrite in DynamoDB bootstrap scan_and_overwrite_accelerator by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10639" target="_blank" rel="noopener noreferrer" class="">#10639</a></li>
<li class="">fix: make Helm chart probes configurable by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10696" target="_blank" rel="noopener noreferrer" class="">#10696</a></li>
<li class="">Migrate secrets to vars by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10354" target="_blank" rel="noopener noreferrer" class="">#10354</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.5...v1.11.6" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.5...v1.11.6</a></p>]]></content:encoded>
            <category>release</category>
            <category>dynamodb</category>
            <category>data-connector</category>
            <category>helm</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-rc.4 (Apr 30, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-rc.4</link>
            <guid>https://spiceai.org/releases/v2.0-rc.4</guid>
            <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v2.0-rc.4! 🚀]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v2.0-rc.4! 🚀</p>
<p>v2.0.0-rc.4 is the fourth release candidate for advanced testing of v2.0, building on <a href="https://github.com/spiceai/spiceai/releases/tag/v2.0.0-rc.3" target="_blank" rel="noopener noreferrer" class="">v2.0.0-rc.3</a>.</p>
<p>Highlights in this release candidate include:</p>
<ul>
<li class=""><strong>Elasticsearch Data Connector (Alpha)</strong> with native hybrid search (BM25 full-text + kNN vector + RRF)</li>
<li class=""><strong>PostgreSQL Native CDC</strong> via WAL logical replication, eliminating the need for Debezium or Kafka</li>
<li class=""><strong>Multi-vector Embeddings with MaxSim</strong> for ColBERT-style late-interaction retrieval</li>
<li class=""><strong>Rerank UDTF</strong> for hybrid search pipelines with automatic query propagation</li>
<li class=""><strong>HashiCorp Vault and Azure Key Vault Secret Stores</strong> for enterprise secret management</li>
<li class=""><strong>DuckDB Vector Engine</strong> with HNSW index support</li>
<li class=""><strong>Azure Cosmos DB Connector</strong> (RC), <strong>Git Connector</strong> promoted to RC</li>
<li class=""><strong>MCP Streamable HTTP</strong> transport</li>
<li class=""><strong>Read-only API Key Enforcement</strong> on Flight DoGet and async query paths</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200-rc4">What's New in v2.0.0-rc.4<a href="https://spiceai.org/releases/v2.0-rc.4#whats-new-in-v200-rc4" class="hash-link" aria-label="Direct link to What's New in v2.0.0-rc.4" title="Direct link to What's New in v2.0.0-rc.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="elasticsearch-data-connector-alpha-spiceai-enterprise">Elasticsearch Data Connector (Alpha, Spice.ai Enterprise)<a href="https://spiceai.org/releases/v2.0-rc.4#elasticsearch-data-connector-alpha-spiceai-enterprise" class="hash-link" aria-label="Direct link to Elasticsearch Data Connector (Alpha, Spice.ai Enterprise)" title="Direct link to Elasticsearch Data Connector (Alpha, Spice.ai Enterprise)" translate="no">​</a></h3>
<p>The new <a href="https://spiceai.org/docs/components/data-connectors/elasticsearch" target="_blank" rel="noopener noreferrer" class="">Elasticsearch</a> data connector enables querying Elasticsearch indexes as SQL tables with full hybrid search support. Currently available in Spice.ai Enterprise.</p>
<p><strong>Key capabilities</strong>:</p>
<ul>
<li class=""><strong>SQL Table Access</strong>: Query any Elasticsearch index with standard SQL via a native DataFusion <code>TableProvider</code>.</li>
<li class=""><strong>kNN Vector Search</strong>: Use the <code>vector_search()</code> UDTF against Elasticsearch-backed vector fields.</li>
<li class=""><strong>BM25 Full-Text Search</strong>: Use the <code>text_search()</code> UDTF for native Elasticsearch full-text queries.</li>
<li class=""><strong>Hybrid Search</strong>: Combine kNN and BM25 results with the <code>rrf()</code> UDTF for reciprocal rank fusion.</li>
<li class=""><strong>Elasticsearch as a Vector Engine</strong>: Accelerated datasets can use Elasticsearch as the backing vector engine for embedding storage and retrieval.</li>
</ul>
<p>Example configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> elasticsearch</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_index</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_data</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">elasticsearch_endpoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">cluster.es.io</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">9200</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">elasticsearch_username</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">es_user</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">elasticsearch_password</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">es_password</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="postgresql-native-replication-via-wal">PostgreSQL Native Replication via WAL<a href="https://spiceai.org/releases/v2.0-rc.4#postgresql-native-replication-via-wal" class="hash-link" aria-label="Direct link to PostgreSQL Native Replication via WAL" title="Direct link to PostgreSQL Native Replication via WAL" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">Postgres</a> datasets configured with <code>refresh_mode: changes</code> can now stream changes directly from PostgreSQL logical replication (WAL) into any local accelerator without Debezium or Kafka required.</p>
<p><strong>Key capabilities</strong>:</p>
<ul>
<li class=""><strong>Native Logical Replication</strong>: Uses <code>pgoutput</code> decoding to stream INSERT/UPDATE/DELETE events.</li>
<li class=""><strong>Automatic Slot Management</strong>: Each Spice replica creates a distinct replication slot (<code>spice_&lt;dataset&gt;_&lt;hash&gt;</code>), so multi-replica deployments work automatically. Publications are shared.</li>
<li class=""><strong>Bootstrap Snapshot</strong>: An initial <code>REPEATABLE READ</code> snapshot seeds the accelerator before replication begins.</li>
<li class=""><strong>LSN Acknowledgement</strong>: The <code>LsnCommitter</code> sends durable LSN back to Postgres so WAL segments are reclaimed.</li>
<li class=""><strong>All Accelerators Supported</strong>: Works with DuckDB, SQLite, Postgres, Cayenne, and Arrow accelerators.</li>
</ul>
<p>Example configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_table</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_table</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_port</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">5432</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> mydb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_publication</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_publication   </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># optional; auto-created if omitted</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> changes</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="multi-vector-embeddings-with-maxsim-late-interaction">Multi-vector Embeddings with MaxSim (Late Interaction)<a href="https://spiceai.org/releases/v2.0-rc.4#multi-vector-embeddings-with-maxsim-late-interaction" class="hash-link" aria-label="Direct link to Multi-vector Embeddings with MaxSim (Late Interaction)" title="Direct link to Multi-vector Embeddings with MaxSim (Late Interaction)" translate="no">​</a></h3>
<p>Column-level <a href="https://spiceai.org/docs/components/embeddings" target="_blank" rel="noopener noreferrer" class="">embeddings</a> now support list-of-string columns, producing one embedding vector per list element and enabling ColBERT-style late-interaction retrieval.</p>
<p><strong>Key capabilities</strong>:</p>
<ul>
<li class=""><strong>Multi-vector per Row</strong>: Columns of type <code>List&lt;String&gt;</code> produce <code>List&lt;FixedSizeList&lt;F32, D&gt;&gt;</code> — one embedding per list element.</li>
<li class=""><strong>MaxSim / Mean / Sum Scoring</strong>: Per-row score is the max, mean, or sum cosine over the list elements. Default is MaxSim (ColBERT).</li>
<li class=""><strong><code>_match</code> Column</strong>: Returns the specific list element that produced the highest cosine similarity.</li>
<li class=""><strong>No Schema Changes Required</strong>: Works with existing embedding configurations; activates automatically for list-type columns.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rerank-udtf-for-hybrid-search">Rerank UDTF for Hybrid Search<a href="https://spiceai.org/releases/v2.0-rc.4#rerank-udtf-for-hybrid-search" class="hash-link" aria-label="Direct link to Rerank UDTF for Hybrid Search" title="Direct link to Rerank UDTF for Hybrid Search" translate="no">​</a></h3>
<p>A new <code>rerank()</code> table-valued function reorders scored results from <a href="https://spiceai.org/docs/reference/sql/search#vector-search-vector_search" target="_blank" rel="noopener noreferrer" class=""><code>vector_search</code></a>, <a href="https://spiceai.org/docs/reference/sql/search#full-text-search-text_search" target="_blank" rel="noopener noreferrer" class=""><code>text_search</code></a>, or <a href="https://spiceai.org/docs/reference/sql/search#reciprocal-rank-fusion-rrf" target="_blank" rel="noopener noreferrer" class=""><code>rrf</code></a> by a reranker model's relevance judgements. See <a href="https://spiceai.org/docs/features/search" target="_blank" rel="noopener noreferrer" class="">Search Functionality</a> for an overview of search UDTFs.</p>
<p><strong>Key capabilities</strong>:</p>
<ul>
<li class=""><strong>Auto Query Propagation</strong>: The query string is automatically inherited from a nested search UDTF — no repetition required.</li>
<li class=""><strong>Any Chat Model as Reranker</strong>: Any registered chat/completion model can serve as a reranker via the built-in <code>LlmRerank</code> adapter (listwise prompt by default; pointwise available).</li>
<li class=""><strong>Filter and Projection Pushdown</strong>: The <code>RerankExec</code> physical node supports pushdown, reducing data movement.</li>
<li class=""><strong>Extensible</strong>: A new <code>RerankerModelStore</code> sits alongside <code>ChatModelStore</code> and <code>EmbeddingModelStore</code>; native providers (Cohere, Voyage, BGE) can be added without runtime plumbing changes.</li>
</ul>
<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">SELECT</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">*</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">FROM</span><span class="token plain"> rerank</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    rrf</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">vector_search</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'my_table'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'query text'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> text_search</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'my_table'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'query text'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    document </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token operator" style="color:hsl(221, 87%, 60%)">&gt;</span><span class="token plain"> content</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">LIMIT</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="new-secret-stores-hashicorp-vault-and-azure-key-vault">New Secret Stores: HashiCorp Vault and Azure Key Vault<a href="https://spiceai.org/releases/v2.0-rc.4#new-secret-stores-hashicorp-vault-and-azure-key-vault" class="hash-link" aria-label="Direct link to New Secret Stores: HashiCorp Vault and Azure Key Vault" title="Direct link to New Secret Stores: HashiCorp Vault and Azure Key Vault" translate="no">​</a></h3>
<p>Two new enterprise-grade <a href="https://spiceai.org/docs/components/secret-stores" target="_blank" rel="noopener noreferrer" class="">Secret Stores</a> are now available.</p>
<p><strong>HashiCorp Vault</strong> (<code>hashicorp_vault</code>):</p>
<ul>
<li class="">KV v2 (default) and KV v1 mount support.</li>
<li class="">Auth methods: <code>token</code>, <code>approle</code>, <code>kubernetes</code>, <code>jwt</code>.</li>
<li class="">Token leases are cached and automatically re-acquired on expiry.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> hashicorp_vault</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">secret/my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">app</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_secrets</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">hashicorp_vault_addr</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//vault.example.com</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">hashicorp_vault_auth_method</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> approle</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">hashicorp_vault_role_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">env</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">VAULT_ROLE_ID</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">hashicorp_vault_secret_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">vault_secret_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></div></code></pre></div></div>
<p><strong>Azure Key Vault</strong> (<code>azure_keyvault</code>):</p>
<ul>
<li class="">Per-key caching with single-flight fetch coalescing.</li>
<li class="">Auth methods: service principal, managed identity, workload identity, Azure CLI, or auto-detect.</li>
<li class="">Supports sovereign clouds via <code>endpoint</code> parameter.</li>
</ul>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> azure_keyvault</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">vault</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_secrets</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">azure_keyvault_auth_method</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> managed_identity</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="duckdb-vector-engine">DuckDB Vector Engine<a href="https://spiceai.org/releases/v2.0-rc.4#duckdb-vector-engine" class="hash-link" aria-label="Direct link to DuckDB Vector Engine" title="Direct link to DuckDB Vector Engine" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-accelerators/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB</a>-accelerated tables can now use DuckDB's HNSW index for vector search via the <code>vector_engine: duckdb</code> option, enabling fast approximate nearest-neighbor search without an external vector store.</p>
<p>Example configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">public.documents</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> documents</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">columns</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> content</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">embeddings</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> hf_minilm</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">row_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> id</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">mode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> file</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">vectors</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">engine</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> duckdb</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">duckdb_distance_metric</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> cosine</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">duckdb_hnsw_m</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">duckdb_hnsw_ef_construction</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">64</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">duckdb_hnsw_ef_search</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">32</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">embeddings</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> huggingface</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">huggingface.co/minishlab/potion</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">base</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">2M</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> hf_minilm</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="new-and-promoted-connectors">New and Promoted Connectors<a href="https://spiceai.org/releases/v2.0-rc.4#new-and-promoted-connectors" class="hash-link" aria-label="Direct link to New and Promoted Connectors" title="Direct link to New and Promoted Connectors" translate="no">​</a></h3>
<p><strong>Azure Cosmos DB (Alpha)</strong>:</p>
<p>A new read-only <a href="https://spiceai.org/docs/components/data-connectors/cosmosdb" target="_blank" rel="noopener noreferrer" class="">Azure Cosmos DB</a> NoSQL / Core SQL API connector built on the <code>azure_data_cosmos</code> 0.30 SDK. Supports cross-partition scans, schema inference from document samples, and key-based auth (connection string or account endpoint + key).</p>
<p><strong>Git Connector (RC)</strong>:</p>
<p>The <a href="https://spiceai.org/docs/components/data-connectors/git" target="_blank" rel="noopener noreferrer" class="">Git</a> data connector is promoted to RC status with HTTPS/SSH auth (<code>git_token</code>, <code>git_username</code>/<code>git_password</code>, <code>git_ssh_key</code>), Git LFS support (<code>enable_lfs</code>), and per-repo connection resilience (semaphore, bounded retries with exponential backoff, permanent-error circuit breaking).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dynamodb-write-support-dml">DynamoDB Write Support (DML)<a href="https://spiceai.org/releases/v2.0-rc.4#dynamodb-write-support-dml" class="hash-link" aria-label="Direct link to DynamoDB Write Support (DML)" title="Direct link to DynamoDB Write Support (DML)" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/dynamodb" target="_blank" rel="noopener noreferrer" class="">DynamoDB</a> datasets now support write-back via <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> operations, complementing the existing read and CDC streaming capabilities.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mcp-streamable-http-transport">MCP Streamable HTTP Transport<a href="https://spiceai.org/releases/v2.0-rc.4#mcp-streamable-http-transport" class="hash-link" aria-label="Direct link to MCP Streamable HTTP Transport" title="Direct link to MCP Streamable HTTP Transport" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/features/large-language-models/mcp" target="_blank" rel="noopener noreferrer" class="">MCP server</a> has been upgraded to <a href="https://crates.io/crates/rmcp" target="_blank" rel="noopener noreferrer" class="">rmcp 1.5.0</a> and switched to the Streamable HTTP transport (<code>/v1/mcp</code>), replacing the previous SSE-based endpoint. The client-side transport is updated to <code>StreamableHttpClientTransport</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="security-improvements">Security Improvements<a href="https://spiceai.org/releases/v2.0-rc.4#security-improvements" class="hash-link" aria-label="Direct link to Security Improvements" title="Direct link to Security Improvements" translate="no">​</a></h3>
<p><strong>Read-only API Key Enforcement</strong>: <a href="https://spiceai.org/docs/api/auth" target="_blank" rel="noopener noreferrer" class="">API keys</a> with read-only scope are now strictly enforced on the Flight <code>DoGet</code> path and on async query endpoints, preventing write operations from being issued under a read-only key.</p>
<p><strong>GitHub Workflow Hardening</strong>: CI workflows have been hardened with improved security posture to reduce supply-chain risk.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="developer-experience-improvements">Developer Experience Improvements<a href="https://spiceai.org/releases/v2.0-rc.4#developer-experience-improvements" class="hash-link" aria-label="Direct link to Developer Experience Improvements" title="Direct link to Developer Experience Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>Actionable Config Errors</strong>: Parameter typos, missing secret references, and unknown engine names now produce specific, actionable error messages with Levenshtein-based suggestions, rather than silent drops or generic "missing required parameter" messages.</li>
<li class=""><strong><code>spice init</code> Improvements</strong>: Written spicepods now include a <code>yaml-language-server: $schema=...</code> directive for IDE completions. Creation messages print regardless of log level.</li>
<li class=""><strong>REPL Improvements</strong>: Log filter honors <code>RUST_LOG</code> when <code>-v</code> is not passed; version banner moves to stderr and prints only on an interactive TTY.</li>
<li class=""><strong>403 / 401 Routing</strong>: HTTP 403 responses route to a new <code>PermissionDenied</code> variant; 401 messages point at <code>spice login</code> / <code>SPICE_API_KEY</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="opentelemetry-improvements">OpenTelemetry Improvements<a href="https://spiceai.org/releases/v2.0-rc.4#opentelemetry-improvements" class="hash-link" aria-label="Direct link to OpenTelemetry Improvements" title="Direct link to OpenTelemetry Improvements" translate="no">​</a></h3>
<p>See <a href="https://spiceai.org/docs/features/observability" target="_blank" rel="noopener noreferrer" class="">Observability &amp; Monitoring</a> and the <a href="https://spiceai.org/docs/reference/spicepod/runtime#runtimetelemetry" target="_blank" rel="noopener noreferrer" class=""><code>runtime.telemetry</code></a> reference for full configuration details.</p>
<ul>
<li class=""><strong>Metric Name Prefix</strong>: Configure a prefix for all exported OTLP metric names via <code>runtime.telemetry.metric_prefix</code>.</li>
<li class=""><strong>Delta Temporality Default</strong>: The OTLP push exporter now defaults to delta temporality, matching Prometheus and most backends.</li>
<li class=""><strong>Resource Attributes</strong>: <code>runtime.telemetry.properties</code> are applied as OTLP resource attributes on exported metrics.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="full-text-search-performance">Full-text Search Performance<a href="https://spiceai.org/releases/v2.0-rc.4#full-text-search-performance" class="hash-link" aria-label="Direct link to Full-text Search Performance" title="Direct link to Full-text Search Performance" translate="no">​</a></h3>
<p>Tantivy full-text search ingestion performance is significantly improved with better batch handling and a rollback-on-error path.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sql-and-query-engine">SQL and Query Engine<a href="https://spiceai.org/releases/v2.0-rc.4#sql-and-query-engine" class="hash-link" aria-label="Direct link to SQL and Query Engine" title="Direct link to SQL and Query Engine" translate="no">​</a></h3>
<ul>
<li class=""><strong>DataFusion Upgrade</strong>: Updated to a newer DataFusion revision with additional bug fixes and performance improvements.</li>
<li class=""><strong>Views on DDL Catalogs</strong>: DDL-defined catalogs (e.g., Unity Catalog) can now expose and query views.</li>
<li class=""><strong><code>flatten_json</code> / <code>json_tree</code> / <code>expand_maps</code> UDTFs</strong>: New table-valued functions for JSON transformation, map expansion, and schema decomposition in query pipelines. See <a href="https://spiceai.org/docs/reference/sql/json" target="_blank" rel="noopener noreferrer" class="">JSON Functions and Operators</a>.</li>
<li class=""><strong><code>cosine_distance</code> Pushdown to DuckDB</strong>: <code>cosine_distance</code> is now pushed down to <a href="https://spiceai.org/docs/components/data-accelerators/duckdb" target="_blank" rel="noopener noreferrer" class="">DuckDB</a> accelerators via <code>array_cosine_distance</code>.</li>
<li class=""><strong>Snowflake Type Support</strong>: Added support for <code>OBJECT</code>, <code>MAP</code>, <code>GEOGRAPHY</code>, <code>GEOMETRY</code>, <code>VECTOR</code>, and <code>TIMESTAMP_LTZ</code> types in the <a href="https://spiceai.org/docs/components/data-connectors/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a> connector.</li>
<li class=""><strong>MySQL Zero-Date Behavior</strong>: The <a href="https://spiceai.org/docs/components/data-connectors/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL</a> connector adds a new <code>mysql_zero_date_behavior</code> parameter (<code>null</code> or <code>error</code>) controlling how MySQL zero-date values (<code>0000-00-00</code>) are handled.</li>
<li class=""><strong>Databricks Timeouts</strong>: The <a href="https://spiceai.org/docs/components/data-connectors/databricks" target="_blank" rel="noopener noreferrer" class="">Databricks</a> connector adds new <code>connect_timeout</code> and <code>client_timeout</code> parameters for <code>sql_warehouse</code> mode.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-updates">Dependency Updates<a href="https://spiceai.org/releases/v2.0-rc.4#dependency-updates" class="hash-link" aria-label="Direct link to Dependency Updates" title="Direct link to Dependency Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version / Update</th></tr></thead><tbody><tr><td><strong>DataFusion</strong></td><td>Updated</td></tr><tr><td><strong>rmcp</strong></td><td>v1.5.0 (from fork pin)</td></tr><tr><td><strong>mistral.rs</strong></td><td>Updated</td></tr><tr><td><strong>openssl</strong></td><td>0.10.78</td></tr></tbody></table>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-rc.4#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-rc.4#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0-rc.4#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-rc.4#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0-rc.4, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade v2.0.0-rc.4</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0-rc.4</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0-rc.4</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0-rc.4</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-rc.4#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-rc.4#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Integrate spiceio and makefile_targets into pr.yml by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10357" target="_blank" rel="noopener noreferrer" class="">#10357</a></li>
<li class="">ci: skip artifact compression for test binaries/archives by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10381" target="_blank" rel="noopener noreferrer" class="">#10381</a></li>
<li class="">chore(deps): bump spiceai/candle, spiceai/mistral.rs, aws-lc-rs, tantivy, rand by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10379" target="_blank" rel="noopener noreferrer" class="">#10379</a></li>
<li class="">Bump datafusion-table-providers (#10375) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10384" target="_blank" rel="noopener noreferrer" class="">#10384</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10376" target="_blank" rel="noopener noreferrer" class="">#10376</a></li>
<li class="">v2.0.0-rc.3 preparation by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10382" target="_blank" rel="noopener noreferrer" class="">#10382</a></li>
<li class="">fix(spicepod): JSON schema accepts string or <code>{name: expr}</code> for <code>partition_by</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10352" target="_blank" rel="noopener noreferrer" class="">#10352</a></li>
<li class="">fix: Use ROUND for Turso decimal BETWEEN comparisons (fixes #9872) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10360" target="_blank" rel="noopener noreferrer" class="">#10360</a></li>
<li class="">Revert "v2.0.0-rc.3 preparation" from trunk by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10386" target="_blank" rel="noopener noreferrer" class="">#10386</a></li>
<li class="">Add <code>on_schema_resolved</code> dataset ready state by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10368" target="_blank" rel="noopener noreferrer" class="">#10368</a></li>
<li class="">feat: Add Elasticsearch data connector with hybrid search support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10258" target="_blank" rel="noopener noreferrer" class="">#10258</a></li>
<li class="">ci: bump test archive upload compression-level to 1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10388" target="_blank" rel="noopener noreferrer" class="">#10388</a></li>
<li class="">feat(git-connector): promote Git connector to RC status by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10385" target="_blank" rel="noopener noreferrer" class="">#10385</a></li>
<li class="">feat(postgres): stream WAL directly to Spice accelerators by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10364" target="_blank" rel="noopener noreferrer" class="">#10364</a></li>
<li class="">Add schema decomposition to the HTTP connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10393" target="_blank" rel="noopener noreferrer" class="">#10393</a></li>
<li class="">fix(cayenne): Skip catalog refresh state reload for existing providers by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10396" target="_blank" rel="noopener noreferrer" class="">#10396</a></li>
<li class="">Make <code>cayenne-flightsql</code> tool by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10356" target="_blank" rel="noopener noreferrer" class="">#10356</a></li>
<li class="">build(deps): bump the github-actions-dependencies group with 2 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10398" target="_blank" rel="noopener noreferrer" class="">#10398</a></li>
<li class="">Update openapi.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10272" target="_blank" rel="noopener noreferrer" class="">#10272</a></li>
<li class="">Merge develop to trunk — 2026-04-19 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10407" target="_blank" rel="noopener noreferrer" class="">#10407</a></li>
<li class="">feat(otel): default OTLP push exporter to delta temporality by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10412" target="_blank" rel="noopener noreferrer" class="">#10412</a></li>
<li class="">fix: Restore analyzer rule ordering to run federation before type coercion by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10415" target="_blank" rel="noopener noreferrer" class="">#10415</a></li>
<li class="">fix: Map Utf8/LargeUtf8 to STRING in Databricks/Spark SQL dialects by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10420" target="_blank" rel="noopener noreferrer" class="">#10420</a></li>
<li class="">feat(otel): add metric name prefix at runtime.telemetry.metric_prefix by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10418" target="_blank" rel="noopener noreferrer" class="">#10418</a></li>
<li class="">fix: Map LargeUtf8 to VARCHAR in Athena ODBC dialect by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10419" target="_blank" rel="noopener noreferrer" class="">#10419</a></li>
<li class="">feat(cluster): connector-driven object store registration on executors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10414" target="_blank" rel="noopener noreferrer" class="">#10414</a></li>
<li class="">build(deps): bump ubuntu from 22.04 to 24.04 in the docker-dependencies group by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10397" target="_blank" rel="noopener noreferrer" class="">#10397</a></li>
<li class="">fix: Update benchmark snapshots Apr 20 by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10417" target="_blank" rel="noopener noreferrer" class="">#10417</a></li>
<li class="">feat(otel): apply runtime.telemetry.properties as resource attributes on exported metrics by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10416" target="_blank" rel="noopener noreferrer" class="">#10416</a></li>
<li class="">Publish RC releases to DockerHub; upgrade runners to ubuntu-24.04 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10428" target="_blank" rel="noopener noreferrer" class="">#10428</a></li>
<li class="">feat: Add Azure Cosmos DB (NoSQL) data connector (RC) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10392" target="_blank" rel="noopener noreferrer" class="">#10392</a></li>
<li class="">feat(datafusion): flatten_json_properties + json_tree UDTFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10406" target="_blank" rel="noopener noreferrer" class="">#10406</a></li>
<li class="">Harden /v1/tools and /v1/nsql against unauthenticated / LLM-driven SQL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10365" target="_blank" rel="noopener noreferrer" class="">#10365</a></li>
<li class="">feat(embeddings): multi-vector embeddings with MaxSim + late-interaction by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10408" target="_blank" rel="noopener noreferrer" class="">#10408</a></li>
<li class="">Update GH runners for CUDA builds by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10432" target="_blank" rel="noopener noreferrer" class="">#10432</a></li>
<li class="">fix(delta_lake): register object stores on cluster executors by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10436" target="_blank" rel="noopener noreferrer" class="">#10436</a></li>
<li class="">DF-native DML by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10327" target="_blank" rel="noopener noreferrer" class="">#10327</a></li>
<li class="">ci: run Build and Test on spiceai-macos; split install jobs by profile by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10434" target="_blank" rel="noopener noreferrer" class="">#10434</a></li>
<li class="">Improve search UDTFs: text_search, vector_search, rrf by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10387" target="_blank" rel="noopener noreferrer" class="">#10387</a></li>
<li class="">fix(model2vec): Improve robustness of model loading for sentence-transformers layouts by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10444" target="_blank" rel="noopener noreferrer" class="">#10444</a></li>
<li class="">Merge develop to trunk — 2026-04-21 by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10448" target="_blank" rel="noopener noreferrer" class="">#10448</a></li>
<li class="">Enable filter pushdown for <code>vector_search</code> UDTF by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10447" target="_blank" rel="noopener noreferrer" class="">#10447</a></li>
<li class="">Support Snowflake OBJECT, MAP, GEOGRAPHY, GEOMETRY, VECTOR, TIMESTAMP_LTZ types by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10451" target="_blank" rel="noopener noreferrer" class="">#10451</a></li>
<li class="">Fix Databricks tests by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10449" target="_blank" rel="noopener noreferrer" class="">#10449</a></li>
<li class="">fix(cluster): forward register_object_stores through connector wrappers by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10460" target="_blank" rel="noopener noreferrer" class="">#10460</a></li>
<li class="">Fixes for vector-search by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10455" target="_blank" rel="noopener noreferrer" class="">#10455</a></li>
<li class="">Add expand_maps option and flatten_json UDTF by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10452" target="_blank" rel="noopener noreferrer" class="">#10452</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10458" target="_blank" rel="noopener noreferrer" class="">#10458</a></li>
<li class="">Fix physical codec decode ambiguity for empty protobuf messages by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10466" target="_blank" rel="noopener noreferrer" class="">#10466</a></li>
<li class="">chore(logging): demote s3_single_file_cached skip refresh log to debug by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10467" target="_blank" rel="noopener noreferrer" class="">#10467</a></li>
<li class="">Enable filter pushdown for <code>rrf</code> UDTF by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10465" target="_blank" rel="noopener noreferrer" class="">#10465</a></li>
<li class="">feat(cluster): consolidate distributed state into cluster.json by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10463" target="_blank" rel="noopener noreferrer" class="">#10463</a></li>
<li class="">feat(cayenne): Add column statistics and data inlining by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10314" target="_blank" rel="noopener noreferrer" class="">#10314</a></li>
<li class="">docs(copilot): flag missing wrapper delegation when adding default trait methods by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10461" target="_blank" rel="noopener noreferrer" class="">#10461</a></li>
<li class="">Wire Elasticsearch vector engine write path through acceleration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10453" target="_blank" rel="noopener noreferrer" class="">#10453</a></li>
<li class="">Add helm lint CI by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10468" target="_blank" rel="noopener noreferrer" class="">#10468</a></li>
<li class="">Fix Azure and GCS acceleration snapshot object store credential handling by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10486" target="_blank" rel="noopener noreferrer" class="">#10486</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10485" target="_blank" rel="noopener noreferrer" class="">#10485</a></li>
<li class="">fix(secrets): harden AWS Secrets Manager secret store by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10478" target="_blank" rel="noopener noreferrer" class="">#10478</a></li>
<li class="">Update <code>datafusion-ballista</code> crate by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10488" target="_blank" rel="noopener noreferrer" class="">#10488</a></li>
<li class="">feat(secrets): add ParameterSpec and more params for AWS secrets manager by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10487" target="_blank" rel="noopener noreferrer" class="">#10487</a></li>
<li class="">Add rerank UDTF for hybrid search with query auto-propagation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10469" target="_blank" rel="noopener noreferrer" class="">#10469</a></li>
<li class="">Fix flatten_json_properties by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10475" target="_blank" rel="noopener noreferrer" class="">#10475</a></li>
<li class="">fix: preserve field and schema metadata in expand_views_schema by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10494" target="_blank" rel="noopener noreferrer" class="">#10494</a></li>
<li class="">Upgrade rmcp to upstream 1.5.0; switch MCP server to Streamable HTTP by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10491" target="_blank" rel="noopener noreferrer" class="">#10491</a></li>
<li class="">fix: handle Snowflake TIMESTAMP_LTZ wire format and prevent nanosecond overflow by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10493" target="_blank" rel="noopener noreferrer" class="">#10493</a></li>
<li class="">Lint parity in Makefile by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10492" target="_blank" rel="noopener noreferrer" class="">#10492</a></li>
<li class="">Add connect_timeout/client_timeout params to Databricks sql_warehouse mode by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10495" target="_blank" rel="noopener noreferrer" class="">#10495</a></li>
<li class="">fix(tracing): suppress opentelemetry INFO logs at all verbosity levels by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10497" target="_blank" rel="noopener noreferrer" class="">#10497</a></li>
<li class="">DynamoDB DML by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10470" target="_blank" rel="noopener noreferrer" class="">#10470</a></li>
<li class="">feat(cayenne): native vector search via SIMD similarity UDFs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10456" target="_blank" rel="noopener noreferrer" class="">#10456</a></li>
<li class="">fix(cli): suppress banner for all JSON-producing cloud subcommands (fixes #10498) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10510" target="_blank" rel="noopener noreferrer" class="">#10510</a></li>
<li class="">fix(deps): bump openssl to 0.10.78 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10509" target="_blank" rel="noopener noreferrer" class="">#10509</a></li>
<li class="">fix(s3): quiet AWS SDK credential probe when no region is configured by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10506" target="_blank" rel="noopener noreferrer" class="">#10506</a></li>
<li class="">fix(cdc): emit ready signal on caught-up Kafka/Debezium streams (#5201) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10504" target="_blank" rel="noopener noreferrer" class="">#10504</a></li>
<li class=""><code>runtime-cluster</code> crate + Run partition discovery before forwarding refresh to executors by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10490" target="_blank" rel="noopener noreferrer" class="">#10490</a></li>
<li class="">Update lint-rust target to use <code>--keep-going</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10508" target="_blank" rel="noopener noreferrer" class="">#10508</a></li>
<li class="">Add TPC-H SF100 s3[parquet]-duckdb[file] benchmark spicepod by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10524" target="_blank" rel="noopener noreferrer" class="">#10524</a></li>
<li class="">Remove dev-profile install steps from pr.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10507" target="_blank" rel="noopener noreferrer" class="">#10507</a></li>
<li class="">fix: add missing NULL check on Timestamp path in append refresh by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10518" target="_blank" rel="noopener noreferrer" class="">#10518</a></li>
<li class="">fix: return error on Decimal128/256 overflow instead of silently dropping scale by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10519" target="_blank" rel="noopener noreferrer" class="">#10519</a></li>
<li class="">fix: delegate update and delete_from in IndexedTableProvider and EmbeddingTable by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10520" target="_blank" rel="noopener noreferrer" class="">#10520</a></li>
<li class="">feat(devx): make config errors, CLI, and REPL lead users to success by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10489" target="_blank" rel="noopener noreferrer" class="">#10489</a></li>
<li class="">fix(rerank): defer execution to RerankExec, enable filters and projection pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10514" target="_blank" rel="noopener noreferrer" class="">#10514</a></li>
<li class="">fix(llms): support Gemma models with missing attention_bias config field by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10523" target="_blank" rel="noopener noreferrer" class="">#10523</a></li>
<li class="">Fix vector_search silently ignoring named limit/column/include_score args by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10527" target="_blank" rel="noopener noreferrer" class="">#10527</a></li>
<li class="">fix: split unsupported filters locally in scan() for UseSource mode by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10528" target="_blank" rel="noopener noreferrer" class="">#10528</a></li>
<li class="">feat(secrets): add Azure Key Vault secret store by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10496" target="_blank" rel="noopener noreferrer" class="">#10496</a></li>
<li class="">Bump mistralrs by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10532" target="_blank" rel="noopener noreferrer" class="">#10532</a></li>
<li class="">Fix benchmark configurations and CI build issues by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10535" target="_blank" rel="noopener noreferrer" class="">#10535</a></li>
<li class="">Fix catalog query overrides for MySQL and MSSQL benchmarks by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10543" target="_blank" rel="noopener noreferrer" class="">#10543</a></li>
<li class="">For Cayenne, preserve matched columns for <code>MERGE ... ON &lt;cols&gt;</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10340" target="_blank" rel="noopener noreferrer" class="">#10340</a></li>
<li class="">build(deps): bump the aws-sdk group across 1 directory with 5 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10538" target="_blank" rel="noopener noreferrer" class="">#10538</a></li>
<li class="">docs: update AI agent instructions (git workflow + Rust 1.94) by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10544" target="_blank" rel="noopener noreferrer" class="">#10544</a></li>
<li class="">fix: Update tpch benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10529" target="_blank" rel="noopener noreferrer" class="">#10529</a></li>
<li class="">fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-duckdb[file].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10525" target="_blank" rel="noopener noreferrer" class="">#10525</a></li>
<li class="">Extract <code>runtime-datafusion</code> from <code>runtime</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10545" target="_blank" rel="noopener noreferrer" class="">#10545</a></li>
<li class="">Use generic DML extension planner for Cayenne by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10437" target="_blank" rel="noopener noreferrer" class="">#10437</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10552" target="_blank" rel="noopener noreferrer" class="">#10552</a></li>
<li class="">Fix security and correctness audit issues by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10526" target="_blank" rel="noopener noreferrer" class="">#10526</a></li>
<li class="">fix(MySQL): revert MySQL result column reorder to fix federated query failures by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10557" target="_blank" rel="noopener noreferrer" class="">#10557</a></li>
<li class="">Fix <code>protoc</code> installation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10566" target="_blank" rel="noopener noreferrer" class="">#10566</a></li>
<li class="">fix: Disable Ballista dynamic filters on HashJoinExec by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10548" target="_blank" rel="noopener noreferrer" class="">#10548</a></li>
<li class="">Support views on DDL catalogs by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10554" target="_blank" rel="noopener noreferrer" class="">#10554</a></li>
<li class="">Update datafusion by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10422" target="_blank" rel="noopener noreferrer" class="">#10422</a></li>
<li class="">Improve full-text search indexing performance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10464" target="_blank" rel="noopener noreferrer" class="">#10464</a></li>
<li class="">feat(mysql): add mysql_zero_date_behavior parameter (null|error) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10573" target="_blank" rel="noopener noreferrer" class="">#10573</a></li>
<li class="">fix(snowflake): declare <code>private_key</code> in connector PARAMETERS (fixes #10517) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10559" target="_blank" rel="noopener noreferrer" class="">#10559</a></li>
<li class="">Honour <code>CARGO_TARGET_DIR</code> in Makefiles by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10569" target="_blank" rel="noopener noreferrer" class="">#10569</a></li>
<li class="">Enable <code>cosine_distance</code> pushdown to DuckDB accelerator via <code>array_cosine_distance</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10564" target="_blank" rel="noopener noreferrer" class="">#10564</a></li>
<li class="">fix: Update test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10570" target="_blank" rel="noopener noreferrer" class="">#10570</a></li>
<li class="">fix: Update tpch benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10560" target="_blank" rel="noopener noreferrer" class="">#10560</a></li>
<li class="">feat(snapshots): make snapshots an optional feature by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10574" target="_blank" rel="noopener noreferrer" class="">#10574</a></li>
<li class="">Enforce read-only API key restrictions on Flight DoGet and async query paths by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10551" target="_blank" rel="noopener noreferrer" class="">#10551</a></li>
<li class="">Improved security posture on Github workflows by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10556" target="_blank" rel="noopener noreferrer" class="">#10556</a></li>
<li class="">fix: Update datafusion-table-providers to improve SqlTable filter pushdown by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10595" target="_blank" rel="noopener noreferrer" class="">#10595</a></li>
<li class="">feat(secrets): add HashiCorp Vault secret store by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10561" target="_blank" rel="noopener noreferrer" class="">#10561</a></li>
<li class="">fix: delegate update() in UpsertDedupTableProvider to inner provider by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10593" target="_blank" rel="noopener noreferrer" class="">#10593</a></li>
<li class="">Add DuckDB vector engine support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10562" target="_blank" rel="noopener noreferrer" class="">#10562</a></li>
<li class="">Sharepoint - add object-store listing connector with expanded auth and write support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10473" target="_blank" rel="noopener noreferrer" class="">#10473</a></li>
<li class="">fix: Install protoc from source by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10597" target="_blank" rel="noopener noreferrer" class="">#10597</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0-rc.3...v2.0.0-rc.4" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0-rc.3...v2.0.0-rc.4</a></p>]]></content:encoded>
            <category>release</category>
            <category>elasticsearch</category>
            <category>data-connector</category>
            <category>postgres</category>
            <category>search</category>
            <category>Embedding</category>
            <category>duckdb</category>
            <category>azure</category>
            <category>mcp</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-rc.3 (Apr 21, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-rc.3</link>
            <guid>https://spiceai.org/releases/v2.0-rc.3</guid>
            <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v2.0-rc.3! ⚡]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v2.0-rc.3! ⚡</p>
<p>v2.0.0-rc.3 is the third release candidate for advanced testing of v2.0, building on <a href="https://github.com/spiceai/spiceai/releases/tag/v2.0.0-rc.2" target="_blank" rel="noopener noreferrer" class="">v2.0.0-rc.2</a>.</p>
<p>Highlights in this release candidate include:</p>
<ul>
<li class=""><strong>HTTP Connector Enhancements</strong> with OAuth2 refresh-token authentication, query-parameter pagination, and map-to-array conversion for broader API compatibility</li>
<li class=""><strong>Databricks and Unity Catalog Reliability Improvements</strong> with resilience controls, improved UC-awareness, permission checks, and structured error reporting</li>
<li class=""><strong>Snowflake and ADBC Registration Performance Improvements</strong> with better observability during dataset registration</li>
<li class=""><strong>OpenTelemetry Exporter Improvements</strong> with exporter fixes and support for authenticated metrics export</li>
<li class=""><strong>Kafka, GitHub, and HTTP Connector Fixes</strong> including Kafka reliability improvements, GitHub GraphQL resilience updates, and HTTP JSON union/reload fixes</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200-rc3">What's New in v2.0.0-rc.3<a href="https://spiceai.org/releases/v2.0-rc.3#whats-new-in-v200-rc3" class="hash-link" aria-label="Direct link to What's New in v2.0.0-rc.3" title="Direct link to What's New in v2.0.0-rc.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="http-connector-enhancements">HTTP Connector Enhancements<a href="https://spiceai.org/releases/v2.0-rc.3#http-connector-enhancements" class="hash-link" aria-label="Direct link to HTTP Connector Enhancements" title="Direct link to HTTP Connector Enhancements" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-connectors/https" target="_blank" rel="noopener noreferrer" class="">HTTP connector</a> now supports more authentication and API response patterns, making it easier to integrate with modern REST APIs.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>OAuth2 Refresh-Token Authentication</strong>: Added support for <a href="https://spiceai.org/docs/next/components/data-connectors/https#using-oauth2-refresh-token-authentication" target="_blank" rel="noopener noreferrer" class="">OAuth2 refresh-token flows</a> for APIs that issue short-lived access tokens.</li>
<li class=""><strong>Query-Parameter Pagination</strong>: Added pagination support using query parameters for APIs that expose page or cursor controls in the URL.</li>
<li class=""><strong>Map-to-Array Conversion</strong>: Added response transformation support for APIs that return map-shaped payloads that need to be normalized into arrays.</li>
<li class=""><strong>Improved JSON Union Handling</strong>: Better handling for heterogeneous JSON payloads during ingestion.</li>
<li class=""><strong>More Reliable Reloads</strong>: Fixed runtime behavior for HTTP-backed datasets during spicepod reloads.</li>
</ul>
<p>Example configuration of an HTTP connector using the <a href="https://spiceai.org/docs/next/components/data-connectors/https#using-oauth2-refresh-token-authentication" target="_blank" rel="noopener noreferrer" class="">OAuth2 refresh token flow</a>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//api.example.com</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> secure_data</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">file_format</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> json</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">allowed_request_paths</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'/v1/**'</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">auth_token_url</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//auth.example.com/oauth/token</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">http_auth_refresh_token</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_refresh_token</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">http_auth_client_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_client_id</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">http_auth_client_secret</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">my_client_secret</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">auth_scopes</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'read:data offline_access'</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="databricks-and-unity-catalog-reliability-improvements">Databricks and Unity Catalog Reliability Improvements<a href="https://spiceai.org/releases/v2.0-rc.3#databricks-and-unity-catalog-reliability-improvements" class="hash-link" aria-label="Direct link to Databricks and Unity Catalog Reliability Improvements" title="Direct link to Databricks and Unity Catalog Reliability Improvements" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/databricks" target="_blank" rel="noopener noreferrer" class="">Databricks</a> and <a href="https://spiceai.org/docs/components/catalogs/unity-catalog" target="_blank" rel="noopener noreferrer" class="">Unity Catalog</a> integrations are now more resilient and provide clearer behavior in permission-constrained environments.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>Resilience Controls</strong>: Added controls to improve reliability when interacting with Databricks services.</li>
<li class=""><strong>Unity Catalog Awareness</strong>: Improved handling for Unity Catalog-specific behaviors and mixed deployment configurations.</li>
<li class=""><strong>Permission Prechecks</strong>: Databricks UC permission checks now distinguish explicit denials from ambiguous cases.</li>
<li class=""><strong>Structured Error Reporting</strong>: Advisory permission failures now surface with more actionable structured errors.</li>
<li class=""><strong>Classic SQL Warehouse Compatibility</strong>: Improved handling for foreign table scenarios with Classic SQL Warehouse combinations.</li>
<li class=""><strong>Task History Instrumentation</strong>: Added instrumentation to improve observability for Databricks-related operations.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="snowflake-and-adbc-improvements">Snowflake and ADBC Improvements<a href="https://spiceai.org/releases/v2.0-rc.3#snowflake-and-adbc-improvements" class="hash-link" aria-label="Direct link to Snowflake and ADBC Improvements" title="Direct link to Snowflake and ADBC Improvements" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a> and <a href="https://spiceai.org/docs/components/data-connectors/flightsql" target="_blank" rel="noopener noreferrer" class="">ADBC</a>-backed dataset registration is now faster and easier to observe.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>Faster Dataset Registration</strong>: Improved registration performance for Snowflake and ADBC datasets.</li>
<li class=""><strong>Better Observability</strong>: Added better instrumentation and visibility into registration workflows.</li>
<li class=""><strong>ADBC Alignment</strong>: Updated ADBC dependencies and integration points for improved compatibility.</li>
<li class=""><strong>Search Schema Fix</strong>: Fixed a full-text search schema mismatch issue with the ADBC connector.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="opentelemetry-and-observability-improvements">OpenTelemetry and Observability Improvements<a href="https://spiceai.org/releases/v2.0-rc.3#opentelemetry-and-observability-improvements" class="hash-link" aria-label="Direct link to OpenTelemetry and Observability Improvements" title="Direct link to OpenTelemetry and Observability Improvements" translate="no">​</a></h3>
<p>Spice improves telemetry export reliability and authenticated metrics delivery for the <a href="https://spiceai.org/docs/features/observability" target="_blank" rel="noopener noreferrer" class="">OpenTelemetry</a> integration.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>OTEL Exporter Fixes</strong>: Fixed issues in the OpenTelemetry exporter.</li>
<li class=""><strong>Authenticated Metrics Export</strong>: Added support for authorization headers in the OTEL metrics exporter.</li>
<li class=""><strong>Reduced Startup Noise</strong>: Suppressed unnecessary AWS SDK noise and improved OTEL-related initialization behavior.</li>
<li class=""><strong>Connector Initialization Reliability</strong>: Fixed issues that could block connector initialization in telemetry-related code paths.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-and-toolchain-updates">Dependency and Toolchain Updates<a href="https://spiceai.org/releases/v2.0-rc.3#dependency-and-toolchain-updates" class="hash-link" aria-label="Direct link to Dependency and Toolchain Updates" title="Direct link to Dependency and Toolchain Updates" translate="no">​</a></h3>
<table><thead><tr><th>Dependency / Component</th><th>Version / Update</th></tr></thead><tbody><tr><td><strong>Rust toolchain</strong></td><td>v1.94.1 (from v1.93.1)</td></tr><tr><td><strong>DataFusion</strong></td><td>v52.5.0-rc1</td></tr><tr><td><strong>mistral.rs / candle</strong></td><td><code>mistral.rs</code> v0.8.x, <code>candle</code> v0.10.1</td></tr><tr><td><strong>ADBC Core</strong></td><td>v0.23</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-improvements">Other Improvements<a href="https://spiceai.org/releases/v2.0-rc.3#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>Improved Query Pushdown</strong>: Expanded sort and limit pushdown, including improved pushdown behavior for <a href="https://spiceai.org/docs/components/data-connectors/oracle" target="_blank" rel="noopener noreferrer" class="">Oracle</a> and <a href="https://spiceai.org/docs/components/data-connectors/mssql" target="_blank" rel="noopener noreferrer" class="">MSSQL</a> connectors.</li>
<li class=""><strong>Partitioned Query Planning Improvements</strong>: Improved <code>PartitionedTableScanRewrite</code> handling for <code>ORDER BY</code>, partition expressions, and fully qualified table references, while preventing incorrect bucketing partition pushdown to executors.</li>
<li class=""><strong>MongoDB SRV Support</strong>: Upgraded <code>datafusion-table-providers</code> with <a href="https://spiceai.org/docs/components/data-connectors/mongodb" target="_blank" rel="noopener noreferrer" class="">MongoDB</a> SRV support.</li>
<li class=""><strong>Tantivy Logging</strong>: <a href="https://spiceai.org/docs/features/search" target="_blank" rel="noopener noreferrer" class="">Search</a> logging now defaults to <code>warn</code> unless very verbose logging is enabled.</li>
<li class=""><strong>Kafka Connector Fixes</strong>: Improved reliability for the <a href="https://spiceai.org/docs/components/data-connectors/kafka" target="_blank" rel="noopener noreferrer" class="">Kafka</a> connector behavior.</li>
<li class=""><strong>GitHub Connector Resilience</strong>: Improved commit fetching for dynamic and slash refs, and reduced GraphQL page sizes on gateway errors for the <a href="https://spiceai.org/docs/components/data-connectors/github" target="_blank" rel="noopener noreferrer" class="">GitHub</a> connector.</li>
<li class=""><strong>GitHub API Efficiency</strong>: Lowered default comment fetch sizes to reduce pressure on <a href="https://spiceai.org/docs/components/data-connectors/github" target="_blank" rel="noopener noreferrer" class="">GitHub</a> GraphQL APIs.</li>
<li class=""><strong>Embedding Validation</strong>: Added validation for <a href="https://spiceai.org/docs/components/embeddings" target="_blank" rel="noopener noreferrer" class="">embedding</a> <code>row_id</code> columns during dataset initialization.</li>
<li class=""><strong>View Cache Invalidation</strong>: Cached plans are now cleared when <a href="https://spiceai.org/docs/reference/spicepod/views" target="_blank" rel="noopener noreferrer" class="">views</a> are updated.</li>
<li class=""><strong>Refresh SQL Dedup Fix</strong>: Fixed append <a href="https://spiceai.org/docs/features/data-acceleration/data-refresh" target="_blank" rel="noopener noreferrer" class="">refresh</a> deduplication when <code>refresh_sql</code> selects a subset of columns.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-rc.3#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-rc.3#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0-rc.3#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-rc.3#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0-rc.3, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade v2.0.0-rc.3</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0-rc.3</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0-rc.3</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0-rc.3</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-rc.3#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-rc.3#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix: Full Text Search schema mismatch with ADBC connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10235" target="_blank" rel="noopener noreferrer" class="">#10235</a></li>
<li class="">docs: Update v2.0.0-rc.2 release notes with latest changes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10238" target="_blank" rel="noopener noreferrer" class="">#10238</a></li>
<li class="">Fix append refresh dedup failure when refresh_sql selects column subset by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10225" target="_blank" rel="noopener noreferrer" class="">#10225</a></li>
<li class="">Revert "Properly mark dataset as Ready on Scheduler (#10215)" by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10242" target="_blank" rel="noopener noreferrer" class="">#10242</a></li>
<li class="">Fix failing merge conflicts for benchmarks by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10247" target="_blank" rel="noopener noreferrer" class="">#10247</a></li>
<li class="">fix(github): fetch commits for dynamic and slash refs by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10233" target="_blank" rel="noopener noreferrer" class="">#10233</a></li>
<li class="">Upgrade DataFusion to v52.5.0-rc1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10249" target="_blank" rel="noopener noreferrer" class="">#10249</a></li>
<li class="">Merge develop to trunk (2026-04-09) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10248" target="_blank" rel="noopener noreferrer" class="">#10248</a></li>
<li class="">fix: Validate embedding row_id columns during dataset init (fixes #8226) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10208" target="_blank" rel="noopener noreferrer" class="">#10208</a></li>
<li class="">fix: Update tpch benchmark snapshots for federated/glue[csv].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10244" target="_blank" rel="noopener noreferrer" class="">#10244</a></li>
<li class="">feat(databricks): add resilience controls, UC awareness, and task history instrumentation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10246" target="_blank" rel="noopener noreferrer" class="">#10246</a></li>
<li class="">fix: Make PartitionManager resilient to bare vs fully qualified table references by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10257" target="_blank" rel="noopener noreferrer" class="">#10257</a></li>
<li class="">fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-cayenne[file].yaml by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10256" target="_blank" rel="noopener noreferrer" class="">#10256</a></li>
<li class="">Merge develop to trunk (2026-04-10) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10251" target="_blank" rel="noopener noreferrer" class="">#10251</a></li>
<li class="">Improve Snowflake/ADBC dataset registration performance and observability by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10266" target="_blank" rel="noopener noreferrer" class="">#10266</a></li>
<li class="">Fixes for kafka connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10263" target="_blank" rel="noopener noreferrer" class="">#10263</a></li>
<li class="">fix(runtime): gate otel code tags, suppress aws sdk noise, and unblock connector init by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10260" target="_blank" rel="noopener noreferrer" class="">#10260</a></li>
<li class="">fix(runtime): avoid regionless AWS SDK loads by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10271" target="_blank" rel="noopener noreferrer" class="">#10271</a></li>
<li class="">Add versioned release install workflow coverage by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10276" target="_blank" rel="noopener noreferrer" class="">#10276</a></li>
<li class="">fix(runtime): handle HTTP JSON unions and spicepod reloads by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10277" target="_blank" rel="noopener noreferrer" class="">#10277</a></li>
<li class="">Databricks UC permission prechecks: explicit denial as permanent error, ambiguous cases advisory by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10274" target="_blank" rel="noopener noreferrer" class="">#10274</a></li>
<li class="">Revert component status changes re-introduced by develop merge (#10248) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10293" target="_blank" rel="noopener noreferrer" class="">#10293</a></li>
<li class="">Fix broken CI workflows by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10294" target="_blank" rel="noopener noreferrer" class="">#10294</a></li>
<li class="">Group dependabot updates by ecosystem by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10296" target="_blank" rel="noopener noreferrer" class="">#10296</a></li>
<li class="">fix(tests): Replace flaky S3 Vectors snapshot tests with structural validation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10301" target="_blank" rel="noopener noreferrer" class="">#10301</a></li>
<li class="">Update test_github_workflows snapshot by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10304" target="_blank" rel="noopener noreferrer" class="">#10304</a></li>
<li class="">fix(ci): fix Bedrock runner mismatch and snapshot auto-merge failure by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10306" target="_blank" rel="noopener noreferrer" class="">#10306</a></li>
<li class="">feat(http): Add map-to-array conversion and query-parameter pagination by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10295" target="_blank" rel="noopener noreferrer" class="">#10295</a></li>
<li class="">New crate: <code>datafusion-ddl</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10205" target="_blank" rel="noopener noreferrer" class="">#10205</a></li>
<li class="">Make Databricks UC permission checks advisory with structured error reporting by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10283" target="_blank" rel="noopener noreferrer" class="">#10283</a></li>
<li class="">build(deps): bump the github-actions-dependencies group with 4 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10298" target="_blank" rel="noopener noreferrer" class="">#10298</a></li>
<li class="">fix: Clear cached plans on view updates by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10312" target="_blank" rel="noopener noreferrer" class="">#10312</a></li>
<li class="">build(deps): bump the aws-sdk group with 7 updates by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10299" target="_blank" rel="noopener noreferrer" class="">#10299</a></li>
<li class="">Code out of runtime. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10178" target="_blank" rel="noopener noreferrer" class="">#10178</a></li>
<li class="">fix: Respect function registry denies for accelerated table filter pushdown by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10311" target="_blank" rel="noopener noreferrer" class="">#10311</a></li>
<li class="">fix: Don't block heartbeat when all slots acquired by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10322" target="_blank" rel="noopener noreferrer" class="">#10322</a></li>
<li class="">fix: strip only outer parens in <code>get_table_partition_expr_from_ctx</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10323" target="_blank" rel="noopener noreferrer" class="">#10323</a></li>
<li class="">Upgrade datafusion-table-providers with MongoDB SRV support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10317" target="_blank" rel="noopener noreferrer" class="">#10317</a></li>
<li class="">fix: Avoid pushing down bucketing partition expressions into executors by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10324" target="_blank" rel="noopener noreferrer" class="">#10324</a></li>
<li class="">Upgrade datafusion-table-providers to d1b911a5 and bump adbc to 0.23 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10329" target="_blank" rel="noopener noreferrer" class="">#10329</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/10308" target="_blank" rel="noopener noreferrer" class="">#10308</a></li>
<li class="">Handle foreign table + Classic sql warehouse combination gracefully by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10318" target="_blank" rel="noopener noreferrer" class="">#10318</a></li>
<li class="">New crate <code>datafusion-flightsql</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10201" target="_blank" rel="noopener noreferrer" class="">#10201</a></li>
<li class="">Set <code>tantivy=warn</code> unless very verbose logging by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10338" target="_blank" rel="noopener noreferrer" class="">#10338</a></li>
<li class="">Remove image registry and image name options from spidapter by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10241" target="_blank" rel="noopener noreferrer" class="">#10241</a></li>
<li class="">build(deps): bump sysinfo from 0.37.2 to 0.38.4 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10291" target="_blank" rel="noopener noreferrer" class="">#10291</a></li>
<li class="">build(deps): bump futures from 0.3.31 to 0.3.32 by <a href="https://github.com/app/dependabot" target="_blank" rel="noopener noreferrer" class="">@app/dependabot</a> in <a href="https://github.com/spiceai/spiceai/pull/10289" target="_blank" rel="noopener noreferrer" class="">#10289</a></li>
<li class="">New crate 'datafusion-dml' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10334" target="_blank" rel="noopener noreferrer" class="">#10334</a></li>
<li class="">Jeadie/26 04 16/spice sql by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10343" target="_blank" rel="noopener noreferrer" class="">#10343</a></li>
<li class="">Add Teraswitch/Pittsburgh apt mirrors + retry config for CI runners by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10349" target="_blank" rel="noopener noreferrer" class="">#10349</a></li>
<li class="">Implement sort pushdown and fix pushdown gaps across providers by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10337" target="_blank" rel="noopener noreferrer" class="">#10337</a></li>
<li class="">Merge develop to trunk (2026-04-16) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10345" target="_blank" rel="noopener noreferrer" class="">#10345</a></li>
<li class="">Update candle and mistral.rs lock-step pins by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10278" target="_blank" rel="noopener noreferrer" class="">#10278</a></li>
<li class="">docs: fix status badges in README by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10350" target="_blank" rel="noopener noreferrer" class="">#10350</a></li>
<li class="">Migrate secrets to vars by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10354" target="_blank" rel="noopener noreferrer" class="">#10354</a></li>
<li class="">Add limit pushdown and improve sort pushdown for Oracle and MSSQL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10351" target="_blank" rel="noopener noreferrer" class="">#10351</a></li>
<li class="">Fix ubuntu mirror configuration by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10359" target="_blank" rel="noopener noreferrer" class="">#10359</a></li>
<li class="">fix: Increase throughput test default ready_wait from 30s to 300s (fixes #8207) by <a href="https://github.com/claudespice" target="_blank" rel="noopener noreferrer" class="">@claudespice</a> in <a href="https://github.com/spiceai/spiceai/pull/10344" target="_blank" rel="noopener noreferrer" class="">#10344</a></li>
<li class="">Add auth headers support to OTEL metrics exporter by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10347" target="_blank" rel="noopener noreferrer" class="">#10347</a></li>
<li class="">fix(github): shrink GraphQL page size on gateway errors; lower comment defaults by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10355" target="_blank" rel="noopener noreferrer" class="">#10355</a></li>
<li class="">Relax apt mirror substitution failure to warning in CI action by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/10361" target="_blank" rel="noopener noreferrer" class="">#10361</a></li>
<li class="">feat(http): Add OAuth2 refresh-token auth to HTTP connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10348" target="_blank" rel="noopener noreferrer" class="">#10348</a></li>
<li class="">Upgrade Rust toolchain to 1.94.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10353" target="_blank" rel="noopener noreferrer" class="">#10353</a></li>
<li class="">Handle order by and sort in PartitionedTableScanRewrite by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9656" target="_blank" rel="noopener noreferrer" class="">#9656</a></li>
<li class="">Fix OTEL Exporter by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10363" target="_blank" rel="noopener noreferrer" class="">#10363</a></li>
<li class="">Pin spiceai candle / TEI forks to merged revs; drop local [patch] overrides by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10362" target="_blank" rel="noopener noreferrer" class="">#10362</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0-rc.2...v2.0.0-rc.3" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0-rc.2...v2.0.0-rc.3</a></p>]]></content:encoded>
            <category>release</category>
            <category>data-connector</category>
            <category>databricks</category>
            <category>snowflake</category>
            <category>adbc</category>
            <category>kafka</category>
            <category>opentelemetry</category>
            <category>Observability</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-rc.2 (Apr 10, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-rc.2</link>
            <guid>https://spiceai.org/releases/v2.0-rc.2</guid>
            <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v2.0-rc.2! 🔥]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v2.0-rc.2! 🔥</p>
<p>v2.0.0-rc.2 is the second release candidate for advanced testing of v2.0, building on <a href="https://github.com/spiceai/spiceai/releases/tag/v2.0.0-rc.1" target="_blank" rel="noopener noreferrer" class="">v2.0.0-rc.1</a>.</p>
<p>Highlights in this release candidate include:</p>
<ul>
<li class=""><strong>Distributed Spice Cayenne Query and Write Improvements</strong> with data-local query routing and partition-aware write-through</li>
<li class=""><strong>DataFusion v52.4.0 Upgrade</strong> with aligned <code>arrow-rs</code>, <code>datafusion-federation</code>, and <code>datafusion-table-providers</code></li>
<li class=""><strong>MERGE INTO for Spice Cayenne</strong> catalog tables with distributed support across executors</li>
<li class=""><strong><code>PARTITION BY</code> Support for Cayenne</strong> enabling SQL-defined partitioning in <code>CREATE TABLE</code> statements</li>
<li class=""><strong>ADBC Data Connector &amp; Catalog</strong> with full query federation, BigQuery support, and schema/table discovery</li>
<li class=""><strong>Databricks Lakehouse Federation Improvements</strong> with improved reliability, resilience, DESCRIBE TABLE fallback, and source-native type parsing</li>
<li class=""><strong>Delta Lake Column Mapping</strong> supporting Name and Id mapping modes</li>
<li class=""><strong>HTTP Pagination</strong> support for paginated API endpoints in the HTTP data connector</li>
<li class=""><strong>New Catalog Connectors</strong> for PostgreSQL, MySQL, MSSQL, and Snowflake</li>
<li class=""><strong>JSON Ingestion Improvements</strong> with single-object support, <code>soda</code> (Socrata Open Data) format support, <code>json_pointer</code> extraction, and auto-detection</li>
<li class=""><strong>Per-Model Rate-Limited AI UDF Execution</strong> for controlling concurrent AI function invocations</li>
<li class="">Dependency upgrades including <strong>Turso v0.5.3</strong>, <strong>iceberg-rust v0.9</strong>, and <strong>Vortex</strong> improvements</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200-rc2">What's New in v2.0.0-rc.2<a href="https://spiceai.org/releases/v2.0-rc.2#whats-new-in-v200-rc2" class="hash-link" aria-label="Direct link to What's New in v2.0.0-rc.2" title="Direct link to What's New in v2.0.0-rc.2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="distributed-cayenne-query-and-write-improvements">Distributed Cayenne Query and Write Improvements<a href="https://spiceai.org/releases/v2.0-rc.2#distributed-cayenne-query-and-write-improvements" class="hash-link" aria-label="Direct link to Distributed Cayenne Query and Write Improvements" title="Direct link to Distributed Cayenne Query and Write Improvements" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/features/distributed-query" target="_blank" rel="noopener noreferrer" class="">Distributed query</a> for <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a>-backed tables now has better partition awareness for both reads and writes.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>Data-Local Query Routing</strong>: Cayenne catalog queries can now be routed to executors that hold the relevant partitions, improving distributed query efficiency.</li>
<li class=""><strong>Partition-Aware Write Through</strong>: Scheduler-side Flight <code>DoPut</code> ingestion now splits partitioned Cayenne writes and forwards them to the responsible executors instead of routing through a single raw-forward path.</li>
<li class=""><strong>Dynamic Partition Assignment</strong>: Newly observed partitions can be added and assigned atomically as data arrives, with persisted partition metadata for future routing.</li>
<li class=""><strong>Better Cluster Coordination</strong>: Partition management is now separated for accelerated and federated tables, improving routing behavior for distributed Cayenne catalog workloads.</li>
<li class=""><strong>Distributed UPDATE/DELETE DML</strong>: UPDATE and DELETE statements for Cayenne catalog tables are now forwarded to all executors in distributed mode, with all executors required to succeed.</li>
<li class=""><strong>Distributed <code>runtime.task_history</code></strong>: Task history is now replicated across the distributed cluster for observability.</li>
<li class=""><strong>RefreshDataset Control Stream</strong>: Dataset refresh operations are now distributed via the control stream to executors.</li>
<li class=""><strong>Executor DDL Sync</strong>: When an executor connects, it receives DDL for all existing tables, ensuring late-joining executors have full table state.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="merge-into-for-spice-cayenne">MERGE INTO for Spice Cayenne<a href="https://spiceai.org/releases/v2.0-rc.2#merge-into-for-spice-cayenne" class="hash-link" aria-label="Direct link to MERGE INTO for Spice Cayenne" title="Direct link to MERGE INTO for Spice Cayenne" translate="no">​</a></h3>
<p>Spice now supports <code>MERGE INTO</code> statements for <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> catalog tables, enabling upsert-style data operations with full distributed support.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>MERGE INTO Support</strong>: Execute <code>MERGE INTO</code> statements against Cayenne catalog tables for combined insert/update/delete operations.</li>
<li class=""><strong>Distributed MERGE</strong>: MERGE operations are automatically distributed across executors in cluster mode.</li>
<li class=""><strong>Data Safety</strong>: Duplicate source keys are detected and prevented to avoid data loss during MERGE operations.</li>
<li class=""><strong>Chunked Delete Filters</strong>: Large MERGE delete filter lists are chunked to prevent stack overflow with Vortex IN-list expressions.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="partition-by-support-for-cayenne"><code>PARTITION BY</code> Support for Cayenne<a href="https://spiceai.org/releases/v2.0-rc.2#partition-by-support-for-cayenne" class="hash-link" aria-label="Direct link to partition-by-support-for-cayenne" title="Direct link to partition-by-support-for-cayenne" translate="no">​</a></h3>
<p><strong>SQL Partition Management</strong>: Spice now supports <code>PARTITION BY</code> for <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a>-backed <code>CREATE TABLE</code> statements, enabling partition definitions to be expressed directly in SQL and persisted in the Cayenne catalog.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>SQL Partition Definition</strong>: Define Cayenne table partitioning directly in SQL using <code>CREATE TABLE ... PARTITION BY (...)</code>.</li>
<li class=""><strong>Partition Validation</strong>: Partition expressions are parsed and validated during DDL analysis before table creation.</li>
<li class=""><strong>Persisted Partition Metadata</strong>: Partition metadata is stored in the Cayenne catalog and can be reloaded by the runtime after restart.</li>
<li class=""><strong>Distributed DDL Support</strong>: Partition metadata is forwarded when <code>CREATE TABLE</code> is distributed to executors in cluster mode.</li>
<li class=""><strong>Improved Type Support</strong>: Partition utilities now support newer string scalar variants such as <code>Utf8View</code>.</li>
</ul>
<p>Example:</p>
<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">CREATE</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">TABLE</span><span class="token plain"> events </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">id </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">INT</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> region </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">TEXT</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> ts </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">TIMESTAMP</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">PARTITION</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">BY</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">region</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="catalog-connector-enhancements">Catalog Connector Enhancements<a href="https://spiceai.org/releases/v2.0-rc.2#catalog-connector-enhancements" class="hash-link" aria-label="Direct link to Catalog Connector Enhancements" title="Direct link to Catalog Connector Enhancements" translate="no">​</a></h3>
<p>Spice now includes additional catalog connectors for major database systems, improving schema discovery and federation workflows across external data systems.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>New Catalog Connectors</strong>: Added catalog connectors for <a href="https://spiceai.org/docs/next/components/catalogs/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a>, <a href="https://spiceai.org/docs/next/components/catalogs/mysql" target="_blank" rel="noopener noreferrer" class="">MySQL</a>, <a href="https://spiceai.org/docs/next/components/catalogs/mssql" target="_blank" rel="noopener noreferrer" class="">MSSQL</a>, and <a href="https://spiceai.org/docs/next/components/catalogs/snowflake" target="_blank" rel="noopener noreferrer" class="">Snowflake</a>.</li>
<li class=""><strong>Schema and Table Discovery</strong>: Connectors use native metadata catalogs such as <code>information_schema</code> / <code>INFORMATION_SCHEMA</code> to discover schemas and tables.</li>
<li class=""><strong>Improved Federation Workflows</strong>: These connectors make it easier to expose external database metadata through Spice for cross-system <a href="https://spiceai.org/docs/features/query-federation" target="_blank" rel="noopener noreferrer" class="">federation</a> scenarios.</li>
<li class=""><strong>PostgreSQL Partitioned Tables</strong>: Fixed schema discovery for PostgreSQL partitioned tables.</li>
</ul>
<p>Example PostgreSQL catalog configuration:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">catalogs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> pg</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> pg</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">include</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'public.*'</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_host</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_port</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">5432</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_user</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_pass</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain">secrets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">POSTGRES_PASSWORD</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_db</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> my_database</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">pg_sslmode</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> disable</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="json-ingestion-improvements">JSON Ingestion Improvements<a href="https://spiceai.org/releases/v2.0-rc.2#json-ingestion-improvements" class="hash-link" aria-label="Direct link to JSON Ingestion Improvements" title="Direct link to JSON Ingestion Improvements" translate="no">​</a></h3>
<p>JSON ingestion is now more flexible and robust.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>More JSON Formats</strong>: Added support for single-object JSON documents, auto-detected JSON formats, and Socrata SODA responses.</li>
<li class=""><strong><code>json_pointer</code> Extraction</strong>: Extract nested payloads before schema inference and reading using RFC 6901 JSON Pointer syntax.</li>
<li class=""><strong>Better Auto-Detection</strong>: JSON format detection now handles arrays, objects, JSONL, and BOM-prefixed input more reliably, including single multi-line objects.</li>
<li class=""><strong>SODA Support</strong>: Added schema extraction and data conversion for Socrata Open Data API responses.</li>
<li class=""><strong>Broader Compatibility</strong>: Improved handling for BOM-prefixed files, CRLF-delimited JSONL, nested payloads, mixed structures, and wrapped documents.</li>
</ul>
<p>Example using <code>json_pointer</code> to extract nested data from an API response:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//api.example.com/v1/data</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> users</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">json_pointer</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> /data/users</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="datafusion-v5240-upgrade">DataFusion v52.4.0 Upgrade<a href="https://spiceai.org/releases/v2.0-rc.2#datafusion-v5240-upgrade" class="hash-link" aria-label="Direct link to DataFusion v52.4.0 Upgrade" title="Direct link to DataFusion v52.4.0 Upgrade" translate="no">​</a></h3>
<p><a href="https://datafusion.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache DataFusion</a> has been upgraded from v52.2.0 to v52.4.0, with aligned updates across <code>arrow-rs</code>, <code>datafusion-federation</code>, and <code>datafusion-table-providers</code>.</p>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>DataFusion v52.4.0</strong>: Brings the latest fixes and compatibility improvements across query planning and execution.</li>
<li class=""><strong>Strict Overflow Handling</strong>: <code>try_cast_to</code> now uses strict cast to return errors on overflow instead of silently producing NULL values.</li>
<li class=""><strong>Federation Fix</strong>: Fixed SQL unparsing for Inexact filter pushdown with aliases.</li>
<li class=""><strong>Partial Aggregation Optimization</strong>: Improved partial aggregation performance for <code>FlightSQLExec</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dependency-upgrades">Dependency Upgrades<a href="https://spiceai.org/releases/v2.0-rc.2#dependency-upgrades" class="hash-link" aria-label="Direct link to Dependency Upgrades" title="Direct link to Dependency Upgrades" translate="no">​</a></h3>
<table><thead><tr><th>Dependency</th><th>Version / Update</th></tr></thead><tbody><tr><td><strong>Turso (libsql)</strong></td><td>v0.5.3 (from v0.4.4)</td></tr><tr><td><strong>iceberg-rust</strong></td><td>v0.9</td></tr><tr><td><strong>Vortex</strong></td><td>Map type support, stack-safe IN-lists</td></tr><tr><td><strong>arrow-rs</strong></td><td>Arrow v57.2.0</td></tr><tr><td><strong>datafusion-federation</strong></td><td>Updated for DataFusion v52.4.0 alignment</td></tr><tr><td><strong>datafusion-table-providers</strong></td><td>Updated for DataFusion v52.4.0 alignment</td></tr><tr><td><strong>datafusion-ballista</strong></td><td>Bumped to fix BatchCoalescer schema mismatch panic</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-improvements">Other Improvements<a href="https://spiceai.org/releases/v2.0-rc.2#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h3>
<ul>
<li class="">
<p><strong>Cayenne released as RC</strong>: <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> data accelerator is now promoted to release candidate status.</p>
</li>
<li class="">
<p><strong>File Update Acceleration Mode</strong>: Added <code>mode: file_update</code> acceleration mode for file-based data refresh.</p>
</li>
<li class="">
<p><strong><code>spice completions</code> Command</strong>: New CLI command for generating shell completion scripts, with auto-detection of shell directory.</p>
</li>
<li class="">
<p><strong><code>--endpoint</code> Flag</strong>: Added <code>--endpoint</code> flag to <code>spice run</code> with scheme-based routing for custom endpoints.</p>
</li>
<li class="">
<p><strong>mTLS Client Auth</strong>: Added mTLS client authentication support to the <code>spice sql</code> REPL.</p>
</li>
<li class="">
<p><strong>DynamoDB DML</strong>: Implemented DML (INSERT, UPDATE, DELETE) support for the <a href="https://spiceai.org/docs/components/data-connectors/dynamodb" target="_blank" rel="noopener noreferrer" class="">DynamoDB</a> table provider.</p>
</li>
<li class="">
<p><strong>Caching Retention</strong>: Added retention policies for cached query results.</p>
</li>
<li class="">
<p><strong>GraphQL Custom Auth Headers</strong>: Added custom authorization header support for the <a href="https://spiceai.org/docs/components/data-connectors/graphql" target="_blank" rel="noopener noreferrer" class="">GraphQL</a> connector.</p>
</li>
<li class="">
<p><strong>ClickHouse Date32 Support</strong>: Added <code>Date32</code> type support for the <a href="https://spiceai.org/docs/components/data-connectors/clickhouse" target="_blank" rel="noopener noreferrer" class="">ClickHouse</a> connector.</p>
</li>
<li class="">
<p><strong>AWS IAM Role Source</strong>: Added <code>iam_role_source</code> parameter for fine-grained AWS credential configuration.</p>
</li>
<li class="">
<p><strong>S3 Metadata Columns</strong>: Metadata columns renamed to <code>_location</code>, <code>_last_modified</code>, <code>_size</code> for consistency, with more robust handling in projected queries.</p>
</li>
<li class="">
<p><strong>S3 URL Style</strong>: Added <code>s3_url_style</code> parameter for <a href="https://spiceai.org/docs/components/data-connectors/s3" target="_blank" rel="noopener noreferrer" class="">S3 connector</a> URL addressing (path-style vs virtual-hosted). Useful for S3-compatible stores like MinIO:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">params</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">s3_endpoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">//minio.local</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">9000</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">s3_url_style</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> path</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>S3 Parquet Performance</strong>: Improved S3 parquet read performance.</p>
</li>
<li class="">
<p><strong>HTTP Caching</strong>: Transient <a href="https://spiceai.org/docs/components/data-connectors/http" target="_blank" rel="noopener noreferrer" class="">HTTP</a> error responses such as <code>429</code> and <code>5xx</code> are no longer cached, preventing stale error payloads from being served from cache.</p>
</li>
<li class="">
<p><strong>HTTP Connector Metadata</strong>: Added <code>response_headers</code> as structured map data for <a href="https://spiceai.org/docs/components/data-connectors/http" target="_blank" rel="noopener noreferrer" class="">HTTP</a> datasets.</p>
</li>
<li class="">
<p><strong>Views <code>on_zero_results</code></strong>: Accelerated views now support <code>on_zero_results: use_source</code> to fall back to the source when no results are found:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">views</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sales_summary</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">sql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      SELECT region, SUM(amount) as total</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      FROM sales</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      GROUP BY region</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">on_zero_results</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> use_source</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>Flight <code>DoPut</code> Ingestion Metrics</strong>: Added <code>rows_written</code> and <code>bytes_written</code> metrics for <a href="https://spiceai.org/docs/features/flight-sql" target="_blank" rel="noopener noreferrer" class="">Flight <code>DoPut</code></a> / ADBC ETL ingestion.</p>
</li>
<li class="">
<p><strong>EXPLAIN ANALYZE Metrics</strong>: Added metrics for EXPLAIN ANALYZE in FlightSQLExec.</p>
</li>
<li class="">
<p><strong>Scheduler Executor Metrics</strong>: Added <code>scheduler_active_executors_count</code> metric for monitoring active executors.</p>
</li>
<li class="">
<p><strong>Query Memory Limit</strong>: Updated default query memory limit from 70% to 90%, with <code>GreedyMemoryPool</code> for improved memory management.</p>
</li>
<li class="">
<p><strong>MetastoreTransaction Support</strong>: Added transaction support to prevent concurrent metastore transaction conflicts.</p>
</li>
<li class="">
<p><strong>Iceberg REST Catalog</strong>: Coerce unsupported Arrow types to Iceberg v2 equivalents in the REST catalog API.</p>
</li>
<li class="">
<p><strong>CDC Cache Invalidation</strong>: Improved cache invalidation for CDC-backed datasets.</p>
</li>
<li class="">
<p><strong>Spice.ai Connector Alignment</strong>: Parameter names aligned across catalog and data connectors for Spice.ai Cloud.</p>
</li>
<li class="">
<p><strong>Cayenne File Size</strong>: Cayenne now correctly respects the configured target file size (defaults to 128MB).</p>
</li>
<li class="">
<p><strong>Cayenne Primary Keys</strong>: Properly set <code>primary_keys</code>/<code>on_conflict</code> for Cayenne tables.</p>
</li>
<li class="">
<p><strong>Turso Metastore Performance</strong>: Cached metastore connections and prepared statements for improved <a href="https://spiceai.org/docs/components/data-connectors/turso" target="_blank" rel="noopener noreferrer" class="">Turso</a> and <a href="https://spiceai.org/docs/components/data-accelerators/sqlite" target="_blank" rel="noopener noreferrer" class="">SQLite</a> metastore performance.</p>
</li>
<li class="">
<p><strong>Turso SQL Robustness</strong>: More robust SQL unparsing and date comparison handling for Turso.</p>
</li>
<li class="">
<p><strong>Dictionary Type Normalization</strong>: Normalize Arrow Dictionary types for DuckDB and SQLite acceleration.</p>
</li>
<li class="">
<p><strong>GitHub Connector Resilience</strong>: Improved GraphQL client resilience, performance, and ref filter handling.</p>
</li>
<li class="">
<p><strong>ODBC Fix</strong>: Fixed ODBC queries silently returning 0 rows on query failure.</p>
</li>
<li class="">
<p><strong>Anthropic Fixes</strong>: Fixed compatibility issues with Anthropic model provider.</p>
</li>
<li class="">
<p><strong>v1/responses API Fix</strong>: The <code>/v1/responses</code> API now correctly preserves client instructions when <code>system_prompt</code> is set.</p>
</li>
<li class="">
<p><strong>Shared Acceleration Snapshots</strong>: Show an error when snapshots are enabled on a shared acceleration file.</p>
</li>
<li class="">
<p><strong>Distributed Mode Error Handling</strong>: Improved error handling for distributed mode and <code>state_location</code> configuration.</p>
</li>
<li class="">
<p><strong>Helm Chart</strong>: Added support for ServiceAccount annotations and AWS IRSA example.</p>
</li>
<li class="">
<p><strong>Perplexity Removed</strong>: Removed Perplexity model provider support.</p>
</li>
<li class="">
<p><strong>Rust v1.93.1</strong>: Upgraded Rust toolchain to v1.93.1.</p>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-rc.2#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/cluster2600" target="_blank" rel="noopener noreferrer" class="">@cluster2600</a></li>
<li class=""><a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-rc.2#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<ul>
<li class=""><strong>S3 metadata columns renamed</strong>: S3 metadata columns renamed from <code>location</code>, <code>last_modified</code>, <code>size</code> to <code>_location</code>, <code>_last_modified</code>, <code>_size</code>.</li>
<li class=""><strong><code>v1/evals</code> API removed</strong>: The <code>/v1/evals</code> endpoint has been removed.</li>
<li class=""><strong>Perplexity removed</strong>: Perplexity model provider support has been removed.</li>
<li class=""><strong>Default query memory limit changed</strong>: Default query memory limit increased from 70% to 90%.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-rc.2#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0-rc.2, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade v2.0.0-rc.2</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0-rc.2</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0-rc.2</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0-rc.2</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-rc.2#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-rc.2#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">ci: fix E2E CLI upgrade test to use latest release for spiced download by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9613" target="_blank" rel="noopener noreferrer" class="">#9613</a></li>
<li class="">fix(DF): Lazily initialize BatchCoalescer in RepartitionExec to avoid schema type mismatch by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9623" target="_blank" rel="noopener noreferrer" class="">#9623</a></li>
<li class="">feat: Implement catalog connectors for various databases by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9509" target="_blank" rel="noopener noreferrer" class="">#9509</a></li>
<li class="">Refactor and clean up code across multiple crates by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9620" target="_blank" rel="noopener noreferrer" class="">#9620</a></li>
<li class="">fix: Improve error handling for distributed mode and state_location configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9611" target="_blank" rel="noopener noreferrer" class="">#9611</a></li>
<li class="">Properly install postgres in <code>install-postgres</code> action by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9629" target="_blank" rel="noopener noreferrer" class="">#9629</a></li>
<li class="">fix: Use Python venv for schema validation in CI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9637" target="_blank" rel="noopener noreferrer" class="">#9637</a></li>
<li class="">Update spicepod.schema.json by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9640" target="_blank" rel="noopener noreferrer" class="">#9640</a></li>
<li class="">Update testoperator dispatch to use release/2.0 branch by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9641" target="_blank" rel="noopener noreferrer" class="">#9641</a></li>
<li class="">fix: Align CUDA asset names in Dockerfile and install tests with build output by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9639" target="_blank" rel="noopener noreferrer" class="">#9639</a></li>
<li class="">Fix expect test scripts in E2E Installation AI test by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9643" target="_blank" rel="noopener noreferrer" class="">#9643</a></li>
<li class="">testoperator for partitioned arrow accelerator by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9635" target="_blank" rel="noopener noreferrer" class="">#9635</a></li>
<li class="">Remove default 1s refresh_check_interval from spidapter for hive datasets by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9645" target="_blank" rel="noopener noreferrer" class="">#9645</a></li>
<li class="">Fix scheduler panic and cancel race condition by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9644" target="_blank" rel="noopener noreferrer" class="">#9644</a></li>
<li class="">Align Spice.ai connector parameter names across catalog/data connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9632" target="_blank" rel="noopener noreferrer" class="">#9632</a></li>
<li class="">docs: update distribution details and add NAS support in release notes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9650" target="_blank" rel="noopener noreferrer" class="">#9650</a></li>
<li class="">Enable <code>postgres-accel</code> in CI builds for benchmarks by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9649" target="_blank" rel="noopener noreferrer" class="">#9649</a></li>
<li class="">perf: Cache Turso metastore connection across operations by <a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a> in <a href="https://github.com/spiceai/spiceai/pull/9646" target="_blank" rel="noopener noreferrer" class="">#9646</a></li>
<li class="">Add 'scheduler_state_location' to spidapter by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9655" target="_blank" rel="noopener noreferrer" class="">#9655</a></li>
<li class="">Implement Cayenne S3 Express multi-zone live test with data validation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9631" target="_blank" rel="noopener noreferrer" class="">#9631</a></li>
<li class="">chore(spidapter): bump default memory limit from 8Gi to 32Gi by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9661" target="_blank" rel="noopener noreferrer" class="">#9661</a></li>
<li class="">perf: Use prepare_cached() in Turso and SQLite metastore backends by <a href="https://github.com/penberg" target="_blank" rel="noopener noreferrer" class="">@penberg</a> in <a href="https://github.com/spiceai/spiceai/pull/9662" target="_blank" rel="noopener noreferrer" class="">#9662</a></li>
<li class="">Improve CDC cache invalidation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9651" target="_blank" rel="noopener noreferrer" class="">#9651</a></li>
<li class="">Refactor Cayenne IDs to use UUIDv7 strings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9667" target="_blank" rel="noopener noreferrer" class="">#9667</a></li>
<li class="">fix: add liveness check for dead executors in partition routing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9657" target="_blank" rel="noopener noreferrer" class="">#9657</a></li>
<li class="">fix(s3): Fix metadata column schema mismatches in projected queries by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9664" target="_blank" rel="noopener noreferrer" class="">#9664</a></li>
<li class="">s3_metadata_columns tests: include test for location outside table prefix by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9676" target="_blank" rel="noopener noreferrer" class="">#9676</a></li>
<li class="">docs: Update DuckDB, GCS, Git connector and Cayenne documentation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9671" target="_blank" rel="noopener noreferrer" class="">#9671</a></li>
<li class="">Add s3_url_style support for S3 connector URL addressing by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9642" target="_blank" rel="noopener noreferrer" class="">#9642</a></li>
<li class="">Consolidate E2E workflows and require WSL for Windows runtime by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9660" target="_blank" rel="noopener noreferrer" class="">#9660</a></li>
<li class="">Upgrade to Rust v1.93.1 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9669" target="_blank" rel="noopener noreferrer" class="">#9669</a></li>
<li class="">Security fixes and improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9666" target="_blank" rel="noopener noreferrer" class="">#9666</a></li>
<li class="">feat(flight): add DoPut rows/bytes written metrics for DoPut ETL ingestion tracking by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9663" target="_blank" rel="noopener noreferrer" class="">#9663</a></li>
<li class="">Skip caching http error response + add <code>response_headers</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9670" target="_blank" rel="noopener noreferrer" class="">#9670</a></li>
<li class="">refactor: Remove <code>v1/evals</code> functionality by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9420" target="_blank" rel="noopener noreferrer" class="">#9420</a></li>
<li class="">Make a test harness for Distributed Spice integration tests by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9615" target="_blank" rel="noopener noreferrer" class="">#9615</a></li>
<li class="">Enable <code>on_zero_results: use_source</code> for views by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9699" target="_blank" rel="noopener noreferrer" class="">#9699</a></li>
<li class="">fix(spidapter): Lower memory limit, passthrough AWS secrets, override flight URL by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9704" target="_blank" rel="noopener noreferrer" class="">#9704</a></li>
<li class="">Show an error on a shared acceleration file with snapshots enabled by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9698" target="_blank" rel="noopener noreferrer" class="">#9698</a></li>
<li class="">Fixes for anthropic by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9707" target="_blank" rel="noopener noreferrer" class="">#9707</a></li>
<li class="">Use <code>max_partitions_per_executor</code> in <code>allocate_initial_partitions</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9659" target="_blank" rel="noopener noreferrer" class="">#9659</a></li>
<li class="">[SpiceDQ] Accelerations must have partition key by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9711" target="_blank" rel="noopener noreferrer" class="">#9711</a></li>
<li class="">Upgrade to Turso v0.5 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9628" target="_blank" rel="noopener noreferrer" class="">#9628</a></li>
<li class="">feat: Rename metadata columns to _location, _last_modified, _size by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9712" target="_blank" rel="noopener noreferrer" class="">#9712</a></li>
<li class="">fix: bump datafusion-ballista to fix BatchCoalescer schema mismatch panic by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9716" target="_blank" rel="noopener noreferrer" class="">#9716</a></li>
<li class="">fix: Ensure Cayenne respects target file size by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9730" target="_blank" rel="noopener noreferrer" class="">#9730</a></li>
<li class="">refactor: Make DDL preprocessing generic from Iceberg DDL processing by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9731" target="_blank" rel="noopener noreferrer" class="">#9731</a></li>
<li class="">[SpiceDQ] Distribute query of Cayenne Catalog to executors with data by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9727" target="_blank" rel="noopener noreferrer" class="">#9727</a></li>
<li class="">Properly set <code>primary_keys</code>/<code>on_conflict</code> for Cayenne tables by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9739" target="_blank" rel="noopener noreferrer" class="">#9739</a></li>
<li class="">Add executor resource and replica support to cloud app config by <a href="https://github.com/ewgenius" target="_blank" rel="noopener noreferrer" class="">@ewgenius</a> in <a href="https://github.com/spiceai/spiceai/pull/9734" target="_blank" rel="noopener noreferrer" class="">#9734</a></li>
<li class="">feat: Support PARTITION BY in Cayenne Catalog table creation by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9741" target="_blank" rel="noopener noreferrer" class="">#9741</a></li>
<li class="">Update datafusion and related packages to version 52.3.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9708" target="_blank" rel="noopener noreferrer" class="">#9708</a></li>
<li class="">Route FlightSQL statement updates through QueryBuilder by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9754" target="_blank" rel="noopener noreferrer" class="">#9754</a></li>
<li class="">JSON file format improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9743" target="_blank" rel="noopener noreferrer" class="">#9743</a></li>
<li class="">[SpiceDQ] Partition Cayenne catalogs writes through to executors by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9737" target="_blank" rel="noopener noreferrer" class="">#9737</a></li>
<li class="">Update to DF v52.3.0 versions of datafusion &amp; datafusion-tableproviders by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9756" target="_blank" rel="noopener noreferrer" class="">#9756</a></li>
<li class="">Make S3 metadata column handling more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9762" target="_blank" rel="noopener noreferrer" class="">#9762</a></li>
<li class="">Fetch API keys from dedicated endpoint instead of apps response by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9767" target="_blank" rel="noopener noreferrer" class="">#9767</a></li>
<li class="">Update arrow-rs, datafusion-federation, and datafusion-table-providers dependencies by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9769" target="_blank" rel="noopener noreferrer" class="">#9769</a></li>
<li class="">Chunk metastore batch inserts to respect SQLite parameter limits by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9770" target="_blank" rel="noopener noreferrer" class="">#9770</a></li>
<li class="">Improve JSON SODA support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9795" target="_blank" rel="noopener noreferrer" class="">#9795</a></li>
<li class="">Add ADBC Data Connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9723" target="_blank" rel="noopener noreferrer" class="">#9723</a></li>
<li class="">docs: Release Cayenne as RC by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9766" target="_blank" rel="noopener noreferrer" class="">#9766</a></li>
<li class="">cli[feat]: cloud mode to use region-specific endpoints by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9803" target="_blank" rel="noopener noreferrer" class="">#9803</a></li>
<li class="">Include updated JSON formats in HTTPS connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9800" target="_blank" rel="noopener noreferrer" class="">#9800</a></li>
<li class="">Flight DoPut: Partition-aware write-through forwarding by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9759" target="_blank" rel="noopener noreferrer" class="">#9759</a></li>
<li class="">Pass through authentication to ADBC connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9801" target="_blank" rel="noopener noreferrer" class="">#9801</a></li>
<li class="">Move scheduler_state_location from adapter metadata to env var by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9802" target="_blank" rel="noopener noreferrer" class="">#9802</a></li>
<li class="">Fix Cayenne DoPut upsert returning stale data after 3+ writes by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9806" target="_blank" rel="noopener noreferrer" class="">#9806</a></li>
<li class="">Fix JSON column projection producing schema mismatch by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9811" target="_blank" rel="noopener noreferrer" class="">#9811</a></li>
<li class="">Fix http connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9818" target="_blank" rel="noopener noreferrer" class="">#9818</a></li>
<li class="">Fix ADBC Connector build and test by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9813" target="_blank" rel="noopener noreferrer" class="">#9813</a></li>
<li class="">Support update &amp; delete DML for distributed cayenne catalog by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9805" target="_blank" rel="noopener noreferrer" class="">#9805</a></li>
<li class="">Set allow_http param when S3 endpoint uses http scheme by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9834" target="_blank" rel="noopener noreferrer" class="">#9834</a></li>
<li class="">fix: Cayenne Catalog DDL requires a connected executor in distributed mode by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9838" target="_blank" rel="noopener noreferrer" class="">#9838</a></li>
<li class="">fix: Add conditional put support for file:// scheduler state location by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9842" target="_blank" rel="noopener noreferrer" class="">#9842</a></li>
<li class="">fix: Require the DDL primary key contain the partition key by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9844" target="_blank" rel="noopener noreferrer" class="">#9844</a></li>
<li class="">fix: Databricks SQL Warehouse schema retrieval with INLINE disposition and async retry by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9846" target="_blank" rel="noopener noreferrer" class="">#9846</a></li>
<li class="">Filter pushdown improvements for SqlTable by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9852" target="_blank" rel="noopener noreferrer" class="">#9852</a></li>
<li class="">feat: add iam_role_source parameter for AWS credential configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9854" target="_blank" rel="noopener noreferrer" class="">#9854</a></li>
<li class="">Fix ODBC queries silently returning 0 rows on query failure by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9864" target="_blank" rel="noopener noreferrer" class="">#9864</a></li>
<li class="">feat(adbc): Add ADBC catalog connector with schema/table discovery by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9865" target="_blank" rel="noopener noreferrer" class="">#9865</a></li>
<li class="">Make Turso SQL unparsing more robust and fix date comparisons by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9871" target="_blank" rel="noopener noreferrer" class="">#9871</a></li>
<li class="">Fix Flight/FlightSQL filter precedence and mutable query consistency by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9876" target="_blank" rel="noopener noreferrer" class="">#9876</a></li>
<li class="">Partial Aggregation optimisation for <code>FlightSQLExec</code> by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9882" target="_blank" rel="noopener noreferrer" class="">#9882</a></li>
<li class="">fix: v1/responses API preserves client instructions when system_prompt is set by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9884" target="_blank" rel="noopener noreferrer" class="">#9884</a></li>
<li class="">feat: emit <code>scheduler_active_executors_count</code> and use it in spidapter by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9885" target="_blank" rel="noopener noreferrer" class="">#9885</a></li>
<li class="">feat: Add custom auth header support for GraphQL connector by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9899" target="_blank" rel="noopener noreferrer" class="">#9899</a></li>
<li class="">Add --endpoint flag to spice run with scheme-based routing by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9903" target="_blank" rel="noopener noreferrer" class="">#9903</a></li>
<li class="">When executor connects, send DDL for existing tables by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9904" target="_blank" rel="noopener noreferrer" class="">#9904</a></li>
<li class="">fix: Improve ADBC driver shutdown handling and error classification by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9905" target="_blank" rel="noopener noreferrer" class="">#9905</a></li>
<li class="">fix: require all executors to succeed for distributed DML (DELETE/UPDATE) forwarding by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9908" target="_blank" rel="noopener noreferrer" class="">#9908</a></li>
<li class="">fix(cayenne catalog): fix catalog refresh race condition causing duplicate primary keys by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9909" target="_blank" rel="noopener noreferrer" class="">#9909</a></li>
<li class="">Remove Perplexity support by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9910" target="_blank" rel="noopener noreferrer" class="">#9910</a></li>
<li class="">Fix refresh_sql support for debezium constraints by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9912" target="_blank" rel="noopener noreferrer" class="">#9912</a></li>
<li class="">Implement DML for DynamoDBTableProvider by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9915" target="_blank" rel="noopener noreferrer" class="">#9915</a></li>
<li class="">chore: Update iceberg-rust fork to v0.9 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9917" target="_blank" rel="noopener noreferrer" class="">#9917</a></li>
<li class="">Run physical optimizer on <code>FallbackOnZeroResultsScanExec</code> fallback plan by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9927" target="_blank" rel="noopener noreferrer" class="">#9927</a></li>
<li class="">Improve Databricks error message when dataset has no columns by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9928" target="_blank" rel="noopener noreferrer" class="">#9928</a></li>
<li class="">Delta Lake: fix data skipping for &gt;= timestamp predicates by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9932" target="_blank" rel="noopener noreferrer" class="">#9932</a></li>
<li class="">fix: Ensure distributed Cayenne DML inserts are forwarded to executors by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9948" target="_blank" rel="noopener noreferrer" class="">#9948</a></li>
<li class="">Add full query federation support for ADBC data connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9953" target="_blank" rel="noopener noreferrer" class="">#9953</a></li>
<li class="">Make time_format deserialization case-insensitive by <a href="https://github.com/vyershov" target="_blank" rel="noopener noreferrer" class="">@vyershov</a> in <a href="https://github.com/spiceai/spiceai/pull/9955" target="_blank" rel="noopener noreferrer" class="">#9955</a></li>
<li class="">Hash ADBC join-pushdown context to prevent credential leaks in EXPLAIN plans by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9956" target="_blank" rel="noopener noreferrer" class="">#9956</a></li>
<li class="">fix: Normalize Arrow Dictionary types for DuckDB and SQLite acceleration by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9959" target="_blank" rel="noopener noreferrer" class="">#9959</a></li>
<li class="">ADBC BigQuery: Improve BigQuery dialect date/time and interval SQL generation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9967" target="_blank" rel="noopener noreferrer" class="">#9967</a></li>
<li class="">Make <code>BigQueryDialect</code> more robust and add BigQuery TPC-H benchmark support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9969" target="_blank" rel="noopener noreferrer" class="">#9969</a></li>
<li class="">fix: Show proper unauthorized error instead of misleading runtime unavailable by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9972" target="_blank" rel="noopener noreferrer" class="">#9972</a></li>
<li class="">fix: Enforce target_chunk_size as hard maximum in chunking by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9973" target="_blank" rel="noopener noreferrer" class="">#9973</a></li>
<li class="">Add caching retention by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9984" target="_blank" rel="noopener noreferrer" class="">#9984</a></li>
<li class="">fix: improve Databricks schema error detection and messages by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9987" target="_blank" rel="noopener noreferrer" class="">#9987</a></li>
<li class="">fix: Set default S3 region for opendal operator and fix cayenne nextest by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9995" target="_blank" rel="noopener noreferrer" class="">#9995</a></li>
<li class="">fix(PostgreSQL): fix schema discovery for PostgreSQL partitioned tables by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9997" target="_blank" rel="noopener noreferrer" class="">#9997</a></li>
<li class="">fix: Defer cache size check until after encoding for compressed results by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10001" target="_blank" rel="noopener noreferrer" class="">#10001</a></li>
<li class="">fix: Rewrite numeric BETWEEN to CAST(AS REAL) for Turso by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10003" target="_blank" rel="noopener noreferrer" class="">#10003</a></li>
<li class="">fix: Handle integer time columns in append refresh for all accelerators by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10004" target="_blank" rel="noopener noreferrer" class="">#10004</a></li>
<li class="">fix: preserve s3a:// scheme when building OpenDalStorageFactory with custom endpoint by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10006" target="_blank" rel="noopener noreferrer" class="">#10006</a></li>
<li class="">Fix ISO8601 time_format with Vortex/Cayenne append refresh by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10009" target="_blank" rel="noopener noreferrer" class="">#10009</a></li>
<li class="">fix: Address data correctness bugs found in audit by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10015" target="_blank" rel="noopener noreferrer" class="">#10015</a></li>
<li class="">fix(federation): fix SQL unparsing for Inexact filter pushdown with alias by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10017" target="_blank" rel="noopener noreferrer" class="">#10017</a></li>
<li class="">Improve GitHub connector ref handling and resilience by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10023" target="_blank" rel="noopener noreferrer" class="">#10023</a></li>
<li class="">feat: Add spice completions command for shell completion generation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10024" target="_blank" rel="noopener noreferrer" class="">#10024</a></li>
<li class="">fix: Fix data correctness bugs in DynamoDB decimal conversion and GraphQL pagination by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10054" target="_blank" rel="noopener noreferrer" class="">#10054</a></li>
<li class="">Implement RefreshDataset for distributed control stream by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10055" target="_blank" rel="noopener noreferrer" class="">#10055</a></li>
<li class="">perf: Improve S3 parquet read performance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10064" target="_blank" rel="noopener noreferrer" class="">#10064</a></li>
<li class="">fix: Prevent write-through stalls and preserve PartitionTableProvider during catalog refresh by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10066" target="_blank" rel="noopener noreferrer" class="">#10066</a></li>
<li class="">feat: <code>spice completions</code> auto-detects shell directory and writes file by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10068" target="_blank" rel="noopener noreferrer" class="">#10068</a></li>
<li class="">fix: Bug in DynamoDB, GraphQL, and ISO8601 refresh data handling by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10063" target="_blank" rel="noopener noreferrer" class="">#10063</a></li>
<li class="">fix partial aggregation deduplication on string checking by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10078" target="_blank" rel="noopener noreferrer" class="">#10078</a></li>
<li class="">fix: add MetastoreTransaction support to prevent concurrent transaction conflicts by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10080" target="_blank" rel="noopener noreferrer" class="">#10080</a></li>
<li class="">fix: Use GreedyMemoryPool, add spidapter query memory limit arg by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10082" target="_blank" rel="noopener noreferrer" class="">#10082</a></li>
<li class="">feat: Add metrics for EXPLAIN ANALYZE in FlightSQLExec by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10084" target="_blank" rel="noopener noreferrer" class="">#10084</a></li>
<li class="">Use strict cast in <code>try_cast_to</code> to error on overflow instead of silent NULL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10104" target="_blank" rel="noopener noreferrer" class="">#10104</a></li>
<li class="">feat: Implement MERGE INTO for Cayenne catalog tables by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10105" target="_blank" rel="noopener noreferrer" class="">#10105</a></li>
<li class="">feat: Add distributed MERGE INTO support for Cayenne catalog tables by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10106" target="_blank" rel="noopener noreferrer" class="">#10106</a></li>
<li class="">Improve JSON format auto-detection for single multi-line objects by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10107" target="_blank" rel="noopener noreferrer" class="">#10107</a></li>
<li class="">Add mode: file_update acceleration mode by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10108" target="_blank" rel="noopener noreferrer" class="">#10108</a></li>
<li class="">Coerce unsupported Arrow types to Iceberg v2 equivalents in REST catalog API by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10109" target="_blank" rel="noopener noreferrer" class="">#10109</a></li>
<li class="">fix: Update default query memory limit to 90% from 70% by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10112" target="_blank" rel="noopener noreferrer" class="">#10112</a></li>
<li class="">feat: Add mTLS client auth support to spice sql REPL by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10113" target="_blank" rel="noopener noreferrer" class="">#10113</a></li>
<li class="">fix(datafusion-federation): report error on overflow instead of silent NULL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10124" target="_blank" rel="noopener noreferrer" class="">#10124</a></li>
<li class="">fix: Prevent data loss in MERGE when source has duplicate keys by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10126" target="_blank" rel="noopener noreferrer" class="">#10126</a></li>
<li class="">feat: Add ClickHouse Date32 type support by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10132" target="_blank" rel="noopener noreferrer" class="">#10132</a></li>
<li class="">Add Delta Lake column mapping support (Name/Id modes) by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10134" target="_blank" rel="noopener noreferrer" class="">#10134</a></li>
<li class="">fix: Restore Turso numeric BETWEEN rewrite lost in DML revert by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10139" target="_blank" rel="noopener noreferrer" class="">#10139</a></li>
<li class="">fix: Enable arm64 Linux builds with fp16 and lld workarounds by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10142" target="_blank" rel="noopener noreferrer" class="">#10142</a></li>
<li class="">fix: remove double trailing slash in Unity Catalog storage locations by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10147" target="_blank" rel="noopener noreferrer" class="">#10147</a></li>
<li class="">fix: Improve GitHub GraphQL client resilience and performance by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10151" target="_blank" rel="noopener noreferrer" class="">#10151</a></li>
<li class="">Enable reqwest compression and optimize HTTP client settings by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10154" target="_blank" rel="noopener noreferrer" class="">#10154</a></li>
<li class="">fix: executor startup failures by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10155" target="_blank" rel="noopener noreferrer" class="">#10155</a></li>
<li class="">feat: Distributed runtime.task_history support by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10156" target="_blank" rel="noopener noreferrer" class="">#10156</a></li>
<li class="">fix: Preserve timestamp timezone in DDL forwarding to executors by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10159" target="_blank" rel="noopener noreferrer" class="">#10159</a></li>
<li class="">feat: Per-model rate-limited concurrent AI UDF execution by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10160" target="_blank" rel="noopener noreferrer" class="">#10160</a></li>
<li class="">fix(Turso): Reject subquery/outer-ref filter pushdown in Turso provider by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10174" target="_blank" rel="noopener noreferrer" class="">#10174</a></li>
<li class="">Fix linux/macos <code>spice upgrade</code> by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/10194" target="_blank" rel="noopener noreferrer" class="">#10194</a></li>
<li class="">Improve CREATE TABLE LIKE error messages, success output, EXPLAIN, and validation by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10203" target="_blank" rel="noopener noreferrer" class="">#10203</a></li>
<li class="">fix: chunk MERGE delete filters and update Vortex for stack-safe IN-lists by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/10207" target="_blank" rel="noopener noreferrer" class="">#10207</a></li>
<li class="">Propagate <code>runtime.params.parquet_page_index</code> to Delta Lake connector by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10209" target="_blank" rel="noopener noreferrer" class="">#10209</a></li>
<li class="">Properly mark dataset as Ready on Scheduler by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/10215" target="_blank" rel="noopener noreferrer" class="">#10215</a></li>
<li class="">fix: handle Utf8View/LargeUtf8 in GitHub connector ref filters by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10217" target="_blank" rel="noopener noreferrer" class="">#10217</a></li>
<li class="">fix(databricks): Fix schema introspection and timestamp overflow by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10226" target="_blank" rel="noopener noreferrer" class="">#10226</a></li>
<li class="">fix(databricks): Fix schema introspection failures for non-Unity-Catalog environments by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10227" target="_blank" rel="noopener noreferrer" class="">#10227</a></li>
<li class="">feat: Add pagination support to HTTP data connector by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10228" target="_blank" rel="noopener noreferrer" class="">#10228</a></li>
<li class="">feat(databricks): DESCRIBE TABLE fallback and source-native type parsing for Lakehouse Federation by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10229" target="_blank" rel="noopener noreferrer" class="">#10229</a></li>
<li class="">fix(databricks): harden HTTP retries, compression, and token refresh by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/10232" target="_blank" rel="noopener noreferrer" class="">#10232</a></li>
<li class="">feat[helm chart]: Add support for ServiceAccount annotations and AWS IRSA example by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9833" target="_blank" rel="noopener noreferrer" class="">#9833</a></li>
<li class="">fix: Log warning and fall back gracefully on Cayenne config change by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9092" target="_blank" rel="noopener noreferrer" class="">#9092</a></li>
<li class="">fix: Handle engine mismatch gracefully in snapshot fallback loop by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9187" target="_blank" rel="noopener noreferrer" class="">#9187</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v2.0.0-rc.1...v2.0.0-rc.2" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v2.0.0-rc.1...v2.0.0-rc.2</a></p>]]></content:encoded>
            <category>release</category>
            <category>distributed-query</category>
            <category>cayenne</category>
            <category>datafusion</category>
            <category>delta-lake</category>
            <category>databricks</category>
            <category>adbc</category>
            <category>data-connector</category>
        </item>
        <item>
            <title><![CDATA[Spice v1.11.5 (Apr 1, 2026)]]></title>
            <link>https://spiceai.org/releases/v1.11.5</link>
            <guid>https://spiceai.org/releases/v1.11.5</guid>
            <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v1.11.5! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v1.11.5! 🛠️</p>
<p>Spice v1.11.5 is a patch release improving <strong><code>on_zero_results: use_source</code></strong> fallback performance, <strong>Delta Lake</strong> timestamp predicate data skipping, <strong>S3 Parquet</strong> read performance, <strong>PostgreSQL</strong> partitioned table support, <strong>Cayenne</strong> target file size handling, and preparing the CLI for v2.0 runtime upgrades.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v1115">What's New in v1.11.5<a href="https://spiceai.org/releases/v1.11.5#whats-new-in-v1115" class="hash-link" aria-label="Direct link to What's New in v1.11.5" title="Direct link to What's New in v1.11.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="on_zero_results-use_source-fallback-performance-improvement"><code>on_zero_results: use_source</code> Fallback Performance Improvement<a href="https://spiceai.org/releases/v1.11.5#on_zero_results-use_source-fallback-performance-improvement" class="hash-link" aria-label="Direct link to on_zero_results-use_source-fallback-performance-improvement" title="Direct link to on_zero_results-use_source-fallback-performance-improvement" translate="no">​</a></h3>
<p>Improved the <a href="https://spiceai.org/docs/features/data-acceleration/data-refresh#behavior-on-zero-results" target="_blank" rel="noopener noreferrer" class=""><code>on_zero_results: use_source</code></a> fallback path to run DataFusion's physical optimizer on the federated scan plan (<a href="https://github.com/spiceai/spiceai/pull/9927" target="_blank" rel="noopener noreferrer" class="">#9927</a>). The fallback path now runs <code>SessionState::physical_optimizers()</code> rules on the federated scan plan before execution, enabling parallel file group scanning and other optimizations. This results in significantly faster fallback queries on multi-core machines, particularly for file-based data sources like Delta Lake.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="delta-lake-improved-data-skipping-for--timestamp-predicates">Delta Lake: Improved Data Skipping for <code>&gt;=</code> Timestamp Predicates<a href="https://spiceai.org/releases/v1.11.5#delta-lake-improved-data-skipping-for--timestamp-predicates" class="hash-link" aria-label="Direct link to delta-lake-improved-data-skipping-for--timestamp-predicates" title="Direct link to delta-lake-improved-data-skipping-for--timestamp-predicates" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/components/data-connectors/delta-lake" target="_blank" rel="noopener noreferrer" class="">Delta Lake</a> table scans with <code>&gt;=</code> timestamp filters now correctly prune files that do not match the predicate (<a href="https://github.com/spiceai/spiceai/pull/9932" target="_blank" rel="noopener noreferrer" class="">#9932</a>), improving query performance through more effective data skipping (file-level pruning).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="postgresql-partitioned-tables-support">PostgreSQL: Partitioned Tables Support<a href="https://spiceai.org/releases/v1.11.5#postgresql-partitioned-tables-support" class="hash-link" aria-label="Direct link to PostgreSQL: Partitioned Tables Support" title="Direct link to PostgreSQL: Partitioned Tables Support" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-connectors/postgres" target="_blank" rel="noopener noreferrer" class="">PostgreSQL</a> data connector now supports <a href="https://www.postgresql.org/docs/current/ddl-partitioning.html" target="_blank" rel="noopener noreferrer" class="">partitioned tables</a> (<a href="https://github.com/spiceai/spiceai/pull/9997" target="_blank" rel="noopener noreferrer" class="">#9997</a>) for both federated and accelerated queries.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="s3-parquet-read-performance-improvement">S3 Parquet Read Performance Improvement<a href="https://spiceai.org/releases/v1.11.5#s3-parquet-read-performance-improvement" class="hash-link" aria-label="Direct link to S3 Parquet Read Performance Improvement" title="Direct link to S3 Parquet Read Performance Improvement" translate="no">​</a></h3>
<p>Improved parquet read performance from <a href="https://spiceai.org/docs/components/data-connectors/s3" target="_blank" rel="noopener noreferrer" class="">S3</a> and other object stores (<a href="https://github.com/spiceai/spiceai/pull/10064" target="_blank" rel="noopener noreferrer" class="">#10064</a>), particularly for tables with many columns. Column data ranges are now coalesced into fewer, larger requests instead of being fetched individually, reducing the number of HTTP round-trips.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cayenne-ensure-target-file-size-is-respected">Cayenne: Ensure Target File Size is Respected<a href="https://spiceai.org/releases/v1.11.5#cayenne-ensure-target-file-size-is-respected" class="hash-link" aria-label="Direct link to Cayenne: Ensure Target File Size is Respected" title="Direct link to Cayenne: Ensure Target File Size is Respected" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> accelerator now correctly respects the configured target file size (<a href="https://github.com/spiceai/spiceai/pull/10071" target="_blank" rel="noopener noreferrer" class="">#10071</a>). Previously, Cayenne could produce many small, fragmented Vortex files; with this fix, files are written at the expected target size, improving storage efficiency and query performance.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cli-support-for-v20-runtime-upgrades">CLI: Support for v2.0 Runtime Upgrades<a href="https://spiceai.org/releases/v1.11.5#cli-support-for-v20-runtime-upgrades" class="hash-link" aria-label="Direct link to CLI: Support for v2.0 Runtime Upgrades" title="Direct link to CLI: Support for v2.0 Runtime Upgrades" translate="no">​</a></h3>
<p>The Spice CLI can now upgrade to v2.0 runtime versions. This enables upgrading to v2.0 release candidates and, once released, the v2.0 stable runtime.</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade v2.0.0-rc.1</span><br></div></code></pre></div></div>
<p>Running <code>spice upgrade</code> without a version will upgrade to the latest stable version, including v2.0 once released.</p>
<blockquote>
<p><strong>Note:</strong> Native Windows runtime builds will no longer be provided in v2.0. Use <a href="https://learn.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noopener noreferrer" class="">WSL</a> for local development instead.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v1.11.5#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v1.11.5#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v1.11.5#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v1.11.5#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v1.11.5, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:1.11.5</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:1.11.5</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 1.11.5</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v1.11.5#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v1.11.5#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(runtime): Run physical optimizer on <code>FallbackOnZeroResultsScanExec</code> fallback plan by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9927" target="_blank" rel="noopener noreferrer" class="">#9927</a></li>
<li class="">fix(delta_lake): Fix data skipping for <code>&gt;=</code> timestamp predicates by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9932" target="_blank" rel="noopener noreferrer" class="">#9932</a></li>
<li class="">fix(PostgreSQL): Fix schema discovery for PostgreSQL partitioned tables by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9997" target="_blank" rel="noopener noreferrer" class="">#9997</a></li>
<li class="">fix(cli): Skip models variant download for v2+ in upgrade/install by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> and <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10052" target="_blank" rel="noopener noreferrer" class="">#10052</a></li>
<li class="">perf(s3): Improve Parquet read performance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/10064" target="_blank" rel="noopener noreferrer" class="">#10064</a></li>
<li class="">fix(cayenne): Ensure Cayenne respects target file size by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/10071" target="_blank" rel="noopener noreferrer" class="">#10071</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.4...v1.11.5" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.4...v1.11.5</a></p>]]></content:encoded>
            <category>release</category>
            <category>s3</category>
            <category>cayenne</category>
            <category>delta-lake</category>
            <category>PostgreSQL</category>
        </item>
        <item>
            <title><![CDATA[Spice v1.11.4 (Mar 12, 2026)]]></title>
            <link>https://spiceai.org/releases/v1.11.4</link>
            <guid>https://spiceai.org/releases/v1.11.4</guid>
            <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v1.11.4! ⚡]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v1.11.4! ⚡</p>
<p>Spice v1.11.4 is a patch release improving <strong>S3</strong> metadata column query robustness and enabling <strong><code>on_zero_results: use_source</code></strong> for accelerated views.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v1114">What's New in v1.11.4<a href="https://spiceai.org/releases/v1.11.4#whats-new-in-v1114" class="hash-link" aria-label="Direct link to What's New in v1.11.4" title="Direct link to What's New in v1.11.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="accelerated-views-on_zero_results-use_source-support">Accelerated Views: <code>on_zero_results: use_source</code> Support<a href="https://spiceai.org/releases/v1.11.4#accelerated-views-on_zero_results-use_source-support" class="hash-link" aria-label="Direct link to accelerated-views-on_zero_results-use_source-support" title="Direct link to accelerated-views-on_zero_results-use_source-support" translate="no">​</a></h3>
<p>Accelerated <a href="https://spiceai.org/docs/components/views" target="_blank" rel="noopener noreferrer" class="">views</a> now support the <a href="https://spiceai.org/docs/features/data-acceleration/data-refresh#behavior-on-zero-results" target="_blank" rel="noopener noreferrer" class=""><code>on_zero_results: use_source</code></a> configuration (<a href="https://github.com/spiceai/spiceai/pull/9699" target="_blank" rel="noopener noreferrer" class="">#9699</a>). Previously, accelerated views only supported <code>on_zero_results: return_empty</code>, which returned an empty result set when the accelerated data contained no matching rows. With this change, views can fall back to querying the source data when the accelerated query returns zero results, matching the behavior already available for accelerated datasets.</p>
<p><strong>Example configuration:</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">views</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sales_summary</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">sql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      SELECT region, SUM(amount) as total</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      FROM sales</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      GROUP BY region</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">on_zero_results</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> use_source</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="how-the-fallback-works">How the Fallback Works<a href="https://spiceai.org/releases/v1.11.4#how-the-fallback-works" class="hash-link" aria-label="Direct link to How the Fallback Works" title="Direct link to How the Fallback Works" translate="no">​</a></h4>
<p>When an accelerated view is configured with <code>on_zero_results: use_source</code>, the following happens at query time:</p>
<ol>
<li class="">
<p><strong>The accelerated store is queried first.</strong> The query runs against the view's accelerated data (e.g., Spice Cayenne, Arrow, DuckDB, or SQLite).</p>
</li>
<li class="">
<p><strong>If the accelerated query returns zero rows</strong>, the runtime falls back to re-executing the view's SQL query against the datasets it references.</p>
</li>
<li class="">
<p><strong>Referenced datasets are queried according to their own configuration.</strong> The view's SQL is re-executed against each referenced dataset as it is configured. This means:</p>
<ul>
<li class="">If a referenced dataset is <strong>accelerated</strong>, the query hits that dataset's accelerated store — not the raw data source.</li>
<li class="">If a referenced dataset is <strong>accelerated with <code>on_zero_results: use_source</code></strong> and its accelerated store also returns zero rows, it will independently fall back to its own federated data source (e.g., Postgres, S3, etc.).</li>
<li class="">If a referenced dataset is <strong>federated</strong> (not accelerated), the query goes directly to the data source.</li>
</ul>
</li>
</ol>
<p>This means the fallback can chain through multiple layers: first the view's acceleration, then each referenced dataset's acceleration, and finally the original data source — each layer independently applying its own <code>on_zero_results</code> behavior.</p>
<p><strong>Example: Multi-layer fallback</strong></p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">datasets</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">from</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> postgres</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain">orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">refresh_sql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"SELECT * FROM orders WHERE created_at &gt; now() - interval '7 days'"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">on_zero_results</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> use_source  </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Falls back to Postgres if accelerated data has no matches</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">views</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> recent_orders_summary</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">sql</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      SELECT status, COUNT(*) as order_count</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      FROM orders</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">      GROUP BY status</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">acceleration</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">enabled</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:hsl(230, 8%, 24%);font-weight:bold">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">on_zero_results</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> use_source  </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Falls back to re-running the SQL against referenced datasets</span><br></div></code></pre></div></div>
<p>In this example, a query like <code>SELECT * FROM recent_orders_summary WHERE status = 'cancelled'</code> follows this path:</p>
<ol>
<li class="">Queries <code>recent_orders_summary</code> in the view's accelerated store (DuckDB/SQLite).</li>
<li class="">If zero rows are returned, re-executes <code>SELECT status, COUNT(*) ... FROM orders GROUP BY status</code> against the <code>orders</code> dataset.</li>
<li class="">Since <code>orders</code> is accelerated, the query hits the <code>orders</code> accelerated store.</li>
<li class="">If <code>orders</code> also returns zero rows (e.g., the <code>refresh_sql</code> excluded cancelled orders), it falls back to querying Postgres directly.</li>
</ol>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="s3-data-connector-more-robust-metadata-column-handling">S3 Data Connector: More Robust Metadata Column Handling<a href="https://spiceai.org/releases/v1.11.4#s3-data-connector-more-robust-metadata-column-handling" class="hash-link" aria-label="Direct link to S3 Data Connector: More Robust Metadata Column Handling" title="Direct link to S3 Data Connector: More Robust Metadata Column Handling" translate="no">​</a></h3>
<p>Improved the robustness of <a href="https://spiceai.org/docs/components/data-connectors/#metadata-columns" target="_blank" rel="noopener noreferrer" class="">metadata column</a> (<code>location</code>, <code>last_modified</code>, <code>size</code>) handling for <a href="https://spiceai.org/docs/components/data-connectors/s3" target="_blank" rel="noopener noreferrer" class="">S3</a> datasets. Building on the v1.11.3 release, this update addresses an additional edge case where the query optimizer's projection swap could cause an <code>index out of bounds</code> panic when metadata columns are referenced in projections with filters or scalar functions.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v1.11.4#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v1.11.4#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v1.11.4#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v1.11.4#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v1.11.4, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:1.11.4</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:1.11.4</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 1.11.4</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v1.11.4#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v1.11.4#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(s3): Make metadata column handling more robust by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9714" target="_blank" rel="noopener noreferrer" class="">#9714</a></li>
<li class="">feat(views): Enable <code>on_zero_results: use_source</code> for accelerated views by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9699" target="_blank" rel="noopener noreferrer" class="">#9699</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.3...v1.11.4" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.3...v1.11.4</a></p>]]></content:encoded>
            <category>release</category>
            <category>s3</category>
            <category>data-connector</category>
            <category>acceleration</category>
        </item>
        <item>
            <title><![CDATA[Spice v1.11.3 (Mar 9, 2026)]]></title>
            <link>https://spiceai.org/releases/v1.11.3</link>
            <guid>https://spiceai.org/releases/v1.11.3</guid>
            <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v1.11.3! 🛠️]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v1.11.3! 🛠️</p>
<p>Spice v1.11.3 is a patch release fixing schema consistency issues in the <strong>S3</strong> and <strong>FlightSQL</strong> data connectors, improving <strong>CDC cache invalidation</strong>, and enhancing the <strong>HTTP</strong> data connector's error handling and response metadata.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v1113">What's New in v1.11.3<a href="https://spiceai.org/releases/v1.11.3#whats-new-in-v1113" class="hash-link" aria-label="Direct link to What's New in v1.11.3" title="Direct link to What's New in v1.11.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="s3-data-connector-fix">S3 Data Connector Fix<a href="https://spiceai.org/releases/v1.11.3#s3-data-connector-fix" class="hash-link" aria-label="Direct link to S3 Data Connector Fix" title="Direct link to S3 Data Connector Fix" translate="no">​</a></h3>
<p>Fixed an issue where queries using metadata columns (<code>location</code>, <code>last_modified</code>, <code>size</code>) on <a href="https://spiceai.org/docs/components/data-connectors/s3" target="_blank" rel="noopener noreferrer" class="">S3</a> datasets produced <code>Input field name does not match with the projection expression</code> errors (<a href="https://github.com/spiceai/spiceai/issues/9647" target="_blank" rel="noopener noreferrer" class="">#9647</a>). This occurred when projecting metadata columns with filters or scalar functions (e.g., <code>SELECT lower(location) FROM table WHERE location = '...'</code>), and when projection returned no matching files.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="flightsql-schema-consistency">FlightSQL Schema Consistency<a href="https://spiceai.org/releases/v1.11.3#flightsql-schema-consistency" class="hash-link" aria-label="Direct link to FlightSQL Schema Consistency" title="Direct link to FlightSQL Schema Consistency" translate="no">​</a></h3>
<p>Fixed an issue where the Flight SQL JDBC driver returned <code>Unsupported ArrowType Utf8View</code> errors when performing <code>::TEXT</code> type casts (<a href="https://github.com/spiceai/spiceai/issues/9253" target="_blank" rel="noopener noreferrer" class="">#9253</a>). The <a href="https://spiceai.org/docs/components/data-connectors/flightsql" target="_blank" rel="noopener noreferrer" class="">FlightSQL</a> endpoint now maps view types (e.g., <code>Utf8View</code>, <code>BinaryView</code>) to their non-view equivalents, ensuring compatibility with JDBC and ODBC clients.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cdc-cache-invalidation">CDC Cache Invalidation<a href="https://spiceai.org/releases/v1.11.3#cdc-cache-invalidation" class="hash-link" aria-label="Direct link to CDC Cache Invalidation" title="Direct link to CDC Cache Invalidation" translate="no">​</a></h3>
<p>Fixed an issue where the SQL results cache was invalidated on every change stream poll, even when zero records were returned (<a href="https://github.com/spiceai/spiceai/issues/9472" target="_blank" rel="noopener noreferrer" class="">#9472</a>). This caused near-total cache miss rates for datasets using <code>refresh_mode: changes</code> (e.g., DynamoDB Streams), effectively rendering the cache useless. Cache invalidation now only occurs when a change batch contains actual data changes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="http-data-connector-improvements">HTTP Data Connector Improvements<a href="https://spiceai.org/releases/v1.11.3#http-data-connector-improvements" class="hash-link" aria-label="Direct link to HTTP Data Connector Improvements" title="Direct link to HTTP Data Connector Improvements" translate="no">​</a></h3>
<ul>
<li class="">HTTP error responses (e.g., 5xx) are now excluded from the cache, preventing transient server errors from polluting cached results.</li>
<li class="">Added a <code>response_headers</code> column (Map type) to HTTP responses, providing access to response header metadata in query results.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v1.11.3#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v1.11.3#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<p>No breaking changes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v1.11.3#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>No new cookbook recipes.</p>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 86 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v1.11.3#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v1.11.3, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:1.11.3</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:1.11.3</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 1.11.3</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v1.11.3#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v1.11.3#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">fix(s3): Fix metadata column schema mismatches in projected queries by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9664" target="_blank" rel="noopener noreferrer" class="">#9664</a></li>
<li class="">s3_metadata_columns tests: include test for location outside table prefix by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9676" target="_blank" rel="noopener noreferrer" class="">#9676</a></li>
<li class="">Fix Flight SQL schema consistency: expand view types and verify field names by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9438" target="_blank" rel="noopener noreferrer" class="">#9438</a></li>
<li class="">Improve CDC cache invalidation by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9651" target="_blank" rel="noopener noreferrer" class="">#9651</a></li>
<li class="">Skip caching http error response + add <code>response_headers</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9670" target="_blank" rel="noopener noreferrer" class="">#9670</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.2...v1.11.3" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.2...v1.11.3</a></p>]]></content:encoded>
            <category>release</category>
            <category>s3</category>
            <category>data-connector</category>
            <category>caching</category>
            <category>FlightSQL</category>
        </item>
        <item>
            <title><![CDATA[Spice v2.0-rc.1 (Mar 4, 2026)]]></title>
            <link>https://spiceai.org/releases/v2.0-rc.1</link>
            <guid>https://spiceai.org/releases/v2.0-rc.1</guid>
            <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Announcing the release of Spice v2.0-rc.1! 🚀]]></description>
            <content:encoded><![CDATA[<p>Announcing the release of Spice v2.0-rc.1! 🚀</p>
<p>v2.0.0-rc.1 is the first release candidate for early testing of v2.0.</p>
<p>Highlights in this release candidate include:</p>
<ul>
<li class=""><strong>Active-Active Highly-Available Distributed Query</strong> that is object-store-native and built on Apache Ballista, with dynamic cluster sizing, distributed ingestion, and cluster observability</li>
<li class=""><strong>Spice Cayenne RC</strong> with staged append writes, file-based retention deletes, composite partitioning, and distributed ingestion</li>
<li class=""><strong>DataFusion v52.2.0 Upgrade</strong> with sort pushdown, a new merge join, and dynamic filters</li>
<li class=""><strong>DDL Support</strong> for <code>CREATE TABLE</code> and <code>DROP TABLE</code> via SQL for Iceberg and Cayenne catalogs</li>
<li class=""><strong>DuckLake Catalog &amp; Data Connector</strong> for lakehouse-style data management</li>
<li class=""><strong>GCS Data Connector (Alpha)</strong> for Google Cloud Storage</li>
<li class=""><strong>Rust CLI Rewrite</strong> for a unified single-binary experience</li>
<li class="">Dependency upgrades including <strong>DuckDB v1.4.4</strong>, <strong>delta_kernel v0.18.2</strong>, and <strong>mistral.rs</strong></li>
</ul>
<p>Spice v2.0 includes several <a href="https://spiceai.org/releases/v2.0-rc.1#breaking-changes" class="">breaking changes</a>. Review the breaking changes section before upgrading.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="distribution-changes">Distribution Changes<a href="https://spiceai.org/releases/v2.0-rc.1#distribution-changes" class="hash-link" aria-label="Direct link to Distribution Changes" title="Direct link to Distribution Changes" translate="no">​</a></h2>
<p>AI/ML support including local LLM/ML model and hosted LLM inference is now included in the default Spice build and image. The separate <code>models</code> build variant has been removed.</p>
<p>With models now included by default, the data-only distribution (without AI/ML support) is only published in nightly builds. Official production-ready data-only distributions are available exclusively through <a href="https://spice.ai/pricing" target="_blank" rel="noopener noreferrer" class="">Spice Cloud</a> and the Enterprise release.</p>
<p>A new Network Attached Storage (NAS) distribution with built-in SMB and NFS data connector support is also now available in nightly builds and with <a href="https://spice.ai/pricing" target="_blank" rel="noopener noreferrer" class="">Spice.ai Enterprise</a>.</p>
<table><thead><tr><th>Distribution / Variant</th><th>Open Source</th><th>Spice Cloud</th><th>Enterprise</th></tr></thead><tbody><tr><td>Default</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Data</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>NAS (SMB + NFS)</td><td>Nightly only</td><td>❌</td><td>✅</td></tr><tr><td>Metal (macOS)</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>CUDA (Linux)</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>Allocator variants</td><td>Nightly only</td><td>✅</td><td>✅</td></tr><tr><td>ODBC connector</td><td>Local build only</td><td>✅</td><td>✅</td></tr></tbody></table>
<p>For more details, see the <a href="https://github.com/spiceai/spiceai/blob/trunk/docs/DISTRIBUTIONS.md" target="_blank" rel="noopener noreferrer" class="">Distributions documentation</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-new-in-v200-rc1">What's New in v2.0.0-rc.1<a href="https://spiceai.org/releases/v2.0-rc.1#whats-new-in-v200-rc1" class="hash-link" aria-label="Direct link to What's New in v2.0.0-rc.1" title="Direct link to What's New in v2.0.0-rc.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="active-active-ha-distributed-query">Active-Active HA Distributed Query<a href="https://spiceai.org/releases/v2.0-rc.1#active-active-ha-distributed-query" class="hash-link" aria-label="Direct link to Active-Active HA Distributed Query" title="Direct link to Active-Active HA Distributed Query" translate="no">​</a></h3>
<p><a href="https://spiceai.org/docs/features/distributed-query" target="_blank" rel="noopener noreferrer" class="">Distributed Query</a> exits Beta with active-active highly-available object-store-based distributed query.</p>
<p>Distributed query supports two execution modes:</p>
<ul>
<li class=""><strong>Synchronous</strong>: Queries for accelerated datasets are distributed across executors and results are streamed back in real-time. Non-accelerated datasets execute only on the scheduler. Best for interactive queries where low latency is critical.</li>
<li class=""><strong>Asynchronous</strong>: Queries are submitted via the new HTTP-only <code>/v1/queries</code> API and results are materialized to object storage for later retrieval. Best for long-running analytical workloads, batch processing, and non-accelerated datasets in distributed mode.</li>
</ul>
<p><strong>Key improvements</strong>:</p>
<ul>
<li class=""><strong>Dynamic Cluster Sizing</strong>: The query planner automatically adjusts parallelism based on the number of active executors in the cluster, ensuring optimal resource utilization as nodes are added or removed.</li>
<li class=""><strong>Distributed Ingestion</strong>: Data ingestion for partitioned accelerated tables is now distributed across executor nodes, enabling higher throughput and parallel data loading in cluster mode. Regular (non-partitioned) accelerated tables do not distribute ingestion loads.</li>
<li class=""><strong>Synchronous Execution on Scheduler</strong>: <code>/v1/sql</code> and FlightSQL queries now execute synchronously on the scheduler when appropriate, reducing inter-node overhead for queries that don't benefit from distribution.</li>
<li class=""><strong>Faster Failure Detection</strong>: Executor heartbeat timeout reduced from 180s to 30s, enabling the cluster to quickly detect and respond to executor failures.</li>
<li class=""><strong>Cluster Observability</strong>: New metrics and Grafana dashboard for monitoring distributed query clusters.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="spice-cayenne-improvements">Spice Cayenne Improvements<a href="https://spiceai.org/releases/v2.0-rc.1#spice-cayenne-improvements" class="hash-link" aria-label="Direct link to Spice Cayenne Improvements" title="Direct link to Spice Cayenne Improvements" translate="no">​</a></h3>
<p>The <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Spice Cayenne data accelerator</a> exits Beta with significant reliability and performance improvements:</p>
<ul>
<li class=""><strong>Staged Append Writes</strong>: WAL-based staged append writes prevent partial writes and data loss on stream errors. Batches are written to a WAL file before being committed, ensuring atomicity.</li>
<li class=""><strong>File-Based Retention Deletes</strong>: Time-based retention now supports file-level deletes for both position-based and primary-key tables, reducing I/O overhead compared to row-level deletion.</li>
<li class=""><strong>Multiple Partition Expressions</strong>: Support for composite partitioning with <code>partition_by: [col1, col2]</code> using hierarchical path-like keys (e.g., <code>2025/10/15</code>).</li>
<li class=""><strong>Distributed Ingestion</strong>: Cayenne catalog now supports distributed ingestion across executor nodes in cluster mode, including <code>UPDATE</code> operations.</li>
<li class=""><strong>Improved Robustness</strong>: Fixed CDC edge case where <code>DELETE</code> + <code>UPSERT</code> sequences could produce duplicate primary keys across protected snapshots. Improved upsert handling during runtime restarts.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="datafusion-v5220-upgrade">DataFusion v52.2.0 Upgrade<a href="https://spiceai.org/releases/v2.0-rc.1#datafusion-v5220-upgrade" class="hash-link" aria-label="Direct link to DataFusion v52.2.0 Upgrade" title="Direct link to DataFusion v52.2.0 Upgrade" translate="no">​</a></h3>
<p><a href="https://datafusion.apache.org/blog/2026/01/12/datafusion-52.0.0/" target="_blank" rel="noopener noreferrer" class="">Apache DataFusion has been upgraded to v52.2.0</a>, bringing significant performance improvements, new query features, and enhanced extensibility.</p>
<p><strong>Performance Improvements</strong>:</p>
<ul>
<li class=""><strong>Faster <code>CASE</code> Expressions</strong>: Lookup-table-based evaluation for certain <code>CASE</code> expressions avoids repeated evaluation, accelerating common ETL patterns</li>
<li class=""><strong><code>MIN</code>/<code>MAX</code> Aggregate Dynamic Filters</strong>: Queries with <code>MIN</code>/<code>MAX</code> aggregates now create dynamic filters during scan to prune files and rows as tighter bounds are discovered during execution</li>
<li class=""><strong>New Merge Join</strong>: Rewritten sort-merge join (SMJ) operator with speedups of three orders of magnitude in pathological cases (e.g., TPC-H Q21: minutes → milliseconds)</li>
<li class=""><strong>Caching Improvements</strong>: New statistics cache for file metadata avoids repeatedly recalculating statistics, significantly improving planning time. A prefix-aware list-files cache accelerates evaluating partition predicates for Hive partitioned tables</li>
<li class=""><strong>Improved Hash Join Filter Pushdown</strong>: Build-side hash map contents are now passed dynamically to probe-side scans for pruning files, row groups, and individual rows</li>
</ul>
<p><strong>Major Features</strong>:</p>
<ul>
<li class=""><strong>Sort Pushdown to Scans</strong>: Sorts are pushed into data sources, enabling ~30x performance improvement on pre-sorted data with top-K queries. Parquet scans now reverse row group order for <code>DESC</code> queries on <code>ASC</code>-sorted files</li>
<li class=""><strong><code>TableProvider</code> supports <code>DELETE</code> and <code>UPDATE</code></strong>: New hooks for <code>DELETE</code> and <code>UPDATE</code> statements in the <code>TableProvider</code> trait, enabling Iceberg and Cayenne connectors to implement SQL <code>DELETE</code> and <code>UPDATE</code> operations</li>
<li class=""><strong>More Extensible SQL Planning</strong>: New <code>RelationPlanner</code> API for extending SQL planning for <code>FROM</code> clauses, enabling support for vendor-specific SQL dialects</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ddl-support-for-iceberg-and-cayenne">DDL Support for Iceberg and Cayenne<a href="https://spiceai.org/releases/v2.0-rc.1#ddl-support-for-iceberg-and-cayenne" class="hash-link" aria-label="Direct link to DDL Support for Iceberg and Cayenne" title="Direct link to DDL Support for Iceberg and Cayenne" translate="no">​</a></h3>
<p><strong>SQL Schema Management</strong>: Spice now supports <code>CREATE TABLE</code> and <code>DROP TABLE</code> DDL operations for <a href="https://iceberg.apache.org/" target="_blank" rel="noopener noreferrer" class="">Iceberg</a> and <a href="https://spiceai.org/docs/components/data-accelerators/cayenne" target="_blank" rel="noopener noreferrer" class="">Cayenne</a> catalogs via FlightSQL and the <code>/v1/sql</code> API. DML validation has been updated for catalog-level writability.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ducklake-catalog--data-connector">DuckLake Catalog &amp; Data Connector<a href="https://spiceai.org/releases/v2.0-rc.1#ducklake-catalog--data-connector" class="hash-link" aria-label="Direct link to DuckLake Catalog &amp; Data Connector" title="Direct link to DuckLake Catalog &amp; Data Connector" translate="no">​</a></h3>
<p><strong>Lakehouse-Style Data Management</strong>: New <a href="https://ducklake.select/" target="_blank" rel="noopener noreferrer" class="">DuckLake</a> catalog and data connector enable lakehouse-style data management with DuckDB as the metadata catalog and object storage for data files. DuckLake provides ACID transactions, time travel, and schema evolution on top of Parquet files.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="gcs-data-connector-alpha">GCS Data Connector (Alpha)<a href="https://spiceai.org/releases/v2.0-rc.1#gcs-data-connector-alpha" class="hash-link" aria-label="Direct link to GCS Data Connector (Alpha)" title="Direct link to GCS Data Connector (Alpha)" translate="no">​</a></h3>
<p><strong>Google Cloud Storage Support</strong>: New <a href="https://cloud.google.com/storage" target="_blank" rel="noopener noreferrer" class="">Google Cloud Storage</a> data connector enables federated queries against data stored in GCS buckets, with Iceberg table support.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rust-cli-rewrite">Rust CLI Rewrite<a href="https://spiceai.org/releases/v2.0-rc.1#rust-cli-rewrite" class="hash-link" aria-label="Direct link to Rust CLI Rewrite" title="Direct link to Rust CLI Rewrite" translate="no">​</a></h3>
<p><strong>Unified Single-Binary Experience</strong>: The Spice CLI has been completely rewritten from Go to Rust, eliminating the Go dependency and providing a single <code>spice</code> binary built from the same codebase as <code>spiced</code>. This improves startup performance, reduces distribution size, and ensures consistent behavior between CLI and runtime.</p>
<p><strong>Key Features</strong>:</p>
<ul>
<li class=""><strong>Full Feature Parity</strong>: All 27+ CLI commands re-implemented in Rust with identical behavior</li>
<li class=""><strong>New <code>spice query</code> Command</strong>: Interactive REPL for <a href="https://spiceai.org/docs/features/query-federation/async-queries" target="_blank" rel="noopener noreferrer" class="">async queries</a> via the <code>/v1/queries</code> API with multi-line SQL input, spinner progress indicator, Ctrl+C cancellation, and partial query ID matching</li>
<li class=""><strong><code>--output=json</code> Flag</strong>: Machine-readable JSON output for CLI commands, enabling scripting and automation</li>
<li class=""><strong><code>spice login --output</code></strong>: New output modes (<code>env</code>, <code>json</code>, <code>keychain</code>) for flexible credential management</li>
<li class=""><strong><code>spice cloud metrics</code></strong>: New command for Spice Cloud deployment metrics</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="models-included-by-default">Models Included by Default<a href="https://spiceai.org/releases/v2.0-rc.1#models-included-by-default" class="hash-link" aria-label="Direct link to Models Included by Default" title="Direct link to Models Included by Default" translate="no">​</a></h3>
<p>Local LLM/ML model inference (via <code>mistral.rs</code>) is now included in the default Spice build. The separate <code>models</code> build variant has been removed. This simplifies installation and ensures all users have access to local AI inference capabilities.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="error-propagation-for-dataset-and-model-status-apis">Error Propagation for Dataset and Model Status APIs<a href="https://spiceai.org/releases/v2.0-rc.1#error-propagation-for-dataset-and-model-status-apis" class="hash-link" aria-label="Direct link to Error Propagation for Dataset and Model Status APIs" title="Direct link to Error Propagation for Dataset and Model Status APIs" translate="no">​</a></h3>
<p>The <code>/v1/datasets</code> and <code>/v1/models</code> APIs now return structured error information when a component is in an <code>Error</code> state. The <code>?status=true</code> query parameter must be passed to retrieve the real-time component status, including the error state and details. Previously, the status field only indicated <code>Error</code> with no further detail. Now, two new fields are included when <code>?status=true</code> is specified:</p>
<ul>
<li class=""><strong><code>error</code></strong>: A structured object with <code>category</code>, <code>type</code>, and <code>code</code> fields for programmatic error handling (e.g. <code>{ "category": "dataset", "type": "auth", "code": "dataset.auth" }</code>).</li>
<li class=""><strong><code>error_message</code></strong>: A human-readable description of why the component entered an error state.</li>
</ul>
<p>These fields are only present when <code>?status=true</code> is passed and the component is in an error state.</p>
<p><strong>Example <code>/v1/datasets?status=true</code> response:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"from"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"postgres:syncs"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"daily_journal"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"replication_enabled"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"acceleration_enabled"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"status"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Ready"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"from"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"databricks:hive_metastore.default.messages"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"name"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"messages"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"replication_enabled"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"acceleration_enabled"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"status"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Error"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"error"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"category"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"dataset"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"type"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"auth"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token property" style="color:hsl(5, 74%, 59%)">"code"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"dataset.auth"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"error_message"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Unable to authenticate with datasource credentials"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><br></div></code></pre></div></div>
<p>The <code>spice datasets</code> and <code>spice models</code> CLI commands now include an <code>ERROR</code> column that displays the error message for any component in an error state.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="additional-dependency-upgrades">Additional Dependency Upgrades<a href="https://spiceai.org/releases/v2.0-rc.1#additional-dependency-upgrades" class="hash-link" aria-label="Direct link to Additional Dependency Upgrades" title="Direct link to Additional Dependency Upgrades" translate="no">​</a></h3>
<table><thead><tr><th>Dependency</th><th>Version</th></tr></thead><tbody><tr><td><strong>Ballista</strong></td><td>v52.0.0</td></tr><tr><td><strong>DuckDB</strong></td><td>v1.4.4</td></tr><tr><td><strong>delta_kernel</strong></td><td>v0.18.2</td></tr><tr><td><strong>mistral.rs</strong></td><td>v0.7.0 (candle fork removed, now uses candle 0.9.2 from crates.io)</td></tr><tr><td><strong>Turso (libsql)</strong></td><td>v0.4.4</td></tr><tr><td><strong>Vortex</strong></td><td>Upgraded with CASE-WHEN support</td></tr><tr><td><strong>AWS SDK</strong></td><td>Multiple crates updated + APN user-agent support</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="other-improvements">Other Improvements<a href="https://spiceai.org/releases/v2.0-rc.1#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>Spicepod v2 Support</strong>: Spicepods now support version <code>v2</code>, and <code>spice init</code> generates <code>spicepod.yaml</code> files with <code>version: v2</code> by default while maintaining backward compatibility for existing <code>v1</code> spicepods.</li>
<li class=""><strong>x.ai Models</strong>: x.ai models now exclusively use the <code>/v1/responses</code> endpoint with rate limiting support.</li>
<li class=""><strong>HuggingFace Chat Templates</strong>: Added support for chat templates in HuggingFace model configurations.</li>
<li class=""><strong>Databricks SQL Dialect</strong>: Added Databricks SQL dialect for DataFusion unparser, improving federation query generation.</li>
<li class=""><strong>Snowflake</strong>: Added <code>snowflake_private_key</code> parameter for key-pair authentication.</li>
<li class=""><strong>Acceleration Metrics</strong>: New <code>rows_written</code>, <code>bytes_written</code>, and <code>dataset_acceleration_size_bytes</code> metrics for acceleration refresh ingestion.</li>
<li class=""><strong>Refresh SQL UDFs</strong>: Core scalar UDFs are now enabled in refresh SQL expressions.</li>
<li class=""><strong>FlightSQL</strong>: Fixed TLS connection handling for <code>grpc+tls://</code> endpoints with custom CA certificate support.</li>
<li class=""><strong>FlightSQL</strong>: Fixed schema consistency by expanding view types and verifying field names.</li>
<li class=""><strong>Hash Index</strong>: Fixed query correctness when hash index is used with additional filters.</li>
<li class=""><strong>Results Cache</strong>: Fixed schema preservation for empty query results.</li>
<li class=""><strong>Query Nullability</strong>: Reconciled execution stream nullability with logical plan schema.</li>
<li class=""><strong>Schema Evolution</strong>: Graceful handling of schema evolution mismatch errors during data refresh.</li>
<li class=""><strong>Internal YAML Parser</strong>: Replaced deprecated <code>serde_yaml</code> with an internal YAML implementation.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="spicepod-v1-to-v2-changes">Spicepod v1 to v2 Changes<a href="https://spiceai.org/releases/v2.0-rc.1#spicepod-v1-to-v2-changes" class="hash-link" aria-label="Direct link to Spicepod v1 to v2 Changes" title="Direct link to Spicepod v1 to v2 Changes" translate="no">​</a></h3>
<p>Spicepod <code>v2</code> introduces configuration improvements while maintaining backward compatibility with <code>v1</code>. Existing <code>v1</code> spicepods continue to work — deprecated fields are automatically migrated at load time.</p>
<p><strong>Version support</strong>:</p>
<table><thead><tr><th>Version</th><th>Status</th></tr></thead><tbody><tr><td><code>v2</code></td><td>Default. Used by <code>spice init</code>.</td></tr><tr><td><code>v1</code></td><td>Supported. Deprecated fields auto-migrate.</td></tr><tr><td><code>v1beta1</code></td><td>Removed. No longer accepted.</td></tr></tbody></table>
<p><strong>Configuration changes</strong>:</p>
<table><thead><tr><th>v1 (deprecated)</th><th>v2 (preferred)</th><th>Notes</th></tr></thead><tbody><tr><td><code>runtime.results_cache</code></td><td><code>runtime.caching.sql_results</code></td><td>All fields migrate automatically. <code>cache_max_size</code> → <code>max_size</code>.</td></tr><tr><td><code>runtime.memory_limit</code></td><td><code>runtime.query.memory_limit</code></td><td>Auto-migrated. <code>query.memory_limit</code> takes priority if both set.</td></tr><tr><td><code>runtime.temp_directory</code></td><td><code>runtime.query.temp_directory</code></td><td>Auto-migrated. <code>query.temp_directory</code> takes priority if both set.</td></tr><tr><td><code>dataset.invalid_type_action</code></td><td><code>dataset.unsupported_type_action</code></td><td>Auto-migrated. v2 adds a new <code>string</code> variant.</td></tr></tbody></table>
<p><strong>New v2 fields</strong>:</p>
<ul>
<li class=""><code>runtime.ready_state</code> — Controls when the runtime reports ready (<code>on_load</code> default, or <code>on_registration</code>).</li>
<li class=""><code>runtime.flight.do_put_rate_limit_enabled</code> — Enable/disable FlightSQL DoPut rate limiting (default: <code>true</code>).</li>
<li class=""><code>runtime.query.spill_compression</code> — Compression for query spill files (e.g., <code>lz4_frame</code>).</li>
<li class=""><code>runtime.scheduler.partition_management</code> — Configure partition assignment interval, limits, and timeouts for distributed mode.</li>
<li class=""><code>runtime.caching.sql_results.stale_while_revalidate_ttl</code> — Serve stale cached results while revalidating in the background.</li>
<li class=""><code>runtime.caching.sql_results.encoding</code> — Cache entry compression (e.g., <code>zstd</code>).</li>
<li class=""><code>catalog.access: read_write_create</code> — New access mode for catalogs that support DDL operations.</li>
</ul>
<p><strong>Migration note</strong>: When both the deprecated v1 field and its v2 equivalent are set, the v2 field takes priority.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contributors">Contributors<a href="https://spiceai.org/releases/v2.0-rc.1#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/avishafir" target="_blank" rel="noopener noreferrer" class="">@avishafir</a></li>
<li class=""><a href="https://github.com/cluster2600" target="_blank" rel="noopener noreferrer" class="">@cluster2600</a></li>
<li class=""><a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a></li>
<li class=""><a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a></li>
<li class=""><a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a></li>
<li class=""><a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a></li>
<li class=""><a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a></li>
<li class=""><a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://spiceai.org/releases/v2.0-rc.1#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<ul>
<li class=""><strong>Cayenne and Distributed Query exit Beta</strong>: Beta warnings have been removed from documentation and code. Both features are now considered GA-ready.</li>
<li class=""><strong>Models included by default</strong>: The separate <code>models</code> build variant has been removed. Local LLM inference is now always included.</li>
<li class=""><strong>Spicepod version defaults to <code>v2</code></strong>: New spicepods created with <code>spice init</code> now default to <code>version: v2</code>. Existing <code>v1</code> spicepods remain supported, and <code>v1beta1</code> is no longer accepted.</li>
<li class=""><strong>Windows native builds removed</strong>: Native Windows builds are no longer provided. Use <a href="https://learn.microsoft.com/en-us/windows/wsl/" target="_blank" rel="noopener noreferrer" class="">WSL</a> for local development instead.</li>
<li class=""><strong>Metric renames</strong>: <code>accelerated_refresh</code> metrics renamed to <code>acceleration_refresh</code> for consistency. <code>last_refresh_time</code> gauge renamed to include milliseconds unit.</li>
<li class=""><strong>Caching config renamed</strong>: <code>ResultsCache</code> replaced with <code>SQLResultsCacheConfig</code> in configuration.</li>
<li class=""><strong>DuckDB parameter rename</strong>: <code>partitioned_write_flush_threshold</code> renamed to <code>partitioned_write_flush_threshold_rows</code>.</li>
<li class=""><strong>v1/search API</strong>: The <code>/v1/search</code> API now always returns an array in <code>matches</code>, even for single results.</li>
<li class=""><strong>x.ai model endpoint</strong>: x.ai models now exclusively use the <code>/v1/responses</code> endpoint.</li>
<li class=""><strong>Error messages</strong>: Error messages across S3 Vectors, ScyllaDB, Snowflake, ClickHouse, and other components have been refactored for clarity and consistency.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="cookbook-updates">Cookbook Updates<a href="https://spiceai.org/releases/v2.0-rc.1#cookbook-updates" class="hash-link" aria-label="Direct link to Cookbook Updates" title="Direct link to Cookbook Updates" translate="no">​</a></h2>
<p>New and updated <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> recipes:</p>
<ul>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/async-queries" target="_blank" rel="noopener noreferrer" class="">Async Queries</a></strong>: Submit long-running queries asynchronously and retrieve results later.</li>
<li class=""><strong><a href="https://github.com/spiceai/cookbook/blob/trunk/ducklake" target="_blank" rel="noopener noreferrer" class="">DuckLake Catalog Connector</a></strong>: Use DuckLake for lakehouse-style data management with ACID transactions and time travel.</li>
</ul>
<p>The <a href="https://spiceai.org/cookbook" target="_blank" rel="noopener noreferrer" class="">Spice Cookbook</a> includes 88 recipes to help you get started with Spice quickly and easily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upgrading">Upgrading<a href="https://spiceai.org/releases/v2.0-rc.1#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>To upgrade to v2.0.0-rc.1, use one of the following methods:</p>
<p><strong>CLI</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">spice upgrade</span><br></div></code></pre></div></div>
<p><strong>Homebrew</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew upgrade spiceai/spiceai/spice</span><br></div></code></pre></div></div>
<p><strong>Docker</strong>:</p>
<p>Pull the <code>spiceai/spiceai:2.0.0-rc.1</code> image:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">docker pull spiceai/spiceai:2.0.0-rc.1</span><br></div></code></pre></div></div>
<p>For available tags, see <a href="https://hub.docker.com/r/spiceai/spiceai/tags" target="_blank" rel="noopener noreferrer" class="">DockerHub</a>.</p>
<p><strong>Helm</strong>:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm repo update</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">helm upgrade spiceai spiceai/spiceai --version 2.0.0-rc.1</span><br></div></code></pre></div></div>
<p><strong>AWS Marketplace</strong>:</p>
<p>Spice is available in the <a href="https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-changed">What's Changed<a href="https://spiceai.org/releases/v2.0-rc.1#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changelog">Changelog<a href="https://spiceai.org/releases/v2.0-rc.1#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h3>
<ul>
<li class="">Add TPC-DS integration tests with S3 source and PostgreSQL acceleration by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9006" target="_blank" rel="noopener noreferrer" class="">#9006</a></li>
<li class="">fix(tests): fix flaky/slow/failing unit tests by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9009" target="_blank" rel="noopener noreferrer" class="">#9009</a></li>
<li class="">fix: Update benchmark snapshots for DF51 upgrade by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9008" target="_blank" rel="noopener noreferrer" class="">#9008</a></li>
<li class="">fix: add feature gate to rrf TEST_EMBEDDING_MODEL by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9017" target="_blank" rel="noopener noreferrer" class="">#9017</a></li>
<li class="">fix: features check by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9014" target="_blank" rel="noopener noreferrer" class="">#9014</a></li>
<li class="">fix: Enable Cayenne acceleration snapshots by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9020" target="_blank" rel="noopener noreferrer" class="">#9020</a></li>
<li class="">URL table support by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9018" target="_blank" rel="noopener noreferrer" class="">#9018</a></li>
<li class="">ScyllaDB key filter by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/8997" target="_blank" rel="noopener noreferrer" class="">#8997</a></li>
<li class="">fix: Schema mismatch when using column projection with HTTP caching by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9021" target="_blank" rel="noopener noreferrer" class="">#9021</a></li>
<li class="">Add more tests for HTTP caching with columns selection by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9025" target="_blank" rel="noopener noreferrer" class="">#9025</a></li>
<li class="">HTTP cache snapshots: default to <code>time_interval</code> and fix <code>snapshots_creation_policy: on_change</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9026" target="_blank" rel="noopener noreferrer" class="">#9026</a></li>
<li class="">Fix duplicate snapshot creation on startup by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9029" target="_blank" rel="noopener noreferrer" class="">#9029</a></li>
<li class="">Add ScyllaDB and SMB to the README table by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9034" target="_blank" rel="noopener noreferrer" class="">#9034</a></li>
<li class="">Remove waiting for runtime to be ready before creating snapshot by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9033" target="_blank" rel="noopener noreferrer" class="">#9033</a></li>
<li class="">Fix snapshot on_change policy to skip when no writes occurred by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9028" target="_blank" rel="noopener noreferrer" class="">#9028</a></li>
<li class="">Release notes for release <code>release/1.11.0-rc.2</code> by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9016" target="_blank" rel="noopener noreferrer" class="">#9016</a></li>
<li class="">ci: use arduino/setup-protoc for official protobuf compiler by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9036" target="_blank" rel="noopener noreferrer" class="">#9036</a></li>
<li class="">ci: install unzip on aarch64 runner for arduino/setup-protoc by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9038" target="_blank" rel="noopener noreferrer" class="">#9038</a></li>
<li class="">fix: don't fail release if upload to minio fails by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9039" target="_blank" rel="noopener noreferrer" class="">#9039</a></li>
<li class="">Add missing protoc step to setup-cc action by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9041" target="_blank" rel="noopener noreferrer" class="">#9041</a></li>
<li class="">fix: Update Search integration test snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9013" target="_blank" rel="noopener noreferrer" class="">#9013</a></li>
<li class="">Fix <code>formula_1</code> and <code>codebase_community</code> in <code>bird-bench</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9000" target="_blank" rel="noopener noreferrer" class="">#9000</a></li>
<li class="">Cayenne S3 Express One Zone improvements by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9015" target="_blank" rel="noopener noreferrer" class="">#9015</a></li>
<li class="">Add zlib1g-dev to CI by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9052" target="_blank" rel="noopener noreferrer" class="">#9052</a></li>
<li class="">Improve validation and logging for hash indexes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9047" target="_blank" rel="noopener noreferrer" class="">#9047</a></li>
<li class="">Upgrade Vortex with CASE-WHEN by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9051" target="_blank" rel="noopener noreferrer" class="">#9051</a></li>
<li class="">x.ai models now exclusively use /v1/responses endpoint by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9400" target="_blank" rel="noopener noreferrer" class="">#9400</a></li>
<li class="">Improvements for snapshot schema comparison by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9401" target="_blank" rel="noopener noreferrer" class="">#9401</a></li>
<li class="">v2.0 breaking changes by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9233" target="_blank" rel="noopener noreferrer" class="">#9233</a></li>
<li class="">Create <code>PartitionManagementTask</code> for scheduler to update accelerated table partition assignments by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9378" target="_blank" rel="noopener noreferrer" class="">#9378</a></li>
<li class="">refactor(Cayenne): route all write orchestration through <code>CayenneDataSink</code> by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9402" target="_blank" rel="noopener noreferrer" class="">#9402</a></li>
<li class="">Refactor benchmark to use QueryExecutor trait by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9418" target="_blank" rel="noopener noreferrer" class="">#9418</a></li>
<li class="">feat: Add spidapter build and release workflow by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9427" target="_blank" rel="noopener noreferrer" class="">#9427</a></li>
<li class="">Testoperator: add support for api-key when connecting to external spice instance by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9421" target="_blank" rel="noopener noreferrer" class="">#9421</a></li>
<li class="">Initial implementation of Ducklake catalog &amp; data connectors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9083" target="_blank" rel="noopener noreferrer" class="">#9083</a></li>
<li class="">Require <code>aws_lc_rs</code> since jsonwebtoken upgrade by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9426" target="_blank" rel="noopener noreferrer" class="">#9426</a></li>
<li class="">feat: Add spidapter tool by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9425" target="_blank" rel="noopener noreferrer" class="">#9425</a></li>
<li class="">Add release notes for 1.11.2 patch release by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9430" target="_blank" rel="noopener noreferrer" class="">#9430</a></li>
<li class="">feat(spidapter): integrate system-adapter-protocol with SCP provisioning by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9434" target="_blank" rel="noopener noreferrer" class="">#9434</a></li>
<li class="">Add DuckLake TPCH E2E workflow and federated Spicepod configuration by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9431" target="_blank" rel="noopener noreferrer" class="">#9431</a></li>
<li class="">fix(spidapter): use Flight handshake auth instead of x-api-key header by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9435" target="_blank" rel="noopener noreferrer" class="">#9435</a></li>
<li class="">[spidapter] Keep only what sparks joy by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9439" target="_blank" rel="noopener noreferrer" class="">#9439</a></li>
<li class="">Refactor binary operator balancing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9424" target="_blank" rel="noopener noreferrer" class="">#9424</a></li>
<li class="">feat: Add Iceberg DDL support (CREATE TABLE / DROP TABLE) for default catalog override by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9440" target="_blank" rel="noopener noreferrer" class="">#9440</a></li>
<li class="">Fix Flight SQL schema consistency: expand view types and verify field names by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9438" target="_blank" rel="noopener noreferrer" class="">#9438</a></li>
<li class="">Update spidapter for new system-adapter-protocol by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9442" target="_blank" rel="noopener noreferrer" class="">#9442</a></li>
<li class="">docs: fix typos and syntax errors in style guide and error handling docs by <a href="https://github.com/cluster2600" target="_blank" rel="noopener noreferrer" class="">@cluster2600</a> in <a href="https://github.com/spiceai/spiceai/pull/9445" target="_blank" rel="noopener noreferrer" class="">#9445</a></li>
<li class="">Add acceleration refresh ingestion metrics (rows_written, bytes_written) by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9461" target="_blank" rel="noopener noreferrer" class="">#9461</a></li>
<li class="">Refactor(Cayenne): Replace CatalogError and string based errors with Snafu errors by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9403" target="_blank" rel="noopener noreferrer" class="">#9403</a></li>
<li class="">Replace deprecated claude-3-5-haiku-latest with claude-haiku-4-5 by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9492" target="_blank" rel="noopener noreferrer" class="">#9492</a></li>
<li class="">Fix #9481: Preserve schema in results cache for empty query results by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9485" target="_blank" rel="noopener noreferrer" class="">#9485</a></li>
<li class="">Fix partition by serializing by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9474" target="_blank" rel="noopener noreferrer" class="">#9474</a></li>
<li class="">query: reconcile execution stream nullability with logical plan schema by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9486" target="_blank" rel="noopener noreferrer" class="">#9486</a></li>
<li class="">initial <code>spice-cloud-client</code> crate and <code>spice cloud metrics --app &lt;app-name&gt;</code>. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9480" target="_blank" rel="noopener noreferrer" class="">#9480</a></li>
<li class="">feat: Return dataset error message in datasets API by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9487" target="_blank" rel="noopener noreferrer" class="">#9487</a></li>
<li class="">Spicebench by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9447" target="_blank" rel="noopener noreferrer" class="">#9447</a></li>
<li class="">build(deps): consolidate dependabot dependency updates by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9504" target="_blank" rel="noopener noreferrer" class="">#9504</a></li>
<li class="">fix(cluster): route non-partitioned accelerated tables in distributed mode by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9508" target="_blank" rel="noopener noreferrer" class="">#9508</a></li>
<li class="">Enable core scalar UDFs in refresh SQL by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9502" target="_blank" rel="noopener noreferrer" class="">#9502</a></li>
<li class="">Fix metrics in Spidapter again by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9497" target="_blank" rel="noopener noreferrer" class="">#9497</a></li>
<li class="">fix(cluster): tolerate Completed-&gt;status propagation race in distributed query handle by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9510" target="_blank" rel="noopener noreferrer" class="">#9510</a></li>
<li class="">feat: Support distributed ingestion in cayenne catalog by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9506" target="_blank" rel="noopener noreferrer" class="">#9506</a></li>
<li class="">Fix Cayenne duplicate primary keys after DELETE + UPSERT CDC sequences by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9494" target="_blank" rel="noopener noreferrer" class="">#9494</a></li>
<li class="">fix(cluster): rewrite table scans inside subqueries for distributed execution by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9518" target="_blank" rel="noopener noreferrer" class="">#9518</a></li>
<li class="">fix: Set catalog mode to readwritecreate in spidapter by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9519" target="_blank" rel="noopener noreferrer" class="">#9519</a></li>
<li class="">Upgrade AWS SDK crates &amp; set APN user-agent in AWS SDK credential bridge by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/8328" target="_blank" rel="noopener noreferrer" class="">#8328</a></li>
<li class="">feat(runtime): add runtime ready_state on_registration semantics by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9522" target="_blank" rel="noopener noreferrer" class="">#9522</a></li>
<li class="">fix: Add spidapter post-setup retries by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9526" target="_blank" rel="noopener noreferrer" class="">#9526</a></li>
<li class="">Make partition discovery more robust and make initialization non-blocking by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9499" target="_blank" rel="noopener noreferrer" class="">#9499</a></li>
<li class="">Make <code>lint-rust-fix</code> support targeted packages and features by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9511" target="_blank" rel="noopener noreferrer" class="">#9511</a></li>
<li class="">Handle new Cloud SCP API by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9532" target="_blank" rel="noopener noreferrer" class="">#9532</a></li>
<li class="">Refactor and simplify streaming benchmarks by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9405" target="_blank" rel="noopener noreferrer" class="">#9405</a></li>
<li class="">fix: ensure spidapter only increments attempts on failures by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9534" target="_blank" rel="noopener noreferrer" class="">#9534</a></li>
<li class="">feat: Support specifying app resources in spidapter by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9536" target="_blank" rel="noopener noreferrer" class="">#9536</a></li>
<li class="">test(runtime): Spice Cayenne DDL integration test by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9535" target="_blank" rel="noopener noreferrer" class="">#9535</a></li>
<li class="">fix: Handle schema evolution mismatch errors during data refresh by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9527" target="_blank" rel="noopener noreferrer" class="">#9527</a></li>
<li class="">fix: resolve clippy lint warnings by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9547" target="_blank" rel="noopener noreferrer" class="">#9547</a></li>
<li class=""><code>pr-builds --tag &lt;TAG&gt;</code> for build_and_release.yml by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9507" target="_blank" rel="noopener noreferrer" class="">#9507</a></li>
<li class="">Add <code>--output</code> flag to <code>spice login</code> with env/json/keychain modes by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9541" target="_blank" rel="noopener noreferrer" class="">#9541</a></li>
<li class="">Don't use 'PartitionedTableScanRewrite' in async distributed query by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9548" target="_blank" rel="noopener noreferrer" class="">#9548</a></li>
<li class="">feat(spidapter): add local backend mode with single executor by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9531" target="_blank" rel="noopener noreferrer" class="">#9531</a></li>
<li class="">support chat template in HF by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9543" target="_blank" rel="noopener noreferrer" class="">#9543</a></li>
<li class="">fix(cayenne): stream PK retention deletes and run OOM regression in CI by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9533" target="_blank" rel="noopener noreferrer" class="">#9533</a></li>
<li class="">cayenne: Staged append writes to prevent partial writes and data loss on stream error by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9491" target="_blank" rel="noopener noreferrer" class="">#9491</a></li>
<li class=""><code>AcceleratedTable::scan</code> use <code>FederatedTable::scan</code> when <code>ClusterRole::Scheduler</code> by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9550" target="_blank" rel="noopener noreferrer" class="">#9550</a></li>
<li class="">Upgrade to delta-kernel-rs v0.18.2 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9528" target="_blank" rel="noopener noreferrer" class="">#9528</a></li>
<li class="">Run cayenne tests as part of PR CI by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9554" target="_blank" rel="noopener noreferrer" class="">#9554</a></li>
<li class="">Upgrade to DataFusion v52.2.0 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9419" target="_blank" rel="noopener noreferrer" class="">#9419</a></li>
<li class="">Remove Snapshot Compaction + Add snapshot existence check by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9523" target="_blank" rel="noopener noreferrer" class="">#9523</a></li>
<li class="">Update dependencies by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9566" target="_blank" rel="noopener noreferrer" class="">#9566</a></li>
<li class="">fix: Update benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9565" target="_blank" rel="noopener noreferrer" class="">#9565</a></li>
<li class="">fix: Compare Cayenne table configuration on startup by <a href="https://github.com/peasee" target="_blank" rel="noopener noreferrer" class="">@peasee</a> in <a href="https://github.com/spiceai/spiceai/pull/9529" target="_blank" rel="noopener noreferrer" class="">#9529</a></li>
<li class="">Make <code>Refresh::refresh_sql</code> more robust to alterations over time. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9549" target="_blank" rel="noopener noreferrer" class="">#9549</a></li>
<li class="">fix: Update datafusion-table-providers dependency to latest revision by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9574" target="_blank" rel="noopener noreferrer" class="">#9574</a></li>
<li class="">Unset <code>AWS_ENDPOINT_URL</code> when empty by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9575" target="_blank" rel="noopener noreferrer" class="">#9575</a></li>
<li class="">fix: allow BytesProcessedExec repartitioning for unordered input by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9540" target="_blank" rel="noopener noreferrer" class="">#9540</a></li>
<li class="">Sanitize DataFusion errors by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9530" target="_blank" rel="noopener noreferrer" class="">#9530</a></li>
<li class="">Add conditional logging for partition assignments by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9577" target="_blank" rel="noopener noreferrer" class="">#9577</a></li>
<li class="">use 'properly early exit on SIGTERM' by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9573" target="_blank" rel="noopener noreferrer" class="">#9573</a></li>
<li class="">Update datafusion to 52.2.0 by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9582" target="_blank" rel="noopener noreferrer" class="">#9582</a></li>
<li class="">Ensure we query one and only one partition per request by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9416" target="_blank" rel="noopener noreferrer" class="">#9416</a></li>
<li class="">feat: Add support for Spicepod version v2 by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9583" target="_blank" rel="noopener noreferrer" class="">#9583</a></li>
<li class="">[SpiceDQ] Improve error messages; Avoid race condition on allocate_initial_partitions. by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9579" target="_blank" rel="noopener noreferrer" class="">#9579</a></li>
<li class="">Update ballista dependencies to latest 52.0.0 revision by <a href="https://github.com/lukekim" target="_blank" rel="noopener noreferrer" class="">@lukekim</a> in <a href="https://github.com/spiceai/spiceai/pull/9581" target="_blank" rel="noopener noreferrer" class="">#9581</a></li>
<li class="">Fix Databricks spark_connect mode always disabled by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9586" target="_blank" rel="noopener noreferrer" class="">#9586</a></li>
<li class="">Support partitioning in Arrow accelerator by <a href="https://github.com/Jeadie" target="_blank" rel="noopener noreferrer" class="">@Jeadie</a> in <a href="https://github.com/spiceai/spiceai/pull/9571" target="_blank" rel="noopener noreferrer" class="">#9571</a></li>
<li class="">Fix <code>spice query</code> CLI response deserialization by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9588" target="_blank" rel="noopener noreferrer" class="">#9588</a></li>
<li class="">fix: Update benchmark snapshots by <a href="https://github.com/app/github-actions" target="_blank" rel="noopener noreferrer" class="">@app/github-actions</a> in <a href="https://github.com/spiceai/spiceai/pull/9584" target="_blank" rel="noopener noreferrer" class="">#9584</a></li>
<li class="">fix: Share RuntimeEnv across Cayenne read/write/delete paths for targeted list_files_cache invalidation by <a href="https://github.com/sgrebnov" target="_blank" rel="noopener noreferrer" class="">@sgrebnov</a> in <a href="https://github.com/spiceai/spiceai/pull/9589" target="_blank" rel="noopener noreferrer" class="">#9589</a></li>
<li class="">feat: Add file:// state_location support for async queries scheduler by <a href="https://github.com/phillipleblanc" target="_blank" rel="noopener noreferrer" class="">@phillipleblanc</a> in <a href="https://github.com/spiceai/spiceai/pull/9590" target="_blank" rel="noopener noreferrer" class="">#9590</a></li>
<li class="">Update endgame links by <a href="https://github.com/krinart" target="_blank" rel="noopener noreferrer" class="">@krinart</a> in <a href="https://github.com/spiceai/spiceai/pull/9598" target="_blank" rel="noopener noreferrer" class="">#9598</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/spiceai/spiceai/compare/v1.11.2...v2.0.0-rc.1" target="_blank" rel="noopener noreferrer" class="">https://github.com/spiceai/spiceai/compare/v1.11.2...v2.0.0-rc.1</a></p>]]></content:encoded>
            <category>release</category>
            <category>distributed-query</category>
            <category>cayenne</category>
            <category>datafusion</category>
            <category>ducklake</category>
            <category>gcp</category>
            <category>Rust</category>
            <category>data-connector</category>
        </item>
    </channel>
</rss>