date: 2026-06-05
title: 'Spice v2.0-stable (Jun 5, 2026)'
type: blog
authors: [phillipleblanc]
tags: [release, distributed-query, cayenne, datafusion, cdc, cedar, postgres, mongodb, security, snowflake, udf, http, kafka, arrow, ducklake, data-connector]
53 releases since Spice 1.0-stable, Spice.ai OSS has reached the 2.0-stable milestone! 🎉
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 multi-node distributed query, 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 Spice Cayenne data accelerator is generally available, 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 DataFusion v52 with sort pushdown, a rewritten merge join, and dynamic filters, and the Spice CLI is rewritten in Rust as a single self-contained binary.
v2.0 also expands real-time and write-path capabilities across the platform: native CDC from MongoDB Change Streams and PostgreSQL WAL logical replication, durable Kafka CDC offsets, DML write-back for PostgreSQL, Snowflake, DynamoDB, Arrow, and DuckLake, DDL and MERGE INTO for Iceberg catalogs, mutual TLS across server endpoints and outbound connectors, HashiCorp Vault and Azure Key Vault secret stores, user-defined functions, hybrid search with Elasticsearch and DuckDB HNSW vector indexes, provider-aware LLM prompt caching, and the Responses API across all model providers.
Highlights in v2.0.0 include:
- Spice Cayenne (GA) (opens in a new tab) — 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 & SQL-defined partitioning, MERGE INTO, dedicated compaction runtime, and join-sizing statistics maintained on the write path
- Multi-Active HA Distributed Query (GA) (opens in a new tab) — 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
/v1/queries
- Mutual TLS (mTLS) (opens in a new tab) — public mTLS for HTTP and Flight, TLS cert hot-reload, and mTLS client certificates for FlightSQL and Spice.ai connectors
- Enterprise Authentication & Authorization (opens in a new tab) — OIDC bearer-token verification and Cedar-based authorization policy with per-principal row- and column-level filtering
- New Secret Stores (opens in a new tab) — HashiCorp Vault and Azure Key Vault
- CDC Sources (opens in a new tab) — native MongoDB Change Streams, PostgreSQL WAL logical replication, and durable Kafka CDC offsets — no Debezium or Kafka middleware required
- DML & DDL (opens in a new tab) — INSERT/UPDATE/DELETE write-back for PostgreSQL, Snowflake, DynamoDB, and Arrow;
CREATE TABLE/DROP TABLE and MERGE INTO for Iceberg catalogs
- User-Defined Functions (opens in a new tab) — SQL UDFs in spicepods, remote UDFs over HTTP, and optional geospatial
ST_* UDFs
- On-Demand Dataset Loading & Unified Query Cancellation (opens in a new tab) — faster startup and end-to-end cancellation across HTTP, Flight, FlightSQL, and MCP
- Dynamic HTTP Connector (opens in a new tab) — OAuth2 refresh tokens, pagination, dynamic headers, subquery-driven parameters, and rate-control state persisted across restarts
- Storage-Profile Accelerator Tuning &
refresh_mode: snapshot (opens in a new tab) — storage-aware acceleration defaults and point-in-time snapshot acceleration
- Search & Vectors (opens in a new tab) — Elasticsearch data connector with native hybrid search, DuckDB HNSW vector engine with a statically linked VSS extension, multi-vector MaxSim embeddings, and a
rerank() UDTF
- AI & LLM (opens in a new tab) — provider-aware prompt caching, Responses API across all providers, MCP Streamable HTTP transport, and a searchable LLM tool registry
- New Data Connectors (opens in a new tab) — Elasticsearch (Alpha), GCS (Alpha), Azure Cosmos DB (Alpha), Git (RC), ADBC, DuckLake (Beta), and catalog connectors for PostgreSQL, MySQL, MSSQL, and Snowflake
- Rust CLI (opens in a new tab) — single-binary
spice CLI with spice query async REPL, shell completions, and --output=json
- Dependency upgrades (opens in a new tab) including DataFusion v52.5, DuckDB v1.5.3, Arrow v57.2, iceberg-rust v0.9.1, Turso v0.6.1, and Vortex v0.69
Spice v2.0 includes several breaking changes (opens in a new tab). Review the breaking changes section before upgrading.
Distribution Changes
AI/ML support including local LLM/ML model and hosted LLM inference is now included in the default Spice build and image. The separate models build variant has been removed.
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 Spice Cloud (opens in a new tab) and the Enterprise release.
A new Network Attached Storage (NAS) distribution with built-in SMB and NFS data connector support is also available in nightly builds and with Spice.ai Enterprise (opens in a new tab).
| Distribution / Variant | Open Source | Spice Cloud | Enterprise |
|---|
| Default | ✅ | ✅ | ✅ |
| Data | Nightly only | ✅ | ✅ |
| NAS (SMB + NFS) | Nightly only | ❌ | ✅ |
| Metal (macOS) | ✅ | ✅ | ✅ |
| CUDA (Linux) | Nightly only | ✅ | ✅ |
| Allocator variants | Nightly only | ✅ | ✅ |
| ODBC connector | Local build only | ✅ | ✅ |
Native Windows builds are no longer provided; use WSL (opens in a new tab) for local development. For more details, see the Distributions documentation (opens in a new tab).
What's New in v2.0.0
Spice Cayenne Reaches General Availability
The Spice Cayenne data accelerator (opens in a new tab) is generally available in v2.0, with a major focus across the release candidates on write-path throughput, correctness, and distributed operation.
Write path & ingest:
- Staged Append Writes: WAL-based staged append writes prevent partial writes and data loss on stream errors — batches commit atomically.
- Inline Writes: 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.
- Fast-Path CDC Deletes:
DELETE statements whose filters identify primary keys directly — including composite keys expressed as (k1, k2) IN ((...), (...)) — skip the table scan entirely.
- Merge-On-Read Position Deletes: Primary-key upsert tables use position deletes with memory-pool accounting, avoiding full-table rewrites on update-heavy workloads.
- Resident Upsert Keysets: CDC upsert primary-key keysets stay resident between batches, avoiding per-batch full-table rebuilds.
- CDC Sub-Batch Efficiency: Interleaved upsert/delete workloads produce fewer sub-batch splits, with last-write-wins deduplication applied within batches.
- Dedicated Compaction Runtime: Background compaction runs on a dedicated thread pool with CDC pipelining and protected snapshots, isolating compaction work from query and ingest paths.
Query & planning:
- Join Filter Propagation: Filters propagate across equi-join keys, with range fallback for large join filters and IN-list rewrites.
- Write-Path Join-Sizing Statistics: Cayenne maintains live row counts and HyperLogLog-based distinct-value estimates on the write path, so distributed
JoinSelection can correctly size joins without rescans.
- Scan-Result Cache: A new scan-result cache accelerates hot reads, with parallel Vortex partition writes and lock-free deletion caches with bloom-prefiltered probes.
SQL & catalog:
- MERGE INTO: Upsert-style
MERGE INTO for Cayenne catalog tables, distributed across executors in cluster mode.
PARTITION BY in SQL: Define partitioning directly in CREATE TABLE ... PARTITION BY (...); metadata is persisted in the catalog and survives restarts.
- Composite Partitioning:
partition_by: [col1, col2] with hierarchical path-like keys.
- File-Based Retention Deletes: Time-based retention uses file-level deletes for both position-based and primary-key tables.
Correctness: Synchronized partition commits, correct NULL-sentinel handling for nullable partition expressions, tombstoned inline-checkpointed rows on upsert (preventing duplicate primary keys), and live reads through expired protected snapshots.
Multi-Active HA Distributed Query (GA)
Spice.ai Enterprise (opens in a new tab) feature. See High Availability (opens in a new tab).
Distributed Query (opens in a new tab) 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.
Distributed query supports two execution modes:
- Synchronous: Queries for accelerated datasets are distributed across executors and results stream back in real-time — best for interactive, latency-sensitive queries.
- Asynchronous: Queries submitted via the HTTP
/v1/queries API materialize results to object storage for later retrieval — best for long-running analytical and batch workloads.
Key capabilities:
- Dynamic Cluster Sizing: The planner adjusts parallelism to the number of active executors as nodes join or leave.
- Distributed Ingestion: Ingestion for partitioned accelerated tables is distributed across executors, with partition-aware write-through splitting scheduler-side Flight
DoPut writes to the responsible executors.
- Data-Local Query Routing: Cayenne catalog queries route to the executors holding the relevant partitions.
- Per-Executor Table Statistics: Executors report table statistics — including NDV-aware estimates — so distributed
JoinSelection can size joins correctly, fixing out-of-memory conditions on large semi-joins.
- Readiness & Failure Detection:
/v1/ready 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.
- Distributed DML & DDL: UPDATE/DELETE forwarding to all executors, executor DDL sync for late joiners, and distributed
MERGE INTO.
- Cluster Observability: New cluster metrics (including
scheduler_active_executors_count), distributed runtime.task_history replication, and a Grafana dashboard.
- Ballista S3 Shuffle: Async queries with
runtime.params.shuffle_location: s3://... complete reliably with executor-environment-derived S3 clients.
Security: Mutual TLS, Secret Stores, and Hardening
Several capabilities in this section are Spice.ai Enterprise (opens in a new tab) features. See Enterprise Security (opens in a new tab).
Mutual TLS across the platform:
- Public mTLS for HTTP and Flight:
client_auth_mode: request (optional, for migration windows) or required (strict) client-certificate verification.
- TLS Cert Hot-Reload: The runtime reloads TLS certificates on
SIGHUP for zero-downtime rotation.
- Outbound mTLS Client Certificates: FlightSQL and Spice.ai data connectors present client certificates to upstream services; the
spice sql REPL supports mTLS client auth.
runtime:
tls:
enabled: true
certificate_file: /etc/spice/tls/server.crt
key_file: /etc/spice/tls/server.key
client_auth_mode: required
client_auth_ca_file: /etc/spice/tls/client-ca.crt
runtime:
tls:
enabled: true
certificate_file: /etc/spice/tls/server.crt
key_file: /etc/spice/tls/server.key
client_auth_mode: required
client_auth_ca_file: /etc/spice/tls/client-ca.crt
Authentication & Authorization (Spice.ai Enterprise):
- OIDC Authentication: Validate OIDC (opens in a new tab) 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.
- Principal-Based Policy Enforcement: Fine-grained, Cedar-based authorization policy (opens in a new tab) configured under
runtime.authorization governs allow/deny access across datasets, models, tools, and endpoints. Combined with identity SQL functions (current_principal(), current_principal_email(), current_principal_groups()), policies enforce per-principal row-level filtering and column masking.
New Secret Stores: HashiCorp Vault (opens in a new tab) (KV v1/v2; token, approle, kubernetes, and jwt auth with automatic lease renewal) and Azure Key Vault (opens in a new tab) (service principal, managed identity, workload identity, Azure CLI, or auto-detect; sovereign cloud support).
Hardening:
- Read-only API Key Enforcement on the Flight
DoGet path and async query endpoints.
- Per-Principal Cache Namespacing: SQL, search, and caching-accelerator caches are namespaced per authenticated principal so cached results never cross identity boundaries.
- API Key Timing Leak & Remote-UDF SSRF: Closed a timing-based position-disclosure leak in API key comparison and blocked SSRF via remote UDF endpoints.
- Snowflake Function Deny-List: A function deny-list is enforced in Snowflake federation pushdown, and Snowflake account identifiers and auth configuration are validated at startup.
- MCP
allowed_hosts: MCP servers can be restricted to an explicit allowlist of upstream hosts.
Change Data Capture (CDC) Sources
See Change Data Capture (CDC) (opens in a new tab) for an overview of CDC in Spice.
- MongoDB Change Streams: MongoDB (opens in a new tab) datasets with
refresh_mode: changes stream changes natively into any local accelerator — no Debezium or Kafka required.
- PostgreSQL Native Replication (WAL): PostgreSQL (opens in a new tab) datasets stream INSERT/UPDATE/DELETE directly from logical replication using
pgoutput decoding, with automatic per-replica slot management, an initial REPEATABLE READ bootstrap snapshot, and durable LSN acknowledgement.
- Kafka CDC Offset Persistence: Kafka (opens in a new tab) CDC offsets persist in sidecar tables for durable, resumable streams across restarts and failovers.
- Pipelined CDC Ingestion: Source reads overlap with batch apply, with envelope coalescing and improved nullability propagation.
- Debezium Schema Evolution: Schema changes in Debezium (opens in a new tab)-sourced datasets no longer break dataset initialization on reload.
datasets:
- from: postgres:my_table
name: my_table
params:
pg_host: localhost
pg_db: mydb
acceleration:
enabled: true
engine: duckdb
refresh_mode: changes
datasets:
- from: postgres:my_table
name: my_table
params:
pg_host: localhost
pg_db: mydb
acceleration:
enabled: true
engine: duckdb
refresh_mode: changes
DML, DDL, and Write-Back
Spice v2.0 turns more connectors and catalogs into full read/write tables:
- PostgreSQL DML:
INSERT, UPDATE, and DELETE write-back on PostgreSQL (opens in a new tab) datasets, with foreign-key metadata exposed via the PostgreSQL catalog connector.
- Snowflake DML:
INSERT, UPDATE, and DELETE write-back on Snowflake (opens in a new tab) datasets.
- DynamoDB DML:
INSERT, UPDATE, and DELETE for DynamoDB (opens in a new tab), complementing read and CDC streaming.
- Arrow Primary Key Upserts: Native update-or-insert semantics for in-memory Arrow (opens in a new tab)-accelerated tables.
- DDL for Iceberg:
CREATE TABLE and DROP TABLE via FlightSQL and /v1/sql for Iceberg (opens in a new tab), with catalog.access: read_write_create.
- DuckLake INSERT: DuckLake catalog tables with
read_write access support INSERT.
SQL & User-Defined Functions
See the SQL Reference (opens in a new tab) for the full SQL surface area.
- User-Defined Functions: Define reusable SQL UDFs as first-class spicepod components, or invoke remote functions over HTTP (Spice.ai Enterprise), plus table user functions.
- Spatial SQL UDFs: Optional geospatial
ST_* UDFs for geometry workloads.
- JSON UDTFs:
flatten_json, json_tree, and flatten_json_properties table-valued functions for JSON transformation and schema decomposition (with options such as expand_maps). See JSON Functions and Operators (opens in a new tab).
- PostgreSQL Metadata UDFs: Dataset and column descriptions are exposed via PostgreSQL-compatible UDFs (
obj_description, col_description), so BI tools and psql surface Spice metadata.
- FlightSQL Substrait Plans:
CommandStatementSubstraitPlan support for clients submitting Substrait-encoded plans.
- SQL REPL Expanded View: Toggle
\x for a vertical key-value layout on wide result sets.
- Prepared statement, federation, and unparsing fixes across the engine, including keeping correlated subqueries out of
JOIN ON conditions for Spice Cloud federation and correct EXISTS/NOT EXISTS subquery handling in the federation analyzer.
Runtime Features
- On-Demand Dataset Loading: Datasets can be deferred — registered with a declared schema at startup (
columns[].type, columns[].nullable) and fully resolved on first reference, reducing startup time and memory for large spicepods.
- Unified Query Cancellation: HTTP, Flight, FlightSQL, MCP, and internal execution paths honour a unified cancellation signal — disconnects, REPL
Ctrl-C, and cancelled HTTP requests cancel the query end-to-end.
- Storage-Profile Accelerator Tuning:
acceleration.storage_profile (auto, local_ssd, ebs, tmpfs) applies storage-aware defaults across DuckDB, SQLite, Turso, and Cayenne file-mode accelerators; auto detects the backing storage.
refresh_mode: snapshot (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.
- Structured Component Errors:
/v1/datasets?status=true and /v1/models?status=true return structured error objects (category, type, code) and human-readable error_message fields; the CLI shows an ERROR column.
- Actionable Config Errors: Parameter typos, missing secret references, and unknown engine names produce specific, actionable errors with suggestions.
Spicepod v2
Spicepods now support version: v2, the default for spice init, while v1 spicepods continue to work with automatic migration of deprecated fields.
| Version | Status |
|---|
v2 | Default. Used by spice init. |
v1 | Supported. Deprecated fields auto-migrate. |
v1beta1 | Removed. No longer accepted. |
| v1 (deprecated) | v2 (preferred) | Notes |
|---|
runtime.results_cache | runtime.caching.sql_results | All fields migrate automatically. cache_max_size → max_size. |
runtime.memory_limit | runtime.query.memory_limit | Auto-migrated. query.memory_limit takes priority if both set. |
runtime.temp_directory | runtime.query.temp_directory | Auto-migrated. query.temp_directory takes priority if both set. |
dataset.invalid_type_action | dataset.unsupported_type_action | Auto-migrated. v2 adds a new string variant. |
New v2 fields include runtime.ready_state, runtime.query.spill_compression, runtime.caching.sql_results.stale_while_revalidate_ttl, runtime.caching.sql_results.encoding, scheduler partition-assignment configuration, and catalog.access: read_write_create.
Data Connectors & Catalogs
New connectors:
- Elasticsearch (Alpha, Spice.ai Enterprise): Query Elasticsearch indexes as SQL tables with native hybrid search —
vector_search() kNN, text_search() BM25, and rrf() fusion — plus Elasticsearch as a backing vector engine, direct FTS engine configuration, and index lifecycle controls.
- GCS (Alpha): Federated queries against Google Cloud Storage, with Iceberg table support.
- Azure Cosmos DB (Alpha): Read-only NoSQL / Core SQL API connector with cross-partition scans and schema inference.
- Git (RC): HTTPS/SSH auth, Git LFS support, and per-repo connection resilience.
- ADBC: Data connector and catalog with full query federation, BigQuery support, and schema/table discovery.
- DuckLake (Beta): Lakehouse-style data management with DuckDB as the metadata catalog and object storage for data — ACID transactions, time travel, and schema evolution on Parquet.
- Self-Hosted Spice Connector: Connect Spice to another self-hosted Spice runtime as a federated source.
New catalog connectors for PostgreSQL (opens in a new tab), MySQL (opens in a new tab), MSSQL (opens in a new tab), and Snowflake (opens in a new tab), using native metadata catalogs for schema and table discovery. Unity Catalog (opens in a new tab) compatibility extends to OSS Unity Catalog deployments, and DDL-defined catalogs can expose and query views.
HTTP connector: 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 429/5xx errors, and a correctly populated fetched_at column.
JSON ingestion: Single-object documents, JSONL, BOM-prefixed input, Socrata SODA responses, format auto-detection, and RFC 6901 json_pointer extraction of nested payloads.
Databricks: Resilience controls, Unity Catalog-aware permission prechecks with structured advisory errors, Classic SQL Warehouse foreign-table compatibility, connect_timeout/client_timeout parameters, a Databricks SQL dialect for federation, and Delta Lake column mapping (opens in a new tab) (Name and Id modes).
Other connector improvements: MongoDB SRV support; MySQL mysql_zero_date_behavior; Snowflake OBJECT, MAP, GEOGRAPHY, GEOMETRY, VECTOR, and TIMESTAMP_LTZ types plus key-pair auth; ClickHouse Date32; S3 s3_url_style 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.
AI & LLM
- Provider-Aware Prompt Caching: LLM (opens in a new tab) calls automatically use provider-side prompt caching (e.g., Anthropic, OpenAI) for system prompts and tool descriptions, reducing latency and cost.
- Responses API Across All Providers: The Responses API works with every configured model provider, including streaming
response.output_text.delta events and Authorization: Bearer header support.
- Multi-Vector Embeddings with MaxSim: List-of-string columns produce one embedding per element with MaxSim/mean/sum scoring for ColBERT-style late-interaction retrieval, plus a
_match column identifying the best-matching element.
rerank() UDTF: Reorder results from vector_search, text_search, or rrf using any registered chat model as a reranker, with automatic query propagation and pushdown support.
- Searchable LLM Tool Registry: Agents discover tools via semantic search instead of enumerating every tool in the system prompt.
- MCP Improvements: Streamable HTTP transport (
/v1/mcp) on rmcp v1.5.0, native auth for streamable HTTP tools (mcp_auth_token, mcp_headers), external MCP server tool calls traced in task history, and configurable allowed_hosts.
- Per-Model Rate-Limited AI UDF Execution for controlling concurrent AI function invocations.
Search & Vectors
- DuckDB Vector Engine:
vector_engine: duckdb 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 statically linked 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 cosine_distance pushes down via array_cosine_distance.
- Hybrid Search: Combine kNN vector search and BM25 full-text search with reciprocal rank fusion (
rrf()), backed by Tantivy, Elasticsearch, or DuckDB.
- Full-Text Search Performance: Significantly faster Tantivy ingestion with rollback-on-error, and search metadata is correctly preserved on indexing and in Vortex physical schema calculation.
- Embedding Validation:
row_id columns are validated during dataset initialization.
Caching
Improvements across Caching (opens in a new tab):
- Stale-While-Revalidate:
runtime.caching.sql_results.stale_while_revalidate_ttl serves stale results while revalidating in the background.
- Cache Encoding: Optional compression (e.g.,
zstd) for SQL results cache entries.
- Retention Policies for cached query results, and improved CDC-driven cache invalidation (including view plan invalidation on updates).
- Idle Cache Maintenance: Periodic maintenance drains invalidation predicates on idle caches, fixing unbounded memory growth in rarely-read caches.
Performance & Query Engine
Apache DataFusion (opens in a new tab) is upgraded to v52.5 over the course of the release cycle, bringing:
- Sort Pushdown to Scans: ~30x faster top-K queries on pre-sorted data; Parquet scans reverse row-group order for
DESC on ASC-sorted files.
- Rewritten Sort-Merge Join: Up to three orders of magnitude faster in pathological cases (e.g., TPC-H Q21: minutes → milliseconds).
- Dynamic Filters:
MIN/MAX aggregates and hash-join build sides prune files, row groups, and rows during execution.
- Faster
CASE Expressions, statistics caching, and prefix-aware list-files caching for faster planning.
TableProvider DELETE/UPDATE hooks and the RelationPlanner API for extensible SQL planning.
- Strict Overflow Handling:
try_cast_to errors on overflow instead of silently producing NULLs.
Additional engine work: default query memory limit raised from 70% to 90% with GreedyMemoryPool, partial aggregation optimization for FlightSQLExec, improved partitioned query planning, and metastore transaction support to prevent concurrent conflicts.
Rust CLI
The Spice CLI is completely rewritten from Go to Rust — a single spice binary built from the same codebase as spiced, with full feature parity across 27+ commands.
spice query: Interactive REPL for async queries (opens in a new tab) with multi-line SQL, progress indication, and cancellation.
spice dataset configure: Non-interactive flag-based configuration (--from, --description, --param KEY=VALUE, --set) alongside interactive prompts.
spice completions: Shell completion script generation.
--output=json: Machine-readable output for scripting; spice login --output adds env, json, and keychain modes.
spice init writes a yaml-language-server schema directive for IDE completions.
Observability
- OpenTelemetry: Exporter fixes, authenticated metrics export, configurable metric name prefix (
runtime.telemetry.metric_prefix), delta temporality by default, and OTLP resource attributes via runtime.telemetry.properties.
- Query Metrics: The
query_executions metric gains a datasets dimension for per-dataset query attribution.
- Ingestion Metrics:
rows_written, bytes_written, and dataset_acceleration_size_bytes for acceleration refresh and Flight DoPut/ADBC ingestion, and EXPLAIN ANALYZE metrics in FlightSQLExec.
- Task History: Distributed task history in cluster mode and tracing for external MCP server tool calls.
Notable Bug Fixes
- localpod synchronization:
localpod child datasets correctly track parent refreshes when the parent uses the in-memory Arrow accelerator.
- Spice Cloud federation: Correlated subqueries are kept out of
JOIN ON conditions, fixing rejected federated queries.
refresh_mode: snapshot: No longer reports Ready with empty data when no snapshot exists.
- Search metadata: Field and schema metadata preserved on search indexing and in Vortex physical schema calculation.
- HTTP connector:
fetched_at column is correctly populated.
- Connector correctness: DynamoDB Streams transient-error retries and typed-NULL DML handling; ScyllaDB physical filter pushdown disabled to fix incorrect results; MSSQL
TOP N pushdown; DuckDB DELETE/UPDATE on full and caching refresh modes; Turso checked arithmetic for timestamp conversions; ODBC queries no longer silently return 0 rows on failure; Flight GetFlightInfo/DoGet schema parity.
Dependency Updates
| Dependency / Component | Version |
|---|
| DataFusion | v52.5 |
| Ballista | v52 |
| Arrow (arrow-rs) | v57.2 |
| DuckDB | v1.5.3 (with statically linked VSS) |
| iceberg-rust | v0.9.1 |
| Turso (libsql) | v0.6.1 |
| Vortex | v0.69.0 |
| delta_kernel | v0.18.2 |
| rmcp (MCP) | v1.5.0 |
| mistral.rs | v0.8.x (candle v0.10.1) |
| ADBC Core | v0.23 |
| Rust toolchain | v1.94.1 |
Contributors
Breaking Changes
-
Models included by default: The separate models build variant has been removed. Local LLM inference is always included in the default build and image.
-
Windows native builds removed: Use WSL (opens in a new tab) for local development.
-
Spicepod version defaults to v2: spice init creates version: v2 spicepods. v1 remains supported with auto-migration; v1beta1 is no longer accepted.
-
Flattened runtime.scheduler configuration: The nested runtime.scheduler.partition_management block is flattened and renamed:
# Before
runtime:
scheduler:
partition_management:
interval: 30s
max_assignments_per_cycle: 16
discovery_timeout: 10s
# After
runtime:
scheduler:
partition_assignment_interval: 30s
max_assignments_per_interval: 16
partition_discovery_timeout: 10s
# Before
runtime:
scheduler:
partition_management:
interval: 30s
max_assignments_per_cycle: 16
discovery_timeout: 10s
# After
runtime:
scheduler:
partition_assignment_interval: 30s
max_assignments_per_interval: 16
partition_discovery_timeout: 10s
-
S3 metadata columns renamed: location, last_modified, size → _location, _last_modified, _size.
-
Default query memory limit changed: Increased from 70% to 90%.
-
Metric renames: accelerated_refresh metrics renamed to acceleration_refresh; last_refresh_time gauge renamed to include the milliseconds unit.
-
DuckDB parameter rename: partitioned_write_flush_threshold → partitioned_write_flush_threshold_rows.
-
/v1/search API: Always returns an array in matches, even for single results.
-
/v1/evals API removed.
-
Perplexity model provider removed.
-
x.ai model endpoint: x.ai models exclusively use the /v1/responses endpoint.
Upgrade Guide from v1.x
Most v1 spicepods continue to work on v2.0 — v1 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 breaking changes (opens in a new tab) that may require manual action. Review each before upgrading a production deployment.
1. Build, image, and platform changes
- Models are now included by default. The separate
models build variant (and the corresponding -models image tags) has been removed; local LLM inference is always included in the default build and image. If your deployment pinned a models build or -models-tagged image, switch to the default build/image.
- Native Windows builds are removed. Use WSL (opens in a new tab) for local Windows development.
2. Adopt Spicepod v2 (recommended)
spice init now creates version: v2 spicepods. v1 spicepods remain supported with automatic migration, but v1beta1 is no longer accepted. To move to v2, set version: v2 and update the following fields — each auto-migrates from v1, but updating now clears the deprecation:
| v1 (deprecated) | v2 (preferred) |
|---|
runtime.results_cache | runtime.caching.sql_results (cache_max_size → max_size) |
runtime.memory_limit | runtime.query.memory_limit |
runtime.temp_directory | runtime.query.temp_directory |
dataset.invalid_type_action | dataset.unsupported_type_action |
3. Update changed configuration
- DuckDB parameter rename:
partitioned_write_flush_threshold → partitioned_write_flush_threshold_rows.
- Default query memory limit raised from 70% to 90%. If you relied on the previous default to leave headroom for other processes on the host, set it explicitly via
runtime.query.memory_limit.
4. Update queries and API clients
- S3 metadata columns renamed:
location, last_modified, size → _location, _last_modified, _size. Update any queries that reference these columns.
/v1/search always returns an array in matches, even for a single result. Update clients that assumed a scalar value.
/v1/evals API removed. Remove integrations that depend on it.
5. Update model providers
- Perplexity model provider removed. Re-point affected models to another provider.
- x.ai models use the
/v1/responses endpoint exclusively. Ensure x.ai integrations target the Responses API.
6. Update observability
- Metric renames:
accelerated_refresh → acceleration_refresh, and the last_refresh_time gauge is renamed to include the milliseconds unit. Update dashboards and alerts that reference these metric names.
After updating, restart the runtime and verify datasets and models report ready via /v1/datasets?status=true and /v1/models?status=true (the CLI shows a Ready/ERROR column).
Cookbook Updates
New Spice Cookbook (opens in a new tab) recipes added during the v2.0 release cycle:
The Spice Cookbook (opens in a new tab) includes more than 100 recipes to help you get started with Spice quickly and easily.
Upgrading
To upgrade to v2.0.0, use one of the following methods:
CLI:
Homebrew:
brew upgrade spiceai/spiceai/spice
brew upgrade spiceai/spiceai/spice
Docker:
Pull the spiceai/spiceai:2.0.0 image:
docker pull spiceai/spiceai:2.0.0
docker pull spiceai/spiceai:2.0.0
For available tags, see DockerHub (opens in a new tab).
Helm:
helm repo update
helm upgrade spiceai spiceai/spiceai --version 2.0.0
helm repo update
helm upgrade spiceai spiceai/spiceai --version 2.0.0
AWS Marketplace:
Spice is available in the AWS Marketplace (opens in a new tab).
What's Changed
Changelog
- Add TPC-DS integration tests with S3 source and PostgreSQL acceleration by @phillipleblanc (opens in a new tab) in #9006 (opens in a new tab)
- fix(tests): fix flaky/slow/failing unit tests by @phillipleblanc (opens in a new tab) in #9009 (opens in a new tab)
- fix: Update benchmark snapshots for DF51 upgrade by @app/github-actions (opens in a new tab) in #9008 (opens in a new tab)
- fix: add feature gate to rrf TEST_EMBEDDING_MODEL by @phillipleblanc (opens in a new tab) in #9017 (opens in a new tab)
- fix: features check by @phillipleblanc (opens in a new tab) in #9014 (opens in a new tab)
- fix: Enable Cayenne acceleration snapshots by @lukekim (opens in a new tab) in #9020 (opens in a new tab)
- URL table support by @lukekim (opens in a new tab) in #9018 (opens in a new tab)
- ScyllaDB key filter by @lukekim (opens in a new tab) in #8997 (opens in a new tab)
- fix: Schema mismatch when using column projection with HTTP caching by @phillipleblanc (opens in a new tab) in #9021 (opens in a new tab)
- Add more tests for HTTP caching with columns selection by @sgrebnov (opens in a new tab) in #9025 (opens in a new tab)
- HTTP cache snapshots: default to
time_interval and fix snapshots_creation_policy: on_change by @sgrebnov (opens in a new tab) in #9026 (opens in a new tab)
- Fix duplicate snapshot creation on startup by @sgrebnov (opens in a new tab) in #9029 (opens in a new tab)
- Add ScyllaDB and SMB to the README table by @krinart (opens in a new tab) in #9034 (opens in a new tab)
- Remove waiting for runtime to be ready before creating snapshot by @krinart (opens in a new tab) in #9033 (opens in a new tab)
- Fix snapshot on_change policy to skip when no writes occurred by @sgrebnov (opens in a new tab) in #9028 (opens in a new tab)
- Release notes for release
release/1.11.0-rc.2 by @krinart (opens in a new tab) in #9016 (opens in a new tab)
- ci: use arduino/setup-protoc for official protobuf compiler by @phillipleblanc (opens in a new tab) in #9036 (opens in a new tab)
- ci: install unzip on aarch64 runner for arduino/setup-protoc by @phillipleblanc (opens in a new tab) in #9038 (opens in a new tab)
- fix: don't fail release if upload to minio fails by @phillipleblanc (opens in a new tab) in #9039 (opens in a new tab)
- Add missing protoc step to setup-cc action by @krinart (opens in a new tab) in #9041 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #9013 (opens in a new tab)
- Fix
formula_1 and codebase_community in bird-bench by @Jeadie (opens in a new tab) in #9000 (opens in a new tab)
- Cayenne S3 Express One Zone improvements by @lukekim (opens in a new tab) in #9015 (opens in a new tab)
- Add zlib1g-dev to CI by @lukekim (opens in a new tab) in #9052 (opens in a new tab)
- Improve validation and logging for hash indexes by @lukekim (opens in a new tab) in #9047 (opens in a new tab)
- Upgrade Vortex with CASE-WHEN by @lukekim (opens in a new tab) in #9051 (opens in a new tab)
- x.ai models now exclusively use /v1/responses endpoint by @lukekim (opens in a new tab) in #9400 (opens in a new tab)
- Improvements for snapshot schema comparison by @krinart (opens in a new tab) in #9401 (opens in a new tab)
- v2.0 breaking changes by @lukekim (opens in a new tab) in #9233 (opens in a new tab)
- Create
PartitionManagementTask for scheduler to update accelerated table partition assignments by @Jeadie (opens in a new tab) in #9378 (opens in a new tab)
- refactor(Cayenne): route all write orchestration through
CayenneDataSink by @sgrebnov (opens in a new tab) in #9402 (opens in a new tab)
- Refactor benchmark to use QueryExecutor trait by @Jeadie (opens in a new tab) in #9418 (opens in a new tab)
- feat: Add spidapter build and release workflow by @peasee (opens in a new tab) in #9427 (opens in a new tab)
- Testoperator: add support for api-key when connecting to external spice instance by @sgrebnov (opens in a new tab) in #9421 (opens in a new tab)
- Initial implementation of Ducklake catalog & data connectors by @lukekim (opens in a new tab) in #9083 (opens in a new tab)
- Require
aws_lc_rs since jsonwebtoken upgrade by @Jeadie (opens in a new tab) in #9426 (opens in a new tab)
- feat: Add spidapter tool by @peasee (opens in a new tab) in #9425 (opens in a new tab)
- Add release notes for 1.11.2 patch release by @sgrebnov (opens in a new tab) in #9430 (opens in a new tab)
- feat(spidapter): integrate system-adapter-protocol with SCP provisioning by @phillipleblanc (opens in a new tab) in #9434 (opens in a new tab)
- Add DuckLake TPCH E2E workflow and federated Spicepod configuration by @lukekim (opens in a new tab) in #9431 (opens in a new tab)
- fix(spidapter): use Flight handshake auth instead of x-api-key header by @phillipleblanc (opens in a new tab) in #9435 (opens in a new tab)
- [spidapter] Keep only what sparks joy by @Jeadie (opens in a new tab) in #9439 (opens in a new tab)
- Refactor binary operator balancing by @Jeadie (opens in a new tab) in #9424 (opens in a new tab)
- feat: Add Iceberg DDL support (CREATE TABLE / DROP TABLE) for default catalog override by @phillipleblanc (opens in a new tab) in #9440 (opens in a new tab)
- Fix Flight SQL schema consistency: expand view types and verify field names by @sgrebnov (opens in a new tab) in #9438 (opens in a new tab)
- Update spidapter for new system-adapter-protocol by @sgrebnov (opens in a new tab) in #9442 (opens in a new tab)
- docs: fix typos and syntax errors in style guide and error handling docs by @cluster2600 (opens in a new tab) in #9445 (opens in a new tab)
- Add acceleration refresh ingestion metrics (rows_written, bytes_written) by @phillipleblanc (opens in a new tab) in #9461 (opens in a new tab)
- Refactor(Cayenne): Replace CatalogError and string based errors with Snafu errors by @sgrebnov (opens in a new tab) in #9403 (opens in a new tab)
- Replace deprecated claude-3-5-haiku-latest with claude-haiku-4-5 by @Jeadie (opens in a new tab) in #9492 (opens in a new tab)
- Fix #9481: Preserve schema in results cache for empty query results by @phillipleblanc (opens in a new tab) in #9485 (opens in a new tab)
- Fix partition by serializing by @Jeadie (opens in a new tab) in #9474 (opens in a new tab)
- query: reconcile execution stream nullability with logical plan schema by @phillipleblanc (opens in a new tab) in #9486 (opens in a new tab)
- initial
spice-cloud-client crate and spice cloud metrics --app <app-name>. by @Jeadie (opens in a new tab) in #9480 (opens in a new tab)
- feat: Return dataset error message in datasets API by @peasee (opens in a new tab) in #9487 (opens in a new tab)
- Spicebench by @lukekim (opens in a new tab) in #9447 (opens in a new tab)
- build(deps): consolidate dependabot dependency updates by @phillipleblanc (opens in a new tab) in #9504 (opens in a new tab)
- fix(cluster): route non-partitioned accelerated tables in distributed mode by @phillipleblanc (opens in a new tab) in #9508 (opens in a new tab)
- Enable core scalar UDFs in refresh SQL by @sgrebnov (opens in a new tab) in #9502 (opens in a new tab)
- Fix metrics in Spidapter again by @Jeadie (opens in a new tab) in #9497 (opens in a new tab)
- fix(cluster): tolerate Completed->status propagation race in distributed query handle by @phillipleblanc (opens in a new tab) in #9510 (opens in a new tab)
- feat: Support distributed ingestion in cayenne catalog by @peasee (opens in a new tab) in #9506 (opens in a new tab)
- Fix Cayenne duplicate primary keys after DELETE + UPSERT CDC sequences by @krinart (opens in a new tab) in #9494 (opens in a new tab)
- fix(cluster): rewrite table scans inside subqueries for distributed execution by @phillipleblanc (opens in a new tab) in #9518 (opens in a new tab)
- fix: Set catalog mode to readwritecreate in spidapter by @peasee (opens in a new tab) in #9519 (opens in a new tab)
- Upgrade AWS SDK crates & set APN user-agent in AWS SDK credential bridge by @lukekim (opens in a new tab) in #8328 (opens in a new tab)
- feat(runtime): add runtime ready_state on_registration semantics by @lukekim (opens in a new tab) in #9522 (opens in a new tab)
- fix: Add spidapter post-setup retries by @peasee (opens in a new tab) in #9526 (opens in a new tab)
- Make partition discovery more robust and make initialization non-blocking by @sgrebnov (opens in a new tab) in #9499 (opens in a new tab)
- Make
lint-rust-fix support targeted packages and features by @Jeadie (opens in a new tab) in #9511 (opens in a new tab)
- Handle new Cloud SCP API by @Jeadie (opens in a new tab) in #9532 (opens in a new tab)
- Refactor and simplify streaming benchmarks by @krinart (opens in a new tab) in #9405 (opens in a new tab)
- fix: ensure spidapter only increments attempts on failures by @peasee (opens in a new tab) in #9534 (opens in a new tab)
- feat: Support specifying app resources in spidapter by @peasee (opens in a new tab) in #9536 (opens in a new tab)
- test(runtime): Spice Cayenne DDL integration test by @lukekim (opens in a new tab) in #9535 (opens in a new tab)
- fix: Handle schema evolution mismatch errors during data refresh by @lukekim (opens in a new tab) in #9527 (opens in a new tab)
- fix: resolve clippy lint warnings by @phillipleblanc (opens in a new tab) in #9547 (opens in a new tab)
pr-builds --tag <TAG> for build_and_release.yml by @Jeadie (opens in a new tab) in #9507 (opens in a new tab)
- Add
--output flag to spice login with env/json/keychain modes by @Jeadie (opens in a new tab) in #9541 (opens in a new tab)
- Don't use 'PartitionedTableScanRewrite' in async distributed query by @Jeadie (opens in a new tab) in #9548 (opens in a new tab)
- feat(spidapter): add local backend mode with single executor by @phillipleblanc (opens in a new tab) in #9531 (opens in a new tab)
- support chat template in HF by @Jeadie (opens in a new tab) in #9543 (opens in a new tab)
- fix(cayenne): stream PK retention deletes and run OOM regression in CI by @phillipleblanc (opens in a new tab) in #9533 (opens in a new tab)
- cayenne: Staged append writes to prevent partial writes and data loss on stream error by @sgrebnov (opens in a new tab) in #9491 (opens in a new tab)
AcceleratedTable::scan use FederatedTable::scan when ClusterRole::Scheduler by @Jeadie (opens in a new tab) in #9550 (opens in a new tab)
- Upgrade to delta-kernel-rs v0.18.2 by @lukekim (opens in a new tab) in #9528 (opens in a new tab)
- Run cayenne tests as part of PR CI by @sgrebnov (opens in a new tab) in #9554 (opens in a new tab)
- Upgrade to DataFusion v52.2.0 by @lukekim (opens in a new tab) in #9419 (opens in a new tab)
- Remove Snapshot Compaction + Add snapshot existence check by @krinart (opens in a new tab) in #9523 (opens in a new tab)
- Update dependencies by @lukekim (opens in a new tab) in #9566 (opens in a new tab)
- fix: Update benchmark snapshots by @app/github-actions (opens in a new tab) in #9565 (opens in a new tab)
- fix: Compare Cayenne table configuration on startup by @peasee (opens in a new tab) in #9529 (opens in a new tab)
- Make
Refresh::refresh_sql more robust to alterations over time. by @Jeadie (opens in a new tab) in #9549 (opens in a new tab)
- fix: Update datafusion-table-providers dependency to latest revision by @lukekim (opens in a new tab) in #9574 (opens in a new tab)
- Unset
AWS_ENDPOINT_URL when empty by @krinart (opens in a new tab) in #9575 (opens in a new tab)
- fix: allow BytesProcessedExec repartitioning for unordered input by @lukekim (opens in a new tab) in #9540 (opens in a new tab)
- Sanitize DataFusion errors by @lukekim (opens in a new tab) in #9530 (opens in a new tab)
- Add conditional logging for partition assignments by @Jeadie (opens in a new tab) in #9577 (opens in a new tab)
- use 'properly early exit on SIGTERM' by @Jeadie (opens in a new tab) in #9573 (opens in a new tab)
- Update datafusion to 52.2.0 by @phillipleblanc (opens in a new tab) in #9582 (opens in a new tab)
- Ensure we query one and only one partition per request by @Jeadie (opens in a new tab) in #9416 (opens in a new tab)
- feat: Add support for Spicepod version v2 by @lukekim (opens in a new tab) in #9583 (opens in a new tab)
- [SpiceDQ] Improve error messages; Avoid race condition on allocate_initial_partitions. by @Jeadie (opens in a new tab) in #9579 (opens in a new tab)
- Update ballista dependencies to latest 52.0.0 revision by @lukekim (opens in a new tab) in #9581 (opens in a new tab)
- Fix Databricks spark_connect mode always disabled by @phillipleblanc (opens in a new tab) in #9586 (opens in a new tab)
- Support partitioning in Arrow accelerator by @Jeadie (opens in a new tab) in #9571 (opens in a new tab)
- Fix
spice query CLI response deserialization by @phillipleblanc (opens in a new tab) in #9588 (opens in a new tab)
- fix: Update benchmark snapshots by @app/github-actions (opens in a new tab) in #9584 (opens in a new tab)
- fix: Share RuntimeEnv across Cayenne read/write/delete paths for targeted list_files_cache invalidation by @sgrebnov (opens in a new tab) in #9589 (opens in a new tab)
- feat: Add file:// state_location support for async queries scheduler by @phillipleblanc (opens in a new tab) in #9590 (opens in a new tab)
- Update endgame links by @krinart (opens in a new tab) in #9598 (opens in a new tab)
- ci: fix E2E CLI upgrade test to use latest release for spiced download by @phillipleblanc (opens in a new tab) in #9613 (opens in a new tab)
- fix(DF): Lazily initialize BatchCoalescer in RepartitionExec to avoid schema type mismatch by @sgrebnov (opens in a new tab) in #9623 (opens in a new tab)
- feat: Implement catalog connectors for various databases by @lukekim (opens in a new tab) in #9509 (opens in a new tab)
- Refactor and clean up code across multiple crates by @lukekim (opens in a new tab) in #9620 (opens in a new tab)
- fix: Improve error handling for distributed mode and state_location configuration by @lukekim (opens in a new tab) in #9611 (opens in a new tab)
- Properly install postgres in
install-postgres action by @krinart (opens in a new tab) in #9629 (opens in a new tab)
- fix: Use Python venv for schema validation in CI by @phillipleblanc (opens in a new tab) in #9637 (opens in a new tab)
- Update spicepod.schema.json by @app/github-actions (opens in a new tab) in #9640 (opens in a new tab)
- Update testoperator dispatch to use release/2.0 branch by @phillipleblanc (opens in a new tab) in #9641 (opens in a new tab)
- fix: Align CUDA asset names in Dockerfile and install tests with build output by @phillipleblanc (opens in a new tab) in #9639 (opens in a new tab)
- Fix expect test scripts in E2E Installation AI test by @sgrebnov (opens in a new tab) in #9643 (opens in a new tab)
- testoperator for partitioned arrow accelerator by @Jeadie (opens in a new tab) in #9635 (opens in a new tab)
- Remove default 1s refresh_check_interval from spidapter for hive datasets by @phillipleblanc (opens in a new tab) in #9645 (opens in a new tab)
- Fix scheduler panic and cancel race condition by @phillipleblanc (opens in a new tab) in #9644 (opens in a new tab)
- Align Spice.ai connector parameter names across catalog/data connectors by @lukekim (opens in a new tab) in #9632 (opens in a new tab)
- docs: update distribution details and add NAS support in release notes by @lukekim (opens in a new tab) in #9650 (opens in a new tab)
- Enable
postgres-accel in CI builds for benchmarks by @sgrebnov (opens in a new tab) in #9649 (opens in a new tab)
- perf: Cache Turso metastore connection across operations by @penberg (opens in a new tab) in #9646 (opens in a new tab)
- Add 'scheduler_state_location' to spidapter by @Jeadie (opens in a new tab) in #9655 (opens in a new tab)
- Implement Cayenne S3 Express multi-zone live test with data validation by @lukekim (opens in a new tab) in #9631 (opens in a new tab)
- chore(spidapter): bump default memory limit from 8Gi to 32Gi by @phillipleblanc (opens in a new tab) in #9661 (opens in a new tab)
- perf: Use prepare_cached() in Turso and SQLite metastore backends by @penberg (opens in a new tab) in #9662 (opens in a new tab)
- Improve CDC cache invalidation by @krinart (opens in a new tab) in #9651 (opens in a new tab)
- Refactor Cayenne IDs to use UUIDv7 strings by @lukekim (opens in a new tab) in #9667 (opens in a new tab)
- fix: add liveness check for dead executors in partition routing by @Jeadie (opens in a new tab) in #9657 (opens in a new tab)
- fix(s3): Fix metadata column schema mismatches in projected queries by @sgrebnov (opens in a new tab) in #9664 (opens in a new tab)
- s3_metadata_columns tests: include test for location outside table prefix by @sgrebnov (opens in a new tab) in #9676 (opens in a new tab)
- docs: Update DuckDB, GCS, Git connector and Cayenne documentation by @lukekim (opens in a new tab) in #9671 (opens in a new tab)
- Add s3_url_style support for S3 connector URL addressing by @phillipleblanc (opens in a new tab) in #9642 (opens in a new tab)
- Consolidate E2E workflows and require WSL for Windows runtime by @lukekim (opens in a new tab) in #9660 (opens in a new tab)
- Upgrade to Rust v1.93.1 by @lukekim (opens in a new tab) in #9669 (opens in a new tab)
- Security fixes and improvements by @lukekim (opens in a new tab) in #9666 (opens in a new tab)
- feat(flight): add DoPut rows/bytes written metrics for DoPut ETL ingestion tracking by @phillipleblanc (opens in a new tab) in #9663 (opens in a new tab)
- Skip caching http error response + add
response_headers by @krinart (opens in a new tab) in #9670 (opens in a new tab)
- refactor: Remove
v1/evals functionality by @Jeadie (opens in a new tab) in #9420 (opens in a new tab)
- Make a test harness for Distributed Spice integration tests by @Jeadie (opens in a new tab) in #9615 (opens in a new tab)
- Enable
on_zero_results: use_source for views by @krinart (opens in a new tab) in #9699 (opens in a new tab)
- fix(spidapter): Lower memory limit, passthrough AWS secrets, override flight URL by @peasee (opens in a new tab) in #9704 (opens in a new tab)
- Show an error on a shared acceleration file with snapshots enabled by @krinart (opens in a new tab) in #9698 (opens in a new tab)
- Fixes for anthropic by @Jeadie (opens in a new tab) in #9707 (opens in a new tab)
- Use
max_partitions_per_executor in allocate_initial_partitions by @Jeadie (opens in a new tab) in #9659 (opens in a new tab)
- [SpiceDQ] Accelerations must have partition key by @Jeadie (opens in a new tab) in #9711 (opens in a new tab)
- Upgrade to Turso v0.5 by @lukekim (opens in a new tab) in #9628 (opens in a new tab)
- feat: Rename metadata columns to _location, _last_modified, _size by @phillipleblanc (opens in a new tab) in #9712 (opens in a new tab)
- fix: bump datafusion-ballista to fix BatchCoalescer schema mismatch panic by @phillipleblanc (opens in a new tab) in #9716 (opens in a new tab)
- fix: Ensure Cayenne respects target file size by @peasee (opens in a new tab) in #9730 (opens in a new tab)
- refactor: Make DDL preprocessing generic from Iceberg DDL processing by @peasee (opens in a new tab) in #9731 (opens in a new tab)
- [SpiceDQ] Distribute query of Cayenne Catalog to executors with data by @Jeadie (opens in a new tab) in #9727 (opens in a new tab)
- Properly set
primary_keys/on_conflict for Cayenne tables by @krinart (opens in a new tab) in #9739 (opens in a new tab)
- Add executor resource and replica support to cloud app config by @ewgenius (opens in a new tab) in #9734 (opens in a new tab)
- feat: Support PARTITION BY in Cayenne Catalog table creation by @peasee (opens in a new tab) in #9741 (opens in a new tab)
- Update datafusion and related packages to version 52.3.0 by @lukekim (opens in a new tab) in #9708 (opens in a new tab)
- Route FlightSQL statement updates through QueryBuilder by @phillipleblanc (opens in a new tab) in #9754 (opens in a new tab)
- JSON file format improvements by @lukekim (opens in a new tab) in #9743 (opens in a new tab)
- [SpiceDQ] Partition Cayenne catalogs writes through to executors by @Jeadie (opens in a new tab) in #9737 (opens in a new tab)
- Update to DF v52.3.0 versions of datafusion & datafusion-tableproviders by @lukekim (opens in a new tab) in #9756 (opens in a new tab)
- Make S3 metadata column handling more robust by @sgrebnov (opens in a new tab) in #9762 (opens in a new tab)
- Fetch API keys from dedicated endpoint instead of apps response by @phillipleblanc (opens in a new tab) in #9767 (opens in a new tab)
- Update arrow-rs, datafusion-federation, and datafusion-table-providers dependencies by @phillipleblanc (opens in a new tab) in #9769 (opens in a new tab)
- Chunk metastore batch inserts to respect SQLite parameter limits by @phillipleblanc (opens in a new tab) in #9770 (opens in a new tab)
- Improve JSON SODA support by @lukekim (opens in a new tab) in #9795 (opens in a new tab)
- Add ADBC Data Connector by @lukekim (opens in a new tab) in #9723 (opens in a new tab)
- docs: Release Cayenne as RC by @peasee (opens in a new tab) in #9766 (opens in a new tab)
- cli[feat]: cloud mode to use region-specific endpoints by @lukekim (opens in a new tab) in #9803 (opens in a new tab)
- Include updated JSON formats in HTTPS connector by @lukekim (opens in a new tab) in #9800 (opens in a new tab)
- Flight DoPut: Partition-aware write-through forwarding by @Jeadie (opens in a new tab) in #9759 (opens in a new tab)
- Pass through authentication to ADBC connector by @lukekim (opens in a new tab) in #9801 (opens in a new tab)
- Move scheduler_state_location from adapter metadata to env var by @phillipleblanc (opens in a new tab) in #9802 (opens in a new tab)
- Fix Cayenne DoPut upsert returning stale data after 3+ writes by @phillipleblanc (opens in a new tab) in #9806 (opens in a new tab)
- Fix JSON column projection producing schema mismatch by @sgrebnov (opens in a new tab) in #9811 (opens in a new tab)
- Fix http connector by @krinart (opens in a new tab) in #9818 (opens in a new tab)
- Fix ADBC Connector build and test by @lukekim (opens in a new tab) in #9813 (opens in a new tab)
- Support update & delete DML for distributed cayenne catalog by @Jeadie (opens in a new tab) in #9805 (opens in a new tab)
- Set allow_http param when S3 endpoint uses http scheme by @phillipleblanc (opens in a new tab) in #9834 (opens in a new tab)
- fix: Cayenne Catalog DDL requires a connected executor in distributed mode by @Jeadie (opens in a new tab) in #9838 (opens in a new tab)
- fix: Add conditional put support for file:// scheduler state location by @Jeadie (opens in a new tab) in #9842 (opens in a new tab)
- fix: Require the DDL primary key contain the partition key by @Jeadie (opens in a new tab) in #9844 (opens in a new tab)
- fix: Databricks SQL Warehouse schema retrieval with INLINE disposition and async retry by @lukekim (opens in a new tab) in #9846 (opens in a new tab)
- Filter pushdown improvements for SqlTable by @lukekim (opens in a new tab) in #9852 (opens in a new tab)
- feat: add iam_role_source parameter for AWS credential configuration by @lukekim (opens in a new tab) in #9854 (opens in a new tab)
- Fix ODBC queries silently returning 0 rows on query failure by @lukekim (opens in a new tab) in #9864 (opens in a new tab)
- feat(adbc): Add ADBC catalog connector with schema/table discovery by @lukekim (opens in a new tab) in #9865 (opens in a new tab)
- Make Turso SQL unparsing more robust and fix date comparisons by @lukekim (opens in a new tab) in #9871 (opens in a new tab)
- Fix Flight/FlightSQL filter precedence and mutable query consistency by @lukekim (opens in a new tab) in #9876 (opens in a new tab)
- Partial Aggregation optimisation for
FlightSQLExec by @lukekim (opens in a new tab) in #9882 (opens in a new tab)
- fix: v1/responses API preserves client instructions when system_prompt is set by @Jeadie (opens in a new tab) in #9884 (opens in a new tab)
- feat: emit
scheduler_active_executors_count and use it in spidapter by @Jeadie (opens in a new tab) in #9885 (opens in a new tab)
- feat: Add custom auth header support for GraphQL connector by @krinart (opens in a new tab) in #9899 (opens in a new tab)
- Add --endpoint flag to spice run with scheme-based routing by @lukekim (opens in a new tab) in #9903 (opens in a new tab)
- When executor connects, send DDL for existing tables by @Jeadie (opens in a new tab) in #9904 (opens in a new tab)
- fix: Improve ADBC driver shutdown handling and error classification by @lukekim (opens in a new tab) in #9905 (opens in a new tab)
- fix: require all executors to succeed for distributed DML (DELETE/UPDATE) forwarding by @Jeadie (opens in a new tab) in #9908 (opens in a new tab)
- fix(cayenne catalog): fix catalog refresh race condition causing duplicate primary keys by @Jeadie (opens in a new tab) in #9909 (opens in a new tab)
- Remove Perplexity support by @Jeadie (opens in a new tab) in #9910 (opens in a new tab)
- Fix refresh_sql support for debezium constraints by @krinart (opens in a new tab) in #9912 (opens in a new tab)
- Implement DML for DynamoDBTableProvider by @lukekim (opens in a new tab) in #9915 (opens in a new tab)
- chore: Update iceberg-rust fork to v0.9 by @lukekim (opens in a new tab) in #9917 (opens in a new tab)
- Run physical optimizer on
FallbackOnZeroResultsScanExec fallback plan by @sgrebnov (opens in a new tab) in #9927 (opens in a new tab)
- Improve Databricks error message when dataset has no columns by @sgrebnov (opens in a new tab) in #9928 (opens in a new tab)
- Delta Lake: fix data skipping for >= timestamp predicates by @sgrebnov (opens in a new tab) in #9932 (opens in a new tab)
- fix: Ensure distributed Cayenne DML inserts are forwarded to executors by @Jeadie (opens in a new tab) in #9948 (opens in a new tab)
- Add full query federation support for ADBC data connector by @lukekim (opens in a new tab) in #9953 (opens in a new tab)
- Make time_format deserialization case-insensitive by @claudespice (opens in a new tab) in #9955 (opens in a new tab)
- Hash ADBC join-pushdown context to prevent credential leaks in EXPLAIN plans by @lukekim (opens in a new tab) in #9956 (opens in a new tab)
- fix: Normalize Arrow Dictionary types for DuckDB and SQLite acceleration by @sgrebnov (opens in a new tab) in #9959 (opens in a new tab)
- ADBC BigQuery: Improve BigQuery dialect date/time and interval SQL generation by @lukekim (opens in a new tab) in #9967 (opens in a new tab)
- Make
BigQueryDialect more robust and add BigQuery TPC-H benchmark support by @lukekim (opens in a new tab) in #9969 (opens in a new tab)
- fix: Show proper unauthorized error instead of misleading runtime unavailable by @lukekim (opens in a new tab) in #9972 (opens in a new tab)
- fix: Enforce target_chunk_size as hard maximum in chunking by @lukekim (opens in a new tab) in #9973 (opens in a new tab)
- Add caching retention by @krinart (opens in a new tab) in #9984 (opens in a new tab)
- fix: improve Databricks schema error detection and messages by @lukekim (opens in a new tab) in #9987 (opens in a new tab)
- fix: Set default S3 region for opendal operator and fix cayenne nextest by @phillipleblanc (opens in a new tab) in #9995 (opens in a new tab)
- fix(PostgreSQL): fix schema discovery for PostgreSQL partitioned tables by @sgrebnov (opens in a new tab) in #9997 (opens in a new tab)
- fix: Defer cache size check until after encoding for compressed results by @krinart (opens in a new tab) in #10001 (opens in a new tab)
- fix: Rewrite numeric BETWEEN to CAST(AS REAL) for Turso by @lukekim (opens in a new tab) in #10003 (opens in a new tab)
- fix: Handle integer time columns in append refresh for all accelerators by @sgrebnov (opens in a new tab) in #10004 (opens in a new tab)
- fix: preserve s3a:// scheme when building OpenDalStorageFactory with custom endpoint by @phillipleblanc (opens in a new tab) in #10006 (opens in a new tab)
- Fix ISO8601 time_format with Vortex/Cayenne append refresh by @sgrebnov (opens in a new tab) in #10009 (opens in a new tab)
- fix: Address data correctness bugs found in audit by @sgrebnov (opens in a new tab) in #10015 (opens in a new tab)
- fix(federation): fix SQL unparsing for Inexact filter pushdown with alias by @lukekim (opens in a new tab) in #10017 (opens in a new tab)
- Improve GitHub connector ref handling and resilience by @lukekim (opens in a new tab) in #10023 (opens in a new tab)
- feat: Add spice completions command for shell completion generation by @lukekim (opens in a new tab) in #10024 (opens in a new tab)
- fix: Fix data correctness bugs in DynamoDB decimal conversion and GraphQL pagination by @sgrebnov (opens in a new tab) in #10054 (opens in a new tab)
- Implement RefreshDataset for distributed control stream by @Jeadie (opens in a new tab) in #10055 (opens in a new tab)
- perf: Improve S3 parquet read performance by @sgrebnov (opens in a new tab) in #10064 (opens in a new tab)
- fix: Prevent write-through stalls and preserve PartitionTableProvider during catalog refresh by @Jeadie (opens in a new tab) in #10066 (opens in a new tab)
- feat:
spice completions auto-detects shell directory and writes file by @lukekim (opens in a new tab) in #10068 (opens in a new tab)
- fix: Bug in DynamoDB, GraphQL, and ISO8601 refresh data handling by @sgrebnov (opens in a new tab) in #10063 (opens in a new tab)
- fix partial aggregation deduplication on string checking by @lukekim (opens in a new tab) in #10078 (opens in a new tab)
- fix: add MetastoreTransaction support to prevent concurrent transaction conflicts by @phillipleblanc (opens in a new tab) in #10080 (opens in a new tab)
- fix: Use GreedyMemoryPool, add spidapter query memory limit arg by @phillipleblanc (opens in a new tab) in #10082 (opens in a new tab)
- feat: Add metrics for EXPLAIN ANALYZE in FlightSQLExec by @lukekim (opens in a new tab) in #10084 (opens in a new tab)
- Use strict cast in
try_cast_to to error on overflow instead of silent NULL by @sgrebnov (opens in a new tab) in #10104 (opens in a new tab)
- feat: Implement MERGE INTO for Cayenne catalog tables by @peasee (opens in a new tab) in #10105 (opens in a new tab)
- feat: Add distributed MERGE INTO support for Cayenne catalog tables by @peasee (opens in a new tab) in #10106 (opens in a new tab)
- Improve JSON format auto-detection for single multi-line objects by @lukekim (opens in a new tab) in #10107 (opens in a new tab)
- Add mode: file_update acceleration mode by @krinart (opens in a new tab) in #10108 (opens in a new tab)
- Coerce unsupported Arrow types to Iceberg v2 equivalents in REST catalog API by @peasee (opens in a new tab) in #10109 (opens in a new tab)
- fix: Update default query memory limit to 90% from 70% by @phillipleblanc (opens in a new tab) in #10112 (opens in a new tab)
- feat: Add mTLS client auth support to spice sql REPL by @lukekim (opens in a new tab) in #10113 (opens in a new tab)
- fix(datafusion-federation): report error on overflow instead of silent NULL by @sgrebnov (opens in a new tab) in #10124 (opens in a new tab)
- fix: Prevent data loss in MERGE when source has duplicate keys by @peasee (opens in a new tab) in #10126 (opens in a new tab)
- feat: Add ClickHouse Date32 type support by @sgrebnov (opens in a new tab) in #10132 (opens in a new tab)
- Add Delta Lake column mapping support (Name/Id modes) by @sgrebnov (opens in a new tab) in #10134 (opens in a new tab)
- fix: Restore Turso numeric BETWEEN rewrite lost in DML revert by @lukekim (opens in a new tab) in #10139 (opens in a new tab)
- fix: Enable arm64 Linux builds with fp16 and lld workarounds by @lukekim (opens in a new tab) in #10142 (opens in a new tab)
- fix: remove double trailing slash in Unity Catalog storage locations by @sgrebnov (opens in a new tab) in #10147 (opens in a new tab)
- fix: Improve GitHub GraphQL client resilience and performance by @lukekim (opens in a new tab) in #10151 (opens in a new tab)
- Enable reqwest compression and optimize HTTP client settings by @lukekim (opens in a new tab) in #10154 (opens in a new tab)
- fix: executor startup failures by @Jeadie (opens in a new tab) in #10155 (opens in a new tab)
- feat: Distributed runtime.task_history support by @Jeadie (opens in a new tab) in #10156 (opens in a new tab)
- fix: Preserve timestamp timezone in DDL forwarding to executors by @peasee (opens in a new tab) in #10159 (opens in a new tab)
- feat: Per-model rate-limited concurrent AI UDF execution by @Jeadie (opens in a new tab) in #10160 (opens in a new tab)
- fix(Turso): Reject subquery/outer-ref filter pushdown in Turso provider by @lukekim (opens in a new tab) in #10174 (opens in a new tab)
- Fix linux/macos
spice upgrade by @phillipleblanc (opens in a new tab) in #10194 (opens in a new tab)
- Improve CREATE TABLE LIKE error messages, success output, EXPLAIN, and validation by @peasee (opens in a new tab) in #10203 (opens in a new tab)
- fix: chunk MERGE delete filters and update Vortex for stack-safe IN-lists by @peasee (opens in a new tab) in #10207 (opens in a new tab)
- Propagate
runtime.params.parquet_page_index to Delta Lake connector by @sgrebnov (opens in a new tab) in #10209 (opens in a new tab)
- Properly mark dataset as Ready on Scheduler by @Jeadie (opens in a new tab) in #10215 (opens in a new tab)
- fix: handle Utf8View/LargeUtf8 in GitHub connector ref filters by @lukekim (opens in a new tab) in #10217 (opens in a new tab)
- fix(databricks): Fix schema introspection and timestamp overflow by @lukekim (opens in a new tab) in #10226 (opens in a new tab)
- fix(databricks): Fix schema introspection failures for non-Unity-Catalog environments by @lukekim (opens in a new tab) in #10227 (opens in a new tab)
- feat: Add pagination support to HTTP data connector by @lukekim (opens in a new tab) in #10228 (opens in a new tab)
- feat(databricks): DESCRIBE TABLE fallback and source-native type parsing for Lakehouse Federation by @lukekim (opens in a new tab) in #10229 (opens in a new tab)
- fix(databricks): harden HTTP retries, compression, and token refresh by @lukekim (opens in a new tab) in #10232 (opens in a new tab)
- feat[helm chart]: Add support for ServiceAccount annotations and AWS IRSA example by @peasee (opens in a new tab) in #9833 (opens in a new tab)
- fix: Log warning and fall back gracefully on Cayenne config change by @krinart (opens in a new tab) in #9092 (opens in a new tab)
- fix: Handle engine mismatch gracefully in snapshot fallback loop by @krinart (opens in a new tab) in #9187 (opens in a new tab)
- fix: Full Text Search schema mismatch with ADBC connector by @lukekim (opens in a new tab) in #10235 (opens in a new tab)
- docs: Update v2.0.0-rc.2 release notes with latest changes by @lukekim (opens in a new tab) in #10238 (opens in a new tab)
- Fix append refresh dedup failure when refresh_sql selects column subset by @sgrebnov (opens in a new tab) in #10225 (opens in a new tab)
- Revert "Properly mark dataset as Ready on Scheduler (#10215)" by @sgrebnov (opens in a new tab) in #10242 (opens in a new tab)
- Fix failing merge conflicts for benchmarks by @krinart (opens in a new tab) in #10247 (opens in a new tab)
- fix(github): fetch commits for dynamic and slash refs by @lukekim (opens in a new tab) in #10233 (opens in a new tab)
- Upgrade DataFusion to v52.5.0-rc1 by @lukekim (opens in a new tab) in #10249 (opens in a new tab)
- Merge develop to trunk (2026-04-09) by @claudespice (opens in a new tab) in #10248 (opens in a new tab)
- fix: Validate embedding row_id columns during dataset init (fixes #8226) by @claudespice (opens in a new tab) in #10208 (opens in a new tab)
- fix: Update tpch benchmark snapshots for federated/glue[csv].yaml by @app/github-actions (opens in a new tab) in #10244 (opens in a new tab)
- feat(databricks): add resilience controls, UC awareness, and task history instrumentation by @lukekim (opens in a new tab) in #10246 (opens in a new tab)
- fix: Make PartitionManager resilient to bare vs fully qualified table references by @sgrebnov (opens in a new tab) in #10257 (opens in a new tab)
- fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-cayenne[file].yaml by @app/github-actions (opens in a new tab) in #10256 (opens in a new tab)
- Merge develop to trunk (2026-04-10) by @claudespice (opens in a new tab) in #10251 (opens in a new tab)
- Improve Snowflake/ADBC dataset registration performance and observability by @lukekim (opens in a new tab) in #10266 (opens in a new tab)
- Fixes for kafka connector by @krinart (opens in a new tab) in #10263 (opens in a new tab)
- fix(runtime): gate otel code tags, suppress aws sdk noise, and unblock connector init by @lukekim (opens in a new tab) in #10260 (opens in a new tab)
- fix(runtime): avoid regionless AWS SDK loads by @lukekim (opens in a new tab) in #10271 (opens in a new tab)
- Add versioned release install workflow coverage by @lukekim (opens in a new tab) in #10276 (opens in a new tab)
- fix(runtime): handle HTTP JSON unions and spicepod reloads by @lukekim (opens in a new tab) in #10277 (opens in a new tab)
- Databricks UC permission prechecks: explicit denial as permanent error, ambiguous cases advisory by @lukekim (opens in a new tab) in #10274 (opens in a new tab)
- Revert component status changes re-introduced by develop merge (#10248) by @sgrebnov (opens in a new tab) in #10293 (opens in a new tab)
- Fix broken CI workflows by @ewgenius (opens in a new tab) in #10294 (opens in a new tab)
- Group dependabot updates by ecosystem by @lukekim (opens in a new tab) in #10296 (opens in a new tab)
- fix(tests): Replace flaky S3 Vectors snapshot tests with structural validation by @lukekim (opens in a new tab) in #10301 (opens in a new tab)
- Update test_github_workflows snapshot by @lukekim (opens in a new tab) in #10304 (opens in a new tab)
- fix(ci): fix Bedrock runner mismatch and snapshot auto-merge failure by @ewgenius (opens in a new tab) in #10306 (opens in a new tab)
- feat(http): Add map-to-array conversion and query-parameter pagination by @lukekim (opens in a new tab) in #10295 (opens in a new tab)
- New crate:
datafusion-ddl by @Jeadie (opens in a new tab) in #10205 (opens in a new tab)
- Make Databricks UC permission checks advisory with structured error reporting by @lukekim (opens in a new tab) in #10283 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group with 4 updates by @app/dependabot (opens in a new tab) in #10298 (opens in a new tab)
- fix: Clear cached plans on view updates by @peasee (opens in a new tab) in #10312 (opens in a new tab)
- build(deps): bump the aws-sdk group with 7 updates by @app/dependabot (opens in a new tab) in #10299 (opens in a new tab)
- Code out of runtime. by @Jeadie (opens in a new tab) in #10178 (opens in a new tab)
- fix: Respect function registry denies for accelerated table filter pushdown by @peasee (opens in a new tab) in #10311 (opens in a new tab)
- fix: Don't block heartbeat when all slots acquired by @peasee (opens in a new tab) in #10322 (opens in a new tab)
- fix: strip only outer parens in
get_table_partition_expr_from_ctx by @Jeadie (opens in a new tab) in #10323 (opens in a new tab)
- Upgrade datafusion-table-providers with MongoDB SRV support by @lukekim (opens in a new tab) in #10317 (opens in a new tab)
- fix: Avoid pushing down bucketing partition expressions into executors by @peasee (opens in a new tab) in #10324 (opens in a new tab)
- Upgrade datafusion-table-providers to d1b911a5 and bump adbc to 0.23 by @lukekim (opens in a new tab) in #10329 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #10308 (opens in a new tab)
- Handle foreign table + Classic sql warehouse combination gracefully by @krinart (opens in a new tab) in #10318 (opens in a new tab)
- New crate
datafusion-flightsql by @Jeadie (opens in a new tab) in #10201 (opens in a new tab)
- Set
tantivy=warn unless very verbose logging by @Jeadie (opens in a new tab) in #10338 (opens in a new tab)
- Remove image registry and image name options from spidapter by @ewgenius (opens in a new tab) in #10241 (opens in a new tab)
- build(deps): bump sysinfo from 0.37.2 to 0.38.4 by @app/dependabot (opens in a new tab) in #10291 (opens in a new tab)
- build(deps): bump futures from 0.3.31 to 0.3.32 by @app/dependabot (opens in a new tab) in #10289 (opens in a new tab)
- New crate 'datafusion-dml' by @Jeadie (opens in a new tab) in #10334 (opens in a new tab)
- Jeadie/26 04 16/spice sql by @Jeadie (opens in a new tab) in #10343 (opens in a new tab)
- Add Teraswitch/Pittsburgh apt mirrors + retry config for CI runners by @lukekim (opens in a new tab) in #10349 (opens in a new tab)
- Implement sort pushdown and fix pushdown gaps across providers by @lukekim (opens in a new tab) in #10337 (opens in a new tab)
- Merge develop to trunk (2026-04-16) by @claudespice (opens in a new tab) in #10345 (opens in a new tab)
- Update candle and mistral.rs lock-step pins by @lukekim (opens in a new tab) in #10278 (opens in a new tab)
- docs: fix status badges in README by @lukekim (opens in a new tab) in #10350 (opens in a new tab)
- Migrate secrets to vars by @krinart (opens in a new tab) in #10354 (opens in a new tab)
- Add limit pushdown and improve sort pushdown for Oracle and MSSQL by @sgrebnov (opens in a new tab) in #10351 (opens in a new tab)
- Fix ubuntu mirror configuration by @ewgenius (opens in a new tab) in #10359 (opens in a new tab)
- fix: Increase throughput test default ready_wait from 30s to 300s (fixes #8207) by @claudespice (opens in a new tab) in #10344 (opens in a new tab)
- Add auth headers support to OTEL metrics exporter by @lukekim (opens in a new tab) in #10347 (opens in a new tab)
- fix(github): shrink GraphQL page size on gateway errors; lower comment defaults by @lukekim (opens in a new tab) in #10355 (opens in a new tab)
- Relax apt mirror substitution failure to warning in CI action by @ewgenius (opens in a new tab) in #10361 (opens in a new tab)
- feat(http): Add OAuth2 refresh-token auth to HTTP connector by @lukekim (opens in a new tab) in #10348 (opens in a new tab)
- Upgrade Rust toolchain to 1.94.1 by @lukekim (opens in a new tab) in #10353 (opens in a new tab)
- Handle order by and sort in PartitionedTableScanRewrite by @Jeadie (opens in a new tab) in #9656 (opens in a new tab)
- Fix OTEL Exporter by @krinart (opens in a new tab) in #10363 (opens in a new tab)
- Pin spiceai candle / TEI forks to merged revs; drop local [patch] overrides by @lukekim (opens in a new tab) in #10362 (opens in a new tab)
- Integrate spiceio and makefile_targets into pr.yml by @lukekim (opens in a new tab) in #10357 (opens in a new tab)
- ci: skip artifact compression for test binaries/archives by @lukekim (opens in a new tab) in #10381 (opens in a new tab)
- chore(deps): bump spiceai/candle, spiceai/mistral.rs, aws-lc-rs, tantivy, rand by @lukekim (opens in a new tab) in #10379 (opens in a new tab)
- Bump datafusion-table-providers (#10375) by @lukekim (opens in a new tab) in #10384 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #10376 (opens in a new tab)
- v2.0.0-rc.3 preparation by @ewgenius (opens in a new tab) in #10382 (opens in a new tab)
- fix(spicepod): JSON schema accepts string or
{name: expr} for partition_by by @lukekim (opens in a new tab) in #10352 (opens in a new tab)
- fix: Use ROUND for Turso decimal BETWEEN comparisons (fixes #9872) by @claudespice (opens in a new tab) in #10360 (opens in a new tab)
- Revert "v2.0.0-rc.3 preparation" from trunk by @ewgenius (opens in a new tab) in #10386 (opens in a new tab)
- Add
on_schema_resolved dataset ready state by @lukekim (opens in a new tab) in #10368 (opens in a new tab)
- feat: Add Elasticsearch data connector with hybrid search support by @lukekim (opens in a new tab) in #10258 (opens in a new tab)
- ci: bump test archive upload compression-level to 1 by @lukekim (opens in a new tab) in #10388 (opens in a new tab)
- feat(git-connector): promote Git connector to RC status by @lukekim (opens in a new tab) in #10385 (opens in a new tab)
- feat(postgres): stream WAL directly to Spice accelerators by @lukekim (opens in a new tab) in #10364 (opens in a new tab)
- Add schema decomposition to the HTTP connector by @lukekim (opens in a new tab) in #10393 (opens in a new tab)
- fix(cayenne): Skip catalog refresh state reload for existing providers by @sgrebnov (opens in a new tab) in #10396 (opens in a new tab)
- Make
cayenne-flightsql tool by @Jeadie (opens in a new tab) in #10356 (opens in a new tab)
- build(deps): bump the github-actions-dependencies group with 2 updates by @app/dependabot (opens in a new tab) in #10398 (opens in a new tab)
- Update openapi.json by @app/github-actions (opens in a new tab) in #10272 (opens in a new tab)
- Merge develop to trunk — 2026-04-19 by @claudespice (opens in a new tab) in #10407 (opens in a new tab)
- feat(otel): default OTLP push exporter to delta temporality by @phillipleblanc (opens in a new tab) in #10412 (opens in a new tab)
- fix: Restore analyzer rule ordering to run federation before type coercion by @sgrebnov (opens in a new tab) in #10415 (opens in a new tab)
- fix: Map Utf8/LargeUtf8 to STRING in Databricks/Spark SQL dialects by @sgrebnov (opens in a new tab) in #10420 (opens in a new tab)
- feat(otel): add metric name prefix at runtime.telemetry.metric_prefix by @phillipleblanc (opens in a new tab) in #10418 (opens in a new tab)
- fix: Map LargeUtf8 to VARCHAR in Athena ODBC dialect by @sgrebnov (opens in a new tab) in #10419 (opens in a new tab)
- feat(cluster): connector-driven object store registration on executors by @phillipleblanc (opens in a new tab) in #10414 (opens in a new tab)
- build(deps): bump ubuntu from 22.04 to 24.04 in the docker-dependencies group by @app/dependabot (opens in a new tab) in #10397 (opens in a new tab)
- fix: Update benchmark snapshots Apr 20 by @app/github-actions (opens in a new tab) in #10417 (opens in a new tab)
- feat(otel): apply runtime.telemetry.properties as resource attributes on exported metrics by @phillipleblanc (opens in a new tab) in #10416 (opens in a new tab)
- Publish RC releases to DockerHub; upgrade runners to ubuntu-24.04 by @lukekim (opens in a new tab) in #10428 (opens in a new tab)
- feat: Add Azure Cosmos DB (NoSQL) data connector (RC) by @lukekim (opens in a new tab) in #10392 (opens in a new tab)
- feat(datafusion): flatten_json_properties + json_tree UDTFs by @lukekim (opens in a new tab) in #10406 (opens in a new tab)
- Harden /v1/tools and /v1/nsql against unauthenticated / LLM-driven SQL by @lukekim (opens in a new tab) in #10365 (opens in a new tab)
- feat(embeddings): multi-vector embeddings with MaxSim + late-interaction by @lukekim (opens in a new tab) in #10408 (opens in a new tab)
- Update GH runners for CUDA builds by @ewgenius (opens in a new tab) in #10432 (opens in a new tab)
- fix(delta_lake): register object stores on cluster executors by @phillipleblanc (opens in a new tab) in #10436 (opens in a new tab)
- DF-native DML by @krinart (opens in a new tab) in #10327 (opens in a new tab)
- ci: run Build and Test on spiceai-macos; split install jobs by profile by @lukekim (opens in a new tab) in #10434 (opens in a new tab)
- Improve search UDTFs: text_search, vector_search, rrf by @lukekim (opens in a new tab) in #10387 (opens in a new tab)
- fix(model2vec): Improve robustness of model loading for sentence-transformers layouts by @sgrebnov (opens in a new tab) in #10444 (opens in a new tab)
- Merge develop to trunk — 2026-04-21 by @claudespice (opens in a new tab) in #10448 (opens in a new tab)
- Enable filter pushdown for
vector_search UDTF by @sgrebnov (opens in a new tab) in #10447 (opens in a new tab)
- Support Snowflake OBJECT, MAP, GEOGRAPHY, GEOMETRY, VECTOR, TIMESTAMP_LTZ types by @lukekim (opens in a new tab) in #10451 (opens in a new tab)
- Fix Databricks tests by @krinart (opens in a new tab) in #10449 (opens in a new tab)
- fix(cluster): forward register_object_stores through connector wrappers by @phillipleblanc (opens in a new tab) in #10460 (opens in a new tab)
- Fixes for vector-search by @krinart (opens in a new tab) in #10455 (opens in a new tab)
- Add expand_maps option and flatten_json UDTF by @lukekim (opens in a new tab) in #10452 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #10458 (opens in a new tab)
- Fix physical codec decode ambiguity for empty protobuf messages by @sgrebnov (opens in a new tab) in #10466 (opens in a new tab)
- chore(logging): demote s3_single_file_cached skip refresh log to debug by @phillipleblanc (opens in a new tab) in #10467 (opens in a new tab)
- Enable filter pushdown for
rrf UDTF by @sgrebnov (opens in a new tab) in #10465 (opens in a new tab)
- feat(cluster): consolidate distributed state into cluster.json by @phillipleblanc (opens in a new tab) in #10463 (opens in a new tab)
- feat(cayenne): Add column statistics and data inlining by @lukekim (opens in a new tab) in #10314 (opens in a new tab)
- docs(copilot): flag missing wrapper delegation when adding default trait methods by @phillipleblanc (opens in a new tab) in #10461 (opens in a new tab)
- Wire Elasticsearch vector engine write path through acceleration by @lukekim (opens in a new tab) in #10453 (opens in a new tab)
- Add helm lint CI by @ewgenius (opens in a new tab) in #10468 (opens in a new tab)
- Fix Azure and GCS acceleration snapshot object store credential handling by @phillipleblanc (opens in a new tab) in #10486 (opens in a new tab)
- Update spicepod.schema.json by @app/github-actions (opens in a new tab) in #10485 (opens in a new tab)
- fix(secrets): harden AWS Secrets Manager secret store by @lukekim (opens in a new tab) in #10478 (opens in a new tab)
- Update
datafusion-ballista crate by @sgrebnov (opens in a new tab) in #10488 (opens in a new tab)
- feat(secrets): add ParameterSpec and more params for AWS secrets manager by @phillipleblanc (opens in a new tab) in #10487 (opens in a new tab)
- Add rerank UDTF for hybrid search with query auto-propagation by @lukekim (opens in a new tab) in #10469 (opens in a new tab)
- Fix flatten_json_properties by @krinart (opens in a new tab) in #10475 (opens in a new tab)
- fix: preserve field and schema metadata in expand_views_schema by @claudespice (opens in a new tab) in #10494 (opens in a new tab)
- Upgrade rmcp to upstream 1.5.0; switch MCP server to Streamable HTTP by @lukekim (opens in a new tab) in #10491 (opens in a new tab)
- fix: handle Snowflake TIMESTAMP_LTZ wire format and prevent nanosecond overflow by @claudespice (opens in a new tab) in #10493 (opens in a new tab)
- Lint parity in Makefile by @krinart (opens in a new tab) in #10492 (opens in a new tab)
- Add connect_timeout/client_timeout params to Databricks sql_warehouse mode by @lukekim (opens in a new tab) in #10495 (opens in a new tab)
- fix(tracing): suppress opentelemetry INFO logs at all verbosity levels by @lukekim (opens in a new tab) in #10497 (opens in a new tab)
- DynamoDB DML by @krinart (opens in a new tab) in #10470 (opens in a new tab)
- feat(cayenne): native vector search via SIMD similarity UDFs by @lukekim (opens in a new tab) in #10456 (opens in a new tab)
- fix(cli): suppress banner for all JSON-producing cloud subcommands (fixes #10498) by @claudespice (opens in a new tab) in #10510 (opens in a new tab)
- fix(deps): bump openssl to 0.10.78 by @phillipleblanc (opens in a new tab) in #10509 (opens in a new tab)
- fix(s3): quiet AWS SDK credential probe when no region is configured by @phillipleblanc (opens in a new tab) in #10506 (opens in a new tab)
- fix(cdc): emit ready signal on caught-up Kafka/Debezium streams (#5201) by @phillipleblanc (opens in a new tab) in #10504 (opens in a new tab)
runtime-cluster crate + Run partition discovery before forwarding refresh to executors by @krinart (opens in a new tab) in #10490 (opens in a new tab)
- Update lint-rust target to use
--keep-going by @Jeadie (opens in a new tab) in #10508 (opens in a new tab)
- Add TPC-H SF100 s3[parquet]-duckdb[file] benchmark spicepod by @lukekim (opens in a new tab) in #10524 (opens in a new tab)
- Remove dev-profile install steps from pr.yml by @Jeadie (opens in a new tab) in #10507 (opens in a new tab)
- fix: add missing NULL check on Timestamp path in append refresh by @claudespice (opens in a new tab) in #10518 (opens in a new tab)
- fix: return error on Decimal128/256 overflow instead of silently dropping scale by @claudespice (opens in a new tab) in #10519 (opens in a new tab)
- fix: delegate update and delete_from in IndexedTableProvider and EmbeddingTable by @claudespice (opens in a new tab) in #10520 (opens in a new tab)
- feat(devx): make config errors, CLI, and REPL lead users to success by @lukekim (opens in a new tab) in #10489 (opens in a new tab)
- fix(rerank): defer execution to RerankExec, enable filters and projection pushdown by @sgrebnov (opens in a new tab) in #10514 (opens in a new tab)
- fix(llms): support Gemma models with missing attention_bias config field by @lukekim (opens in a new tab) in #10523 (opens in a new tab)
- Fix vector_search silently ignoring named limit/column/include_score args by @sgrebnov (opens in a new tab) in #10527 (opens in a new tab)
- fix: split unsupported filters locally in scan() for UseSource mode by @ewgenius (opens in a new tab) in #10528 (opens in a new tab)
- feat(secrets): add Azure Key Vault secret store by @lukekim (opens in a new tab) in #10496 (opens in a new tab)
- Bump mistralrs by @krinart (opens in a new tab) in #10532 (opens in a new tab)
- Fix benchmark configurations and CI build issues by @sgrebnov (opens in a new tab) in #10535 (opens in a new tab)
- Fix catalog query overrides for MySQL and MSSQL benchmarks by @sgrebnov (opens in a new tab) in #10543 (opens in a new tab)
- For Cayenne, preserve matched columns for
MERGE ... ON <cols> by @Jeadie (opens in a new tab) in #10340 (opens in a new tab)
- build(deps): bump the aws-sdk group across 1 directory with 5 updates by @app/dependabot (opens in a new tab) in #10538 (opens in a new tab)
- docs: update AI agent instructions (git workflow + Rust 1.94) by @lukekim (opens in a new tab) in #10544 (opens in a new tab)
- fix: Update tpch benchmark snapshots by @app/github-actions (opens in a new tab) in #10529 (opens in a new tab)
- fix: Update tpch benchmark snapshots for accelerated/s3[parquet]-duckdb[file].yaml by @app/github-actions (opens in a new tab) in #10525 (opens in a new tab)
- Extract
runtime-datafusion from runtime by @krinart (opens in a new tab) in #10545 (opens in a new tab)
- Use generic DML extension planner for Cayenne by @Jeadie (opens in a new tab) in #10437 (opens in a new tab)
- fix: Update Search integration test snapshots by @app/github-actions (opens in a new tab) in #10552 (opens in a new tab)
- Fix security and correctness audit issues by @lukekim (opens in a new tab) in #10526 (opens in a new tab)
- fix(MySQL): revert MySQL result column reorder to fix federated query failures by @sgrebnov (opens in a new tab) in #10557 (opens in a new tab)
- Fix
protoc installation by @krinart (opens in a new tab) in #10566 (opens in a new tab)
- fix: Disable Ballista dynamic filters on HashJoinExec by @peasee (opens in a new tab) in #10548 (opens in a new tab)
- Support views on DDL catalogs by @Jeadie (opens in a new tab) in #10554 (opens in a new tab)
- Update datafusion by @Jeadie (opens in a new tab) in #10422 (opens in a new tab)
- Improve full-text search indexing performance by @sgrebnov (opens in a new tab) in #10464 (opens in a new tab)
- feat(mysql): add mysql_zero_date_behavior parameter (null|error) by @phillipleblanc (opens in a new tab) in #10573 (opens in a new tab)
- fix(snowflake): declare
private_key in connector PARAMETERS (fixes #10517) by @claudespice (opens in a new tab) in #10559 (opens in a new tab)
- Honour
CARGO_TARGET_DIR in Makefiles by @Jeadie (opens in a new tab) in #10569 (opens in a new tab)
- Enable
cosine_distance pushdown to DuckDB accelerator via array_cosine_distance by @sgrebnov (opens in a new tab) in #10564 (opens in a new tab)
- fix: Update test snapshots by @app/github-actions (opens in a new tab) in #10570 (opens in a new tab)
- fix: Update tpch benchmark snapshots by @app/github-actions (opens in a new tab) in #10560 (opens in a new tab)
- feat(snapshots): make snapshots an optional feature by @phillipleblanc (opens in a new tab) in #10574 (opens in a new tab)
- Enforce read-only API key restrictions on Flight DoGet and async query paths by @Jeadie (opens in a new tab) in #10551 (opens in a new tab)
- Improved security posture on Github workflows by @Jeadie (opens in a new tab) in #10556 (opens in a new tab)
- fix: Update datafusion-table-providers to improve SqlTable filter pushdown by @sgrebnov (opens in a new tab) in #10595 (opens in a new tab)
- feat(secrets): add HashiCorp Vault secret store by @phillipleblanc (opens in a new tab) in #10561 (opens in a new tab)
- fix: delegate update() in UpsertDedupTableProvider to inner provider by @claudespice (opens in a new tab) in #10593 (opens in a new tab)
- Add DuckDB vector engine support by @lukekim (opens in a new tab) in #10562 (opens in a new tab)
- Sharepoint - add object-store listing connector with expanded auth and write support by @lukekim (opens in a new tab) in #10473 (opens in a new tab)
- fix: Install protoc from source by @peasee (opens in a new tab) in #10597 (opens in a new tab)
- Enable DML support for PostgreSQL data connector by @phillipleblanc (opens in a new tab) in #10446 (opens in a new tab)
- feat(postgres): support inline PEM sslrootcert by @claudespice (opens in a new tab) in #10578 (opens in a new tab)
- Add foreign key metadata discovery to PostgreSQL Catalog by @sgrebnov (opens in a new tab) in #10849 (opens in a new tab)
- Add Snowflake DML support by @lukekim (opens in a new tab) in #10747 (opens in a new tab)
- Add MongoDB Change Streams support by @lukekim (opens in a new tab) in #10813 (opens in a new tab)
- Add user-defined functions by @lukekim (opens in a new tab) in #10571 (opens in a new tab)
- Add table user functions and gate HTTP servers by @lukekim (opens in a new tab) in #10675 (opens in a new tab)
- feat: add on-demand dataset loading by @phillipleblanc (opens in a new tab) in #10629 (opens in a new tab)
- feat(runtime): declared-schema deferred datasets by @phillipleblanc (opens in a new tab) in #10669 (opens in a new tab)
- feat(spicepod, runtime): add columns[].type / nullable + lenient type parser by @phillipleblanc (opens in a new tab) in #10661 (opens in a new tab)
- Replace external smb crate with internal SMB 3.1.1 client by @phillipleblanc (opens in a new tab) in #10516 (opens in a new tab)
- Add unified query cancellation across all paths by @lukekim (opens in a new tab) in #10390 (opens in a new tab)
- Add dynamic HTTP request headers by @lukekim (opens in a new tab) in #10604 (opens in a new tab)
- feat(http): Support dynamic HTTP connector request params from subqueries by @lukekim (opens in a new tab) in #10636 (opens in a new tab)
- feat(http): pass through HTTP metadata columns with JSON schema decomposition by @lukekim (opens in a new tab) in #10679 (opens in a new tab)
- Add nolimit HTTP pagination max pages by @lukekim (opens in a new tab) in #10673 (opens in a new tab)
- Add shared HTTP rate control for connectors by @lukekim (opens in a new tab) in #10648 (opens in a new tab)
- Use origin label instead of name for HTTP rate control metrics by @lukekim (opens in a new tab) in #10689 (opens in a new tab)
- fix(http): reject OR across different HTTP filter columns by @lukekim (opens in a new tab) in #10625 (opens in a new tab)
- Add provider-aware LLM prompt caching by @lukekim (opens in a new tab) in #10645 (opens in a new tab)
- Add searchable registry mode for LLM tools by @lukekim (opens in a new tab) in #10647 (opens in a new tab)
- feat: refresh_mode: snapshot + SQLite/Turso WAL flush + Cayenne metastore slice by @phillipleblanc (opens in a new tab) in #10651 (opens in a new tab)
- feat: per-principal cache namespacing for SQL/search/caching-accelerator by @lukekim (opens in a new tab) in #10702 (opens in a new tab)
- Add self-hosted Spice connector support by @phillipleblanc (opens in a new tab) in #10546 (opens in a new tab)
- Add Delta Lake Azure tenant parameter by @phillipleblanc (opens in a new tab) in #10671 (opens in a new tab)
- Support OAuth2 client credentials in 'spice cloud login' by @ewgenius (opens in a new tab) in #10586 (opens in a new tab)
- Add configurable allowed_hosts for MCP by @lukekim (opens in a new tab) in #10638 (opens in a new tab)
- fix: make Helm chart probes configurable by @peasee (opens in a new tab) in #10696 (opens in a new tab)
- Strip high-cardinality datasets dim from anonymous telemetry by @lukekim (opens in a new tab) in #10711 (opens in a new tab)
- feat(elasticsearch): direct FTS engine config + index lifecycle and ingestion controls by @lukekim (opens in a new tab) in #10672 (opens in a new tab)
- Add DuckDB HNSW vector index support for accelerated views by @sgrebnov (opens in a new tab) in #10695 (opens in a new tab)
- Rewrite DuckDB vector search SQL to activate HNSW_INDEX_SCAN by @sgrebnov (opens in a new tab) in #10674 (opens in a new tab)
- Fix DuckDB HNSW vector indexes lost after data refresh by @sgrebnov (opens in a new tab) in #10668 (opens in a new tab)
- Fix DuckDB DELETE/UPDATE on
full and caching refresh mode datasets by @phillipleblanc (opens in a new tab) in #10632 (opens in a new tab)
- Fix DuckLake connector: downcast, module registration, schema discovery, and S3 credentials by @sgrebnov (opens in a new tab) in #10650 (opens in a new tab)
- Fix federation pushing denied functions inside subqueries to remote engines by @phillipleblanc (opens in a new tab) in #10692 (opens in a new tab)
- fix(caching): honour refresh_on_startup: always in caching mode by @phillipleblanc (opens in a new tab) in #10594 (opens in a new tab)
- fix(iceberg): rebuild storage factory when Hadoop catalog scheme is inferred by @sgrebnov (opens in a new tab) in #10601 (opens in a new tab)
- Pipeline CDC ingestion: overlap source reads with batch apply by @lukekim (opens in a new tab) in #10676 (opens in a new tab)
- fix: add NULL check to CDC primary key extraction by @lukekim (opens in a new tab) in #10684 (opens in a new tab)
- Properly handle nullability during CDC processing by @krinart (opens in a new tab) in #10803 (opens in a new tab)
- Flatten scheduler config and rename partition management → partition assignment by @lukekim (opens in a new tab) in #10450 (opens in a new tab)
- Improve NSQL UX and harden internal LLM tools by @lukekim (opens in a new tab) in #10715 (opens in a new tab)
- Support Responses API across model providers by @lukekim (opens in a new tab) in #10724 (opens in a new tab)
- Update xAI default model and handle Grok model retirements by @Jeadie (opens in a new tab) in #10723 (opens in a new tab)
- Improve cli table layout by @krinart (opens in a new tab) in #10725 (opens in a new tab)
- TLS cert hot-reload (mTLS plan M1) by @phillipleblanc (opens in a new tab) in #10727 (opens in a new tab)
- Fix DuckLake catalog
include filter being ignored by @phillipleblanc (opens in a new tab) in #10738 (opens in a new tab)
- Promote DuckLake Catalog and Data Connector to Beta quality by @sgrebnov (opens in a new tab) in #10743 (opens in a new tab)
- feat(ducklake): Support INSERT on catalog tables with read_write access by @sgrebnov (opens in a new tab) in #10744 (opens in a new tab)
- perf(cdc): coalesce envelopes and overlap commits in apply pipeline by @lukekim (opens in a new tab) in #10745 (opens in a new tab)
- feat: Allow full version tags in spicepod version by @peasee (opens in a new tab) in #10748 (opens in a new tab)
- Add Arrow primary key upserts by @lukekim (opens in a new tab) in #10749 (opens in a new tab)
- fix(snapshot): keep refresh_mode snapshot read-only by @phillipleblanc (opens in a new tab) in #10752 (opens in a new tab)
- feat(tls): public mTLS for HTTP and Flight (channel + identity modes) by @phillipleblanc (opens in a new tab) in #10753 (opens in a new tab)
- perf(cayenne): lock-free deletion caches with bloom-prefiltered probe by @lukekim (opens in a new tab) in #10756 (opens in a new tab)
- fix(security): close API key timing-position leak and remote-UDF SSRF by @lukekim (opens in a new tab) in #10757 (opens in a new tab)
- Fix 'wait_until_dependent_tables_are_ready' for catalogs by @phillipleblanc (opens in a new tab) in #10758 (opens in a new tab)
- Fixes for views and resolved tables on 'spice refresh' CLI by @phillipleblanc (opens in a new tab) in #10759 (opens in a new tab)
- Implement FlightSQL CommandStatementSubstraitPlan support by @lukekim (opens in a new tab) in #10761 (opens in a new tab)
- feat(connectors): mTLS client cert support for flightsql and spiceai connectors by @phillipleblanc (opens in a new tab) in #10764 (opens in a new tab)
- Allow arbitrary filenames when specifying spicepod path +
kind validation by @krinart (opens in a new tab) in #10777 (opens in a new tab)
- fix: ignore field metadata in schema compatibility check in index_table_scan by @Jeadie (opens in a new tab) in #10778 (opens in a new tab)
- Display pushed-down limits in EXPLAIN TREE output by @lukekim (opens in a new tab) in #10779 (opens in a new tab)
- fix: enable streaming append for Kafka with Cayenne accelerator by @lukekim (opens in a new tab) in #10780 (opens in a new tab)
- fix: bound chunked-index intermediate batch size to prevent OOM by @phillipleblanc (opens in a new tab) in #10783 (opens in a new tab)
- fix: label all columns in
spice cloud metrics table output by @claudespice (opens in a new tab) in #10784 (opens in a new tab)
- fix: use checked arithmetic for Turso integer-millis timestamp read path by @claudespice (opens in a new tab) in #10786 (opens in a new tab)
- fix: use checked arithmetic in timestamp-to-nanosecond conversions by @claudespice (opens in a new tab) in #10666 (opens in a new tab)
- Upgrade to DuckDB v1.5.2 by @sgrebnov (opens in a new tab) in #10788 (opens in a new tab)
- Improve CDC ingestion performance by @lukekim (opens in a new tab) in #10789 (opens in a new tab)
- Fix
tool_search/tool_invoke spans by @lukekim (opens in a new tab) in #10791 (opens in a new tab)
- Add Cayenne inline mutations and benchmark coverage by @lukekim (opens in a new tab) in #10792 (opens in a new tab)
- Ensure we always resolve table names in distributed mode/metadata by @Jeadie (opens in a new tab) in #10793 (opens in a new tab)
- Remove permanent errors from DynamoDB Streams by @krinart (opens in a new tab) in #10794 (opens in a new tab)
- Add expanded view mode for wide table display in SQL REPL by @lukekim (opens in a new tab) in #10797 (opens in a new tab)
- Fix Cayenne CDC schema mismatch error by @sgrebnov (opens in a new tab) in #10800 (opens in a new tab)
- Executors should create catalog tables on join by @Jeadie (opens in a new tab) in #10807 (opens in a new tab)
- Add compressed file support for listing connectors by @lukekim (opens in a new tab) in #10809 (opens in a new tab)
- Improve Cayenne mutation, scan, and inline memtable scaling by @lukekim (opens in a new tab) in #10811 (opens in a new tab)
- Add range fallback for large join filters by @lukekim (opens in a new tab) in #10816 (opens in a new tab)
- Improve Cayenne join filter pushdown by @lukekim (opens in a new tab) in #10818 (opens in a new tab)
- Synchronize Cayenne partition commits across partitions by @phillipleblanc (opens in a new tab) in #10819 (opens in a new tab)
- fix: Deny nondistributed cayenne catalog by @peasee (opens in a new tab) in #10821 (opens in a new tab)
- Enable parallel Cayenne Vortex writes by @lukekim (opens in a new tab) in #10822 (opens in a new tab)
- Expand Arrow type handling in formatting and Elasticsearch by @lukekim (opens in a new tab) in #10825 (opens in a new tab)
- Add
response.output_text.delta to responses API by @krinart (opens in a new tab) in #10828 (opens in a new tab)
- feat(cayenne): add join filter propagation and no-spill Q21 planning by @lukekim (opens in a new tab) in #10840 (opens in a new tab)
- Upgrade Turso to v0.6.0 by @sgrebnov (opens in a new tab) in #10843 (opens in a new tab)
- feat(cli): add
spice feedback command to open community Slack by @lukekim (opens in a new tab) in #10856 (opens in a new tab)
- Upgrade iceberg to v0.9.1 by @sgrebnov (opens in a new tab) in #10859 (opens in a new tab)
- feat(cluster): per-request executor readiness gate on /v1/ready by @phillipleblanc (opens in a new tab) in #10860 (opens in a new tab)
- fix: Require dim-side statistics for
CayennePropagateFilterAcrossEquiJoinKeys by @sgrebnov (opens in a new tab) in #10863 (opens in a new tab)
- fix: Debezium schema evolution breaks dataset init on reload by @claudespice (opens in a new tab) in #10144 (opens in a new tab)
- fix(mssql): Push topK limit to SQL Server for non-nullable sort columns by @Jeadie (opens in a new tab) in #10621 (opens in a new tab)
- fix(ScyllaDB): disable physical filter pushdown by @sgrebnov (opens in a new tab) in #10772 (opens in a new tab)
- fix: handle typed NULLs and prevent overflow in DynamoDB DML type conversions by @krinart (opens in a new tab) in #10511 (opens in a new tab)
- fix: use InsertOp::Overwrite in DynamoDB bootstrap scan_and_overwrite_accelerator by @krinart (opens in a new tab) in #10639 (opens in a new tab)
- Improve DynamoDB Bootstrap performance by @krinart (opens in a new tab) in #10616 (opens in a new tab)
- fix: preserve field and schema metadata in Vortex type transformation by @lukekim (opens in a new tab) in #10628 (opens in a new tab)
- fix: GH connector - explicitly use AWS LC RS crypto provider for jwt by @phillipleblanc (opens in a new tab) in #10619 (opens in a new tab)
- fix: add snapshot mode guards to delete_from/update and delegate DML in SwappableTableProvider by @phillipleblanc (opens in a new tab) in #10685 (opens in a new tab)
- Persist HTTP rate-control state in object storage by @lukekim (opens in a new tab) in #10697 (opens in a new tab)
- Rate limit metrics HTTP endpoint by @lukekim (opens in a new tab) in #10162 (opens in a new tab)
- feat(geo): add optional spatial SQL UDF support by @lukekim (opens in a new tab) in #10833 (opens in a new tab)
- feat(cayenne): CDC throughput, compaction, scan caching, and benchmarks by @lukekim (opens in a new tab) in #10852 (opens in a new tab)
- fix(cayenne): fix Vortex panic on highly compressible data by @sgrebnov (opens in a new tab) in #10855 (opens in a new tab)
- fix(cayenne): Read live protected snapshots after cleanup grace period by @sgrebnov (opens in a new tab) in #10901 (opens in a new tab)
- fix: Disable Cayenne HashJoin rewriter optimizer by @sgrebnov (opens in a new tab) in #10882 (opens in a new tab)
- Fix GetFlightInfo vs DoGet Flight Schema by @krinart (opens in a new tab) in #10864 (opens in a new tab)
- fix(search): preserve column casing in /v1/search primary key plumbing by @claudespice (opens in a new tab) in #10909 (opens in a new tab)
- fix(object-store): dedupe s3 url style auto-detection log by @phillipleblanc (opens in a new tab) in #10898 (opens in a new tab)
- Improve Spice CLI manifest editing and direct command modes by @lukekim (opens in a new tab) in #10815 (opens in a new tab)
- Persist Kafka CDC offsets in sidecar tables by @lukekim (opens in a new tab) in #10823 (opens in a new tab)
- feat(task-history): record Ballista stages for distributed queries by @phillipleblanc (opens in a new tab) in #10831 (opens in a new tab)
- Add '#[deny(clippy::missing_trait_methods)]' to wrapper/delegation trait impls by @Jeadie (opens in a new tab) in #10795 (opens in a new tab)
- Optimize Cayenne catalog maintenance paths by @lukekim (opens in a new tab) in #10904 (opens in a new tab)
- Centralize DuckDB settings for accelerator by @ewgenius (opens in a new tab) in #10895 (opens in a new tab)
- deps(ballista): bump to 47e2b494 to fix S3 shuffle reads under cluster mode by @phillipleblanc (opens in a new tab) in #10910 (opens in a new tab)
- Authorization header + Bump async-openai +
responses_adapter fix by @krinart (opens in a new tab) in #10911 (opens in a new tab)
- Tune accelerators by storage profile by @lukekim (opens in a new tab) in #10913 (opens in a new tab)
- feat: add dataset-level on_schema_change config by @lukekim (opens in a new tab) in #10908 (opens in a new tab)
- Handle
NULL sentinel for nullable partition expressions by @Jeadie (opens in a new tab) in #10880 (opens in a new tab)
- fix: Remove Cayenne Catalog from catalog registration by @peasee (opens in a new tab) in #10914 (opens in a new tab)
- Add catalog name to foreign key metadata in postgres catalog by @Jeadie (opens in a new tab) in #10917 (opens in a new tab)
- Cayenne perf: eliminate redundant clones, PK point-lookup fanout fix, IN-list rewrite + microbench coverage by @lukekim (opens in a new tab) in #10916 (opens in a new tab)
- fix(turso-shared): retry on Turso BEGIN CONCURRENT "Write-write conflict" by @lukekim (opens in a new tab) in #10946 (opens in a new tab)
- Vendor Vortex DataFusion for Cayenne by @lukekim (opens in a new tab) in #10933 (opens in a new tab)
- perf(cayenne): background retention + enable CDC pipelining for retention-configured tables by @lukekim (opens in a new tab) in #10936 (opens in a new tab)
- feat(cayenne): scale metastore pool to 32 + vs_duckdb_scaling benches (1→128 concurrency, sqlite + turso lanes) by @lukekim (opens in a new tab) in #10943 (opens in a new tab)
- feat(mcp): support auth for streamable HTTP tools by @phillipleblanc (opens in a new tab) in #10927 (opens in a new tab)
- Explicit error if v1/search requests a table without search index by @Jeadie (opens in a new tab) in #10968 (opens in a new tab)
- Fix spicepod loading failure when directory name contains dots by @sgrebnov (opens in a new tab) in #10958 (opens in a new tab)
- Extend append tests with arrow engine configurations by @sgrebnov (opens in a new tab) in #10959 (opens in a new tab)
- Remove dataset on_schema_change Policy from rc.5 release notes by @sgrebnov (opens in a new tab) in #10964 (opens in a new tab)
- Skip tpcds_q78 for Cayenne engine at SF100 by @sgrebnov (opens in a new tab) in #10966 (opens in a new tab)
- fix: Update benchmark snapshots May-20 by @app/github-actions (opens in a new tab) in #10952 (opens in a new tab)
- Fix #10951: UdtfExec invariant Vec lengths must match children count by @phillipleblanc (opens in a new tab) in #10953 (opens in a new tab)
- docs(release): update v2.0.0-rc.5 notes with latest trunk PRs by @lukekim (opens in a new tab) in #10949 (opens in a new tab)
- Remove eval related things for v2.0.0 by @Jeadie (opens in a new tab) in #10945 (opens in a new tab)
- build(deps): bump ubuntu from 24.04 to 26.04 in the docker-dependencies group by @app/dependabot (opens in a new tab) in #10883 (opens in a new tab)
- fix: Add publish = false to chbench-driver by @sgrebnov (opens in a new tab) in #10939 (opens in a new tab)
- [Bug] Timing between reconnect and AllocateInitialPartitions leaves connection without flight_sql_client by @Jeadie (opens in a new tab) in #10805 (opens in a new tab)
- Fix:
refresh_mode: snapshot reports Ready with empty data when no snapshot exists by @sgrebnov (opens in a new tab) in #10979 (opens in a new tab)
- fix(cluster): gate scheduler readiness on executor partition loads by @phillipleblanc (opens in a new tab) in #10992 (opens in a new tab)
- fix: handle EXISTS/NOT EXISTS subqueries in federation analyzer by @sgrebnov (opens in a new tab) in #10996 (opens in a new tab)
- Refactor spice dataset configuration command by @Jeadie (opens in a new tab) in #10999 (opens in a new tab)
- fix: preserve field and schema metadata in Vortex physical schema calculation by @claudespice (opens in a new tab) in #11013 (opens in a new tab)
- fix: validate Snowflake account identifiers and auth config by @Jeadie (opens in a new tab) in #11024 (opens in a new tab)
- Fix Unity Catalog connector deserialization failure with OSS Unity Catalog by @ewgenius (opens in a new tab) in #11026 (opens in a new tab)
- feat(cayenne): allow inline writes with pending deletions (deletes/upserts) by @sgrebnov (opens in a new tab) in #11031 (opens in a new tab)
- Expose metadata descriptions via PostgreSQL UDFs by @lukekim (opens in a new tab) in #11032 (opens in a new tab)
- Remove default runtime features - enable explicitly in spiced by @phillipleblanc (opens in a new tab) in #11037 (opens in a new tab)
- feat(cayenne): fast-path CDC deletes by extracting PK values from filters by @sgrebnov (opens in a new tab) in #11049 (opens in a new tab)
- Cayenne optimizer rules: auto relevance test for q21-shape (all-Cayenne CH-Bench) and runtime rule selection by @lukekim (opens in a new tab) in #11050 (opens in a new tab)
- refactor(cdc): reduce CDC sub-batch splits for interleaved upsert/delete workloads by @sgrebnov (opens in a new tab) in #11051 (opens in a new tab)
- fix(snowflake): enforce function deny-list in federation pushdown by @claudespice (opens in a new tab) in #11057 (opens in a new tab)
- fix(mcp): trace external server tool calls in task history by @ewgenius (opens in a new tab) in #11058 (opens in a new tab)
- perf(cdc): Last-write-wins dedup in
group_into_sub_batches to reduce sub-batch splits by @sgrebnov (opens in a new tab) in #11059 (opens in a new tab)
- PM edits to v2.0.0-rc5 by @lukekim (opens in a new tab) in #11067 (opens in a new tab)
- fix(snowflake): wire deny-list in extracted connector crate (#10703) by @claudespice (opens in a new tab) in #11071 (opens in a new tab)
- perf(cayenne): keep CDC upsert PK keysets resident to avoid per-batch full-table rebuilds by @lukekim (opens in a new tab) in #11074 (opens in a new tab)
- Fix metadata on search indexing by @Jeadie (opens in a new tab) in #11080 (opens in a new tab)
- feat(cayenne): merge-on-read position deletes for PK upsert tables + memory-pool accounting by @lukekim (opens in a new tab) in #11085 (opens in a new tab)
- perf(cayenne): scale CDC inline flush caps with memory + storage class by @lukekim (opens in a new tab) in #11087 (opens in a new tab)
- feat(cluster): report per-executor table statistics so distributed JoinSelection can size joins by @phillipleblanc (opens in a new tab) in #11089 (opens in a new tab)
- Improve Cayenne CDC write and compaction path tracing by @sgrebnov (opens in a new tab) in #11091 (opens in a new tab)
- Support tuple-IN composite PK extraction in Cayenne delete fast-path by @sgrebnov (opens in a new tab) in #11093 (opens in a new tab)
- feat(cluster): NDV-aware executor stats so CDC q18 join swap fires by @phillipleblanc (opens in a new tab) in #11098 (opens in a new tab)
- feat(cayenne): maintain join-sizing stats on the write path by @phillipleblanc (opens in a new tab) in #11104 (opens in a new tab)
- fix(cache): run periodic moka maintenance for idle caches by @phillipleblanc (opens in a new tab) in #11106 (opens in a new tab)
- Upgrade to DuckDB 1.5.3 + statically link the VSS (HNSW) extension by @sgrebnov (opens in a new tab) in #11107 (opens in a new tab)
- Fix fetched_at for HTTP connector by @Jeadie (opens in a new tab) in #11116 (opens in a new tab)
- fix(cayenne): tombstone inline-checkpointed rows on upsert to prevent duplicate PKs by @sgrebnov (opens in a new tab) in #11129 (opens in a new tab)
- feat: dedicated compaction runtime for Cayenne + CDC pipelining, protected snapshots, and test coverage by @lukekim (opens in a new tab) in #11130 (opens in a new tab)
- Add
datasets dimension to the query_executions metric by @phillipleblanc (opens in a new tab) in #11138 (opens in a new tab)
- Fix #11137: localpod child not tracking parent refreshes with in-memory (arrow) parent accelerator by @phillipleblanc (opens in a new tab) in #11139 (opens in a new tab)
- Fix Windows build: vendor the VSS extension (drop nested submodule) by @phillipleblanc (opens in a new tab) in #11140 (opens in a new tab)
- fix(spiceai): keep correlated subqueries out of JOIN ON for Spice Cloud federation by @phillipleblanc (opens in a new tab) in #11143 (opens in a new tab)
- Refactor spice dataset configuration command by @Jeadie (opens in a new tab) in #10999 (opens in a new tab)
- feat(cayenne): sharded parallel Vortex encode with key/time clustering by @lukekim (opens in a new tab) in #11144 (opens in a new tab)
- fix(cluster): prevent DoPut write pipeline self-deadlock under ingest backpressure by @phillipleblanc (opens in a new tab) in #11160 (opens in a new tab)
- fix(cayenne): only warn on genuine protected-snapshot amplification by @lukekim (opens in a new tab) in #11158 (opens in a new tab)
Full Changelog: https://github.com/spiceai/spiceai/compare/v1.11.6...v2.0.0 (opens in a new tab)