PageSourceSearch

https://spiceai.org/assets/js/778dfb90.2408a8ab.js

js spiceai.org collected 2026-10-02 11:05:41 UTC 53,017 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["115883"],{615900(e,i,s){s.r(i),s.d(i,{assets:()=>a,contentTitle:()=>l,default:()=>o,frontMatter:()=>c,metadata:()=>r,toc:()=>h});var r=s(401474),n=s(474848),t=s(28453);let c={date:new Date("2026-01-07T00:00:00.000Z"),title:"Spice v1.11.0-rc.1 (Jan 6, 2026)",type:"blog",authors:["ewgenius"],tags:["release","distributed-query","cayenne","acceleration","data-connector","llm-tool"]},l,a={authorsImageUrls:[void 0]},h=[{value:"What's New in v1.11.0-rc.1",id:"whats-new-in-v1110-rc1",level:2},{value:"Distributed Query with mTLS",id:"distributed-query-with-mtls",level:3},{value:"SMB and NFS Data Connectors",id:"smb-and-nfs-data-connectors",level:3},{value:"Prepared Statements",id:"prepared-statements",level:3},{value:"Spice Cayenne Accelerator Enhancements",id:"spice-cayenne-accelerator-enhancements",level:3},{value:"Google LLM Support",id:"google-llm-support",level:3},{value:"Spice Java SDK v0.5.0",id:"spice-java-sdk-v050",level:3},{value:"OpenTelemetry Improvements",id:"opentelemetry-improvements",level:3},{value:"Developer Experience Improvements",id:"developer-experience-improvements",level:3},{value:"Additional Improvements & Bug Fixes",id:"additional-improvements--bug-fixes",level:3},{value:"Contributors",id:"contributors",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"OTel Ingestion Port Change",id:"otel-ingestion-port-change",level:3},{value:"Distributed Query Cluster Mode Requires mTLS",id:"distributed-query-cluster-mode-requires-mtls",level:3},{value:"Cookbook Updates",id:"cookbook-updates",level:2},{value:"Upgrading",id:"upgrading",level:2},{value:"What's Changed",id:"whats-changed",level:2},{value:"Changelog",id:"changelog",level:3}];function d(e){let i={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(i.p,{children:["Announcing the release of Spice v1.11.0-rc.1! ","\u2B50"]}),"\n",(0,n.jsxs)(i.p,{children:["v1.11.0-rc.1 is the first release candidate for early testing of v1.11 features including ",(0,n.jsx)(i.strong,{children:"Distributed Query with mTLS"})," for enterprise-grade secure cluster communication, new ",(0,n.jsx)(i.strong,{children:"SMB and NFS Data Connectors"})," for direct network-attached storage access, ",(0,n.jsx)(i.strong,{children:"Prepared Statements"})," for improved query performance and security, ",(0,n.jsx)(i.strong,{children:"Cayenne Accelerator Enhancements"})," with Key-based deletion vectors and Amazon S3 Express One Zone support, ",(0,n.jsx)(i.strong,{children:"Google LLM Support"})," for expanded AI inference capabilities, and ",(0,n.jsx)(i.strong,{children:"Spice Java SDK v0.5.0"})," with parameterized query support."]}
1),"\n",(0,n.jsx)(i.h2,{id:"whats-new-in-v1110-rc1",children:"What's New in v1.11.0-rc.1"}),"\n",(0,n.jsx)(i.h3,{id:"distributed-query-with-mtls",children:"Distributed Query with mTLS"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Enterprise-Grade Secure Cluster Communication"}),": ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/features/distributed-query",children:"Distributed query"})," cluster mode now enables mutual TLS (mTLS) by default for secure communication between schedulers and executors. Internal cluster communication includes highly privileged RPC calls like fetching Spicepod configuration and expanding secrets. mTLS ensures only authenticated nodes can join the cluster and access sensitive data."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Key Features"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Mutual TLS Authentication"}),": All executor-to-scheduler and executor-to-executor gRPC connections on the internal cluster port (50052) are secured with mTLS, securing communication, and preventing unauthorized nodes from joining the cluster"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Certificate Management CLI"}),": New developer ",(0,n.jsx)(i.code,{children:"spice cluster tls init"})," and ",(0,n.jsx)(i.code,{children:"spice cluster tls add"})," commands for generating CA certificates and node certificates with proper SANs (Subject Alternative Names)"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Simplified CLI Arguments"}),": Renamed cluster arguments for clarity (",(0,n.jsx)(i.code,{children:"--role"}),", ",(0,n.jsx)(i.code,{children:"--scheduler-address"}),", ",(0,n.jsx)(i.code,{children:"--node-mtls-*"}),") with ",(0,n.jsx)(i.code,{children:"--scheduler-address"})," implying ",(0,n.jsx)(i.code,{children:"--role executor"})]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Port Separation"}),": Public services (Flight queries, HTTP API, Prometheus metrics) remain on ports 50051, 8090, and 9090 respectively, while internal cluster services (",(0,n.jsx)(i.code,{children:"SchedulerGrpcServer"}),", ",(0,n.jsx)(i.code,{children:"ClusterService"}),") are isolated on port 50052 with mTLS enforced"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Development Mode"}),": Use ",(0,n.jsx)(i.code,{children:"--allow-insecure-connections"})," flag to disable mTLS requirement for local development and testing"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Quick Start"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"# Generate certificates for development\r\nspice cluster tls init\r\nspice cluster tls add scheduler1\r\nspice cluster tls add executor1\r\n\r\n# Start scheduler\r\nspiced --role scheduler \\\r\n  --node-mtls-ca-certificate-file ca.crt \\\r\n  --node-mtls-certificate-file scheduler1.crt \\\r\n  --node-mtls-key-file scheduler1.key\r\n\r\n# Start executor\r\nspiced --role executor \\\r\n  --scheduler-address https://scheduler1:50052 \\\r\n  --node-mtls-ca-certificate-file ca.crt \\\r\n  --node-mtls-certificate-file executor1.crt \\\r\n  --node-mtls-key-file executor1.key\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/features/distributed-query",children:"Distributed Query Documentation"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"smb-and-nfs-data-connectors",children:"SMB and NFS Data Connectors"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Network-Attached Storage Connectors"}),": New ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/components/data-connectors",children:"data connectors"})," for SMB (Server Message Block) and NFS (Network File System) protocols enable direct federated queries against network-attached storage without requiring data movement to cloud object stores."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Key Features"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"SMB Protocol Support"}),": Connect to Windows file shares and Samba servers with authentication support"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"NFS Protocol Support"}),": Connect to Unix/Linux NFS exports for direct data access"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Federated Quer
1ies"}),": Query Parquet, CSV, JSON, and other file formats directly from network storage with full SQL support"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Acceleration Support"}),": Accelerate data from SMB/NFS sources using DuckDB, Spice Cayenne, or other accelerators"]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Example spicepod.yaml configuration:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"datasets:\r\n  # SMB share\r\n  - from: smb://fileserver/share/data.parquet\r\n    name: smb_data\r\n    params:\r\n      smb_username: ${secrets:SMB_USER}\r\n      smb_password: ${secrets:SMB_PASS}\r\n\r\n  # NFS export\r\n  - from: nfs://nfsserver/export/data.parquet\r\n    name: nfs_data\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/components/data-connectors",children:"Data Connectors Documentation"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"prepared-statements",children:"Prepared Statements"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Improved Query Performance and Security"}),": Spice now supports prepared statements, enabling parameterized queries that improve both performance through query plan caching and security by preventing SQL injection attacks."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Key Features"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Query Plan Caching"}),": Prepared statements cache query plans, reducing planning overhead for repeated queries"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"SQL Injection Prevention"}),": Parameters are safely bound, preventing SQL injection vulnerabilities"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Arrow Flight SQL Support"}),": Full prepared statement support via ",(0,n.jsx)(i.a,{href:"https://arrow.apache.org/docs/format/FlightSql.html",children:"Arrow Flight SQL"})," protocol"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"SDK Support"}),":"]}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"SDK"}),(0,n.jsx)(i.th,{children:"Support"}),(0,n.jsx)(i.th,{children:"Min Version"}),(0,n.jsx)(i.th,{children:"Method"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/gospice",children:"gospice"})," (Go)"]}),(0,n.jsx)(i.td,{children:"\u2705 Full"}),(0,n.jsx)(i.td,{children:"v8.0.0+"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"SqlWithParams()"})," with typed constructors (",(0,n.jsx)(i.code,{children:"Int32Param"}),", ",(0,n.jsx)(i.code,{children:"StringParam"}),", ",(0,n.jsx)(i.code,{children:"TimestampParam"}),", etc.)"]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice-rs",children:"spice-rs"})," (Rust)"]}),(0,n.jsx)(i.td,{children:"\u2705 Full"}),(0,n.jsx)(i.td,{children:"v3.0.0+"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"query_with_params()"})," with ",(0,n.jsx)(i.code,{children:"RecordBatch"})," parameters"]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice-dotnet",children:"spice-dotnet"})," (.NET)"]}),(0,n.jsx)(i.td,{children:"\u274C Not yet"}),(0,n.jsx)(i.td,{children:"-"}),(0,n.jsx)(i.td,{children:"Coming soon"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice-java",children:"spice-java"})," (Java)"]}),(0,n.jsx)(i.td,{children:"\u2705 Full"}),(0,n.jsx)(i.td,{children:"v0.5.0+"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"queryWithParams()"})," with typed ",(0,n.jsx)(i.code,{children:"Param"})," constructors (",(0,n.jsx)(i.code,{children:"Param.int64()"}),", ",(0,n.jsx)(i.code,{children:"Param.string()"}),", etc.)"]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice.js",children:"spice.js"})," (JavaScript)"]}),(0,n.jsx)(i.td,{children:"\u274C Not yet"}),(0,n.jsx)(i.td,{children:"-"}),(0,n.jsx)(i.td,{children:"Coming soon"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spicepy",children:"spicepy"})," (Python)"]}),(0,n.jsx)(i.td,{children:"\u274C Not yet"}),(0,n.jsx)(i.td,{children:"-"}),(0,n.jsx)(i.td,{children:"Coming soon"})]})]})]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Example (Go)"}),":"]}
1),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-go",children:'import "github.com/spiceai/gospice/v8"\r\n\r\nclient, _ := spice.NewClient()\r\ndefer client.Close()\r\n\r\n// Parameterized query with typed parameters\r\nresults, _ := client.SqlWithParams(ctx,\r\n    "SELECT * FROM products WHERE price > $1 AND category = $2",\r\n    spice.Float64Param(10.0),\r\n    spice.StringParam("electronics"),\r\n)\n'})}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Example (Java)"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:'import ai.spice.SpiceClient;\r\nimport ai.spice.Param;\r\nimport org.apache.arrow.adbc.core.ArrowReader;\r\n\r\ntry (SpiceClient client = new SpiceClient()) {\r\n    // With automatic type inference\r\n    ArrowReader reader = client.queryWithParams(\r\n        "SELECT * FROM products WHERE price > $1 AND category = $2",\r\n        10.0, "electronics");\r\n\r\n    // With explicit typed parameters\r\n    ArrowReader reader = client.queryWithParams(\r\n        "SELECT * FROM products WHERE price > $1 AND category = $2",\r\n        Param.float64(10.0),\r\n        Param.string("electronics"));\r\n}\n'})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/features/query-federation/parameterized-queries",children:"Parameterized Queries Documentation"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"spice-cayenne-accelerator-enhancements",children:"Spice Cayenne Accelerator Enhancements"}),"\n",(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/components/data-accelerators/cayenne",children:"Spice Cayenne data accelerator"})," has been improved with several key enhancements:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"KeyBased Deletion Vectors"}),": Improved deletion vector support using key-based lookups for more efficient data management and faster delete operations. KeyBased deletion vectors are more memory-efficient than positional vectors for sparse deletions."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"S3 Express One Zone Support"}),": Store Cayenne data files in ",(0,n.jsx)(i.a,{href:"https://aws.amazon.com/s3/storage-classes/express-one-zone/",children:"S3 Express One Zone"})," for single-digit millisecond latency, ideal for latency-sensitive query workloads that require persistence."]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Example spicepod.yaml configuration:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"datasets:\r\n  - from: s3://my-bucket/data.parquet\r\n    name: fast_data\r\n    acceleration:\r\n      enabled: true\r\n      engine: cayenne\r\n      mode: file\r\n      params:\r\n        # Use S3 Express One Zone for data files\r\n        cayenne_s3express_bucket: my-express-bucket--usw2-az1--x-s3\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/components/data-accelerators/cayenne",children:"Cayenne Documentation"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"google-llm-support",children:"Google LLM Support"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Expanded AI Provider Support"}),": Spice now supports Google embedding and chat models via the Google AI provider, expanding the available LLM options for AI inference workloads alongside existing providers like OpenAI, Anthropic, and AWS Bedrock."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Key Features"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Google Chat Models"}),": Access Google's Gemini models for chat completions"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Google Embeddings"}),": Generate embeddings using Google's text embedding models"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Unified API"}),": Use the same OpenAI-compatible API endpoints for all LLM providers"]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Example spicepod.yaml configuration:"}
1),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"models:\r\n  - from: google:gemini-2.0-flash\r\n    name: gemini\r\n    params:\r\n      google_api_key: ${secrets:GOOGLE_API_KEY}\r\n\r\nembeddings:\r\n  - from: google:text-embedding-004\r\n    name: google_embeddings\r\n    params:\r\n      google_api_key: ${secrets:GOOGLE_API_KEY}\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://docs.spiceai.org/components/models/google",children:"Google LLM Documentation"})," (see ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/docs/pull/1286",children:"docs PR #1286"}),")."]}),"\n",(0,n.jsx)(i.h3,{id:"spice-java-sdk-v050",children:"Spice Java SDK v0.5.0"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Parameterized Query Support for Java"}),": The ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice-java",children:"Spice Java SDK"})," v0.5.0 introduces parameterized queries using ADBC (Arrow Database Connectivity), providing a safer and more efficient way to execute queries with dynamic parameters."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Key Features"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"SQL Injection Prevention"}),": Parameters are safely bound, preventing SQL injection vulnerabilities"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Automatic Type Inference"}),": Java types are automatically mapped to Arrow types (e.g., ",(0,n.jsx)(i.code,{children:"double"})," \u2192 ",(0,n.jsx)(i.code,{children:"Float64"}),", ",(0,n.jsx)(i.code,{children:"String"})," \u2192 ",(0,n.jsx)(i.code,{children:"Utf8"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Explicit Type Control"}),": Use the new ",(0,n.jsx)(i.code,{children:"Param"})," class with typed factory methods (",(0,n.jsx)(i.code,{children:"Param.int64()"}),", ",(0,n.jsx)(i.code,{children:"Param.string()"}),", ",(0,n.jsx)(i.code,{children:"Param.decimal128()"}),", etc.) for precise control over Arrow types"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Updated Dependencies"}),": Apache Arrow Flight SQL upgraded to 18.3.0, plus new ADBC driver support"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Example"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:'import ai.spice.SpiceClient;\r\nimport ai.spice.Param;\r\n\r\ntry (SpiceClient client = new SpiceClient()) {\r\n    // With automatic type inference\r\n    ArrowReader reader = client.queryWithParams(\r\n        "SELECT * FROM taxi_trips WHERE trip_distance > $1 LIMIT 10",\r\n        5.0);\r\n\r\n    // With explicit typed parameters for precise control\r\n    ArrowReader reader = client.queryWithParams(\r\n        "SELECT * FROM orders WHERE order_id = $1 AND amount >= $2",\r\n        Param.int64(12345),\r\n        Param.decimal128(new BigDecimal("99.99"), 10, 2));\r\n}\n'})}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Maven"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-xml",children:"<dependency>\r\n  <groupId>ai.spice</groupId>\r\n  <artifactId>spiceai</artifactId>\r\n  <version>0.5.0</version>\r\n</dependency>\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For more details, refer to the ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spice-java",children:"Spice Java SDK Repository"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"opentelemetry-improvements",children:"OpenTelemetry Improvements"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Unified Telemetry Endpoint"}),": OTel metrics ingestion has been consolidated to the Flight port (50051), simplifying deployment by removing the separate OTel port (50052). The push-based metrics exporter continues to support integration with OpenTelemetry collectors."]}),"\n",(0,n.jsxs)(i.blockquote,{children:["\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Note"}),": This is a breaking change. Update your configurations if you were using the dedicated OTel port 50052. Internal 
1cluster communication now uses port 50052 exclusively."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"developer-experience-improvements",children:"Developer Experience Improvements"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Turso v0.3.2 Upgrade"}),": Upgraded Turso accelerator for improved performance and reliability"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Rust 1.91 Upgrade"}),": Updated to Rust 1.91 for latest language features and performance improvements"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Spice Cloud CLI"}),": Added ",(0,n.jsx)(i.code,{children:"spice cloud"})," CLI commands for cloud deployment management"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Improved Spicepod Schema"}),": Enhanced JSON schema generation for better IDE support and validation"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Acceleration Snapshots"}),": Added configurable ",(0,n.jsx)(i.code,{children:"snapshots_create_interval"})," for periodic acceleration snapshots independent of refresh cycles"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Tiered Caching with Localpod"}),": The ",(0,n.jsx)(i.a,{href:"https://spiceai.org/docs/components/data-connectors/localpod",children:"Localpod connector"})," now supports ",(0,n.jsx)(i.code,{children:"caching"})," refresh mode, enabling multi-layer acceleration where a persistent cache feeds a fast in-memory cache"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"GitHub Data Connector"}),": Added workflows and workflow runs support for GitHub repositories"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"NDJSON/LDJSON Support"}
1),": Added support for Newline Delimited JSON and Line Delimited JSON file formats"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"additional-improvements--bug-fixes",children:"Additional Improvements & Bug Fixes"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Reliability"}),": Fixed DynamoDB IAM role authentication with new ",(0,n.jsx)(i.code,{children:"dynamodb_auth: iam_role"})," parameter"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Reliability"}),": Fixed cluster executors to use scheduler's ",(0,n.jsx)(i.code,{children:"temp_directory"})," parameter for shuffle files"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Reliability"}),": Initialize secrets before object stores in cluster executor mode"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Reliability"}),": Added page-level retry with backoff for transient GitHub GraphQL errors"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Performance"}),": Improved statistics for rewritten ",(0,n.jsx)(i.code,{children:"DistributeFileScanOptimizer"})," plans"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Developer Experience"}),": Added ",(0,n.jsx)(i.code,{children:"max_message_size"})," configuration for Flight service"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"contributors",children:"Contributors"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/mach-kernel",children:"@mach-kernel"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/ewgenius",children:"@ewgenius"})}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,n.jsx)(i.h3,{id:"otel-ingestion-port-change",children:"OTel Ingestion Port Change"}),"\n",(0,n.jsx)(i.p,{children:"OTel ingestion has been moved to the Flight port (50051), removing the separate OTel port 50052. Port 50052 is now used exclusively for internal cluster communication. Update your configurations if you were using the dedicated OTel port."}),"\n",(0,n.jsx)(i.h3,{id:"distributed-query-cluster-mode-requires-mtls",children:"Distributed Query Cluster Mode Requires mTLS"}),"\n",(0,n.jsx)(i.p,{children:"Distributed query cluster mode now requires mTLS for secure communication between cluster nodes. This is a security enhancement to prevent unauthorized nodes from joining the cluster and accessing secrets."}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Migration Steps"}),":"]}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["Generate certificates using ",(0,n.jsx)(i.code,{children:"spice cluster tls init"})," and ",(0,n.jsx)(i.code,{children:"spice cluster tls add"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update scheduler and executor startup commands with ",(0,n.jsx)(i.code,{children:"--node-mtls-*"})," arguments"]}),"\n",(0,n.jsxs)(i.li,{children:["For development/testing, use ",(0,n.jsx)(i.code,{children:"--allow-insecure-connections"})," to opt out of mTLS"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Renamed CLI Arguments"}),":"]}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Old Name"}),(0,n.jsx)(i.th,{children:"New Name"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-mode"})}
1),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--role"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-ca-certificate-file"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--node-mtls-ca-certificate-file"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-certificate-file"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--node-mtls-certificate-file"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-key-file"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--node-mtls-key-file"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-address"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--node-bind-address"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-advertise-address"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--node-advertise-address"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--cluster-scheduler-url"})}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"--scheduler-address"})})]})]})]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Removed CLI Arguments"}),":"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"--cluster-api-key"}),": Replaced by mTLS authentication"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"cookbook-updates",children:"Cookbook Updates"}),"\n",(0,n.jsx)(i.p,{children:"No major cookbook updates."}),"\n",(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.a,{href:"https://spiceai.org/cookbook",children:"Spice Cookbook"})," includes 84 recipes to help you get started with Spice quickly and easily."]}),"\n",(0,n.jsx)(i.h2,{id:"upgrading",children:"Upgrading"}),"\n",(0,n.jsx)(i.p,{children:"To try v1.11.0-rc.1, use one of the following methods:"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"CLI"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-console",children:"spice upgrade --version 1.11.0-rc.1\n"})}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Homebrew"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-console",children:"brew upgrade spiceai/spiceai/spice\n"})}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Docker"}),":"]}),"\n",(0,n.jsxs)(i.p,{children:["Pull the ",(0,n.jsx)(i.code,{children:"spiceai/spiceai:1.11.0-rc.1"})," image:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-console",children:"docker pull spiceai/spiceai:1.11.0-rc.1\n"})}),"\n",(0,n.jsxs)(i.p,{children:["For available tags, see ",(0,n.jsx)(i.a,{href:"https://hub.docker.com/r/spiceai/spiceai/tags",children:"DockerHub"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Helm"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-console",children:"helm repo update\r\nhelm upgrade spiceai spiceai/spiceai --version 1.11.0-rc.1\n"})}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"AWS Marketplace"}),":"]}),"\n",(0,n.jsxs)(i.p,{children:["\u{1F389} Spice is available in the ",(0,n.jsx)(i.a,{href:"https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i",children:"AWS Marketplace"}),"!"]}),"\n",(0,n.jsx)(i.h2,{id:"whats-changed",children:"What's Changed"}),"\n",(0,n.jsx)(i.h3,{id:"changelog",children:"Changelog"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["OTel exporter for push metrics by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8442",children:"#8442"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Update benchmark snapshots by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8448",children:"#8448"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add TPCH append tests to scheduled dispatch workflow by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8451",children:"#8451"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add snapshot creation logging by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8469",children:"#8469"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fix PeriodicReader panic by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8471",children:"#8471"})]}),"\n",(0,n.jsxs)(i.li,{children:["Benchmarks: increase readiness timeout for turso acceleration (TPC-H) by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8470",children:"#8470"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Pin CUDA build actions to commits by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8477",children:"#8477"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add Criterion benchmarking to ",(0,n.jsx)(i.co
1de,{children:"chunking"})," crate. by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8431",children:"#8431"})]}),"\n",(0,n.jsxs)(i.li,{children:["DuckDB agg pushdown: gate behind accelerator parameter by ",(0,n.jsx)(i.a,{href:"https://github.com/mach-kernel",children:"@mach-kernel"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8474",children:"#8474"})]}),"\n",(0,n.jsxs)(i.li,{children:["Rename ",(0,n.jsx)(i.code,{children:"aggregate_pushdown_optimization"})," -> ",(0,n.jsx)(i.code,{children:"optimizer_duckdb_aggregate_pushdown"})," by ",(0,n.jsx)(i.a,{href:"https://github.com/ewgenius",children:"@ewgenius"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8485",children:"#8485"})]}),"\n",(0,n.jsxs)(i.li,{children:["Handle throttling exception for DynamoDB streams by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8492",children:"#8492"})]}),"\n",(0,n.jsxs)(i.li,{children:["docs: Add release notes by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8478",children:"#8478"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update spicepod.schema.json by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8496",children:"#8496"})]}),"\n",(0,n.jsxs)(i.li,{children:["Move 'test_projection_pushdown' to ",(0,n.jsx)(i.code,{children:"runtime-datafusion"})," by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8490",children:"#8490"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fix OTEL metrics HTTP exporter client setup by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8489",children:"#8489"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update endgame to include new caching accelerator cookbook by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8487",children:"#8487"})]}),"\n",(0,n.jsxs)(i.li,{children:["DynamoDB tests and fixes by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8491",children:"#8491"})]}),"\n",(0,n.jsxs)(i.li,{children:["Align ",(0,n.jsx)(i.code,{children:"make lint-rust-fix"})," with ",(0,n.jsx)(i.code,{children:"make lint-rust"})," by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8499",children:"#8499"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Remove unused Cayenne parameters by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8500",children:"#8500"})]}),"\n",(0,n.jsxs)(i.li,{children:["Force task history ",(0,n.jsx)(i.code,{children:"captured_plan"})," outputs to be captured even if they would be filtered out otherwise by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8501",children:"#8501"})]}),"\n",(0,n.jsxs)(i.li,{children:["release: post-release updates by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8503",children:"#8503"})]}),"\n",(0,n.jsxs)(i.li,{children:["CI: Fix E2E models dispatch by ",(0,n.jsx)(i.a,{href:"https://github.com/mach-kernel",children:"@mach-kernel"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8505",children:"#8505"})]}),"\n",(0,n.jsxs)(i.li,{children:["Use an isolated Tokio runtime for refresh tasks that is separate from the main query API by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8504",children:"#8504"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update openapi.json by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8512",children:"#8512"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update dependencies by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8513",children:"#8513"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Avoid double hashing cache key by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8511",children:"#8511"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Eagerly drop cached records for results larger than max by ",(0,n.jsx)(i.a,{href:"https://github.com/peasee",children:"@peasee"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8516",children:"#8516"})]}),"\n",(0,n.jsxs)(i.li,{children:['Revert "fix: Move enforce-pulls to hosted runner (#8686)" by ',(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8709",children:"#8709"})]}),"\n",(0,n.jsxs)(i.li,{children:["Initial 'testoperator run text-to-sql' by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8618",children:"#8618"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add support for abfss by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8706",children:"#8706"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add testoperator TPCH dispatch for ABFS with hierarchical namespace disabled + versioning enabled by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8711",children:"#8711"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update openapi.json by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8692",children:"#8692"})]}),"\n",(0,n.jsxs)(i.li,{children:["cluster: validate --role argument by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8717",children:"#8717"})]}),"\n",(0,n.jsxs)(i.li,{children:["Upgrade to Turso v0.3.2 by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8716",children:"#8716"})]}),"\n",(0,n.jsxs)(i.li,{children:["Rename --insecure to --allow-insecure-connections to be consistent with existing naming by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8720",children:"#8720"})]}),"\n",(0,n.jsxs)(i.li,{children:["Remove 'testoperator run http-consistency/http-overhead' by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8708",children:"#8708"})]}),"\n",(0,n.jsxs)(i.li,{children:["refactor: Remove cluster feature flag by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8718",children:"#8718"})]}),"\n",(0,n.jsxs)(i.li,{children:["Docs: Distributed query ADR by ",(0,n.jsx)(i.a,{href:"https://github.com/mach-kernel",children:"@mach-kernel"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8608",children:"#8608"})]}
1),"\n",(0,n.jsxs)(i.li,{children:["Use ",(0,n.jsx)(i.code,{children:"model.datasets"})," to allowlist on tools by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8714",children:"#8714"})]}),"\n",(0,n.jsxs)(i.li,{children:["cluster: quality of life improvements to starting cluster mode locally by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8719",children:"#8719"})]}),"\n",(0,n.jsxs)(i.li,{children:["Docs: Ballista extension ADR by ",(0,n.jsx)(i.a,{href:"https://github.com/mach-kernel",children:"@mach-kernel"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8616",children:"#8616"})]}),"\n",(0,n.jsxs)(i.li,{children:["Improve deprecation messages when going from prefixed -> non-prefixed. by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8724",children:"#8724"})]}),"\n",(0,n.jsxs)(i.li,{children:["Remove ",(0,n.jsx)(i.code,{children:"tools"})," from auto-defaults by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8725",children:"#8725"})]}),"\n",(0,n.jsxs)(i.li,{children:["Make distinct providers for vector spilling, vector partitioning. by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8546",children:"#8546"})]}),"\n",(0,n.jsxs)(i.li,{children:["cluster: default scheduler address port by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8728",children:"#8728"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add Makefile targets for testoperator by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8729",children:"#8729"})]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"text-to-sql"})," dispatch in testoperator by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8705",children:"#8705"})]}),"\n",(0,n.jsxs)(i.li,{children:["DR-006: High Availability Distributed Query with Stateless Schedulers by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8721",children:"#8721"})]}),"\n",(0,n.jsxs)(i.li,{children:["DR-007: mTLS for Distributed Query Cluster Communication by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8722",children:"#8722"})]}),"\n",(0,n.jsxs)(i.li,{children:["SMB and NFS improvements by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8710",children:"#8710"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Cluster executors use scheduler's temp_directory for shuffle files by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8733",children:"#8733"})]}),"\n",(0,n.jsxs)(i.li,{children:["use 'max_message_size' in flight service too by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8730",children:"#8730"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add page-level retry for transient GraphQL errors with backoff and increase GitHub rate limit buffer up to 100 by ",(0,n.jsx)(i.a,{href:"https://github.com/ewgenius",children:"@ewgenius"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8726",children:"#8726"})]}),"\n",(0,n.jsxs)(i.li,{children:["Make testoperator Dockerfile;
1 CI to build docker image to ",(0,n.jsx)(i.code,{children:"ghcr.io"}),". by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8732",children:"#8732"})]}),"\n",(0,n.jsxs)(i.li,{children:["cluster: UnionProjectionPushdownOptimizer: Add projection pushdown diagnostics for union children by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8734",children:"#8734"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fix column projection order mismatch with location metadata columns by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8738",children:"#8738"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fixes for testoperator. by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8737",children:"#8737"})]}),"\n",(0,n.jsxs)(i.li,{children:["Improve Cayenne Deletion Vectors with KeyBased support by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8713",children:"#8713"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fix ",(0,n.jsx)(i.code,{children:"testoperator_dispatch.yaml"})," by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8740",children:"#8740"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add spice cloud CLI commands by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8528",children:"#8528"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add FTP, NFS, & SMB TPCH SF1 spicepods by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8739",children:"#8739"})]}),"\n",(0,n.jsxs)(i.li,{children:["Prepared Statements by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/7588",children:"#7588"})]}),"\n",(0,n.jsxs)(i.li,{children:["Schedule dispatch of ",(0,n.jsx)(i.code,{children:"testoperator run text-to-sql"}),".  by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8745",children:"#8745"})]}),"\n",(0,n.jsxs)(i.li,{children:["Fix minio for ai benchmark CI by ",(0,n.jsx)(i.a,{href:"https://github.com/Jeadie",children:"@Jeadie"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8743",children:"#8743"})]}),"\n",(0,n.jsxs)(i.li,{children:["Upgrade to Rust 1.91 by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8749",children:"#8749"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Update benchmark snapshots by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8763",children:"#8763"})]}),"\n",(0,n.jsxs)(i.li,{children:["Benchmarks: make row count validation skip logic configurable by scale factor, query set, and overrides by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8756",children:"#8756"})]}),"\n",(0,n.jsxs)(i.li,{children:["Make benchmark tests more robust by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8766",children:"#8766"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add parameter to force using iam_role for DynamoDB by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8767",children:"#8767"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: Update Search integration test snapshots by ",(0,n.jsx)(i.a,{href:"https://github.com/app/github-actions",children:"@app/github-actions"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8735",children:"#8735"})]}),"\n",(0,n.jsxs)(i.li,{children:["v1.10.4 release notes by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8790",children:"#8790"})]}),"\n",(0,n.jsxs)(i.li,{children:["Trace metrics export errors by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8791",children:"#8791"})]}),"\n",(0,n.jsxs)(i.li,{children:["fix: correctly identify deprecated openai_* parameters by ",(0,n.jsx)(i.a,{href:"https://github.com/phillipleblanc",children:"@phillipleblanc"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8809",children:"#8809"})]}),"\n",(0,n.jsxs)(i.li,{children:["Don't CAST strings which breaks push down optimizer by ",(0,n.jsx)(i.a,{href:"https://github.com/lukekim",children:"@lukekim"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8810",children:"#8810"})]}),"\n",(0,n.jsxs)(i.li,{children:["Add timezone database to Docker image to fix Cayenne acceleration panic by ",(0,n.jsx)(i.a,{href:"https://github.com/sgrebnov",children:"@sgrebnov"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8799",children:"#8799"})]}),"\n",(0,n.jsxs)(i.li,{children:["Update async-openai to latest revision 4dcd633aad6f - brings fix for openai compatible model providers by ",(0,n.jsx)(i.a,{href:"https://github.com/ewgenius",children:"@ewgenius"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8816",children:"#8816"})]}
1),"\n",(0,n.jsxs)(i.li,{children:["Add ",(0,n.jsx)(i.code,{children:"auth"}),"/",(0,n.jsx)(i.code,{children:"iam_role_source"})," to DynamoDB connector by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8808",children:"#8808"})]}),"\n",(0,n.jsxs)(i.li,{children:["DynamoDB fixes: JSON nesting for Streams, proper batch deletions by ",(0,n.jsx)(i.a,{href:"https://github.com/krinart",children:"@krinart"})," in ",(0,n.jsx)(i.a,{href:"https://github.com/spiceai/spiceai/pull/8821",children:"#8821"})]}),"\n"]})]})}function o(e={}){let{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453(e,i,s){s.d(i,{R:()=>c,x:()=>l});var r=s(296540);let n={},t=r.createContext(n);function c(e){let i=r.useContext(t);return r.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),r.createElement(t.Provider,{value:i},e.children)}},401474(e){e.exports=JSON.parse('{"permalink":"/releases/v1.11.0-rc.1","editUrl":"https://github.com/spiceai/docs/edit/trunk/website/releases/v1.11.0-rc.1.md","source":"@site/releases/v1.11.0-rc.1.md","title":"Spice v1.11.0-rc.1 (Jan 6, 2026)","description":"Announcing the release of Spice v1.11.0-rc.1!","date":"2026-01-07T00:00:00.000Z","tags":[{"inline":false,"label":"release","permalink":"/releases/tags/releases","description":"Release notes and updates"},{"inline":false,"label":"distributed-query","permalink":"/releases/tags/distributed-query","description":"Distributed Query related topics and usage"},{"inline":false,"label":"cayenne","permalink":"/releases/tags/cayenne","description":"Cayenne (Vortex) data accelerator related topics and usage"},{"inline":false,"label":"acceleration","permalink":"/releases/tags/acceleration","description":"Topics related to acceleration techniques and tools"},{"inline":false,"label":"data-connector","permalink":"/releases/tags/data-connectors","description":"Data connector tools and integrations"},{"inline":false,"label":"LLM Tool","permalink":"/releases/tags/llm-tool","description":"LLM Tool related topics and usage."}],"readingTime":16.88,"hasTruncateMarker":false,"authors":[{"name":"Evgenii Khramkov","title":"Member of Technical Staff at Spice AI","url":"https://github.com/ewgenius","page":{"permalink":"/releases/authors/ewgenius"},"socials":{"github":"https://github.com/ewgenius","x":"https://x.com/ewgeniux","linkedin":"https://www.linkedin.com/in/ewgenius/"},"imageURL":"https://github.com/ewgenius.png","key":"ewgenius"}],"frontMatter":{"date":"2026-01-07T00:00:00.000Z","title":"Spice v1.11.0-rc.1 (Jan 6, 2026)","type":"blog","authors":["ewgenius"],"tags":["release","distributed-query","cayenne","acceleration","data-connector","llm-tool"]},"unlisted":false,"lastUpdatedAt":1790868039000,"lastUpdatedBy":"emma","prevItem":{"title":"Spice v1.11.0-rc.2 (Jan 22, 2026)","permalink":"/releases/v1.11.0-rc.2"},"nextItem":{"title":"Spice v1.10.4 (Jan 5, 2026)","permalink":"/releases/v1.10.4"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.