date: 2026-05-27 title: 'Spice v2.0-rc.5 (May 27, 2026)' type: blog authors: [jeadie] tags: [release, cayenne, postgres, mongodb, snowflake, udf, kafka, arrow, ducklake, data-connector]
Spice v2.0-rc.5 is now available! 🔥
v2.0.0-rc.5 is the fifth release candidate for advanced testing of v2.0, building on v2.0.0-rc.4.
This release completes the mTLS implementation across server endpoints and outbound connectors, adds MongoDB Change Streams and durable Kafka offset persistence as new CDC sources, expands DML write-back to PostgreSQL, Snowflake, and Arrow, promotes DuckLake to Beta, introduces user-defined functions, on-demand dataset loading, unified query cancellation, dynamic HTTP request headers and subquery-driven request parameters, provider-aware LLM prompt caching, and a long list of Cayenne performance improvements.
Highlights in this release candidate include:
ST_*) for geometry workloadsCtrl-C and HTTP request cancellation propagate across all execution pathsrefresh_mode: snapshot — point-in-time snapshot acceleration with SQLite/Turso WAL flushingresponse.output_text.delta, plus Authorization: Bearer header supportSignificant performance work across Spice Cayenne-backed catalogs and accelerators.
cayenne_inlined_data), bypassing the staged Vortex write path for low-latency ingest. Inline upserts atomically rewrite existing inline rows instead of emitting side delete markers, and inline data remains query-visible via an in-memory union scan with a generation-keyed decode cache. Inline rows are checkpointed to Vortex when row, segment, or byte thresholds are reached. Defaults are refresh-mode aware: inline writes are enabled by default for high-frequency caching, changes, and fast append workloads and disabled for full, snapshot, and slower append.runtime.params.cayenne_filter_propagation), range fallback for large join filters, hot-path clone elimination, and IN-list rewrites for large filter lists.NULL-sentinel handling for nullable partition expressions (e.g. bucket(N, col)), Vortex panic fix on highly compressible data, and live reads through expired protected snapshots.Spice.ai Enterprise feature. See Enterprise Security.
Spice now supports full mutual TLS for both HTTP and Arrow Flight endpoints.
TLS cert hot-reload (#10727): The Spice runtime watches for SIGHUP and reloads TLS certificates without restarting, enabling cert rotation with zero downtime.
Public mTLS for HTTP and Flight (#10753): Two client_auth_mode values control how the server handles client certificates:
request — optional mTLS: the server requests a client cert but accepts connections without one (useful for migration windows).required — strict mTLS: the server requires a valid client cert signed by the configured CA.mTLS client certs for FlightSQL and Spice.ai connectors (#10764): Outbound connections from the FlightSQL and Spice.ai data connectors can now present client certificates for mutual authentication with upstream services.
Example configuration:
MongoDB datasets configured with refresh_mode: changes now stream changes from MongoDB Change Streams into any local accelerator (#10813), providing real-time CDC without Debezium or Kafka.
Example configuration:
See Change Data Capture (CDC) for an overview of CDC in Spice.
The PostgreSQL data connector now supports write-back via INSERT, UPDATE, and DELETE operations (#10446). Combined with the existing read-side federation, PostgreSQL-backed datasets can serve as full read/write tables. The PostgreSQL Catalog connector additionally exposes foreign-key metadata for NSQL and query planning (#10849).
The Snowflake data connector now supports write-back via INSERT, UPDATE, and DELETE operations (#10747), complementing its existing read capabilities.
Arrow-accelerated tables now support native upsert operations using primary key matching (#10749), providing efficient update-or-insert semantics for in-memory datasets.
The DuckLake Catalog and Data Connector are promoted to Beta quality (#10743).
DuckLake catalog tables with read_write access now support INSERT operations (#10744), enabling full read/write workflows against DuckLake-backed catalogs. The DuckLake connector also gains a series of correctness fixes for downcast, module registration, schema discovery, and S3 credentials (#10650).
Spice now supports user-defined functions (UDFs) as a first-class spicepod component (#10571), letting you define reusable SQL functions in the spicepod or invoke remote functions over HTTP. The runtime also gains table user functions with HTTP server gating (#10675).
A security fix closes a remote-UDF SSRF vector (#10757).
Spice now ships an optional set of geospatial SQL UDFs (ST_*) for geometry workloads (#10833). The functions are gated behind a build feature and can be invoked from any SQL surface.
Datasets can now be marked for on-demand loading (#10629). Deferred datasets are registered with a declared schema at startup (#10669) and only fully resolve when first referenced, reducing startup time and memory footprint for spicepods with many seldom-used datasets.
Spicepods also gain columns[].type and columns[].nullable (#10661) with a lenient type parser for declaring schemas inline.
All query execution paths — HTTP, Flight, FlightSQL, MCP, and internal — now honour a unified cancellation signal (#10390). When a client disconnects, presses Ctrl-C in the REPL, or cancels an in-flight HTTP request, the corresponding query is cancelled end-to-end, freeing resources promptly.
The HTTP data connector gains dynamic request headers parameterised from query predicates (#10604), subquery-driven request parameters for fan-out queries (#10636), HTTP response metadata as queryable columns via JSON schema decomposition (#10679), no-limit pagination (#10673), and shared rate-control across HTTP-based connectors using the same backend host (#10648).
The HTTP rate-control state (per-endpoint throttle counters) is now persisted in object storage (#10697), ensuring rate limits survive restarts and are consistent across replicas. Rate-control metrics now use an origin label rather than the connector name for cleaner aggregation (#10689).
The metrics HTTP endpoint (/metrics) is also independently rate-limited (#10162) to prevent scraping from impacting query serving.
refresh_mode: snapshotSpice.ai Enterprise feature. See Acceleration Snapshots.
A new refresh_mode: snapshot provides point-in-time snapshot acceleration (#10651), with SQLite and Turso WAL flushing and a Cayenne metastore slice integration so accelerated readers see a consistent snapshot while writes continue.
Acceleration configs gain a new storage_profile field (#10913) with values auto (default), local_ssd, ebs, and tmpfs. Under auto, the runtime detects whether the acceleration store is backed by local SSD, EBS-class network disk, or tmpfs, and applies storage-aware defaults across DuckDB, partitioned DuckDB, SQLite, Turso, and Cayenne file-mode accelerators. Explicit per-accelerator parameters always override the profile defaults.
LLM calls automatically use provider-aware prompt caching (#10645) when the configured model provider supports it (e.g., Anthropic, OpenAI). System prompts and tool descriptions are marked for caching so repeated invocations within the cache window reuse the provider-side cached prefix, reducing latency and cost.
A new searchable registry mode for LLM tools (#10647) lets agents discover tools by semantic search rather than enumerating all tools in the system prompt, which scales to large tool inventories.
The Responses API is now supported across all configured model providers (#10724). Streaming delta events via response.output_text.delta are also supported (#10828). The runtime now also accepts Authorization: Bearer headers in addition to x-api-key, bumps async-openai, and stops populating FunctionToolCall.id so OpenAI-compatible servers can assign the ID themselves (#10911).
Spice.ai Enterprise feature. See High Availability.
/v1/ready on schedulers waits for a configurable quorum of executors before returning healthy, enabling proper rolling deployments.runtime.params.shuffle_location: s3://... now complete instead of failing with AccessDenied on shuffle fetches.runtime.scheduler.partition_management.* fields are flattened directly onto runtime.scheduler and renamed under the canonical "partition assignment" terminology. See Breaking Changes.Improvements across Caching and Search:
HNSW_INDEX_SCAN, and HNSW indexes are preserved across data refresh.See Authentication and TLS for configuring Spice security.
allowed_hosts for MCP (#10638): MCP servers can be restricted to an explicit allowlist of upstream hosts.See the SQL Reference for the full SQL surface area.
\x in the REPL for a vertical key-value layout on wide result sets.CommandStatementSubstraitPlan, enabling clients that submit plans as Substrait-encoded protobuf.mcp_auth_token and mcp_headers, both with full Spice secret expansion.Notable correctness fixes across the Data Connectors: DynamoDB Streams retry on transient errors (#10794) and typed-NULL handling in DML (#10511); ScyllaDB physical filter pushdown disabled to fix incorrect results (#10772); MSSQL TOP N pushdown for non-nullable sort columns (#10621); DuckLake include filter applied (#10738); DuckDB DELETE/UPDATE on full and caching refresh modes (#10632); checked arithmetic for Turso integer-millis and timestamp-to-nanosecond conversions (#10786, #10666); and Flight GetFlightInfo/DoGet schema parity (#10864). See the Changelog for the full list.
| Dependency / Component | Version |
|---|---|
| DuckDB | v1.5.2 |
| Iceberg | v0.9.1 |
| Turso | v0.6.0 |
| Vortex | v0.69.0 |
Flattened runtime.scheduler configuration (#10450): The nested runtime.scheduler.partition_management block has been flattened and renamed to use the canonical "partition assignment" terminology. Migrate as follows:
No new cookbook recipes.
The Spice Cookbook includes 86 recipes to help you get started with Spice quickly and easily.
To upgrade to v2.0.0-rc.5, use one of the following methods:
CLI:
Homebrew:
Docker:
Pull the spiceai/spiceai:2.0.0-rc.5 image:
For available tags, see DockerHub.
Helm:
AWS Marketplace:
Spice is available in the AWS Marketplace.
Full Changelog: https://github.com/spiceai/spiceai/compare/v2.0.0-rc.4...v2.0.0-rc.5
full and caching refresh mode datasets by @phillipleblanc in #10632include filter being ignored by @phillipleblanc in #10738spice cloud metrics table output by @claudespice in #10784CayennePropagateFilterAcrossEquiJoinKeys by @sgrebnov in #10863